我想 下位机 发一条命令,命令格式如下:FEFEFEFE6801000101B1053c000000000016命令在“串行调试助手“ 上调试通过,我发此命令,“串行调试助手” 原样返回。下位机使用的是 BCD 码,每次都发送失败(在控件上不返回任何内容)。
static void Main()
{
Application.Run(new Form1());
} private void Form1_Load(object sender, System.EventArgs e)
{
if(this.axMSComm1.PortOpen==false)
{
this.axMSComm1.PortOpen=true;
this.axMSComm1.RThreshold=35;
}
} private void cmdSend_Click(object sender, System.EventArgs e)
{
this.axMSComm1.Output="FEFEFEFE6801000101B1053c000000000016"; //发送数据
this.axMSComm1.InBufferCount=0;
} private void axMSComm1_OnComm(object sender, System.EventArgs e)
{
if(this.axMSComm1.CommEvent==2)
{
this.label3.Text=this.axMSComm1.Input.ToString();//接收数据
}
}
static void Main()
{
Application.Run(new Form1());
} private void Form1_Load(object sender, System.EventArgs e)
{
if(this.axMSComm1.PortOpen==false)
{
this.axMSComm1.PortOpen=true;
this.axMSComm1.RThreshold=35;
}
} private void cmdSend_Click(object sender, System.EventArgs e)
{
this.axMSComm1.Output="FEFEFEFE6801000101B1053c000000000016"; //发送数据
this.axMSComm1.InBufferCount=0;
} private void axMSComm1_OnComm(object sender, System.EventArgs e)
{
if(this.axMSComm1.CommEvent==2)
{
this.label3.Text=this.axMSComm1.Input.ToString();//接收数据
}
}
该如何转换呀.
string strData = "FEFEFEFE6801000101B1053C000000000016";
string strOutPut = "";
string strTemp;
for( int i = 0; i < strData.Length; i++ )
{
int nCurrent = Convert.ToInt16( strData[i].ToString(), 16 );
strTemp = Convert.ToString( nCurrent, 2 );
strTemp = strTemp.PadLeft( 4, '0' );
strOutPut += strTemp;
}
// Send data using "strOutPut"
我 在 .net 中使用的是 vb 的 msComm 组件,现在将 this.axMSComm1.InputMode 的属性 设为 1 ,程序无法启动 ,报错如下:无法将类型 “int” 隐式转换为 “MSCommLib.InputModeConstants”未能找到引用的组件 “AxgrproLib”。未能加载类型库。库没有注册。未能找到引用的组件 “grdesLib”。未能加载类型库。库没有注册。我尝试着进行 组件注册,按照如下方式进行:
/*************
在.net 2003光盘下面有目录Extras\VB6 Controls此目录包含 Visual Basic 6.0 的 dbgrid32.ocx 控件和一个包含所有 VB 6.0 控件授权信息的注册表文件:VB6Controls.reg,包含所有 VB 6.0 控件设计时的授权信息。若想在 .NET 中使用 Visual Basic 6.0 的控件,你可以通过 RegEdit.exe 将 .reg 中的控件注册信息添加到你的注册表中,从而注册这些控件。
具体操作:运行Regedit.exe -> 文件 -> 导入 -> 选择VB6Controls.reg, 完成.*************/
但是注册时 Regedit 程序提示 已成功导入。启动 .net 程序却启动不起来。帮助分析一下。
通讯参数:
默认:2400BPS,8位数据,1位停止位,无奇偶校验。无握手。发送和接收以二进制形式进行。
链路层
本协议为主-从结构的半双工通信方式。主站为上位机管理中心,从站为各种采集器,每个采集器均有各自的地址编码。通信链路的建立与解除均由主站发出的信息帧来控制。每帧由帧起始符、从站地址域、控制码、数据长度、数据域、帧信息纵向校验码及帧结束符等7个部分组成。每部分由若干字节组成。
前导自节:在发信息帧之前,先发送4字节的FEH,以唤醒接收方。
起始符:68H,标识一帧信息的开始。
控制码:用于识别不同的命令。
结束符:16H,标识一帧信息的结束。
数据长度:为数据域长度,即数据的字节数。
校验码:从帧起始符到校验码之前的所有字节的CRC8位校验码。
传输次序:所有数据项均先传送高字节,后传低位字节。
一般应接受命令信息帧和答信息帧数据长度一致。说明 代码 字节数
帧起始符 68H 1
地址域 A0-A3(A0采集器分类号、A1A2为编号、A3端口号即表号) 4
控制码 CS 1
数据长度域 L 1
数据域 DATA N
校验码 CS 1
结束符 16H 1地址域:A0A1A2为在采集器中的识别号,A3根据现场访问的表号决定。访问时若地址码为FFH、FFH、FFH,端口号任意,则认为是广播命令,所有采集器均响应,但无返回。
每帧数据长度小于70bytes,数据大时可分帧发送。
完整命令:帧起始符+地址域+命令格式+校验码+结束符
http://www.codeproject.com/csharp/serialcommunication.asp
http://www.codeproject.com/dotnet/DotNetComPorts.asp
申明一个数组byte[] sendByte = {0xFE,0xFE,0xFE,0xFE,0x68,0x01,0x00,0x01,
0x01,0xB1,0x05,0x3C,0x00,0x00,0x00,0x00,
0x00,0x16};axMSComm1.Output = sendByte;按上面修改即可.
你这是电力的一个协议,我以前做过,呵呵,叫什么645协议还是什么,记不起来啦,呵呵?
太感谢了!!!!!!!