三菱FX系列PLC串口自定义协议开发:对接第三方传感器与嵌入式模块
FX接温湿度、称重、激光测距、自制STM32/ARM模块,不强制走MC或Modbus时可用“无协议RS/NP”自定义帧。PLC当主站按站号轮询,第三方设备按私有帧应答,统一映射到D区;FX3U用RS指令、FX5U用无顺序通信功能块,参数和帧格式两边必须完全一致。
一、串口参数与PLC格式
RS-485接FX3U-485-BD/485ADP,常用9600~19200、8数据位、无校验、1停止位;若用计算机链接再改校验和站号。无协议写D8120,例如8N1/9600可配H0081类值,写后断电重启生效;具体位域按所用通道手册核对,别直接抄论坛常量。 RS-485两线A/B总线型,终端120Ω按距离加,半双工发收互斥。
二、自定义帧与PLC轮询
定义轻量二进制帧:0xAA+站号+功能码+长度+数据+CRC16。PLC用RS发请求,M8122触发发送、M8123收完置位需手动复位、M8129做超时。 ST示意:
// 初始化,仅上电一次
IF M8002 THEN
MOV H0081 D8120; // 无协议格式,按模块重算
MOV K0 D0; // 发送长度
END_IF;
// 500ms轮询下一站
IF T0 THEN
INC D10; AND D10 K0F; // 站号1~15循环
MOV K0AA D100; // 帧头
MOV D10 D101; // 站号
MOV K01 D102; // 功能:读
MOV K02 D103; // 数据长度
CALL CRC16 D100 K4 D104;// 计算CRC存D104~D105
MOV K6 D0; // 发送6字节
SET M8122;
END_IF;
// 接收解析
IF M8123 THEN
CALL ParseRx D200 D1; // 按站号/功能/CRC写D区
RST M8123;
END_IF;
IF M8129 THEN
// 超时:记错误计数,下一周期重发或跳站
INC D20; RST M8129;
END_IF;
CRC16建议查表子程序,第三方向Modbus式校验靠齐;多传感器连续地址可一次读多点,减少RS调用次数。
三、嵌入式模块从站(Python桥接)
STM32/ARM如果用Python做调试网关或协议转换,pyserial按字节状态机收帧,断线重连、超时重发、写回FX映射值:
import serial, crcmod, time
crc16 = crcmod.mkCrcFun(0x18005, rev=True, initCrc=0xFFFF)
ser = serial.Serial('/dev/ttyUSB0', 9600, 8, 'N', 1, timeout=0.2)
def req(station, func, payload=b''):
frame = bytes([0xAA, station, func, len(payload)]) + payload
frame += crc16(frame).to_bytes(2, 'little')
for _ in range(3): # 最多重发3次
ser.write(frame)
end = time.time() + 0.5
buf = b''
while time.time() < end:
buf += ser.read(64)
if len(buf) >= 6 and buf[0]==0xAA and crc16(buf[:-2])==int.from_bytes(buf[-2:],'little'):
return buf
time.sleep(0.1)
return None
while True:
r = req(1, 0x01, b'\x00\x00') # 读传感器
if r:
val = int.from_bytes(r[4:6], 'little') / 10.0
print('station1 value=', val)
time.sleep(1.0)
从站固件别在串口中断里做完整业务,中断只入环形缓冲,主循环做帧头识别、长度、CRC、功能分发;RS-485要控制RE/DE,发前使能、发后切收,避免总线索赔。
四、可靠性落地
点表配置化:站号、功能码、寄存器地址、工程量零点/满度、单位、采集周期全部放参数区,新增传感器不改主逻辑。模拟量做死区、滑动平均,坏CRC/BCC直接丢帧并计通信质量;连续超时进“降级”,只保留关键报警。FX3U多站轮询周期按“帧长/波特率+从站响应+余量”估算,9600下每站几十毫秒较稳,十几个传感器总轮询可控制在1s内。若第三方本身支持Modbus RTU,FX3U-485ADP-MB直接用ADPRW更省事;纯私有协议才用RS自写帧。
调试先用串口助手单站发0xAA+站号+功能,确认应答CRC;再PLC单站通,最后全轮询。线序A/B反接、终端电阻缺失、D8120格式不对是三类高发问题,通电前用纸面参数表逐项核对可省大量现场时间。





