Modbus RTU 三种通讯模式(RS-485/422/232) 和 串口转USB
Modbus TCP
Modbus RTU 切换 波特率
多主从
越边界值
Slave ID不存在
工智机做master,slave
异常测试:重启RTE、工智机reboot、掉电重启、热/冷/初始复位
压力测试:1000/2000 范围读写测试
**注:Pc机做modbus master或slave的时候,需要关闭防火墙或者开放对应端口的出站和入站,默认使用502
扫描Ethernet网络接口,选择工智机ip
添加Modbus TCP主从站:\[Device]右键添加Ethernet设备-->\[Ethernet]-->右键添加Modbus TCP Master和Slave
Modbus Master配置
ModbusTCPMasterIO映射-->切换 总线周期任务 使用 MainTask
注:MainTask下可修改循环时间间隔
注:Task下注意\[优先级]和\[间隔]时间,会影响读写速度
Modbus Slave配置
通用
注:添加slave之后,\[通用]下不显示\[单元ID],需要通过\[ModbusTCPSlave参数]页面配置
否则报\[Connection aborted: socket keep-alive expired!]错误
检查ModbusTCPSlave参数下的值,与通用下配置一致
注:修改Unit-ID与Slave ID一致
添加channel
访问类型:对应操作的功能码
偏移:操作开始位置
长度:操作范围 coil 0-2000 register 0-125
ModbusTCPSlaveIO映射
可进行变量绑定和状态切换
ModbusTCP Slave配置
\[通用] 下可配置 端口/范围/起始地址
\[I/O映射] 下查看数据,周期选择
01(线圈寄存器)/03(保持寄存器),在codesys侧可修改
\[通用]配置中,勾选\[可写入],然后I/O映射中绑定变量即可

Modbus_COM配置工智机串口
SX2设备的串口为/dev/ttyS0 则对应上述界面的COM1
SX5设备的串口为/dev/ttyS6 则对应上述界面的COM7
注:工智机上需要对应修改配置文件,开放功能
修改配置文件:sudo vim /usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg
取消\[SysCom]下,Linux.Devicefile=/dev/ttyS 的注释
Modbus RTU(串口):\[Device]右键添加Modbus_COM设备-->\[Modbus_COM]-->右键添加Modbus_Master/Slave_COM
Modbus Slave配置--> 通用
注:channel通道和IO映射配置方法与Modbus TCP的配置一致
该模式使用自研modbus,通过编写ST脚本实现;注:自研modbus也可做Master
安装库文件
使用codesys打开CmpSinsegyeLibs.projectarchive工程文件 # Modbus.projectarchive
点击黄色按钮
打开/新建标准工程,点击库管理器添加库
注:modbus和Common Library都要添加
编写ST进行modbus测试,不需要添加设备
数据查看
inputArray 对应02/04两个只读功能码;在codesys侧写入值,poll侧观察变化
AdrMemory 对应03/06/16三个功能码;
注:AdrMemory 只支持寄存器4000以及4000以上的地址,所以poll起止位置需大于等于4000开始,但codesys 侧观察变化从数组0开始
outputarray
outputArray 对应01/03/05/16/15/16 五个功能码;是一个数组支持多种类型的功能码
所以poll侧修改线圈/寄存器时,codesys中会对应同一数组发生变化,因此最好调成2进制显示,方便观察线圈值变化
设备添加、Modbus Slave配置 与上述直连模式一致
串口转USB 与 串口直连 区别为 \[Modbus_COM]设备下\[COM]端口的配置
cat /dev/tty
sudo vim /usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg 增加 Linux.Devicefile.10=/dev/ttyUSB0
codesys下COM端口配置与工智机配置文件中保持一致
SX2和SX5 修改s-code中配置:/usr/local/etc/SinsegyeRTE/device_config.yaml
修改serial_ports下的type值
重启s-core:sudo systemctl restart s-core.service
SP70 修改BIOS,设置不同COM口对应不同连接方式
Advanced -> Serial Mode Select -> Serial Port 1 Mode
修改串口设备的接线方式
RS-485 2根线 T/R+接T/R+ T/R-接T/R-
RS-422 4根线 T/R+接RXD+ T/R-接RXD- RXD+接T/R+ RXD-接T/R-
RS-232 3根线 串口转usb需要db9公头线连接;GND接GND TXD接RXD RXD接TXD
串口调试
注:更改串口连接方式后,最好使用工具互相发送检查是否正常通讯
检查完毕之后,记得要断开串口连接,否则Modbus client无法connection或者codesys报通讯超时
windows机器使用sscom工具
注意检查波特率等默认配置值
工智机安装cutecom工具:sudo apt install cutecom
工智机COM口和ttyS对应关系
SX2/SX5
SX2 COM口默认绑定ttyS0 codesys中对应填写COM1
SX5 COM口默认绑定ttyS6 codesys中对应填写COM7
SP70
COM1 绑定ttyS0 COM2 绑定ttyS1 COM3 绑定ttyS2 COM4 绑定ttyS3
codesys中分别对应填写COM1、COM2、COM3、COM4
注:重启工智机/RTE,通讯未自动恢复;codesys中有错误提示,点击确认后正常
codesys中注意设置Socker超时时间和自动重连
RTE报错日志
也可通过开始下图中配置解决
开启NetworkManager-wait-online.service配置,用于控制在设置好网络之后启动各服务
工智机启动时间较慢时,禁用了一批配置其中包括NetworkManager-wait-online.service
原因及解决:工智机ip更改,Ethernet网口未重新扫描,选择新ip即可
报错:Slave does not support the function code
可能原因:
Modbus slave 未启动connection,先启动codesys会报这个问题
功能码不对应
解决:
原因:连接不通,ip/端口不对应
原因:Master读/写/偏移超过Slave设置的quantiy最大值
原因:响应的校验和不正确 检查串口线连接
解决:检查串口线连接,串口通过usb连接,配置文件中定义usb0/1未与实际系统绑定对应上
原因:com端口填写错误(直连/usb转)
原因:
新旧版本名称不一样,新版:SE4100;旧版:CmpSinMbTcpMst
modbus版本配置在\[ComponentManager]