modbus协议也只是通讯协议的一种,没什么神秘的,通讯协议包括两个方面:
一、通讯格式,即: 波特率,检验方式,数据位,停止位
*参预通讯的双方设定的通讯格式必须一样的!!
二、通讯规范(这个词是我自己定义的,不能引用,会被人笑话的)
1、起始符:
接收到一串字符,总要知道这串字符从哪个地方开始吧,这就是起始符的作用,接收方不管以前收到多少个字符。当接收到起始符时,以前的字符就不再理它了,从起始符开始分析以后的字符! MODBUS的ASCII方式起始符是一个冒号 “:”
2、设备地址:
3、功能代码:
4、数据:
注意:发送的字符都是以十六进制数表示!
控制器返回的字符根据命令的不同而不同,此处不好讲解,在下面具体例子中会有说明!
再说RTU方式:
下面针对某种支持MODBUS协议的控制器,说一下具体的读/写例子
1、 读某控制器的十五个寄存器值,发送的字符串是:(ASCII方式)
“: 0FDD”+ Chr ( 13 ) + C h r (13) + Chr (13)+Chr(10)
起始符“:” + 站号(01) + 读命令(03)+ 起始寄存器通讯地址(1000)+ 字数(15;转换成十六进制000F)+ 校验和(DD)+ 结束符
2、 分别向某控制器两个寄存器写入数值,发送的字符串是:(ASCII方式)
“: 004”+ 写入的数值(8个字符)+ 校验和 + Chr ( 13 ) + C h r (13) + Chr (13)+Chr(10)
起始符“:” + 站号(01) + 写命令(10)+ 起始寄存器通讯地址(1000)+ 字数(2;转换成十六进制0002)+ 字节数(04) + 校验和(因为写入数值是变化的,需要得经过计算得出校验和)+ 结束符
*错误码,当通讯正确时是什么,通讯错误时是什么,具体控制器会有说明
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201895.html原文链接:https://javaforall.net
