MB3480学习心得.docx
《MB3480学习心得.docx》由会员分享,可在线阅读,更多相关《MB3480学习心得.docx(14页珍藏版)》请在冰点文库上搜索。
MB3480学习心得
MB3480学习心得
D
自注:
这里的客户端、服务器端是指TCP的Client、Server端。
二、MGate说明:
1、通信模式
1)MGate配置文件中:
Modbus采用主从结构,只有两种模式:
Master和Slave
RTU/ASCIISlave:
PC作为Master主,装置作为Slave从;
RTU/ASCIIMaster:
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:
ModbusTCP可支持同时16个连接,串口支持RS-232和RS-422/485,其中RS-232和RS-422仅能连一个设备,RS-485可连接31个设备;
B)串口Master以太网Slave:
可支持32个ModbusTCPslave设备;
三、实测:
1、结构:
笔记本电脑网口→MB3480→笔记本+UPort1150;
2、UPort1150设置:
默认为RS-232方式,注意设置为RS-485(也可为RS-232),方法:
“控制面板”→“设备管理器”→
3、MB3480的设置:
1)主从模式的设定:
以PC端作为Master、装置作为Slave为例;
2)设置串口状态:
3)ID映射:
说明:
a)ModbusTCP通信标准端口号为502,所有的端口号都是502,串口通过ID好识别;
b)ID表中设置情况:
1~5:
Port1;
6~10:
Port2;
c)从站偏移量:
可不设,以下为例子,假定偏移量为3;
4、使用的软件:
前提说明:
两套软件:
软件一:
自己在网上找的ModbusPoll和ModbusSlave,注意:
ModbusPoll:
只作为Master(主端)(TCPMaster和RTUMaster都用它);
ModbusSlave:
只作为Slave(从端)(TCPSlave和RTUSlave都用它);
软件二:
刘丹提供的ModScan32和ModSim32,注意:
ModScan32:
只作为Master(主端)(TCPMaster和RTUMaster都用它);
ModSim32:
只作为Slave(从端)(TCPSlave和RTUSlave都用它);
软件一:
ModbusPoll(用于TCPMaster)
ModbusSlave(用于串口的Slave)
1)打开ModbusSlave:
选择“Connectiong”
注意:
UPort1150映射为主机的COM2口,使用这里选择Port2;
ID号:
1;功能码:
3;
2)打开ModbusPoll:
选择“Connection”,端口号为502;
ID号:
1;功能码:
3;
3)注意事项:
a)ModbusPoll和ModbusSlave设置的ID号、功能码必须一致;
b)通信成功的判断:
可从ModbusPoll软件本身、MGateManager的“监控”来观察;
注意:
MdobusSlave软件无法判断连接是否成功;
通信成功的界面:
ModbusPoll:
Tx值不断增加,Err值为0(Err指响应的返回值);
MGateManager→“监控”:
通信不成功的界面:
比如:
将ModbusSlave的连接断开,则ModbusPoll会报错:
正确的连接,则Err=0;
MGateManager→“监控”:
图中:
TCPReq、RTUReq(通过MB3480转发到RTU串口的),没有Resp。
c)其他功能键的使用:
ModbusPoll:
Read/WriteDefinition:
可设置ID号、功能码、地址;
ResetCounters:
充值计数器;
其中:
地址可自定义,但是ModbusPoll和ModbusSlave的地址设置都要一致;
ModbusSlave:
SlaveDefinition:
可设置ID号、功能码、地址;
软件二:
ModScan32:
用于TCPMaster;
ModSim32:
用于RTUSlave;
1)打开ModSim32软件:
直接打开目录,点击“ModSim32.exe”即可;
点击“OK”;
等几秒钟,“OK”由灰色变为黑色即可点击;
等几秒钟,“OK”由灰色变为黑色即可点击;
“File”→“New”:
“Connection”→“Port2”---UPort1150在笔记本上映射的端口号为COM;
2)打开ModScan32软件:
直接打开目录,点击“ModScan32.exe”即可;
“Connection”→“RemoteTCP/IPServer”:
3)注意事项:
a)ModScan32和ModSim32的Address(地址)、DeviceId(ID号)、MODBUSPointType(功能码,为3)设置必须一致,其中:
ID号:
Port1为1~5;
功能码:
为3;
Address:
可自己设定,只要ModScan32和ModSim32的一致就可以了;
b)连接不成功的界面:
比如:
将Address一个设置为“0001”,另一个设置为“0100”,则会连接不成功,如下界面:
而ModSim32则不会有报错信息;
错误一:
出现“**MODBUSMessageTIME-OUT**”,如果正确的连接,则没有这行报错;
错误二:
NumberofPolls的值一直在增加,而ValidSlaveResponses的值不变,这说明TCPMaster一直发送请求,却一直没有得到回应;
当正确连接后,点击“ResetCtrs”后,这个计数值就会清零,重新累计,出现的数据应该是NumberofPolls与ValidSlaveResponses一致;
c)当修改设置后,参数会自动执行,不要重启软件或按键;
d)如果所有设置都正确,但是连接却还是报错,这种情况下,只要将ModScan32和ModSim32软件重新开启就可以了,因为这个软件是没有经过注册的;
5、监控和数据报文:
1)一个完整的轮询过程:
TCPReq(TCP请求)→转为RTUReq(RTU请求)→RTUResp(RTU回应)→TCPResp(TCP回应);
2)报文内容:
分析如下:
TCPReq:
010000000006010300630005
TCP请求MBAP报头从设备ID起始地址读寄存器个数
7个Byte(字节)功能码
MBAP报头格式:
MBAP包含7个字节:
0100:
处理标识ID,取决于设备的类型,取值一般为0000到FFFF;
0000:
协议ID,0=Modbus协议;
0006:
后面跟随的字节个数(包含从设备ID号),此例:
后面跟随了6个字节;
01:
从设备的ID号;
RTUReq:
01030063000575D7
RTU请求从设备ID起始地址读寄存器个数
功能码CRC校验码(高→低)---RTU方式;
RTUResp:
01030A00010002000300040005CF24
RTU回应从设备ID回复的数据校验码
长度CRC(高→低)
功能码
TCPResq:
TCP回应
01000000000D01030A00010002000300040005
MBAP报头从设备ID长度回复的数据
功能码
MBAP:
000D:
13---后面跟随13个字节;
6、较深入的报文内容:
1)ModbusPoll向多个寄存器发送数据的报文分析:
a)ModbusPoll中的设置:
双击红框部分,界面:
Value中填入要发送的数据,注意:
这是十进制,对于“监控”中是十六进制;
SlaveID:
Port所接从设备的ID;
Address:
这是寄存器地址,第1个是0,第2个是1……;
b)多寄存器报文分析:
监控中看到的数据:
分析:
第一组:
i)TCPReq:
TCP发送请求;
时间数据
0.00003360000000601030000000A
MBAP报头从设备ID起始地址读寄存器个数
功能码
MBAP:
0336:
处理标识ID;
0000:
协议ID,0=Mdobus;
0006:
后面跟随的字节个数;
01:
从设备ID;
ii)RTUReq:
通过MB3480转换到串口的请求;
时间数据
0.00001030000000AC5CD
从设备ID起始地址寄存器个数CRC校验码
功能码
注意:
i)与ii)的起始地址、寄存器个数是一样的;ii)在i)的基础上,去掉了MBAP报头,并且增加了CRC校验码;
iii)RTUResp:
从串口RTU回应的数据;
时间数据
0.090010314000F00100011001200000000000000000000
从设备ID长度1516171800001169
功能码校验码
一共10个寄存器:
000F:
表示15;
0010:
表示16;
0011:
表示17;
0012:
表示18;
其余寄存器为00,没有发送数据;
注意:
第i)、ii)是请求,没有具体数据,只有寄存器起始地址和寄存器个数;
第iii)、iv)开始回应数据;
iv)TCPResp:
通过MB3480转到TCP的回应数据;
时间数据
0.090033600000017010314000F001000110012000000
MBAP报头从设备ID长度000000000000000000
功能码数据
注意:
第iv)的MBAP报头与i)的报头是一样的;
第二组:
与第一组一样,需要注意的:
MBAP报头不同;起始地址、寄存器个数,甚至校验码都是一样的;
2)ModScan32向多个寄存器发送数据的报文:
4001:
<00000>第一个寄存器,发送的数据是0;
4001:
<00000>第二个寄存器,发送的数据是0;
……
点击<00000>,出现界面:
4001寄存器的地址是:
1;
4002寄存器的地址是:
2;
Value:
要发送的数据;
3)使用ModbosPoll和ModbusSlave模拟RTUMaster:
a)通信结构:
RUT串口→MB3480(192.168.127.254)→PC(192.168.127.108)
主动发起主动与PC连接
∴要设置PC的IP
b)MGateManager:
操作模式:
设置为“RTU主站模式”(RTUMaster);
串口状态设置:
从站ID映射的设置:
注意:
当Port1的操作模式设置为“RTU主站模式”时,从站ID映射列表中就没有了Port1的从站设备ID号,为什么?
因为这时的Port1是作为Master(发起端),TCP端是作为响应端,这就是Modbus的主从结构。
界面如下:
设置远程TCP从站IP:
“新增”即可。
b)ModbusPoll:
注意:
此时连接的是串口端,作为Master(主);
c)ModbusSlave:
注意:
此时连接的是TCP端,作为Slave(从);
d)通信成功:
报文分析:
第一组:
0.000RTUReq---RTU主动发起请求;
0.000TCPReq---通过MB3480,转发Req请求;
0.010TCPResp---TCP返回响应;
0.010RTUResp---通过MB3480,转发RTU响应;