- 1. 一、台达PLC支持的Modbus通讯方式
- 2. 二、硬件接线
- 3. 三、Modbus地址映射
- 4. 四、WPLSoft编程示例(梯形图)
- 5. 五、ISPSoft/AS系列编程示例
- 6. 六、常见问题与排查
- 7. 七、示例工程说明
台达PLC(DVP系列、AS系列、AH系列等)通过Modbus协议与网络型或串口型继电器模块通讯,是工业自动化中常用的分布式控制方案。本文详细介绍台达PLC的硬件接线、ISPSoft/WPLSoft编程配置、Modbus地址映射以及完整的示例工程,帮助工程师快速实现台达PLC对继电器模块的读写控制。
一、台达PLC支持的Modbus通讯方式
台达PLC支持多种Modbus通讯方式,不同系列的PLC支持的通讯口和协议略有差异:
| PLC系列 | 通讯口 | 支持协议 | 说明 |
|---|---|---|---|
| DVP-ES2/EX2/SS2/SA2/SX2 | COM1(RS232), COM2(RS485) | Modbus RTU/ASCII | COM2内置RS485,most common |
| DVP-EH3 | COM1(RS232), COM2(RS485), 可选COM3 | Modbus RTU/ASCII | 高速通讯,支持115200bps |
| AS系列 | RS485口, 以太网口 | Modbus RTU/TCP | 新一代中型PLC,Powerful Features |
| AH系列 | 多串口, Ethernet | Modbus RTU/TCP | 大型PLC,支持多主站 |
二、硬件接线
2.1 DVP系列RS485接线
- PLC端:使用COM2口(RS485),引脚定义为:D+(1号针)、D-(2号针)、SG(3号针)
- 模块端:A端子接PLC的D+,B端子接PLC的D-
- 地线:SG与模块的信号地连接,提高抗干扰能力
- 终端电阻:总线两端接入120Ω终端电阻,DVP系列PLC的COM2口内置终端电阻,可通过软件启用
- 电源:继电器模块使用独立24V DC供电
2.2 网络型Modbus TCP接线
- 使用网线将模块连接到交换机或直接连接PLC的以太网口
- 模块IP地址需与PLC在同一网段
- 单网口版设备必须在网络配置中将【透传】模式更改为【Modbus TCP】模式
- Modbus TCP默认端口号为502
三、Modbus地址映射
台达PLC的Modbus地址与内部寄存器的对应关系如下:
| 台达PLC元件 | Modbusaddress(decimal) | function code | 说明 |
|---|---|---|---|
| S(步进继电器) | 0000-2047 | 01/05/15 | 位元件 |
| X(输入) | 2048-4095 | 02 | 只读 |
| Y(输出) | 4096-6143 | 01/05/15 | 位元件 |
| M(辅助继电器) | 6144-12287 | 01/05/15 | 位元件 |
| T(定时器) | 12288-14335 | 01/05/15 | 触点 |
| C(计数器) | 14336-16383 | 01/05/15 | 触点 |
| D(数据寄存器) | 40000-49999 | 03/06/16 | 字元件 |
| T/Ccurrent value | 50000+ | 03/06/16 | 字元件 |
继电器模块作为从站时,其内部地址映射通常为:
| Function | Modbusfunction code | 地址范围 | 说明 |
|---|---|---|---|
| 继电器输出 | 0x01/0x05/0x0F | 0x0000-0x0007 | 8路继电器 |
| 数字输入 | 0x02 | 0x0000-0x0007 | 8路光耦输入 |
| 模块参数 | 0x03/0x06 | 0x0000-0x000F | address、波特率等 |
四、WPLSoft编程示例(梯形图)
WPLSoft是台达DVP系列PLC的梯形图编程软件。使用MODRD和MODWR指令进行Modbus通讯。
4.1 通讯参数设置
在WPLSoft中,通过设置特殊寄存器来配置COM2口的通讯参数:
// 通讯参数设置(使用MOV指令)
MOV H81 D1120 // COM2通讯协议:81=Modbus RTU, 82=Modbus ASCII
MOV H03 D1121 // Baud rate:03=9600, 04=19200, 05=38400, 06=57600, 07=115200
MOV H00 D1122 // data bit8,stop bit1,无校验
MOV K100 D1123 // 通讯超时100ms
MOV H00 D1124 // 不启用终端电阻(如需要设H01)
// D1120详细说明:
// Bit7-4: Protocol (0=无, 1=ASCII, 2=RTU, 8=Modbus ASCII, 9=Modbus RTU)
// Bit3: stop bit (0=1位, 1=2位)
// Bit2-1: check (0=无, 1=奇, 2=偶)
// Bit0: data bit (0=7位, 1=8位)
// H81 = 1000 0001 = Modbus RTU, 1停止位, 无校验, 8数据位
4.2 读取继电器状态(MODRD指令)
// 读取从站1的8路继电器状态
// MODRD slave address function code starting address Reading quantity 存储位置
LD M0 // 触发信号
MODRD K1 K1 H0000 K8 D100
// 参数说明:
// K1 = slave address1
// K1 = function code01(读线圈)
// H0000 = starting address0
// K8 = read8个
// D100 = 数据存储起始地址
// 读取结果:
// D100的Bit0 = No.1路继电器状态
// D100的Bit1 = No.2路继电器状态
// ...
// D100的Bit7 = No.8路继电器状态
// 通讯完成标志:M1127(COM2传送完成)
// 通讯错误标志:M1129(COM2通讯错误)
// 错误代码:D1129
4.3 写单个继电器(MODWR指令)
// 控制第1路继电器吸合
LD M10 // 按钮触发
MODWR K1 K5 H0000 HFF00
// 参数说明:
// K1 = slave address1
// K5 = function code05(写单线圈)
// H0000 = 继电器地址0(No.1路)
// HFF00 = 吸合(H0000=断开)
// 控制第1路继电器断开
LD M11
MODWR K1 K5 H0000 H0000
// 写保持寄存器示例:设置模块地址为2
LD M12
MODWR K1 K6 H0000 K2
// K6 = function code06(写单寄存器)
// H0000 = register address(模块地址寄存器)
// K2 = 新地址值
4.4 写多个继电器(MODWRfunction code15)
// 同时控制前4路继电器
LD M20
MOV H0F D200 // 低4位置1,前4路吸合
MODWR K1 K15 H0000 K4 D200
// 参数说明:
// K15 = function code15(写多线圈)
// H0000 = starting address0
// K4 = 写入4个线圈
// D200 = 数据起始地址(按位存储)
// D200的Bit0=No.1路, Bit1=No.2路...
// H0F = 0000 1111 = 前4路吸合,后4路断开
4.5 完整的轮询程序
// 主程序:定时轮询读取继电器状态
LD M1002 // 首次扫描
MOV H81 D1120 // 初始化COM2为Modbus RTU
MOV H03 D1121 // 9600bps
MOV H00 D1122 // 8N1
RST M0 // 清除触发标志
// 每500ms读取一次
LD M1000 // 1s时钟脉冲
ANI M1127 // 等待上一次通讯完成
ANI M1129 // 无错误
OUT M0 // 触发读取
// read8路继电器状态
LD M0
MODRD K1 K1 H0000 K8 D100
// 通讯错误处理
LD M1129 // 通讯错误
INC D110 // Error count
MOV D1129 D111 // 保存错误代码
RST M1129 // 清除错误标志
// 将读取的继电器状态映射到输出
LD M1127 // 通讯完成
MOV D100 D101 // Save data
RST M0 // 清除触发
// No.1路继电器状态 -> Y0
LD D101.0
OUT Y0
// No.2路继电器状态 -> Y1
LD D101.1
OUT Y1
// ...以此类推
五、ISPSoft/AS系列编程示例
AS系列PLC使用ISPSoft编程软件,支持结构化文本(ST)和梯形图(LD)。Modbus通讯使用MB_Master功能块。
5.1 ST语言示例
// 变量声明
VAR
MB_Read : MB_Master; // Modbus主站功能块
Enable : BOOL := FALSE; // 使能
Done : BOOL; // 完成标志
Busy : BOOL; // 忙标志
Error : BOOL; // 错误标志
ErrorID : WORD; // 错误代码
ReadData : ARRAY[0..7] OF BOOL; // 读取的数据
END_VAR
// 读取继电器状态
MB_Read(
Enable := Enable,
SlaveID := 1, // slave address
Function := 1, // function code01=读线圈
StartAddr := 0, // starting address
Quantity := 8, // Reading quantity
Buffer := ADR(ReadData), // 数据缓冲区
Done => Done,
Busy => Busy,
Error => Error,
ErrorID => ErrorID
);
// 写单个继电器
MB_Write : MB_Master;
MB_Write(
Enable := WriteEnable,
SlaveID := 1,
Function := 5, // function code05=写单线圈
StartAddr := 0,
Quantity := 1,
Buffer := ADR(CoilValue),
Done => WriteDone
);
六、常见问题与排查
6.1 通讯失败常见原因
- D1120设置错误:确认通讯协议设置为Modbus RTU(H81)或ASCII(H82)
- 波特率不匹配:PLC和模块的波特率必须一致,D1121设置正确
- 从站地址错误:MODRD/MODWR指令中的从站地址必须与模块设置一致
- A/B线接反:交换A/B线试试,这是最常见的接线错误
- 未启用终端电阻:长距离通讯时总线两端必须接120Ω终端电阻
- 电源问题:模块供电不足会导致通讯不稳定
- 干扰问题:RS485线远离动力线,使用屏蔽双绞线
- COM口选择错误:DVP系列有COM1和COM2,注意使用正确的特殊寄存器
6.2 台达PLC错误代码(D1129)
| 错误码 | 含义 | 解决方法 |
|---|---|---|
| H01 | 非法功能码 | 模块不支持该功能码 |
| H02 | 非法地址 | read/写入地址超出范围 |
| H03 | Illegal data value | 写入的数据不合法 |
| H04 | Substation equipment malfunction | 模块硬件故障 |
| H05 | 确认但未处理 | 从站忙,稍后重试 |
| H06 | 从站忙 | 等待从站空闲 |
| H07 | 否定应答 | 从站拒绝请求 |
| H08 | 内存奇偶错误 | 从站内存故障 |
| H0A | Gateway path unavailable | 网关配置错误 |
| H0B | 网关目标无响应 | 目标设备未响应 |
| HFE | 超时错误 | 从站无响应,检查接线和地址 |
七、示例工程说明
本文配套的台达PLC完整示例工程包含:
- DVP-ES2完整WPLSoft工程(含初始化、读线圈、写线圈、错误处理、状态显示)
- AS系列ISPSoft工程(ST和LD两种版本)
- Modbus地址映射表Excel
- 硬件接线图PDF
- 详细的调试步骤说明
- 常见问题排查手册
示例工程在文章底部进行下载,下载后可直接导入到WPLSoft或ISPSoft中使用。建议先使用默认参数(slave address1、9600波特率、无校验)测试通讯,成功后再根据实际需求修改参数。
Leave a Reply