modbus rtu串口通信

来源:百度知道 编辑:UC知道 时间:2024/09/22 01:52:00
公司买了一个温度巡检仪,功能有限,我想通过自己做的软件来增强巡检仪的功能,但对串口通信编程知之甚少。现通过监控原程序得到以下数据:write requests: 01 03 00 01 00 01 D5 CA 01 01 00 50 00 20 3D C3 01 03 00 60 00 10 44 18
read requests: 01 03 02 00 02 39 85 01 01 04 00 00 00 00 FB D1
01 03 20 4E 20 4E 20 4E 20 4E 20 4E 20 4E 20 4E
20 4E 20 4E 20 4E 20 4E 20 4E 20 4E 20 4E 20 4E
20 4E 20 AE 38
从中能不能翻译出什么东西??
后来我又根据已有资料及网上相关程序编写了以下通讯程序:
Private Sub Command1_Click()

'发请求
Dim btSend(23) As Byte
btSend(0) = &H1 '目标站号
btSend(1) = &H3 '功能码
btSend(2) = &H0 'I0.0地址(0000)高字节
btSend(3) = &H1 'i0.0地址(0000)低字节
btSend(4) = &H0 '读取个数高字节
btSend(5) = &H1 '读取个数低字节
btSend(6) = &HD5
btSend(7) = &HCA
btSend(8) = &H1
btSend(9) = &H1
btSend(10) = &H0
btSend(11) = &H50
btSend(12) = &H0
btSend(13) = &H20
btSend(14) = &H3D
btSend(15)

大致的看了下~~你的写的指令:
01 03 00 01 00 01 D5 CA
01 01 00 50 00 20 3D C3
01 03 00 60 00 10 44 18
是三条指令~~所以你不要一下都发出去~~发完一条等待一段时间~~等待接收,500ms肯定够了。
有问题的话再发贴……

你应该看标准的modbus协议。
01 03 00 01 00 01 D5 CA
第一位是目标地址,第二位是功能码,第3-4位是寄存器的高低位置。
第5-6位是需要读取的数据个数,第7,8位是crc验证码。标准的是CRC高低位,但也有些协议的CRC是低高位排列。

发送成功以后会设备会响应你。
返回的数据格式差不多。
设备地址 功能码 数据个数 数据1.。。。数据n CRC检验码(2byte)

具体你应该先下载标准modebus协议看看,有PDF文档的。