登录
首页 串口通信 串口通信
回帖 发帖
正文

主题:层剥modbus RTU常用的

点击:1956 回复:19

工作中碰到还是论坛问题,关于通讯是难点,其中modbus因为应用广泛,出现的频率很高.
试试能不能解释清楚.有没有帮助.
范围:这里只说常用部分.
16-07-04 11:43
先分层看看,Modbus都干了些什么.
*1 从通讯的两个modbus末端(人/机),看到4种数据,分别是0xxxxx,1xxxxx,3xxxxx,4xxxxx,可以叫四种寄存器(register).
代号      名称            类型      操作
0xxxx1     线圈状态        位        可读/可改
1xxxx1     数位/离散输入   位        只读
3xxxx1     输入寄存器      字        只读
4xxxx1     保持寄存器      字        读/写
不管什么设备,只要它说采用modbus通讯,不管数据在它自己里面是什么名字,都要落到这个范围.
16-07-04 11:43
*2那么modbus怎么做到两个设备交换上面4种数据的呢?
发生了两句对话,一个设备(地位:主/master)说,我需要(读)/改变(写)一些数据,另一个设备(从/slave)就回答,这些数据是这样的或者好我修改.
主向从设备读取数据操作对话的格式是这样的(RTU):
主:  SA FC SRHI SRLO NRHI NRLO CRCHI CRCLO
各个数据都是一个字节.
SA      从设备标识号(地址)            我要找谁(土豆,土豆)
FC      功能号                       我要什么数据(上述4种里的一种)
SRHI    数据寄存器开始地方高字节     数据很多,我从哪开始拿
SRLO    低字节
NRHI    寄存器数量高字节             数据很多,我要几个
NRLO
CRC     校验(两个字节共16位)         通讯常有的检查纠正错误数据,暂不管
从:SA FC BC D1HI D1LO D2HI D2LO … DnHI DnLO CRC
SA      从设备标识号(地址)            我是谁(土豆)
FC      功能号                       我知道你要什么数据
BC      字节数                       我给你发下面这么多字节n*2
D1HI    数据寄存器开始地方高字节     数据很多,我一个一个给你发
D1LO    低字节
DnHI    寄存器数量高字节             我发的第n个数据
DnLO
CRC     校验(两个字节共16位)         通讯常有的检查纠正错误数据,暂不管
之所以有Hi和Lo,是因为*1里的数据,都要按字(16位)表达,而通讯要按字节(8位)交流.
*1和*2之间发生了什么?*2负责对话,并把数据从DnHI/LO里分离出来,给了*1.
*2下层数据表达格式层省略,这里只说RTU.
16-07-04 11:45
*3 modbus的时序
在这层里,MODBUS规定了,怎么按顺序说话.这个分两方面.
大方面:Modbus规定两个通讯设备,分主和从设备.只有主有权开始一个会话,从设备(从站)在听到是喊自己,才会回答.一般来说,这就决定,Modbus通讯只有一个主,可以有多个从.
小的方面:上面*2所说的对话,每说一句叫作一个帧或段(Frame).MODBUS规定了帧的开始,数据顺序,结束和衔接.
然并,这些细节,平常不怎么关注.
*3对*2的交待是, 让*2层能顺利得到对话数据, 以及不顺利会怎么把握时间的利用.
16-07-04 11:45
*4 其实到上面,Modbus就完成了它的协议范围. 接下来,是串行通讯的范围,包括RS232,RS485等.
到这里,应该把modbus和串行通讯厘清了.
Modbus就是: 串行通讯接口?*3的时序?*2的报文?*1的数据.
在串行通讯接口上,你可以规定任何可用的时序和对话方式,那就是自由通讯和自定协议.
串行通讯接口,是用一个接一个按顺序出现的电信号表达数据的一种信息传递方式,有时也叫协议,因为它也规定了一系列的规则.这里也简单分层(我自己命名的,要对应国际各位有心)表示一下:
数位层   就是经常看到要定义波特率,数据位,停止位,校验位.其实通讯还隐含有起始位,暂时把起始也包括在这里.记住一下,Modbus RTU数据位定为8位,不能更改.
        这一层主要负责数据传输的快慢,位数.
电平层   就是多少电高低电表示数位0,1.RS232是3~15V表示0,-15~-3V表示1,电平对公共端;RS485接收是200mV表示0,-200mV表示1,发送电平在1.5~5V范围,电平是两线相对(差分)电平.
        这一层告诉,上面那层的数位在电信号能测出什么来.
线路层   RS232通常3线,RS485通常2绞线(RS422就看成两个RS485好了).RS232可以有其它信号线进行握手交流.
        这一层告诉上面的电是怎么传导的.
接口     RS232有DE9,DB25等,RS485没有规定.
16-07-04 11:47
仔细的看完了,了解的很透彻
16-07-04 13:31
解释的很通俗,是这样
16-07-04 13:42
大师你这头像很亲切啊!哈哈
16-07-04 23:08
大师。。。有时间学习下。。
不知道需要啥硬件比较简单点?
有PLC 触摸屏这些
16-07-04 23:17
大师讲的都看得懂,但是自己没有实践过,大师有没有rtu相关的完整的发送和接收列程借鉴一下(最好是三菱的)。不胜感激。
16-07-04 23:27

上一页下一页

工控新闻

更多新闻资讯