
<p>这是我自己用单片机写过的ModBus通信程序,你可以参照一下。其实比较简单,就是按步骤一步步的来就行了。</p>
<p></p>
简单实用的方案:
1、买2个USB-RS232转换器(大概100来元搞定),使电脑具备2个串口。两个串口之间用串行交叉电缆连接,即2-3、3-2、5-5。
2、从网上下载modbus从机模拟软件——modbus slave软件,运行时指定一个串口,仿真modbus从机。
3、运行用户开发的modbus主机程序,并指定另一个串口,这样组成了测试平台。
剩下的工作就是程序测试了。
你想解决的就是串口的收发问题是吗?发送时一般用不到中断服务程序,但是因为串口中断是开启的,所以每次发送数据都会硬件将发送标志位TI置1,从而进入串口中断。我用宏晶的单片机,是要求TI位要软件清零的,所以TI位要在中断程序中清下0。
无需关心数据是否接收完毕,只要有数据发过来,都收到自己的缓冲区当中。
在应用层,打开一个任务以定期扫描缓冲区中的新数据。 如果有新数据,确定其是否为必需的协议帧。 通过帧头帧尾标识符还有校验等判断接收帧的正确性,如果正确再处理,不正确丢弃。
Modbus没有固定的帧头标记,长度也没有固定。 判断时,首先查找具有正确地址的字符,然后找出后续功能代码是否正确。 根据功能代码,确定后续数据有多长并进行校验。 如果验证正确,则说明帧是正确的。
扩展资料:
举例说明如下:
从站地址03,从0开始读取10个寄存器,则接收到的帧为03 03 00 00 00 0a xx xx,查找从站地址03的字节,找到后,以下功能码为03,符合功能码范围。
该功能码的数据包括固定为8个字节的校验和,然后在其后没有8个字节时,表示其已被没收,然后在关闭后进行判断。 如果正确,则可以在应用层中正确处理该帧。
远距离通信,不能正常接受,这是常有的事。
发送函数,必须多次发送,只有当收到正确的回信后,才停止发送,并返回正确传送标志。
发送函数,发送了一定的次数后,都没有收到回信,则返回错误的标志。
上层函数,根据标志,在屏幕上加以提示,指示 *** 作者进行下一步的 *** 作。
另外,在中断函数中,加上了长延时,delay(2000);,也是个败笔,可能会错过很多应该接受的东西。
以上就是关于单片机串口modbus协议通信程序,或者讲一下详细过程怎么写也行!谢谢了!全部的内容,包括:单片机串口modbus协议通信程序,或者讲一下详细过程怎么写也行!谢谢了!、如何测试modbus主机程序,只有一台电脑,且电脑没有硬件的串口、modbus通信程序中如何用串口中断实现数据的发送等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)