简单实用的方案:
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的ASCII方式所要求的字符?
这个实数的数值字符串是5个字节没错,而modbus不管你要传输的是实数还是字符串,一概当成16进制数据处理。
modbus-ascii要求所有数据为16进制数的字符形式,即'0' - 'F'。不管是什么格式的数据,全部将其每个字节的16进制形式转换成2个字符。如果要传输的是实数-200本身即0x00 68 24 58,则应将其4字节浮点转换成8字节字符{'0', '0', '6', '8', '2', '4', '5', '8'},如果要传输的是字符串"-200",则应将每个字符的编码转换成2字节:{'2', 'D', '3', '2', '3', '0', '2', 'E', '3', '0'}。
无需关心数据是否接收完毕,只要有数据发过来,都收到自己的缓冲区当中。
在应用层,打开一个任务以定期扫描缓冲区中的新数据。 如果有新数据,确定其是否为必需的协议帧。 通过帧头帧尾标识符还有校验等判断接收帧的正确性,如果正确再处理,不正确丢弃。
Modbus没有固定的帧头标记,长度也没有固定。 判断时,首先查找具有正确地址的字符,然后找出后续功能代码是否正确。 根据功能代码,确定后续数据有多长并进行校验。 如果验证正确,则说明帧是正确的。
扩展资料:
举例说明如下:
从站地址03,从0开始读取10个寄存器,则接收到的帧为03 03 00 00 00 0a xx xx,查找从站地址03的字节,找到后,以下功能码为03,符合功能码范围。
该功能码的数据包括固定为8个字节的校验和,然后在其后没有8个字节时,表示其已被没收,然后在关闭后进行判断。 如果正确,则可以在应用层中正确处理该帧。
<p>这是我自己用单片机写过的ModBus通信程序,你可以参照一下。其实比较简单,就是按步骤一步步的来就行了。</p>
<p></p>
以上就是关于如何测试modbus主机程序,只有一台电脑,且电脑没有硬件的串口全部的内容,包括:如何测试modbus主机程序,只有一台电脑,且电脑没有硬件的串口、modbus通信程序中如何用串口中断实现数据的发送、我现在做一个通讯程序(MODBUS),需要用到实数转和字符串相互转化, 我想请问 :等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)