台达DVP-SS2特殊寄存器D1120通讯超时标志位的复位程序编写

发布于 2026-03-16 00:54:05 · 浏览 4 次 · 评论 0 条

台达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:手动按钮复位(推荐用于调试阶段)

适用场景:现场发现通讯中断,需立即清除超时标志并重试。

  1. 分配输入点:将PLC输入端子X0接入一个常开型复位按钮(带自锁或不带自锁均可)。
  2. 创建辅助继电器:使用M100作为复位执行触发器。
  3. 编写梯形图逻辑
    • 第一行:X0 常开触点 串联 M100 常闭触点,驱动 M100 线圈(实现按下即触发、松开即断开的单次脉冲);
    • 第二行:M100 常开触点 驱动 BAND 指令块:
      • 源操作数1:D1120
      • 源操作数2:K65534
      • 目标操作数:D1120允许自覆盖写入

✅ 验证要点:按下按钮瞬间,D1120值从奇数(如135)变为偶数(如024),证明bit 0已清零。

方案2:自动延时复位(推荐用于稳定运行系统)

适用场景:通讯偶发超时后,需等待线路稳定再清除标志,避免频繁误触发。

  1. 分配定时器:使用T0(100ms定时器),设定值K10(即1秒延时)。
  2. 检测超时标志:用D1120.0状态驱动定时器线圈(台达不支持直接访问D1120.0,需先将D1120传送到中间寄存器拆位):
    • 第一行:LD M0(常ON辅助继电器)→ MOV D1120 D100(将诊断值暂存至D100);
    • 第二行:LD D100WAND K1 D100 M10(用WAND指令提取D100最低位到M10K1=二进制0001,结果M10=1当且仅当D100 bit0=1);
    • 第三行:LD M10OUT T0(启动定时器);
  3. 执行复位
    • 第四行:LD T0(定时器常开触点)→ BAND K65534 D1120 D1120(对D1120执行位与复位);
    • 第五行:LD T0RST T0(定时器复位,防止持续输出)。

⚠️ 注意:WAND指令将16位数据与掩码逐位与运算,K1仅影响bit 0,输出结果存入M10~M25共16个位软元件(M10对应bit 0),此处只需M10

方案3:条件触发复位(推荐用于自动化产线)

适用场景:仅当满足“通讯恢复+连续成功N次”时才清除标志,杜绝误清零。

  1. 定义成功计数器:使用D200记录连续通讯成功次数,上限设为K3(即3次)。
  2. 检测通讯成功信号:台达PLC中,M1079为“MODBUS主站发送完成标志”,M1080为“MODBUS主站接收完成标志”。二者同时为1视为一次有效通讯:
    • 第一行:LD M1079AND M1080OUT M20(生成有效通讯脉冲);
  3. 累加与清零逻辑
    • 第二行:LD M20INC D200(成功一次,计数+1);
    • 第三行:LD M10RST D200(一旦D1120.0=1,计数器清零);
  4. 触发复位
    • 第四行:LD D200CMP K3 D200 M30(当D200 ≥ 3时,M30=1);
    • 第五行:LD M30BAND K65534 D1120 D1120
    • 第六行:LD M30RST 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 OddNone 校验错误(bit 1置位)
MODBUS地址 1~247(与从站ID一致) 0255 从站拒绝响应

🔍 快速验证法:将PLC通讯线短接A/B线(模拟从站回环),发送任意读指令(如READ H0000),若D1120=0则硬件链路正常;若仍为1,重点排查终端电阻(需在总线两端各加120Ω)及共模电压(RS-485要求A/B对地压差<±7V)。


五、程序下载与在线监控步骤

  1. 编译检查:在AS软件中点击工具程序检查,确认无语法错误(重点提示:“BAND指令目标不可为常数”属正常,因D1120是合法目标)。
  2. 下载程序
    • 连接PLC(USB转RS-232线或以太网);
    • 点击在线PLC写入 → 勾选程序参数执行
  3. 强制监控D1120
    • 在梯形图窗口右键 → 监控/测试软元件监控
    • 添加地址D1120,勾选十六进制显示
    • 观察值变化:超时发生时末位为1(如0001),复位后变为0000
  4. 触发超时测试
    • 断开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 M10OUT T0是否连通
AS软件提示“D1120不在允许范围” 使用了旧版软件(<V3.2.0) 升级至V3.5.0或更高版本

七、高级技巧:将复位逻辑封装为子程序(提升代码复用性)

若系统含多路MODBUS通讯(如RS-485 Port1Port2),可将复位逻辑抽象为子程序,减少重复编程:

  1. 定义子程序入口:新建子程序SUB_1,参数设定为:
    • S1:源寄存器地址(如D1120
    • D1:目标寄存器地址(同S1
  2. 子程序内容
    LD M0
    BAND K65534 S1 D1
  3. 调用方式:在主程序中插入CALL SUB_1,并在参数栏填入D1120(自动映射至S1/D1)。

    💡 优势:未来新增通讯口(如D1122用于Port2)时,仅需增加一行CALL SUB_1并传入新地址,无需重写逻辑。


八、安全规范:避免复位操作引发的连锁风险

  • 禁止在通讯指令执行中复位BAND指令需在READ/WRITE指令周期间隙执行(即M1079M1080均为0时),否则可能中断当前帧。建议在主程序结尾处统一处理。
  • 禁止高频复位:连续执行BAND指令间隔不得小于10ms(PLC扫描周期),否则可能触发看门狗复位。可在BAND后添加DLY K1(10ms延时)。
  • 冗余设计:在关键设备控制逻辑前,增加LDN M10D1120.0=0)作为使能条件,确保超时状态下自动禁止输出。
LDN M10      // 超时标志未置位?
AND Y0       // 原有输出条件
OUT Y10      // 安全输出

复位完成

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文