拿读数据做例子,其他的功能重要改掉03功能码就行
先组成命令的虚闹byte数组
byte[] Dp = new byte[8]
byte[] DpC = new byte[6]
Dp[0] = 0x01//这是表的地址,假定是01
Dp[1] = 0x03//这是功能码,03是读寄存器数据
Dp[2] = 0x00
Dp[3] = 0x03//表的相应寄存器地址
Dp[4] = 0x00
Dp[5] = 0x0C//表的相应寄存器参数,根据功能码和表的不同,这几个编码有变化
for (int i = 0i <6i++)
{
DpC[i] = Dp[i]
}
uint ValCRC
ValCRC = CRC(DpC)//CRC为自己写的CRC-16校验码的函数,具体的实现这里不给要的话可以发给你
Dp[6] = (byte)(ValCRC % 256)
Dp[7] = (byte)(ValCRC / 256)
然后把这个数组发给串口,编程语言迹誉滚不同发送方式不同
还在程序可以设置波特率,校验什姿余么的,编程语言不同设置方式也不同
然后接受数据,也是一个byte数组
然后自己解析数组,把需要的转化成10进制或者你需要的格式
大概就这样
看了你的提问,不是很懂你要表达的意思,就说说我的个人观点。MD协议采用的是一问一答的形式进行通信的。主设备(主橡厅机)向从设备(从机)发送报文,例如写从机中的某个寄存器的值,如果写成功,则从机要返回一个正确的响孙册应报文。因此,MD协议中定义的寄存器地址应该就是对应于从机中的寄存器地址,主机对从机上的某个(或某些)寄存则如宏器进行读写 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)