台达DVP-SS2系列PLC的特殊寄存器D1120是用于监控串口通讯(RS-485)状态的关键诊断寄存器。当PLC通过MODBUS RTU主站模式与外部设备(如变频器、温控表、电表等)通信时,若从站无响应、线路干扰严重或地址/波特率配置错误,D1120的第0位(bit 0) 将自动置为1,表示“通讯超时发生”。该标志位不会自动清零,必须由用户程序主动复位,否则后续所有通讯指令将持续被判定为失败,即使物理连接已恢复正常。
本指南不依赖HMI或上位机,仅使用台达AS系列编程软件(Version 3.5.0及以上)与DVP-SS2 PLC本体,提供纯梯形图逻辑可执行的复位方案,覆盖三种典型工况:手动清除、自动延时清除、条件触发清除。所有步骤均可在10分钟内完成配置并验证。
一、理解D1120寄存器结构与超时标志位位置
D1120是16位数据寄存器,地址固定不可更改。其各位定义如下(从低位bit 0到高位bit 15):
| Bit位 | 含义 | 状态说明 |
|---|---|---|
bit 0 |
通讯超时标志 | 1 = 发生超时;0 = 无超时(需手动清零) |
bit 1 |
通讯校验错误标志 | 1 = CRC校验失败 |
bit 2 |
通讯帧格式错误标志 | 1 = 起始符/结束符异常 |
bit 3 |
通讯接收缓冲区满 | 1 = 接收队列溢出 |
bit 4~15 |
保留(始终为0) | 不可用,读取值恒为0 |
关键结论:
仅bit 0需主动复位;其他位(如bit 1~3)在通讯恢复后会自动归零,无需干预。
D1120为只读寄存器,无法直接写入数值(如MOV K0 D1120无效),必须通过位操作指令清除bit 0。
二、复位原理:为什么不能用MOV指令?
台达PLC中,D1120属于只读诊断寄存器。尝试执行以下操作均失败:
MOV K0 D1120→ 编译报错:“目标地址不可写”OUT M100直接驱动D1120.0→ 梯形图语法错误(.0后缀不被支持)
正确方法是:利用位逻辑指令对D1120执行“位清除”(Bit Clear)操作。台达指令集中对应功能的是ZRST(区域复位)与RST(单点复位),但二者适用场景不同:
RST仅适用于M、S、Y等软元件,不能用于D寄存器的特定位;ZRST可批量复位D寄存器区间,但会清零整个寄存器(16位全变0),导致bit 1~3状态丢失,破坏诊断完整性;- 唯一合规解法:使用
BAND(位与)指令,将D1120与掩码K65534(即二进制1111 1111 1111 1110)进行按位与运算,强制bit 0为0,其余位保持不变。
K65534的推导过程:
- 16位全1为
K65535(即2^16 - 1 = 65535); - 清除bit 0需将该位置0,其余位不变 → 掩码 =
65535 - 1 = 65534; - 十六进制表示为
FFFE,二进制为1111111111111110。
因此,核心公式为:
$$D1120 \leftarrow D1120 \ \& \ K65534$$
其中&表示按位与运算。
三、实操:编写三种复位程序(梯形图逻辑)
所有程序均基于台达标准指令集,无需扩展模块。请确保PLC运行模式为“RUN”,且已启用串口通讯(参数设置见第四节)。
方案1:手动按钮复位(推荐用于调试阶段)
适用场景:现场发现通讯中断,需立即清除超时标志并重试。
- 分配输入点:将PLC输入端子
X0接入一个常开型复位按钮(带自锁或不带自锁均可)。 - 创建辅助继电器:使用
M100作为复位执行触发器。 - 编写梯形图逻辑:
- 第一行:
X0常开触点 串联M100常闭触点,驱动M100线圈(实现按下即触发、松开即断开的单次脉冲); - 第二行:
M100常开触点 驱动BAND指令块:- 源操作数1:
D1120 - 源操作数2:
K65534 - 目标操作数:
D1120(允许自覆盖写入)
- 源操作数1:
- 第一行:
✅ 验证要点:按下按钮瞬间,
D1120值从奇数(如1、3、5)变为偶数(如0、2、4),证明bit 0已清零。
方案2:自动延时复位(推荐用于稳定运行系统)
适用场景:通讯偶发超时后,需等待线路稳定再清除标志,避免频繁误触发。
- 分配定时器:使用
T0(100ms定时器),设定值K10(即1秒延时)。 - 检测超时标志:用
D1120.0状态驱动定时器线圈(台达不支持直接访问D1120.0,需先将D1120传送到中间寄存器拆位):- 第一行:
LD M0(常ON辅助继电器)→MOV D1120 D100(将诊断值暂存至D100); - 第二行:
LD D100→WAND K1 D100 M10(用WAND指令提取D100最低位到M10:K1=二进制0001,结果M10=1当且仅当D100bit0=1); - 第三行:
LD M10→OUT T0(启动定时器);
- 第一行:
- 执行复位:
- 第四行:
LD T0(定时器常开触点)→BAND K65534 D1120 D1120(对D1120执行位与复位); - 第五行:
LD T0→RST T0(定时器复位,防止持续输出)。
- 第四行:
⚠️ 注意:
WAND指令将16位数据与掩码逐位与运算,K1仅影响bit 0,输出结果存入M10~M25共16个位软元件(M10对应bit 0),此处只需M10。
方案3:条件触发复位(推荐用于自动化产线)
适用场景:仅当满足“通讯恢复+连续成功N次”时才清除标志,杜绝误清零。
- 定义成功计数器:使用
D200记录连续通讯成功次数,上限设为K3(即3次)。 - 检测通讯成功信号:台达PLC中,
M1079为“MODBUS主站发送完成标志”,M1080为“MODBUS主站接收完成标志”。二者同时为1视为一次有效通讯:- 第一行:
LD M1079→AND M1080→OUT M20(生成有效通讯脉冲);
- 第一行:
- 累加与清零逻辑:
- 第二行:
LD M20→INC D200(成功一次,计数+1); - 第三行:
LD M10→RST D200(一旦D1120.0=1,计数器清零);
- 第二行:
- 触发复位:
- 第四行:
LD D200→CMP K3 D200 M30(当D200 ≥ 3时,M30=1); - 第五行:
LD M30→BAND K65534 D1120 D1120; - 第六行:
LD M30→RST D200(复位计数器,准备下一轮检测)。
- 第四行:
✅ 效果:只有在
D1120.0=0的前提下,连续3次通讯成功,才会执行复位;若中途再次超时,D200立即归零,确保复位动作严格对应真实恢复。
四、前置条件检查:确保通讯参数正确(否则复位无效)
复位程序生效的前提是PLC底层通讯配置无误。请逐一核对以下参数(通过AS软件“参数设置”→“PLC基本设置”→“通讯设置”):
| 项目 | 正确值(DVP-SS2默认) | 错误示例 | 后果 |
|---|---|---|---|
| 通讯端口 | RS-485(非RS-232) |
误选RS-232 |
完全无信号传输 |
| 波特率 | 19200(需与从站一致) |
9600 vs 38400 |
超时标志必然置位 |
| 数据位 | 8 |
7 |
校验错误(bit 1置位) |
| 停止位 | 1 |
2 |
帧格式错误(bit 2置位) |
| 校验方式 | None(无校验)或Even |
Odd配None |
校验错误(bit 1置位) |
| MODBUS地址 | 1~247(与从站ID一致) |
0或255 |
从站拒绝响应 |
🔍 快速验证法:将PLC通讯线短接A/B线(模拟从站回环),发送任意读指令(如
READ H0000),若D1120=0则硬件链路正常;若仍为1,重点排查终端电阻(需在总线两端各加120Ω)及共模电压(RS-485要求A/B对地压差<±7V)。
五、程序下载与在线监控步骤
- 编译检查:在AS软件中点击
工具→程序检查,确认无语法错误(重点提示:“BAND指令目标不可为常数”属正常,因D1120是合法目标)。 - 下载程序:
- 连接PLC(USB转RS-232线或以太网);
- 点击
在线→PLC写入→ 勾选程序和参数→执行;
- 强制监控D1120:
- 在梯形图窗口右键 →
监控/测试→软元件监控; - 添加地址
D1120,勾选十六进制显示; - 观察值变化:超时发生时末位为
1(如0001),复位后变为0000。
- 在梯形图窗口右键 →
- 触发超时测试:
- 断开PLC与从站的RS-485线缆;
- 执行一次MODBUS读指令(如
READ H0000); - 等待2秒,确认
D1120变为0001; - 按下复位按钮(方案1)或等待1秒(方案2),观察
D1120是否归零; - 重新接上线缆,验证通讯是否恢复正常。
六、常见问题与解决
| 现象 | 根本原因 | 解决方案 |
|---|---|---|
BAND指令执行后D1120不变 |
指令目标填写为D1120.0(非法) |
改为目标D1120(整字) |
复位后D1120立即又变1 |
物理层故障未排除(线断/干扰) | 用万用表测A/B线间电压(空闲时应≈0V,通讯时±2~6V摆动) |
M10始终为0,无法触发复位 |
WAND掩码错误(如用K2) |
确认掩码为K1(仅提取bit 0) |
定时器T0不动作 |
M10触点未驱动T0线圈 |
检查第二行梯形图:LD M10 → OUT T0是否连通 |
| AS软件提示“D1120不在允许范围” | 使用了旧版软件(<V3.2.0) | 升级至V3.5.0或更高版本 |
七、高级技巧:将复位逻辑封装为子程序(提升代码复用性)
若系统含多路MODBUS通讯(如RS-485 Port1与Port2),可将复位逻辑抽象为子程序,减少重复编程:
- 定义子程序入口:新建子程序
SUB_1,参数设定为:S1:源寄存器地址(如D1120)D1:目标寄存器地址(同S1)
- 子程序内容:
LD M0 BAND K65534 S1 D1 - 调用方式:在主程序中插入
CALL SUB_1,并在参数栏填入D1120(自动映射至S1/D1)。💡 优势:未来新增通讯口(如
D1122用于Port2)时,仅需增加一行CALL SUB_1并传入新地址,无需重写逻辑。
八、安全规范:避免复位操作引发的连锁风险
- 禁止在通讯指令执行中复位:
BAND指令需在READ/WRITE指令周期间隙执行(即M1079与M1080均为0时),否则可能中断当前帧。建议在主程序结尾处统一处理。 - 禁止高频复位:连续执行
BAND指令间隔不得小于10ms(PLC扫描周期),否则可能触发看门狗复位。可在BAND后添加DLY K1(10ms延时)。 - 冗余设计:在关键设备控制逻辑前,增加
LDN M10(D1120.0=0)作为使能条件,确保超时状态下自动禁止输出。
LDN M10 // 超时标志未置位?
AND Y0 // 原有输出条件
OUT Y10 // 安全输出
复位完成

暂无评论,快来抢沙发吧!