用串口助手读数据,人得坐在电脑前点"发送"。产线上不可能每台秤配一个人——这一课把读取工作交给 PLC:接线、写程序、处理 32 位重量,最后一套程序轮询几十台设备。
>
主角是三菱 FX3U,同时会告诉你西门子用户为什么"天生没这个坑"。
PLC 自带 RS485 通讯口(FX3U 用 485-BD 扩展板),和变送器之间只需要两根线:

PLC 的 A → 变送器的 A
PLC 的 B → 变送器的 B
多台变送器时全部并联在同一对 A/B 线上,靠站号区分,总线两端各加一个 120Ω 终端电阻。
三菱 FX3U 的 Modbus 主站指令是 ADPRW,PLC 自动组帧、自动算 CRC、自动收发,你只管填参数:

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 | 精度 |
数据进来了,先别急着用——坑来了。

变送器发 32 位重量是高字在前(先发 00 03 再发 E6 70),而三菱 PLC 的 32 位寄存器规则是低字在前(D100 是低 16 位,D101 是高 16 位)。两边理解正好相反,PLC 把 E6 70 00 03 当成一个数来读:
直接读:0xE6700003 → 一个天价数字(动画演示里是三万八千多吨) 正确值:0x0003E670 = 255600 → 2556.00 kg
重量直接变成一个天价数字。这个坑坑过几乎所有初学者。
方法一:改变送器的字序。 查 SJ101CX 手册,把参数地址 40029 写 1,让变送器改成低字在前,两边就一致了——但每台设备都要改一次。
方法二:PLC 里交换。 用字交换指令 XCH,把 D100 和 D101 的内容对调:

M8029 ──→ XCH D100 D101
注意用 M8029(ADPRW 执行完成标志)来触发——它只在通讯完成时导通一个扫描周期。千万别用 M8000(常 ON)去驱动:那每个扫描周期都换一次,数据来回跳。
交换完,D100·D101 按 32 位有符号数解读就是正确的 255600,除以 100(精度 2)得到 2556.00 kg。程序里用 DMOV 按 32 位搬运、按有符号处理,负重量(补码)也能自动得出正确值;要参与浮点运算再用 DFLT 转成实数。
这个坑的根源是字序不统一,所以选型时看一眼手册就能避开:

| 品牌 | 32 位字序 | 处理 |
|---|---|---|
| 三菱 FX / 信捷 | 低字在前 | 需要 XCH 交换 |
| 汇川 / 台达 | 与三菱类似 | 同上 |
| 西门子 S7-1200 / 1500 | 高字在前(大端) | 不用换,直接读 |
西门子是大端序,和 Modbus 报文天然一致。S7-1200 用 MB_MASTER 指令读回来,DB 块里把变量直接声明成 DWord / DInt,监视值就是 16#0003E670,一步到位:

西门子唯一的坑:DATA_PTR 用指针指向 DB 时,DB 必须取消"优化的块访问",否则指针寻址不到。仪表如果配置成发 IEEE754 浮点,那就直接选 Real 类型。
一台搞定了,产线上十台、三十台称重设备怎么读?答案是 Modbus 的核心机制——主从轮询。

规则很简单:
PLC(主站)先问 1 号站;
1 号站应答完毕,再把站号改成 2,问 2 号站;
依次问到最后一个站,回到 1 号,开始下一轮。
同一时刻总线上只允许一问一答,这是 RS485 半双工的物理限制。
程序实现只需要三段逻辑:
站号自增:M8029(通讯完成)触发 INC D300,把站号寄存器加 1;注意站号要用独立寄存器(如 D300),别和重量数据共用地址。
循环:站号超过最大值(比如 30)就 MOV K1 D300,开始下一轮。
超时跳站:

3 号站断电了怎么办?不能让整个总线卡死。给每次询问设一个超时定时器(比如 OUT T0 K50,500ms),超时还没应答就把站号加 1 跳过去继续问下一台;一旦通讯正常完成(M8029),就复位定时器。
这样某台设备掉线,最多损失 500ms,总线照常运转。
所有站的数据都回到 PLC 后:
接触摸屏(HMI),现场实时看每台秤的读数;
连MES / SCADA,进车间管理系统;
通过物联网网关上云,老板在北京也能看——这就引出下一课的 Modbus TCP 和第七课的 MQTT。
| 要点 | 内容 |
|---|---|
| 主站指令 | FX3U 用 ADPRW,五参数:站号 / 功能码 / 起始地址 / 数量 / 存储首址 |
| 寄存器映射 | D100=重量高字、D101=重量低字、D102=精度 |
| 字序坑 | 变送器高字在前,三菱低字在前 → XCH 交换;西门子大端不用换 |
| 完成标志 | M8029 只导通一个扫描周期,驱动 XCH / INC / 复位定时器 |
| 轮询三件套 | 站号自增 + 循环回 1 + 超时跳站(500ms) |
| 数据流向 | PLC → HMI / SCADA / 云端 |