主题
扩展模块
点数不够时,从主机右侧的扩展口往外接扩展模块,扩展来的 X/Y/AI/AO 直接接在主机自带点位的后面,程序里当本机点位一样用,不需要额外配置。
哪些主机有扩展口
| 型号 | 扩展口 |
|---|---|
| LP3222 / LP3223 / LP3206 / LP3220 / LP3221 / LP3232 | 有 |
| LP3215 / LP3288 | 无 |
这里说的是 ESP32 版
STM32 版早期还有一套并口扩展模块(EM_4RTD 温度模块、LoRa 串口模块、总线电源模块等),那一代模块已经停产不再维护。现在在售的只有下面这套 I²C 通讯的模块,本页只写这一套。
在售模块
| 型号代码 | 模块 | 占用点位 |
|---|---|---|
| 32 | EM_8I8O 数字量 | 8 入 8 出 |
| 31 | LP3223_MR(Smart 外壳版) | 16 入 16 出 |
| 22 | EM_8AI2AO 模拟量 | 8 路 AI + 2 路 AO |
串口扩展模块暂不支持
串口扩展模块(型号代码 33)目前接上去只会被识别到、不能通讯。需要多串口请直接选带多串口的主机型号。
接线与寻址规则
模块通过 I²C 总线级联,主机开机时自动逐个扫描、自动分配地址(带 CRC-8 校验),不需要拨码、不需要设地址。
- 开机扫描最多认 7 个槽位
- 扫描遇到空槽即停止,其后即使仍接有模块也不会被识别。模块必须从主机开始连续安装,中间不能留空
- 扩展点位按八进制接在主机点位之后。以 LP3232(本机 1 字节 X、1 字节 Y)为例,第一个 EM_8I8O 的输入是
X010~X017,输出是Y010~Y017 - 模拟量同理,扩展来的 AI/AO 接在本机 AI/AO 通道号之后顺延
上电顺序
扩展模块和主机必须同时上电。主机只在启动时扫描一次并写入地址,运行中插拔的模块不会被识别,也不会自动恢复。更换模块需断电后重新上电。
用 FROM / TO 访问模块缓冲区
普通 I/O 不需要 FROM/TO,直接用 X/Y 就行。只有需要读写模块内部寄存器(BFM)时才用:
FROM K0 K0 D100 K4 ; 读 0 号模块 BFM0 起 4 个字到 D100
TO K0 K0 D200 K2 ; 把 D200 起 2 个字写入 0 号模块 BFM0- 单元号
K0~K6,对应从主机往外数的第 1~7 个模块 - 传输成功置位
M8029,失败复位M8029 - 单元号大于 7、或该位置没有识别到模块,报错 6708
没有扩展口的主机会直接跳过
在 LP3215 / LP3288 这类没有扩展口的型号上,FROM / TO 指令不报错也不执行,会被直接跳过,因此不能靠它报错来判断机型。移植程序前请先确认目标机型有没有扩展口。
EM_8AI2AO 读到的是原始值
8AI2AO 模块每个扫描周期整体读 8 路 AI、整体写 2 路 AO,模块内没有量程标定寄存器。读回来的是 AD 原始值,写出去的是 DA 原始值,工程量换算要在梯形图或 Lua 里自己做(用 MUL/DIV,或 Lua 的浮点运算)。
实用例程
LDP X3
ADD K1 D1 D1
ADD K1 D200 D200
MOV K1 D60
OUT T10 K300
AND T10
MOV K0 D60
LD M10
MOV K0 D200
MOV K0 D1
MOV K0 D30
MOV K0 D10
MOV K0 D20
RST T0
LD M8000
OUT T0 K100
AND T0
DSUB D1 D10 D20
DMUL D20 K105 D30
DMOV D1 D10
RST T0
END把上面的地址、主题、引脚替换成你项目里的即可。