菜单

Modbus运行样例

测试项

  • Modbus RTU 三种通讯模式(RS-485/422/232) 和 串口转USB

  • Modbus TCP

  • Modbus RTU 切换 波特率

  • 多主从

  • 越边界值

  • Slave ID不存在

  • 工智机做master,slave

  • 异常测试:重启RTE、工智机reboot、掉电重启、热/冷/初始复位

  • 压力测试:1000/2000 范围读写测试

**注:Pc机做modbus master或slave的时候,需要关闭防火墙或者开放对应端口的出站和入站,默认使用502

官方modbus配置

Modbus TCP
工智机 Master
  1. 扫描Ethernet网络接口,选择工智机ip

  2. 添加Modbus TCP主从站:\[Device]右键添加Ethernet设备-->\[Ethernet]-->右键添加Modbus TCP Master和Slave

  3. Modbus Master配置

    ModbusTCPMasterIO映射-->切换 总线周期任务 使用 MainTask

    注:MainTask下可修改循环时间间隔

    注:Task下注意\[优先级]和\[间隔]时间,会影响读写速度

  4. Modbus Slave配置

    1. 通用

      注:添加slave之后,\[通用]下不显示\[单元ID],需要通过\[ModbusTCPSlave参数]页面配置

      否则报\[Connection aborted: socket keep-alive expired!]错误

    2. 检查ModbusTCPSlave参数下的值,与通用下配置一致

      注:修改Unit-ID与Slave ID一致

    3. 添加channel

      1. 访问类型:对应操作的功能码

      2. 偏移:操作开始位置

      3. 长度:操作范围 coil 0-2000 register 0-125

    4. ModbusTCPSlaveIO映射

      可进行变量绑定和状态切换

工智机 Slave
  1. 右键Ethernet,直接添加ModbusTCP Slave设备
  1. ModbusTCP Slave配置

    1. \[通用] 下可配置 端口/范围/起始地址

    2. \[I/O映射] 下查看数据,周期选择

  1. 01(线圈寄存器)/03(保持寄存器),在codesys侧可修改

    \[通用]配置中,勾选\[可写入],然后I/O映射中绑定变量即可

复制代码
  ![](https://resource-wangsu.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c4eb5413.png)
Modbus RTU
串口直连下工智机 Master
  1. Modbus_COM配置工智机串口

    SX2设备的串口为/dev/ttyS0 则对应上述界面的COM1

    SX5设备的串口为/dev/ttyS6 则对应上述界面的COM7

    注:工智机上需要对应修改配置文件,开放功能

    修改配置文件:sudo vim /usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg

    取消\[SysCom]下,Linux.Devicefile=/dev/ttyS 的注释

  2. Modbus RTU(串口):\[Device]右键添加Modbus_COM设备-->\[Modbus_COM]-->右键添加Modbus_Master/Slave_COM

  3. Modbus Slave配置--> 通用

    注:channel通道和IO映射配置方法与Modbus TCP的配置一致

串口直连下工智机 Slave
  1. 该模式使用自研modbus,通过编写ST脚本实现;注:自研modbus也可做Master

  2. 安装库文件

    1. 使用codesys打开CmpSinsegyeLibs.projectarchive工程文件 # Modbus.projectarchive

    2. 点击黄色按钮

  3. 打开/新建标准工程,点击库管理器添加库

注:modbus和Common Library都要添加

  • 编写ST进行modbus测试,不需要添加设备

  • 数据查看

    1. 切换数据显示模式
    1. inputarray

    inputArray 对应02/04两个只读功能码;在codesys侧写入值,poll侧观察变化

    • memoryarray

    AdrMemory 对应03/06/16三个功能码;

    注:AdrMemory 只支持寄存器4000以及4000以上的地址,所以poll起止位置需大于等于4000开始,但codesys 侧观察变化从数组0开始

    • outputarray

      outputArray 对应01/03/05/16/15/16 五个功能码;是一个数组支持多种类型的功能码

      所以poll侧修改线圈/寄存器时,codesys中会对应同一数组发生变化,因此最好调成2进制显示,方便观察线圈值变化

串口转USB后连接工智机
  1. 设备添加、Modbus Slave配置 与上述直连模式一致

  2. 串口转USB 与 串口直连 区别为 \[Modbus_COM]设备下\[COM]端口的配置

    1. 串口转USB接入工智机,查看ttyS对应增加的USB

    cat /dev/tty

    • 修改配置文件,增加COM端口与USB的对应关系

    sudo vim /usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg 增加 Linux.Devicefile.10=/dev/ttyUSB0

    • codesys下COM端口配置与工智机配置文件中保持一致

工智机上切换串口模式

  1. SX2和SX5 修改s-code中配置:/usr/local/etc/SinsegyeRTE/device_config.yaml

    1. 修改serial_ports下的type值

    2. 重启s-core:sudo systemctl restart s-core.service

  1. SP70 修改BIOS,设置不同COM口对应不同连接方式

    Advanced -> Serial Mode Select -> Serial Port 1 Mode

  1. 修改串口设备的接线方式

    1. RS-485 2根线 T/R+接T/R+ T/R-接T/R-

    2. RS-422 4根线 T/R+接RXD+ T/R-接RXD- RXD+接T/R+ RXD-接T/R-

    3. RS-232 3根线 串口转usb需要db9公头线连接;GND接GND TXD接RXD RXD接TXD

  2. 串口调试

    注:更改串口连接方式后,最好使用工具互相发送检查是否正常通讯

    检查完毕之后,记得要断开串口连接,否则Modbus client无法connection或者codesys报通讯超时

    1. windows机器使用sscom工具

      注意检查波特率等默认配置值

    2. 工智机安装cutecom工具:sudo apt install cutecom

  3. 工智机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

  1. 报错:Amount of IP configuration changes since startup (IP or gateway address or subnet mask)

原因及解决:工智机ip更改,Ethernet网口未重新扫描,选择新ip即可

  • 报错:Slave does not support the function code

    可能原因:

    1. Modbus slave 未启动connection,先启动codesys会报这个问题

    2. 功能码不对应

解决:

  • 报错:TCP Port error. Request was not sent

原因:连接不通,ip/端口不对应

  • 报错:Slave does not support this register offset

原因:Master读/写/偏移超过Slave设置的quantiy最大值

  • 报错:The checksum of the response is not correct

原因:响应的校验和不正确 检查串口线连接

解决:检查串口线连接,串口通过usb连接,配置文件中定义usb0/1未与实际系统绑定对应上

  • 报错:The response contains invalid data

原因:com端口填写错误(直连/usb转)

  • 报错:There was no response in time

原因:

工智机上切换modbus版本

  1. modbus版本so文件路径:/usr/local/lib

新旧版本名称不一样,新版:SE4100;旧版:CmpSinMbTcpMst

  • 配置modbus版本的文件:/usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg

modbus版本配置在\[ComponentManager]

自研新modbus配置

  1. 通过PLC编码调试

自研旧modbus配置

  1. 配置从站信息
  • channel通道绑定;映射配置
最近修改: 2025-05-13