三菱 FX5U 与欧姆龙温控表(如 E5CC、E5EC 系列)的无协议通信,核心是通过 FX5U 的串行通信端口(RS485/RS232) ,按欧姆龙温控表的 “无协议数据格式” 收发指令(如读取温度、设置目标值),无需依赖标准协议(如 Modbus),但需严格匹配双方的数据帧结构、波特率、校验位等参数。以下是分步骤实现方案,从硬件接线到软件编程全覆盖:
一、前期准备:明确核心参数与硬件接线
1. 确认双方通信参数(必须完全一致)
无协议通信的关键是 “参数匹配”,需先确定 FX5U 与温控表的通信参数,建议默认配置如下(可根据需求调整,但双方必须统一):
| 参数类型 | 配置值 | 说明 |
|---|---|---|
| 通信端口 | FX5U 的 RS485 端口(推荐) | 需 FX5U 本体带 RS485(如 FX5U-32MR/ES)或扩展 FX5-485-BD 模块,抗干扰强、传输远 |
| 波特率 | 9600bps | 可选 19200bps,优先 9600bps 兼容性更好 |
| 数据位 / 停止位 | 8 位数据位,1 位停止位 | 欧姆龙温控表默认无协议格式的固定配置 |
| 校验位 | 无校验 | 避免校验位不匹配导致数据丢弃 |
| 通信方向 | 全双工(FX5U 主动收发) | FX5U 作为主站,主动向温控表发送指令、接收响应 |
2. 硬件接线(以 RS485 为例,最常用)
欧姆龙温控表(如 E5CC)的 RS485 端口与 FX5U 的 RS485 端口需 “同极性连接”,具体端子定义如下:
| 设备 | 端子标识 | 功能 | 接线对应关系 |
|---|---|---|---|
| FX5U(本体 / 模块) | TXD+(A) | RS485 发送 / 接收正极 | 接欧姆龙温控表的 “+” |
| TXD-(B) | RS485 发送 / 接收负极 | 接欧姆龙温控表的 “-” | |
| GND(可选) | 接地(抗干扰) | 接欧姆龙温控表的 “GND” | |
| 欧姆龙温控表 | +(端子 12) | RS485 正极 | 接 FX5U 的 A 端 |
| -(端子 13) | RS485 负极 | 接 FX5U 的 B 端 | |
| GND(端子 14) | 接地 | 接 FX5U 的 GND(可选) |
注意:
二、第一步:配置欧姆龙温控表的无协议参数
需通过温控表的面板操作,将其通信模式设为 “无协议”,并匹配 FX5U 的通信参数,以欧姆龙 E5CC 为例(其他型号操作逻辑一致):
关键提醒:记录温控表的 “设备地址”(无协议模式下,部分型号默认地址为 “0” 或 “1”,若多台组网需设置不同地址,如温控表 1=1、温控表 2=2,通过参数 “C00” 设置)。
三、第二步:配置 FX5U 的通信端口参数
需在 GX Works3 中配置 FX5U 的 RS485 端口参数,确保与温控表一致,步骤如下:
四、第三步:编写无协议通信程序(GX Works3)
FX5U 通过 “无协议通信指令”(如RS指令、FROM/TO指令,优先用RS指令,更灵活)实现与温控表的 “指令发送” 和 “响应接收”。核心是按欧姆龙温控表的无协议数据帧格式组织发送指令,再解析接收的响应数据。
1. 明确欧姆龙温控表的无协议数据帧格式
欧姆龙无协议通信采用 “ASCII 码格式”,指令帧由 “起始符、地址、指令码、数据、校验和、结束符” 组成,常用指令(读取当前温度、设置目标温度)的帧格式如下:
| 指令类型 | 发送帧格式(ASCII 码) | 说明 | 响应帧格式(ASCII 码) |
|---|---|---|---|
| 读取当前温度 | @ + 地址 + R + 0 + 0 + 0 + 校验和 + * + CR | 例:读取地址 1 的当前温度,帧为@1R00003*CR | @ + 地址 + 0 + 0 + 温度值(4位) + 校验和 + * + CR |
| 设置目标温度 | @ + 地址 + W + 0 + 0 + 目标值(4位) + 校验和 + * + CR | 例:设置地址 1 的目标温度为 25℃,帧为@1W0025C*CR | @ + 地址 + 0 + 0 + 0 + 0 + 校验和 + * + CR(成功) |
帧格式详解:
校验和计算示例(以 “读取地址 1 的当前温度” 为例):
2. FX5U 程序编写(用RS指令实现)
RS指令(无协议通信指令)的功能是 “从指定缓冲区发送数据” 和 “将接收数据存入缓冲区”,需配合 “发送缓冲区”“接收缓冲区”“控制位” 实现完整通信流程,程序逻辑如下:
(1)定义寄存器分配(便于管理)
在 GX Works3 的 “软元件注释” 中定义以下寄存器,明确功能:
| 软元件 | 地址 | 功能描述 |
|---|---|---|
| 发送缓冲区 | D100~D105 | 存储发送给温控表的无协议帧(每 D 寄存器存 2 个 ASCII 码) |
| 接收缓冲区 | D200~D205 | 存储温控表返回的响应帧 |
| 控制位 | M0 | 发送触发(M0=1 时,RS指令发送数据) |
| 状态位 | M1 | 发送完成(RS指令发送成功后 M1=1) |
| 状态位 | M2 | 接收完成(RS指令接收成功后 M2=1) |
| 温度存储 | D300 | 存储解析后的当前温度值(十进制,单位℃) |
(2)编写RS指令程序(梯形图)
ladder
// 1. 发送触发:M0=1时,将发送帧写入D100~D105,触发RS指令发送 LD M0 MOV K40161 D100 // D100:高8位=0x40(@),低8位=0x31(1) → 对应ASCII码“@1” MOV K52480 D101 // D101:高8位=0x52(R),低8位=0x30(0) → 对应ASCII码“R0” MOV K48480 D102 // D102:高8位=0x30(0),低8位=0x30(0) → 对应ASCII码“00” MOV K48515 D103 // D103:高8位=0x30(0),低8位=0x33(3) → 对应ASCII码“03”(校验和,需按实际计算调整) MOV K4242 D104 // D104:高8位=0x2A(*),低8位=0x0D(CR) → 对应ASCII码“*CR” RST M0 // 发送后复位M0,避免重复发送 // 2. RS指令:无协议通信,发送缓冲区D100,接收缓冲区D200,长度6字节(发送6字节,接收6字节) RS K100 K200 K6 Y0 M1 M2 // K100=发送缓冲区起始D100,K200=接收缓冲区起始D200,K6=数据长度,Y0=端口选择(根据实际端口调整),M1=发送完成,M2=接收完成 // 3. 接收解析:M2=1时,解析D200~D205中的响应帧,提取温度值存入D300 LD M2 // 假设响应帧为“@100255*CR”(当前温度25.5℃,4位数据“255”→25.5℃),提取D202的低8位(5)、D203的高8位(2)、低8位(5) MOV D202 K300 // D202:假设存“02”(ASCII码“0”“2”),取低8位“2”→K300=2 MOV D203 K301 // D203:存“55”(ASCII码“5”“5”),取高8位“5”→K301=5,低8位“5”→K302=5 MUL K100 K300 D300 // 2*100=200 MUL K10 K301 D301 // 5*10=50 ADD D300 D301 D300 // 200+50=250 ADD D300 K302 D300 // 250+5=255 → D300=255(对应25.5℃,若单位为0.1℃,需除以10) DIV D300 K10 D300 // 255/10=25.5 → 最终温度值存入D300 RST M2 // 解析后复位M2,等待下次接收


