ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AM521 PLC与LZ-801T称重仪表Modbus RTU通信实战指南

AM521 PLC与LZ-801T称重仪表Modbus RTU通信实战指南 在工业自动化项目中经常需要将不同厂商的设备进行数据互通。最近在做一个数据采集项目时就遇到了一个典型场景需要将AM521系列PLC的数据通过Modbus RTU (RS485)协议稳定地读取到力准LZ-801T型号的称重仪表中或者反之将称重仪表的数据写入PLC。网上关于具体型号对接的完整教程很少资料零散。本文将基于实战经验系统梳理从硬件接线、协议理解、参数配置到代码实现的完整闭环方案手把手教你实现AM521与LZ-801T的Modbus 485通信。无论你是自动化工程师、嵌入式开发者还是物联网项目实施人员都能从中获得可直接复用的配置方法和避坑指南。1. 背景与核心概念在深入实操之前我们有必要厘清几个关键概念这有助于理解整个通信过程的底层逻辑。1.1 什么是 Modbus RTU over RS-485Modbus是一种广泛应用于工业电子设备之间通信的应用层消息协议。它定义了设备间如何询问、应答以及数据如何打包。而RS-485是一种物理层的电气标准规定了硬件接口的电压、电流等电气特性具有抗噪声能力强、传输距离远可达1200米、支持多点通信一主多从的特点。Modbus RTU是 Modbus 协议在串行链路上的一种编码方式使用二进制表示数据通信效率高。当我们将 Modbus RTU 协议运行在 RS-485 硬件接口上时就构成了工业现场最常见的通信方式之一Modbus RTU over RS-485。在这种模式下通常有一个设备作为主站Master发起请求其他设备作为从站Slave进行响应。1.2 设备角色介绍在本项目的场景中我们需要明确两个设备的角色AM521 PLC通常作为数据采集和控制的核心。在本例中我们将其配置为Modbus 主站负责主动向称重仪表发起数据读取或写入请求。力准 LZ-801T 称重仪表作为重量数据的提供者。它需要被配置为Modbus 从站并设定一个唯一的从站地址等待主站的查询并返回数据。当然角色可以互换具体取决于业务逻辑。本文以最常见的“PLC主站读仪表从站”为例进行讲解。1.3 通信参数必须一致的“语言规则”要让两个设备成功对话它们必须使用相同的“语言规则”即以下通信参数必须完全匹配波特率数据传输的速度如 9600, 19200, 38400, 115200 等。数据位通常为 8 位。停止位通常为 1 位或 2 位。校验位用于检错可以是无校验None、奇校验Odd或偶校验Even。这些参数必须在主站设备AM521的编程软件和从站设备LZ-801T仪表菜单中分别进行配置且设置值必须相同。2. 环境准备与版本说明在开始软件配置和编程前请确保你已准备好以下硬件和软件环境。2.1 硬件清单与连接AM521 PLC 一台确保其带有 RS-485 通信端口通常是 A、B 或 、- 标识的端子。力准 LZ-801T 称重仪表一台确认其背面或侧面有 RS-485 接口通常标记为 485、485- 或 D、D-。双绞屏蔽线用于连接 485 端口。强烈建议使用带屏蔽层的双绞线以提高抗干扰能力。USB 转 RS-485 转换器用于调试和配置仪表连接电脑和仪表。PLC 编程电缆用于连接电脑和 AM521 PLC 进行编程。接线方法关键步骤将 AM521 的 RS-485A端子与 LZ-801T 的485(或 D) 端子相连。将 AM521 的 RS-485B-端子与 LZ-801T 的485-(或 D-) 端子相连。务必将双绞线的屏蔽层在 PLC 或仪表一端进行单点接地以消除共模干扰。如果总线上只有这一主一从两个设备通常不需要接终端电阻。如果通信距离很长如超过500米或不稳定可在总线两端的设备上在 A 和 B- 之间并联一个 120Ω 的终端电阻。2.2 软件准备AM521 编程软件汇川技术的InoProShop基于 Codesys。请从汇川官网下载与你的 PLC 固件版本匹配的软件版本。本文示例基于 InoProShop V1.7.x。力准 LZ-801T 调试软件/手册通常力准会提供 Modbus 测试软件如 Modbus Poll 的定制版或详细的通讯协议手册PDF。这是查找仪表 Modbus 地址映射表的关键请务必找到并打开它。通用 Modbus 调试助手如 Modbus Poll、ModScan 或开源的 QModMaster。用于在连接电脑时单独测试仪表的通信是否正常这是一个非常重要的排查工具。3. 核心原理与协议地址拆解成功通信的关键在于主站能准确地向从站“提问”。这需要理解 Modbus 功能码和地址映射。3.1 Modbus 功能码简介对于 LZ-801T 这类仪表最常用的功能码是0x03读保持寄存器。用于读取重量、速度等存储在仪表“保持寄存器”中的数据。这是最常用的读操作。0x06写单个寄存器。用于向仪表写入一个数据如置零、去皮等控制命令。0x10写多个寄存器。用于批量写入参数。3.2 解析 LZ-801T 的 Modbus 地址映射表这是整个项目的核心。你需要从仪表的通讯手册中找到类似下表的地址映射信息以下地址为常见示例请务必以你的实际手册为准数据项Modbus 寄存器地址十进制功能码数据类型说明当前净重00000x0332位有符号整数单位通常为分度值需换算当前毛重00020x0332位有符号整数皮重00040x0332位有符号整数置零命令00060x0616位整数写入特定值如1执行置零去皮命令00070x0616位整数写入特定值如1执行去皮重要概念地址偏移请注意Modbus 协议地址通常从 1 开始编号而许多编程软件和协议手册使用从 0 开始的“偏移地址”。在 InoProShop 等软件中配置时通常需要填写的是“寄存器地址”即上表中的0000、0002。一定要确认你使用的软件使用的是哪种寻址方式。数据类型解析 “当前净重”占用两个寄存器0000和0001因为它是一个32位整数。在 Modbus 中32位数据涉及字节顺序问题常见的有ABCD高字在前高字节在前和CDAB低字在前高字节在前等。LZ-801T 通常使用ABCD顺序但这必须在手册中确认。如果顺序不对读上来的数据将是错误的。4. 完整实战案例AM521 读取 LZ-801T 重量现在我们进入实操环节在 InoProShop 中配置 AM521 作为主站读取重量。4.1 创建新工程与设备组态打开 InoProShop新建一个项目。在“设备”树中添加你的 AM521 PLC 设备。在 PLC 设备下找到并添加通信模块。对于 AM521 本体的 RS-485 口通常是“串行接口”或“COM口”。将其拖入设备树。双击该串口模块进行硬件参数配置。设置与 LZ-801T完全一致的波特率、数据位、停止位和校验位。例如波特率 9600数据位 8停止位 1偶校验。4.2 安装与配置 Modbus 主站功能块汇川 PLC 通常使用MobusRtuMaster或MC_Power/MC_ReadHoldingRegisters等功能块。这里以经典的MobusRtuMaster库为例。在“库管理器”中添加MobusRtuMaster库如果尚未添加。在 PLC_PRG 或新建的功能块中声明主站实例和辅助变量。// 在全局变量或局部变量中声明 PROGRAM PLC_PRG VAR // Modbus RTU 主站实例 mbMaster_1 : MB_MASTER; // 主站配置参数 mbConfig : MB_MASTER_CONFIG : (portName:COM1, baudRate:9600, dataBits:8, stopBits:1, parity:MB_PARITY_EVEN, timeout:T#1S); // 通信控制 xEnable : BOOL; // 主站使能 xReadWeight : BOOL; // 触发读取重量 // 读取结果 aWeightBuffer : ARRAY[0..1] OF WORD; // 用于存放2个寄存器32位 diActualWeight : DINT; // 转换后的实际重量值单位根据分度值定 // 状态与错误 bBusy : BOOL; bError : BOOL; iErrorID : INT; END_VAR4.3 编写主站通信逻辑在程序主体中编写调用逻辑。// 1. 初始化并启用主站 mbMaster_1( EN : xEnable, CONFIG : mbConfig, BUSY bBusy, ERROR bError, ERROR_ID iErrorID ); // 2. 触发读取保持寄存器功能码03 IF xReadWeight AND NOT bBusy AND NOT bError THEN // 读取从站地址1的寄存器0000开始的两个寄存器净重 mbMaster_1.ReadHoldingRegisters( slaveAddress : 1, // LZ-801T的从站地址 startingAddress : 0, // 寄存器起始地址0000 quantity : 2, // 读取数量2个寄存器32位 pDestination : ADR(aWeightBuffer), // 数据存放缓冲区 timeout : T#500MS ); xReadWeight : FALSE; // 复位触发信号 END_IF // 3. 处理读取到的数据 IF mbMaster_1.DONE THEN // 将两个WORD合并为一个DINT注意字节序 // 假设仪表字节序为 ABCD (Big-Endian) diActualWeight : SHL(TO_DINT(aWeightBuffer[0]), 16) OR TO_DINT(aWeightBuffer[1]); // 如果仪表字节序为 CDAB则需要交换顺序 // diActualWeight : SHL(TO_DINT(aWeightBuffer[1]), 16) OR TO_DINT(aWeightBuffer[0]); // 重量换算假设仪表分度值为0.1kg则实际重量 diActualWeight * 0.1 // realWeight : TO_REAL(diActualWeight) * 0.1; END_IF // 4. 错误处理 IF bError THEN // 记录错误代码 iErrorID可根据手册排查 // 例如超时、校验错误、从站无响应等 END_IF4.4 配置从站地址与触发在 LZ-801T 仪表的菜单中找到通讯设置如Addr将其从站地址设置为1与程序中的slaveAddress对应。在仪表菜单中设置与 PLC 完全一致的波特率、数据位、停止位和校验位。在 PLC 程序中置位xEnable为 TRUE 使能主站。通过一个按钮或定时器触发xReadWeight为 TRUE即可执行一次读操作。4.5 运行与监控将程序编译下载到 AM521 PLC。使用 InoProShop 的“在线”和“监控”功能观察aWeightBuffer和diActualWeight变量的值。在 LZ-801T 仪表上放置已知重量的砝码查看 PLC 监控到的数值是否正确。如果数值不正确首先检查字节序假设是否正确调整程序中合并数据的顺序。5. 常见问题与排查思路即使按照步骤操作也可能遇到通信失败的问题。下面是一个系统的排查清单。问题现象可能原因排查步骤与解决方案PLC 报超时错误1. 物理线路不通。2. 主从站地址不一致。3. 通信参数不匹配。4. 从站设备故障或无响应。1.查线用万用表测 485 与 485- 间电压在静态时应有一个稳定的差分电压通信时应有跳变。2.对地址确认 PLC 程序中的slaveAddress与仪表设置的地址完全相同。3.对参数逐字核对波特率、数据位、停止位、校验位。4.单独测试从站使用 USB-485 转换器和 Modbus 调试软件连接仪表测试其是否能正常响应。通信数据为0或固定值1. 读取的寄存器地址错误。2. 数据类型或字节序理解错误。3. 仪表工作模式或数据未更新。1.核对地址表确认你读取的寄存器地址如0000对应的是“当前净重”而非其他状态值。2.测试单寄存器先尝试读取一个16位的状态寄存器确认基础通信正常。3.检查字节序这是最常见的问题。尝试交换aWeightBuffer[0]和aWeightBuffer[1]的顺序进行解析。数据波动大或跳变1. 通信干扰。2. 接地不良。3. 终端电阻缺失长距离时。1.检查屏蔽层确保屏蔽线可靠单点接地。2.远离干扰源使 485 线路远离变频器、电机、大功率电源线。3.增加终端电阻在总线两端的设备上并联 120Ω 电阻。能读不能写1. 使用了错误的功能码或地址。2. 仪表处于锁定状态或写保护开启。1.确认写命令地址查看手册中“置零命令”对应的寄存器地址和写入值通常是写1。2.检查仪表菜单确认仪表是否允许通过通讯进行控制如Ctrl菜单项是否开启。6. 最佳实践与工程建议在工业现场稳定应用除了连通更要考虑可靠性和可维护性。通信参数标准化在一个项目中所有 Modbus 设备应使用统一的波特率、数据位、停止位和校验位。通常9600, 8, 1, Even是兼容性最好的选择。增加通信看门狗在 PLC 程序中不要只依赖一次读取。应建立周期读取逻辑并添加通信超时计数。如果连续多次读取失败应触发报警并将重量值置为安全值如0或上一次有效值。数据校验与滤波对读取到的重量值进行软件滤波例如采用滑动平均滤波以消除偶然的跳动。对于32位数据读取完成后可以计算一个简单的校验和如将两个寄存器的值相加与预期进行比对。结构化程序将 Modbus 通信功能封装成独立的函数块FB。将设备地址、寄存器映射、字节序、缩放系数等作为该 FB 的输入参数。这样同一个程序块可以复用于多个同型号的仪表只需修改参数即可。详细的注释与文档在程序中对每一个 Modbus 地址进行详细注释写明对应的物理量、单位、换算公式。将 LZ-801T 的通讯协议手册作为项目文档的一部分存档。上电初始化与错误恢复PLC 上电后应先发送一个简单的读取命令如读一个状态字来检测从站是否在线。在通信错误恢复后应有重新初始化的流程。安全操作对于“置零”、“去皮”等写操作在程序中增加权限判断或二次确认逻辑防止误触发。可以通过 HMI 按钮配合确认对话框来实现。通过以上步骤你应该能够建立起 AM521 PLC 与力准 LZ-801T 称重仪表之间稳定可靠的 Modbus RTU 通信。核心在于仔细阅读仪表手册、正确理解地址映射和数据类型、耐心进行硬件接线和参数配置并利用调试工具分层排查问题。这套方法不仅适用于此特定型号也适用于绝大多数基于 Modbus RTU 的工业设备互联是工业自动化工程师必备的核心技能之一。
返回列表