耐特 PLC 的 Modbus 通信通常支持 Modbus RTU(通过串口)和 Modbus TCP(通过以太网)两种方式。以下是针对耐特 PLC 作为 Modbus 主站和从站的完整指令库说明及示例,适用于多数耐特 PLC 型号(如 Nait 系列)。
一、Modbus RTU 主站指令库(串口通信)
耐特 PLC 作为主站时,通过串口(RS485)读写从站设备(如仪表、变频器等)的数据,常用指令如下:
| 指令名称 | 功能描述 | 关键参数 |
|---|---|---|
MB_MASTER | Modbus 主站通信指令(核心指令) | 从站地址、功能码、起始地址、数据长度、数据区 |
MB_INIT | 初始化 Modbus 主站参数 | 波特率、校验位、数据位、停止位、端口号 |
MB_RESET | 重置 Modbus 通信状态 | 无(用于故障恢复) |
示例:读取从站数据(功能码 03)
梯形图
// 初始化主站:波特率9600,无奇偶校验,8数据位,1停止位,COM1端口 MB_INIT( baud := 9600, parity := 0, // 0=无校验,1=奇校验,2=偶校验 data_bits := 8, stop_bits := 1, port := 1, // 串口1 done => init_done, // 初始化完成标志 error => init_err // 错误代码 ); // 读取从站1的保持寄存器(地址40001开始,读取2个寄存器) MB_MASTER( slave := 1, // 从站地址 func := 3, // 功能码03(读保持寄存器) addr := 0, // 起始地址(40001对应地址0) count := 2, // 读取数量 data_ptr := &DB1.DBW0, // 数据存储区(DB1的字0开始) done => read_done, // 读取完成标志 error => read_err, // 错误代码 busy => read_busy // 忙标志 );
二、Modbus RTU 从站指令库(串口通信)
耐特 PLC 作为从站时,响应主站的读写请求,常用指令如下:
| 指令名称 | 功能描述 | 关键参数 |
|---|---|---|
MB_SLAVE | Modbus 从站通信指令(核心指令) | 从站地址、数据映射区(输入 / 输出 / 寄存器) |
MB_SLAVE_INIT | 初始化 Modbus 从站参数 | 从站地址、波特率、校验位等(同主站) |
示例:配置从站并映射数据区
梯形图
// 初始化从站:地址2,波特率9600,无校验,COM1端口 MB_SLAVE_INIT( slave_addr := 2, baud := 9600, parity := 0, data_bits := 8, stop_bits := 1, port := 1, done => slave_init_done, error => slave_init_err ); // 从站数据映射:输入寄存器、线圈、保持寄存器对应PLC内部地址 MB_SLAVE( input_regs := &IB0, // 输入寄存器映射到输入字节IB0 coils := &Q0.0, // 线圈映射到输出点Q0.0 holding_regs := &DB1.DBW0, // 保持寄存器映射到DB1.DBW0 discrete_inputs := &I0.0, // 离散输入映射到I0.0 done => slave_done, error => slave_err );
三、Modbus TCP 主站指令库(以太网通信)
通过以太网进行 Modbus TCP 通信时,主站指令如下:
| 指令名称 | 功能描述 | 关键参数 |
|---|---|---|
MODBUS_TCP_MASTER | Modbus TCP 主站指令 | 从站 IP 地址、端口(默认 502)、功能码、地址 |
TCP_CONNECT | 建立 TCP 连接(部分型号需要) | 从站 IP、端口、连接 ID |
示例:Modbus TCP 主站读取从站数据
梯形图
// 连接到Modbus TCP从站(IP:192.168.0.100,端口502) TCP_ConNECT( ip_addr := '192.168.0.100', port := 502, conn_id := 1, // 连接ID connected => tcp_connected, // 连接成功标志 error => tcp_err ); // 读取保持寄存器(功能码03,地址0,长度2) MODBUS_TCP_MASTER( conn_id := 1, func := 3, addr := 0, count := 2, data_ptr := &DB2.DBW0, // 存储读取数据 done => tcp_read_done, error => tcp_read_err );
四、常见错误代码及解决方法
| 错误代码 | 可能原因 | 解决方法 |
|---|---|---|
| 16#01 | 从站无响应 | 检查从站地址、接线或电源;确认从站正常运行 |
| 16#02 | 数据地址超出范围 | 核对从站支持的寄存器地址范围 |
| 16#03 | 校验错误 | 重新配置波特率、校验位等串口参数 |
| 16#06 | TCP 连接失败 | 检查 IP 地址、端口;确认从站 Modbus TCP 服务启用 |
五、使用注意事项
如需具体型号的指令手册或编程示例,可参考耐特官方文档或联系技术支持获取完整资料。

