# Modbus Tcp Slave操作手册

### 概述

Modbus 本身是一种信息交换的规范，Modbus TCP则是透过TCP/IP来实现Modbus 的一种方式，因此所有的信息都是通过TCP/IP来传输的；Modbus协议属于 C/S 架构，Modbus Tcp Slave是一种Server用来存放所有要被读取的工业设备数据；

使用场景

- Modbus属于C/S架构，在工业上会有Modbus slave作为server来存放所有要被读取的工业设备数据，如温度、湿度、距离等资料，Modbus主站可以通过tcp/ip连接到slave进行通讯；

整体架构

- Modbus Tcp是透过TCP/IP来实现Modbus的一种方式，因此所有讯息是透过TCP/IP来传输的，Modbus Tcp Master可以对Slave发送读或者写的指令，Slave收到指令后会回复确认信息，整个Modbus的沟通建立在一来一回的讯息交换上；

主要功能及产品组件

注： 本手册中用到的中科时代的软件包，均可以从官网的子页面获取。官网提供的版本可能比本手册中提到的版本更高，一般情况下这不会影响您按照本手册的例子执行相应的操作

- 下表概述了各个产品

产品组件 | 描述说明
--- | ---
modbusslave_0.0.5_amd64.deb |
modbusslave.library | 上位机程序使用的库文件

### 安装卸载

安装要求

- 中科时代出厂的工智机；

- 工智机可以访问互联网；

- 熟悉基础的Linux操作命令；

安装过程

1、工智机端安装Modbus Tcp Slave RTE组件

- 上传deb包到工智机Linux环境的/home/sinsegye目录下

- 上传完成后在工智机上执行命令安装（参考下方截图，如果模块文件名发生变化则命令行中的文件名做相应更改）

- 修改RTE的配置文件，ComponentManger字段下加入modbusslave

- 重启RTE服务，使新加入的modbusslave被调用

2、Metafacture安装library

- 打开Metafacture，点击“工具” -- “库存储”

- 点击“安装” -- 选中modbus slave的库文件，点击“打开”

- 工程中点击“库管理器” -- “添加库” -- 选中modbus库点击“确定”

更新安装

1、工智机端升级Modbus Tcp Slave RTE组件

- 上传deb包到工智机Linux环境的/home/sinsegye目录下

- 上传完成后在工智机上执行命令安装（参考下方截图，如果模块文件名发生变化则命令行中的文件名做相应更改）

- 重启RTE服务，使新升级的modbusslave被调用

2、Metafacture升级library

- 打开Metafacture，点击“工具” -- “库存储”

- 点击“安装” -- 选中要升级的modbus slave的库文件，点击“打开”

- 工程中点击“库管理器” -- “添加库” -- 选中modbus库点击“确定”

卸载过程

1、工智机端卸载Modbus Tcp Slave RTE组件

- 工智机上执行命令卸载modbusslave

- 修改RTE的配置文件，ComponentManger字段下去掉modbusslave

- 重启RTE服务

2、卸载MetaFacture侧的Modbus Tcp slave library

- MetaFacture界面点击“工具” -- “库存储”

- 对话框中选中安装的modbus slave的库，点击“卸载”

### 技术说明

快速启动

（一）本例软、硬件配置

硬件：

1. SX5100工智机 MetaOS V24.08.15_SX5

2. Win10 PC

软件：

1. MetaFacutre V1.0.6.3

2. Modbus Poll主站工具

（二）本例实验要求及原理

- 实验要求：按照“安装卸载”部分中的“安装过程”配置完成Modbus Tcp Slave环境

1、实验原理

- 第三方Modbus Tcp主站通过 TCP 连接向Metafacture Modbus Tcp 从站发送请求，主要包含：功能码、目标寄存器的地址和数量、写操作时的数据；从站收到请求后先检查数据的合法性，然后执行请求的操作，响应主站请求；

- 上位机和工智机使用EtherNet连接。

- 上位机上，MetaFacture下装工程到工智机。工程中会包含下面的试验操作步骤中的配置。

- 工智机与第三方Modbus Tcp主站通过EtherNet连接。

（三）本例实验操作步骤

1、新建Modbus tcp slave工程的实验步骤如下：

- POU中声明区域调用modbus tcp slave功能块，配置线圈、离散输入、保持寄存器、输入寄存器各2048点；

- POU中程序区域调用fb_tcp，配置从站IP地址、端口、线圈地址、保持寄存器地址、离散输入地址、输入寄存器地址；

- 工程运行后即可使用Modbus Poll连接Metafacture Tcp Slave，对从站进行读写操作；主站与从站数据一致；

### 创建Modbus Tcp从站

功能块FB介绍

参数介绍

- 输入参数

参数名称 | 参数类型 | 描述
--- | --- | ---
bEnable | BOOL | 启动modbus tcp slave
sIpAddr | STRING | 设置从站的IP地址
uiIpPort | UDINT | 设置从站的端口号
udiTimeOut | UDINT | 超时时间
phyCoil | POINTER TO BYTE | 从站线圈，可读可写
pbyDiscreteInput | POINTER TO BYTE | 从站离散输入，只读
pbyHoldingRegisterA | POINTER TO BYTE | 从站保持寄存器，可读可写
pbyInputRegister | POINTER TO BYTE | 从站输入寄存器，只读
udiRwBitSize | UDINT | 以位可读写寻址的最大个数，用于线圈
udiInBitSize | UDINT | 以位可读寻址的最大个数，用于离散输入
udiInWordSize | UDINT | 以字可读寻址的最大个数，用于输入寄存器
udiRwWordSize | UDINT | 以字可读写寻址的最大个数，用于保持寄存器
psMbTest | INT | 默认0，Modbus测试用数据，默认不用配置

- 输出参数

参数名称 | 参数类型 | 描述
--- | --- | ---
bBusy | BOOL | 当功能块被激活时，被置为True，一直保持到收到确认信号
bActive | BOOL | Modbus从站激活标志位
bConnect | BOOL | Modbus连接成功标志位
bError | BOOL | 错误标志位。True为报错，False无报错
eRrror | Modbus Error id | 错误反馈id
UIRecvCounter | ULINT | 数据接收计数器
UISendCounter | ULINT | 数据发送计数器
sLocalIp | STRING | 本地ip地址
sClientIp | STRING | 客户端ip地址