第五课 · PLC 自动轮询读取称重数据

2026-11-04
  • 2

第五课 · PLC 自动轮询读取称重数据

用串口助手读数据,人得坐在电脑前点"发送"。产线上不可能每台秤配一个人——这一课把读取工作交给 PLC:接线、写程序、处理 32 位重量,最后一套程序轮询几十台设备。

>

主角是三菱 FX3U,同时会告诉你西门子用户为什么"天生没这个坑"。

1. 硬件连接:两根线搞定

PLC 自带 RS485 通讯口(FX3U 用 485-BD 扩展板),和变送器之间只需要两根线:

PLC 接线

  • PLC 的 A → 变送器的 A

  • PLC 的 B → 变送器的 B

多台变送器时全部并联在同一对 A/B 线上,靠站号区分,总线两端各加一个 120Ω 终端电阻。


2. 主站指令:ADPRW 五个参数

三菱 FX3U 的 Modbus 主站指令是 ADPRW,PLC 自动组帧、自动算 CRC、自动收发,你只管填参数:

ADPRW 指令

ADPRW  K1  H03  K0  K3  D100
       │   │    │   │   └─ 存放应答数据的起始寄存器
       │   │    │   └─ 读取数量:3 个寄存器
       │   │    └─ 起始地址:0
       │   └─ 功能码:03 读保持寄存器
       └─ 站号:1

和第四课手工敲的报文对照一下:K1 就是报文里的 01,H03 就是 03,K0 K3 就是 00 00 00 03,CRC 连影子都不用见——PLC 全包了。

通讯一接通,应答数据自动落到 D100 开始的寄存器里:

寄存器内容
D100重量高 16 位
D101重量低 16 位
D102精度

3. 工控界著名的大坑:字序

数据进来了,先别急着用——坑来了。

高低字大坑

变送器发 32 位重量是高字在前(先发 00 03 再发 E6 70),而三菱 PLC 的 32 位寄存器规则是低字在前(D100 是低 16 位,D101 是高 16 位)。两边理解正好相反,PLC 把 E6 70 00 03 当成一个数来读:

直接读:0xE6700003 → 一个天价数字(动画演示里是三万八千多吨)
正确值:0x0003E670 = 255600 → 2556.00 kg

重量直接变成一个天价数字。这个坑坑过几乎所有初学者。


4. 两种解法

方法一:改变送器的字序。 查 SJ101CX 手册,把参数地址 40029 写 1,让变送器改成低字在前,两边就一致了——但每台设备都要改一次。

方法二:PLC 里交换。 用字交换指令 XCH,把 D100 和 D101 的内容对调:

XCH 交换

M8029 ──→ XCH  D100  D101

注意用 M8029(ADPRW 执行完成标志)来触发——它只在通讯完成时导通一个扫描周期。千万别用 M8000(常 ON)去驱动:那每个扫描周期都换一次,数据来回跳。

交换完,D100·D101 按 32 位有符号数解读就是正确的 255600,除以 100(精度 2)得到 2556.00 kg。程序里用 DMOV 按 32 位搬运、按有符号处理,负重量(补码)也能自动得出正确值;要参与浮点运算再用 DFLT 转成实数。


5. 换个品牌:坑可能不存在

这个坑的根源是字序不统一,所以选型时看一眼手册就能避开:

品牌对比

品牌32 位字序处理
三菱 FX / 信捷低字在前需要 XCH 交换
汇川 / 台达与三菱类似同上
西门子 S7-1200 / 1500高字在前(大端)不用换,直接读

西门子是大端序,和 Modbus 报文天然一致。S7-1200 用 MB_MASTER 指令读回来,DB 块里把变量直接声明成 DWord / DInt,监视值就是 16#0003E670,一步到位:

西门子 DB 直读

西门子唯一的坑:DATA_PTR 用指针指向 DB 时,DB 必须取消"优化的块访问",否则指针寻址不到。仪表如果配置成发 IEEE754 浮点,那就直接选 Real 类型。

6. 多台设备:主从轮询

一台搞定了,产线上十台、三十台称重设备怎么读?答案是 Modbus 的核心机制——主从轮询。

轮询机制

规则很简单:

  1. PLC(主站)先问 1 号站;

  2. 1 号站应答完毕,再把站号改成 2,问 2 号站;

  3. 依次问到最后一个站,回到 1 号,开始下一轮。

同一时刻总线上只允许一问一答,这是 RS485 半双工的物理限制。

程序实现只需要三段逻辑:

  • 站号自增:M8029(通讯完成)触发 INC D300,把站号寄存器加 1;注意站号要用独立寄存器(如 D300),别和重量数据共用地址。

  • 循环:站号超过最大值(比如 30)就 MOV K1 D300,开始下一轮。

  • 超时跳站:

超时处理

3 号站断电了怎么办?不能让整个总线卡死。给每次询问设一个超时定时器(比如 OUT T0 K50,500ms),超时还没应答就把站号加 1 跳过去继续问下一台;一旦通讯正常完成(M8029),就复位定时器。

这样某台设备掉线,最多损失 500ms,总线照常运转。


7. 数据去哪:HMI 与云端

所有站的数据都回到 PLC 后:

  • 接触摸屏(HMI),现场实时看每台秤的读数;

  • 连MES / SCADA,进车间管理系统;

  • 通过物联网网关上云,老板在北京也能看——这就引出下一课的 Modbus TCP 和第七课的 MQTT。


8. 本课小结

要点内容
主站指令FX3U 用 ADPRW,五参数:站号 / 功能码 / 起始地址 / 数量 / 存储首址
寄存器映射D100=重量高字、D101=重量低字、D102=精度
字序坑变送器高字在前,三菱低字在前 → XCH 交换;西门子大端不用换
完成标志M8029 只导通一个扫描周期,驱动 XCH / INC / 复位定时器
轮询三件套站号自增 + 循环回 1 + 超时跳站(500ms)
数据流向PLC → HMI / SCADA / 云端
微信二维码

扫码添加微信