LM3108与仪表485自由口通讯解析与PLC程序示例

需积分: 49 9 下载量 172 浏览量 更新于2024-08-09 收藏 3.44MB PDF 举报
"自由口通讯使用举例-optimal control (3rd edition)." 在本文中,我们将深入探讨自由口通讯(Freeport Communication)的应用,特别是在与LM3108模块的交互中。自由口通讯允许用户自定义串行通信的协议,以适应特定的设备或系统需求。这里以一个检测仪表与LM3108模块之间进行485自由口通讯的实例进行讲解。 首先,我们要了解仪表的协议格式。这是一个18字节的自由协议格式,包含起始符STX(02H)、状态字ABC、重量、皮重、回车以及校验位CKS。状态字A的三位(Bit0、Bit1、Bit2)决定了重量数据的小数点位置,具体如下: - Bit2 Bit1 Bit0 | 小数点位置 - 0 0 0 | XXXX00 (0小数位) - 0 0 1 | XXXXX0 (1小数位) - 0 1 0 | XXXXXX (2小数位) - 0 1 1 | XXXXX.X (3小数位) - 1 0 0 | XXXX.XX (4小数位) - 1 0 1 | XXX.XXX (5小数位) - 1 1 0 | XX.XXXX (6小数位) - 1 1 1 | X.XXXXX (7小数位) LM3108模块需要解析状态字A的这三位,以及后续的重量数值。仪表发送的数值范围在0到10之间,LM3108会将其解析并转换成0到10V的模拟量信号输出。 通讯参数设置为9600波特率(Bps),8位数据位,无校验。这是标准的RS485通信配置。 在编程实现这个通讯过程时,我们使用的是CodeSys编程环境。以下是一段示例程序,展示了如何处理从仪表接收的数据: ```plc PROGRAM PLC_PRG VAR RecFin: BOOL; // 接收完成标志 Set485: Set_COMM2_PRMT; // 设置485通信参数 RecData: ARRAY [1..18] OF BYTE; // 接收数据缓冲区 RightData: ARRAY [1..18] OF BYTE; // 正确格式化数据缓冲区 Set485Sw: BOOL; // 开启485通信标志 Set485Fin: BOOL; // 485通信完成标志 SetRecSw: BOOL; // 接收数据标志 RecM: COMM2_RECEIVE; // 接收任务 StartQ: BOOL; // 启动接收标志 EndQ: BOOL; // 结束接收标志 copyArr: copy_Arr; // 数据复制结构体 L5Dot: BOOL; // 小数点位置标志 L4Dot: BOOL; L3Dot: BOOL; L2Dot: BOOL; L1Dot: BOOL; L0Dot: BOOL; R1Dot: BOOL; R2Dot: BOOL; ResNum: DWORD; // 解析后的数值 AddAllNum: AddNum; // 计算数值 ResNumTemp: DWORD; // 解析过程中临时数值 DIVNUM: DWORD; // 分母 OUTNUMH: WORD AT %MW202; // 输出高位数值 OUTNUML: WORD AT %MW200; // 输出低位数值 END_VAR ``` 在这个程序中,定义了各种变量来处理接收到的数据。例如,`RecData`用于存储原始接收到的18字节数据,`RightData`则用于存储格式化后的数据。`ResNum`用来保存解析出的数值,最后通过`OUTNUMH`和`OUTNUML`寄存器输出到模拟量接口,转换成0~10V的电压信号。 此外,我们注意到这个程序可能是在HOLLiAS-LEC G3小型一体化PLC上运行,使用的编程工具是PowerPro,它提供了丰富的指令与功能块。虽然手册中并未提供具体的编程细节,但可以推断程序会包含解析状态字A的位操作,以及根据状态字计算小数点位置,从而正确解析重量数据。 需要注意的是,实际应用中,由于软件版本更新和应用需求变化,手册提供的信息可能存在误差或不完全一致。因此,开发者应根据具体设备的规格和当前的软件版本进行适配和调试。在使用手册内容时,务必遵循相关法律法规,尊重知识产权,未经授权不得复制或传播。