#### 测试项

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

* Modbus TCP

* Modbus RTU 切换 波特率

* 多主从

* 越边界值

* Slave ID不存在

* 工智机做master，slave

* **异常测试：**&#x91CD;启RTE、工智机reboot、掉电重启、热/冷/初始复位

* 压力测试：1000/2000 范围读写测试



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



#### 官方modbus配置

##### Modbus TCP

###### 工智机 Master

1. 扫描Ethernet网络接口，选择工智机ip

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33ba42db42.png)


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

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33baf42b59.png)


3. Modbus Master配置

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

   **注：MainTask下可修改循环时间间隔**

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33bb91014b.png)


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

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33bc1f187d.png)


4. Modbus Slave配置

   1. 通用

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

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

      ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33bca990b8.png)


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

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

      ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33bd12d9c1.png)


   3. 添加channel

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

      2. 偏移：操作开始位置

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

      ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33bf9d9e22.png)


   4. ModbusTCPSlaveIO映射

      可进行变量绑定和状态切换
![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c03da1c8.png)


###### 工智机 Slave

1. 右键Ethernet，直接添加ModbusTCP Slave设备

 ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c0d0b4de.png)


2. ModbusTCP Slave配置

   1. \[通用] 下可配置 端口/范围/起始地址
![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c1501518.png)


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

![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c1b8c721.png)


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

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

![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c24ad12c.png)


      ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c4eb5413.png)




##### Modbus RTU

###### 串口直连下工智机 Master

1. Modbus\_COM配置工智机串口

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

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

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c5e28d79.png)


   **注：工智机上需要对应修改配置文件，开放功能**

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

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

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c67c263c.png)




2. Modbus RTU(串口)：\[Device]右键添加Modbus\_COM设备-->\[Modbus\_COM]-->右键添加Modbus\_Master/Slave\_COM

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c7359c68.png)


3. Modbus Slave配置--> 通用

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

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c7aacd9e.png)




###### 串口直连下工智机 Slave



1. 该模式使用自研modbus，通过编写ST脚本实现；注：自研modbus也可做Master

2. 安装库文件

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

   2. 点击黄色按钮

     ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33c9a576fd.png)


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

注：modbus和Common Library都要添加

* 编写ST进行modbus测试，不需要添加设备

  ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33ca13a549.png)


* 数据查看

  1. 切换数据显示模式

    ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33ca83daa2.png)


  2. 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进制显示，方便观察线圈值变化

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33cb26b71d.png)




###### 串口转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端口配置与工智机配置文件中保持一致

     ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33cbbcae07.png)

![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33cc3bbd7b.png)




#### 工智机上切换串口模式

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

  ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33ccc578ca.png)


2. **SP70** 修改BIOS，设置不同COM口对应不同连接方式

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

  ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33cd60306b.png)


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

   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

4. 串口调试

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

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

   1. windows机器使用sscom工具

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

      ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33ce284fde.png)


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

      ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33ceaa3026.png)


5. 工智机COM口和ttyS对应关系

   **SX2/SX5**

   SX2 COM口默认绑定ttyS0   codesys中对应填写COM1

   SX5 COM口默认绑定ttyS6   codesys中对应填写COM7

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33cf47922e.png)


   **SP70**

   COM1 绑定ttyS0  COM2 绑定ttyS1  COM3 绑定ttyS2  COM4 绑定ttyS3

   codesys中分别对应填写COM1、COM2、COM3、COM4

   ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33cfd07608.png)




#### 报错及原因

**注：重启工智机/RTE，通讯未自动恢复；codesys中有错误提示，点击确认后正常**

codesys中注意设置Socker超时时间和自动重连

![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33d0aa27dc.png)


![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33d12a6c45.png)


RTE报错日志

![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33d1b2d45e.png)


也可通过开始下图中配置解决

开启NetworkManager-wait-online.service配置，用于控制在设置好网络之后启动各服务

工智机启动时间较慢时，禁用了一批配置其中包括NetworkManager-wait-online.service

![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33d234bdbe.png)




1. **报错：**&#x41;mount of IP configuration changes since startup (IP or gateway address or subnet mask)

  ![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33d30d100e.png)


**原因及解决：**&#x5DE5;智机ip更改，Ethernet网口未重新扫描，选择新ip即可

* **报错：**&#x53;lave does not support the function code

  **可能原因：**

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

  2. 功能码不对应

&#x20;    **解决：**

* **报错：**&#x54;CP Port error. Request was not sent

&#x20;    **原因：**&#x8FDE;接不通，ip/端口不对应

* **报错：**&#x53;lave does not support this register offset

&#x20;    **原因：**&#x4D;aster读/写/偏移超过Slave设置的quantiy最大值

* **报错：**&#x54;he checksum of the response is not correct&#x20;

&#x20;    **原因：**&#x54CD;应的校验和不正确   检查串口线连接

&#x20;    **解决：**&#x68C0;查串口线连接，串口通过usb连接，配置文件中定义usb0/1未与实际系统绑定对应上

* **报错：**&#x54;he response contains invalid data

&#x20;    **原因：**&#x63;om端口填写错误（直连/usb转）

* **报错：**&#x54;here was no response in time

&#x20;    **原因：**



#### **工智机上切换modbus版本**

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

新旧版本名称不一样，新版：SE4100；旧版：CmpSinMbTcpMst

* 配置modbus版本的文件：/usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg

modbus版本配置在\[ComponentManager]



#### 自研新modbus配置

1. 通过PLC编码调试

![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33d3b4e343.png)


![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33d46b8cd1.png)




#### 自研旧modbus配置

1. 配置从站信息

![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33d51b6e8a.png)


* channel通道绑定；映射配置

![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33d5956a71.png)


![](https://resource.helplook.net/docker_production/3648ne/article/SkE62pE4/67f33d6415c34.png)