modbus网关最多负载多少系统(自控系统的Modbus协议详细讲解)
modbus网关最多负载多少系统(自控系统的Modbus协议详细讲解)如果从设备产生正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:像寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。从设备回应2、主--从结构:主设备查询 查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。
一、基础知识:
1、什么是Modbus
Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。
Modbus通讯协议常见于第三方设备的通讯,如DCS读取PLC的数据、智能仪表(流量计、分析仪等设备)的数据,需要用到Modbus协议,通常分为3类,Modbus RTU 和Modbus TCP/IP、Modbus ASCII;
2、主--从结构:
主设备查询
查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。
从设备回应
如果从设备产生正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:像寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。
每个MODBUS帧都包括地址域 功能域 数据域 错误检测域
3、Modbus的三种通信协议:
Modbus协议分为三种通信方式:Modbus RTU、Modbus ASCII以及Modbus TCP。
首先,Modbus TCP的通信格式和Modbus RTU非常相似,唯一的差别只是Modbus RTU最后带两个字节的CRC校验,而Modbus TCP没有。
其次,Modbus ASCII的通信格式与Modbus RTU其实“神合貌离”,就是把Modbus RTU的每一个字节(例如:27H)高四位(2)和低四位(7)拆分为两个字节,并以ASCII码的方式表现出来(32 37),再给命令帧分别加上起始符和结束符便可以,当然Modbus RTU和Modbus ASCII的校验的方式不同,这里暂不详述,所以同一条命令用Modbus RTU方式和Modbus ASCII方式表现出来,虽然在命令长度的上有很大的区别,但其实际表达的意思却是一样。
4、RTU方式:
帧定界 :MODBUS RTU方式下,每两个字符之间发送或者接收的时间间隔不能超过1.5倍 字符传输时间。如果两个字符时间间隔超过了3.5倍的字符传输时间,规约就认为一帧数据已经接收,新的一帧数据传输开始。
备注:NPort与MGate产品的区别就在于,MGate在每帧报文的之后,增加了3.5倍的字符传输时间,而NPort则没有。
5、ASCII方式:
帧定界:
“:”帧起始 “CR LF” 帧结束
ASCII方式用两个ASCII字符表示一个8位数据,比如16进制的3A用字符“3”和字符“A”表示。
6、Modbus TCP
Modbus TCP数据帧包含报文头、功能代码和数据3个部分:
MBAP报文头(MBAP:Modbus Application Protocol,Modbus应用协议)分4个域,共7个字节:
自注:这里的客户端、服务器端是指TCP的Client、Server端。
二、MGate说明:
1、通信模式
1)MGate配置文件中:
Modbus采用主从结构,只有两种模式:Master和Slave
RTU/ASCII Slave:PC作为Master主,装置作为Slave从;
RTU/ASCII Master:PC作为Slave从,装置作为Master主;
RTU与ASCII的区别:
a)校验:
RTU:CRC(循环冗长校验);
ASCII:LRC(纵向冗长校验);
校验码用于检查信息的完整性;
b)消息格式不同:
RTU:消息中每个字节(8Bit)包含2个4Bit的十六进制字符,优点:同样波特率下,比ASCII传送更多的数据;
ASCII:消息中每个字节(8Bit)都作为一个ASCII码(2个十六进制字符)发生,优点:字符发送的时间间隔可达到1秒而不产生错误;
2)说明手册中:
两种通信模式:
A)以太网Master串口Slave:
Modbus TCP可支持同时16个连接,串口支持RS-232和RS-422/485,其中RS-232和RS-422仅能连一个设备,RS-485可连接31个设备;
B)串口Master以太网Slave:
可支持32个Modbus TCP slave设备;
三、实测:
1、结构:
笔记本电脑网口→MB3480-笔记本→UPort 1150;
2、UPort 1150设置:
默认为RS-232方式,注意设置为RS-485(也可为RS-232),方法:
“控制面板”→“设备管理器”→
3、MB3480的设置:
1)主从模式的设定:以PC端作为Master、装置作为Slave为例;
2)设置串口状态:
3)ID映射:
说明:
a)Modbus TCP通信标准端口号为502,所有的端口号都是502,串口通过ID好识别;
b)ID表中设置情况:
1~5:Port1;
6~10:Port2;
c)从站偏移量:可不设,以下为例子,假定偏移量为3;
4、使用的软件:
前提说明:
两套软件:
软件一:自己在网上找的Modbus Poll和Modbus Slave,注意:
Modbus Poll:只作为Master(主端)(TCP Master和RTU Master都用它);
Modbus Slave:只作为Slave(从端)(TCP Slave和RTU Slave都用它);
软件二:使用的ModScan32和ModSim32,注意:
ModScan32:只作为Master(主端)(TCP Master和RTU Master都用它);
ModSim32:只作为Slave(从端)(TCP Slave和RTU Slave都用它);
软件一:
Modbus Poll(用于TCP Master)
Modbus Slave(用于串口的Slave)
1)打开Modbus Slave:
选择“Connectiong”
注意:UPort 1150映射为主机的COM2口,使用这里选择Port2;
ID号:1;功能码:3
2)打开Modbus Poll:
选择“Connection”,端口号为502;
ID号:1;功能码:3;
3)注意事项:
a)Modbus Poll和Modbus Slave设置的ID号、功能码必须一致;
b)通信成功的判断:
可从Modbus Poll软件本身、MGate Manager的“监控”来观察;
注意:Mdobus Slave软件无法判断连接是否成功;
通信成功的界面:
Modbus Poll:Tx值不断增加,Err值为0(Err指响应的返回值);
MGate Manager→“监控”:
通信不成功的界面:
比如:将Modbus Slave的连接断开,则Modbus Poll会报错:
正确的连接,则Err=0;
MGate Manager→“监控”:
图中:TCP Req、RTU Req(通过MB3480转发到RTU串口的),没有Resp。
c)其他功能键的使用:
Modbus Poll:
Read/Write Definition:可设置ID号、功能码、地址;
Reset Counters:充值计数器;
其中:地址可自定义,但是Modbus Poll和Modbus Slave的地址设置都要一致;
Modbus Slave:
Slave Definition:可设置ID号、功能码、地址;
软件二:
ModScan32:用于TCP Master;
ModSim32:用于RTU Slave;
1)打开ModSim32软件:网上有下载,或留下联系邮箱,看都后发给各位;
打开“ModSim32.exe”即可;
“File”→“New”:
“Connection”→“Port2”→UPort 1150在笔记本上映射的端口号为COM;
2)打开ModScan32软件:
直接打开目录,点击“ModScan32.exe”即可;
“Connection”→“Remote TCP/IP Server”:
3)注意事项:
a)ModScan32和ModSim32的Address(地址)、Device Id(ID号)、MODBUS Point Type(功能码,为3)设置必须一致,其中:
ID号:Port1为1~5;
功能码:为3;
Address:可自己设定,只要ModScan32和ModSim32的一致就可以了;
b) 连接不成功的界面:
比如:将Address一个设置为“0001”,另一个设置为“0100”,则会连接不成功,如下界面:
而ModSim32则不会有报错信息;
错误一:出现“**MODBUS Message TIME-OUT**”,如果正确的连接,则没有这行报错;
错误二:Number of Polls的值一直在增加,而Valid Slave Responses的值不变,这说明TCP Master一直发送请求,却一直没有得到回应;
当正确连接后,点击“Reset Ctrs”后,这个计数值就会清零,重新累计,出现的数据应该是Number of Polls与Valid Slave Responses一致;
c)当修改设置后,参数会自动执行,不要重启软件或按键;
d)如果所有设置都正确,但是连接却还是报错,这种情况下,只要将ModScan32和ModSim32软件重新开启就可以了,因为这个软件是没有经过注册的;
5、监控和数据报文:
1)一个完整的轮询过程:
TCP Req(TCP请求)→转为RTU Req(RTU请求)→RTU Resp(RTU回应)→TCP Resp(TCP回应);
2)报文内容:
MBAP报头格式:
MBAP包含7个字节:
01 00:处理标识ID,取决于设备的类型,取值一般为0000到FFFF;
00 00:协议ID,0=Modbus协议;
00 06:后面跟随的字节个数(包含从设备ID号),此例:后面跟随了6个字节;
01:从设备的ID号;
MBAP:
00 0D:13---后面跟随13个字节;
6、较深入的报文内容:
1)Modbus Poll向多个寄存器发送数据的报文分析:
a)Modbus Poll中的设置:
双击红框部分,界面:
Value中填入要发送的数据,注意:这是十进制,对于“监控”中是十六进制;
Slave ID:Port所接从设备的ID;
Address:这是寄存器地址,第1个是0,第2个是1……;
b)多寄存器报文分析:
监控中看到的数据:
分析:
第一组:
i)TCP Req:TCP发送请求;
时间 数据
0.000 03 36 00 00 00 06 01 03 00 00 00 0A
MBAP解析:
03 36:处理标识ID;
00 00:协议ID,0=Mdobus;
00 06:后面跟随的字节个数;
01:从设备ID;
ii)RTU Req:通过MB3480转换到串口的请求;
时间 数据
0.000 01 03 00 00 00 0A C5 CD
01 03是从设备的站号和设备ID;
00 00是Modbus起始地址;
00 0A是Modbus寄存器个数 ;
C5 CD是CRC校验码;
注意:i)与ii)的起始地址、寄存器个数是一样的;ii)在i)的基础上,去掉了MBAP报头,并且增加了CRC校验码;
iii)RTU Resp:从串口RTU回应的数据;
时间 数据
0.090 01 03 14 00 0F 00 10 00 11 00 12 00 00 00 00 00 00 00 00 00 00
一共10个寄存器:
00 0F:表示15;
00 10:表示16;
00 11:表示17;
00 12:表示18;
其余寄存器为00,没有发送数据;
注意:第i)、ii)是请求,没有具体数据,只有寄存器起始地址和寄存器个数;
第iii)、iv)开始回应数据;
iv)TCP Resp:通过MB3480转到TCP的回应数据;
时间 数据
0.090 03 36 00 00 00 17 01 03 14 00 0F 00 10 00 11 00 12 00 00 00
注意:第iv)的MBAP报头与i)的报头是一样的;
第二组:
与第一组一样,需要注意的:
MBAP报头不同;起始地址、寄存器个数,甚至校验码都是一样的;
2)ModScan32向多个寄存器发送数据的报文:
4001:<00000> 第一个寄存器,发送的数据是0;
4001:<00000> 第二个寄存器,发送的数据是0;
……
点击<00000>,出现界面:
4001寄存器的地址是:1;
4002寄存器的地址是:2;
Value:要发送的数据;
3)使用Modbos Poll和Modbus Slave模拟RTU Master:
a)通信结构:
RUT串口 → MB3480(192.168.127.254)→ PC(192.168.127.108)
b)MGate Manager:
操作模式:设置为“RTU主站模式”(RTU Master);
串口状态设置:
从站ID映射的设置:
注意:当Port 1的操作模式设置为“RTU主站模式”时,从站ID映射列表中就没有了Port1的从站设备ID号,为什么?因为这时的Port1是作为Master(发起端),TCP端是作为响应端,这就是Modbus的主从结构。界面如下:
设置远程TCP从站IP:“新增”即可。
b)Modbus Poll:
注意:此时连接的是串口端,作为Master(主);
c)Modbus Slave:
注意:此时连接的是TCP端,作为Slave(从);
d)通信成功:
报文分析:
第一组:
0.000 RTU Req ---RTU主动发起请求;
0.000 TCP Req ---通过MB3480,转发Req请求;
0.010 TCP Resp ---TCP返回响应 ;
0.010 RTU Resp ---通过MB3480,转发RTU响应;
下篇文章我们将对报文的数据解析,感谢你的观看!