第29课 · 发出去成没成:通讯标志位与出错码

信捷指令讲堂 · 6 段 · 共 3:00 · 正文 958 字 · 完全免费

通讯失败时最折磨人的是"不知道哪一步错了"。这节课讲用标志位和错误码把"执行中/成功/异常"和"错在哪一步"分开看。

完整课程 · 智慧屏 + 数字人讲师加载较慢?先看下面的图文
正在加载数字人讲师 …
首次打开约需 30~60 秒(3D 模型较大,只在电脑上加载)
加载期间可以先往下看图文讲解
这台设备暂时跑不了完整课程需要支持 WebGL 的浏览器(多数电脑浏览器都支持)
下面是同一节课的图文讲解 + 音频,内容完全一样

📱 手机上看不到完整课程(数字人讲师需要电脑浏览器的 3D 支持)。下面是这节课的图文讲解 + 音频,内容完全一样,手机上也能完整学完。想体验完整课程,用电脑打开这一页即可。
仍然在手机上试试完整课程

1/6

三个标志位:在跑 / 在发 / 收到了

0:35

三个标志位:执行中 / 发送中 / 接收完成

  • 三个标志位,每十个一组加零执行中、加二发送中、加三接收完成
  • 前两个一闪而过执行中与发送中都是脉冲,扫描里就灭了
  • ★ 接收完成要亲手清置 ON 后一直亮,RCVST 才复位
  • 不清,下一包进不来清干净了才收得下下一条
发出去成没成:通讯标志位与出错码 · 三个标志位:在跑 / 在发 / 收到了 梯形图 收到灯亮,按释放才灭(SM163)

收到灯亮,按释放才灭(SM163)

通讯发出去,怎么知道成没成?信捷给了三个标志位,按串口排、每十个数一组。加零是 Modbus 正在执行,加二是自由格式正在发送,加三是自由格式接收完成。前两个是脉冲,指令一执行就置 ON、一完成马上置 OFF,一闪就过去了。第三个不一样,收到数据它置 ON,然后一直亮着,要你亲手清。看这一屏:先收一包数据,接收完成灯亮;再按一下释放,灯才灭。不清它,下一包就进不来。

2/6

★ 换了串口,标志位也换

0:31

同一条指令,串口一换,标志位就换地方

  • 手册自己就这么提醒以串口 2 为例,用别的口请看附录
  • 指令一字没改,灯换了串口改了,要看的标志位就挪地方
  • 串口 0 → SM143底址 140 加 0,再加 3
  • 串口 3 → SM173底址 140 加 30,再加 3
发出去成没成:通讯标志位与出错码 · ★ 换了串口,标志位也换 梯形图 串口0落SM143,串口3落SM173

串口0落SM143,串口3落SM173

标志位是按串口分的,这点最容易栽。手册自己都写着:以串口二为例,相应的通讯标志位是串口二的,要用别的串口请参考附录。意思就是,同一条指令,串口改了,你要看的那盏灯也换地方了。看这一屏:两条一模一样的接收指令,一条走串口零,一条走串口三。串口零的接收完成落在 SM143,串口三的落在 SM173,两盏灯各归各的槽。

3/6

结果寄存器:0 就是成了

0:30

灯看有无,数看结果:0 就是正确

  • 灯看有无,数看结果结果寄存器跟标志位一一对应
  • 零就是没错加零 = Modbus 执行结果,0 = 正确
  • 读回 756,SD160 = 0数据回来了,结果码也是零
  • 判断通没通就看它程序里比一下是不是零
发出去成没成:通讯标志位与出错码 · 结果寄存器:0 就是成了 梯形图 D20 = 756,SD160 = 0 就是成了

D20 = 756,SD160 = 0 就是成了

灯只能告诉你有没有,具体什么结果要看寄存器。每个串口都有一组结果寄存器,跟标志位一一对应,加零那一格就是 Modbus 指令的执行结果。这里的规矩很简单:零就是正确,没错。看这一屏,从一号设备读三个寄存器回来,读数条上 D20 出来七百五十六;再看结果寄存器,SD160 是零。这一趟就是成了。以后程序里判断通没通,就看它是不是零。

4/6

★ 对面没接线怎么办:101 和异常从站号

0:31

对面没接线:101 超时,还说清是哪一台

  • 最常遇到的:对面没接上线没接、设备没上电,都算
  • 接收超时给 101读不到就是读不到,别当成读到零
  • ★ 还说清是哪一台异常从站号那一格直接出站号
  • 另两种:182 和 402站号 > 254 报 182;个数给多了报 402
发出去成没成:通讯标志位与出错码 · ★ 对面没接线怎么办:101 和异常从站号 梯形图 站号6没接线:SD160跳101,SD165出6

站号6没接线:SD160跳101,SD165出6

最常遇到的故障,是对面那台设备根本没接上。这种情况下接收会超时,结果寄存器给一百零一,另一格还会告诉你是哪一号设备没理你。看这一屏,第一条读一号设备,数据回来了;第二条改读六号,六号不在线上,数据没搬回来,结果寄存器跳一百零一,异常从站号出六。另外两种错也要认:站号超过二百五十四报一百八十二,个数要多了报四百零二。

5/6

收到了几个字节:SD144

0:31

这一包收进来几个字节:SD144

  • 一包收进来几个字节自由格式必看的第三个量
  • 按字节算,不含首尾符起始符、终止符都不算
  • 发 4 个字节 → 那格出 4两个寄存器正好四个字节
  • 知道长度才切得开程序靠它判断一包到哪儿为止
发出去成没成:通讯标志位与出错码 · 收到了几个字节:SD144 梯形图 发 1111 出去、收回来,字节数出 4

发 1111 出去、收回来,字节数出 4

自由格式那头,还有个数是必须知道的:这一包到底收进来几个字节。手册讲得很清楚,这个数按字节算,不包含起始符和终止符,它就放在接收完成标志后面那一格。看这一屏,先把 D50 里的 1111 发出去,四个字节,正好两个寄存器;再收回来,接收字节数那格出四。知道收了几个字节,程序才知道这一包数据到哪儿为止,下一包才好接着切。

6/6

预告:不会 Modbus 的设备怎么聊

0:22

不会 Modbus 的设备,下一课用自由格式

  • Modbus 这条线走通了认口、对地址、看标志位,齐了
  • 还有设备不认 Modbus只肯按厂家自己的格式收发
  • 这就得用自由格式自己拼报文、自己管收发
  • 下一课讲怎么跟它说不会说 Modbus 的设备怎么聊

不会 Modbus 的设备,下一课用自由格式聊

到这里,Modbus 这条线基本走通了:认了口、对了地址、会看标志位和结果码。可现场还有一类设备,它不支持 Modbus,只肯按厂家自己的格式收发一串数。这时候就得用自由格式,自己拼报文、自己管收发。下一课我们就讲这个:不会讲 Modbus 的设备,怎么跟它说上话。

想亲手试一下?

这门课的电路,已经给你摆好了。不用装软件,点开就能按按钮、看线圈亮。