自由协议通讯在工业自动化中常用于与智能仪表、变频器等设备进行数据交互。本文将以汇川H5U系列PLC为例,演示如何通过自由协议与温度仪表通讯读取温度值,以及作为主站读取变频器频率等常见场景。
自由协议读取温度仪表数据
首先,根据自由通讯指令 SerialSR 的参数需求进行数据定义。该指令的详细参数定义如下表所示:

基于上述参数表,我们可以定义对应的数据区,例如使用结构体或一系列变量来映射每个参数:

接下来,新建一个子程序(例如命名为 _Read_temp),插入 SerialSR 指令,并将定义好的数据参数填入对应的接口:

完成配置后,PLC便能按照预设的协议帧格式与温度仪表进行串口通讯,实现数据的读取与写入。
PLC作为Modbus主站读取变频器频率
另一个典型应用是使用PLC作为主站,通过Modbus RTU协议读取变频器的运行频率。
硬件配置:
- 主站:汇川H5U系列PLC
- 从站:汇川或其他支持Modbus RTU的变频器,站地址设置为2
- 通讯参数:9600波特率,无校验,8位数据位,1位停止位(即 9600, N, 8, 1)
编程实现:
使用专用的Modbus主站功能块(例如 MB_Master)进行编程。以下是一个读取保持寄存器(功能码03)的示例:
MB_Master(Execute := M8013, iPort := 0, iAddr := 2, iFuncCode := 03, diDataAddr := 8192, iDataNums := 1, iDataBuf := D200, xDone => M200, xBusy =>, xError => M202, dwErrorID => D202);

指令执行成功后,读取到的原始数据将存放在 D200 中,后续需根据变频器手册进行标度转换,才能得到实际的频率值(如0.01Hz/位)。
PLC作为Modbus从站供HMI读取
我们也可以将H5U PLC配置为Modbus从站,由上位机(如HMI)主动读取数据。
- PLC侧配置:在PLC软件中设置从站地址(例如站号为1)。
- 数据映射:将PLC的内部软元件映射到Modbus协议地址。
- 线圈(Coil)起始地址1映射至
M0,数量16个。
- 保持寄存器(Holding Register)起始地址40001映射至
D100,数量10个。
- HMI侧配置:在HMI的变量表中,根据Modbus地址定义变量。不同品牌的HMI配置方式略有差异,但原理相通。
var_M0 = { addr: "01 000001", type: "bit" }
var_D100 = { addr: "01 400001", type: "word" }
系统变量配置串口参数
除了在设备配置中设置,还可以通过系统变量 _COMSet 在运行时动态修改串口参数(修改后需切换RUN/STOP或重新上电生效):
_COMSet.SetFlag := 1; // 使能参数设置
_COMSet.BaudRate := 19200; // 修改波特率为19200
_COMSet.DataBits := 8; // 数据位8
_COMSet.Parity := 0; // 无校验
_COMSet.StopBits := 1; // 停止位1
// 注意:修改后需切换RUN/STOP或重新上电生效
常见故障与处理方法
-
通讯完全无响应
- 可能原因:接线错误(如RS485的A+/B-接反)、主从站波特率不匹配、从站地址设置错误。
- 检查方法:核对硬件接线;确认主站、从站及所有中继设备的波特率、数据位、停止位、校验位完全一致;使用调试工具确认从站地址。
-
偶发性通讯失败
- 可能原因:电磁干扰、线路未加终端电阻、从站设备响应超时。
- 检查方法:使用双绞屏蔽线,并采用单端接地方式;在总线两端添加120Ω终端电阻(部分PLC端口需软件使能);在程序中适当增加通讯超时时间。
-
数据读写错误
- 可能原因:协议帧格式或功能码错误、校验方式不匹配、数据地址映射错误。
- 检查方法:对照设备手册,仔细核对通讯报文格式;确认奇偶校验设置;检查PLC中的数据映射地址是否正确。
-
指令执行报错
- 处理方法:指令块通常会产生特定的错误代码,查阅对应的PLC编程手册,根据错误代码进行排查。
调试技巧
当手边没有实际的仪表或变频器硬件时,可以利用PC上的串口调试助手(如Modbus Slave模拟软件)来模拟从站设备,辅助完成PLC程序的初步测试和协议帧调试,这能极大提高开发效率。
希望这几个案例能帮助你更好地理解和应用汇川PLC的串口通讯功能。如果在实践中遇到更复杂的问题,欢迎到云栈社区的相关板块与大家交流探讨。