对于俄罗斯人球大又租Modbus 通信在modbus poll上调试收不到数据的问题
问:程序编号了,编译也没问题,实现了03功能码,串口波特率等设置也都没问题,可在modbus poll上调试时一直通讯超时,Timeout err,到底哪里出问题了 急急急!程序在下面,还有调试问题的截图!求解决!
答:请仔细查看一下尘辞诲产耻蝉协议,上位机会隔一定时间向下位机发送查询码,下位机要及时回答,通知上位机通信正常。如果你的单片机程序中没有写应答上位查询码的程序,上位机就会中断通信的,就提示通信超时的。看你的通信数据,只有上位机发送数据,却没有下位返回的数据。所以,一是查下位机有无应答查询码,二是查询下位机接收到控制命令后,解析命令是否正确,是否有返回码。上位机发正常命回令,下位都应该有返回码的。可以先用串口调试助手测试下位机的收/发代码过答程。
单片机做为从站或主站,其功能的实现程序是有区别的。做主站时,由单片机发起通信请求,ModBus Slave根据请求做出应答(事务处理并返回帧)。所以,单片机要按照ModBus 协议组织数据帧,然后“发送---等待、接收返回帧---错误处理或新的请求”。若只是简单的试验,其后2字节CRC校验码可用其他CRC程序内计算出再添加到帧后;若是作为正常主机,则须由单片机计算CRC码并组织数据帧(通俗容说法:数据打包)。
***
问2:
刚接触485,我做的设备用modscan32调试连接不上
因为采用的是ttl串口,所以不考虑硬件连接问题,是可靠的
通信协议这样定制的
按道理来说,就这几个字节,而且顺序已经按照Modbus rtu格式排列好了,为甚么调试软件认为没数据收到呢?
解决不了了,感觉就剩一窗户纸了,求大神指条明路
答2:
设备地址是否正确(决定是否能被设备识别)
起始地址是否正确(设备地址其实是设备内部的存储单元,这个存储单元必须存在)
CRC是否正确
modbus保持寄存器每个寄存器都是双字节的,你返回的是单字节的,所以校验就通不过了
发送:
[10] 从站地址
[03] 03功能码
[00][00] 起始地址
[00][02] 寄存器数量
[c7][4a] CRC校验
接收
[10] 从站地址
[03] 03功能码
[04] 返回的寄存器字节数,每个寄存器2字节,读两个寄存器,所以四个字节
[00][00] 寄存器1
[00][00] 寄存器2
[fb][32] CRC校验码
扫一扫&苍产蝉辫;&苍产蝉辫;微信咨询
©2024 俄罗斯人球大又租 版权所有 备案号:&苍产蝉辫;&苍产蝉辫;技术支持: sitemap.xml&苍产蝉辫;&苍产蝉辫;&苍产蝉辫;&苍产蝉辫;总访问量:282812