通讯协议针对L-mag电磁流量计工业应用设计,版本: Lmag-BV1,该版本主要用于实时数据采集、流量测量、流量累计控制及部分参数的修改。
一、主机系统通讯部件要求
1.国际标准RS-485通讯接口部件或国际标准RS-232通讯接口部件,不小于11 Bytes 的通信缓冲区(FIFO),支持1200、2400、4800、9600、19200通讯波特率,支持半双工通讯模式。通讯程序应允许FIFO,从机要求主机FIFO不小于11Bytes。
二、协议结构
Lmag-BV1协议遵从基本开放系统互连(OSI)参考模型,基本开放系统互连参照模型提供通讯系统基本结构和要素,但Lmag-BV1协议使用简化的OSI参照模型,仅采用1、2和7层。
基本开放系统互连参考模型
层号 | 层名 | 功能 | L-magCP V3.4 |
7 | 应用层 | | L-magCP 命令 |
6 | 表示层 | | |
5 | 会话层 | | |
4 | 传输层 | | |
3 | 网络层 | | |
2 | 链路层 | 数据链路连接 | L-mag CP Link |
1 | 物理层 | 设备连接 | RS-485、RS-232 |
三、L-mag BV1物理结构
L-mag电磁流量计的RS-485通讯接口在物理结构上采用电气隔离方式,隔离电压1500伏。通讯数据传输接口为半双工方式,标准通讯速率大于250khz,通讯方向转换时间3.5uS。通讯接口电气标准遵从RS-485国际标准。
Lmag-BV1可用于星型式网络结构和总线式网络结构。标准通讯连接介质为屏蔽双绞线。
四、Modbus协议RTU消息帧定义
数据通讯由主机发起,主机首先发送RTU消息帧,消息帧发送至少要以3.5个字符时间的停顿间��开始(如下图的T1-T2-T3-T4所示)。传输的**个字节是设备地址。可以使用的传输字符是十六进制的0...9,A...F。所有的从设备不断侦测网络总线,包括停顿间隔时间内。当**个地址字节接收到,每个设备都进行解码以判断是否发往自己的。在*后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。
整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在*后的CRC域的值不可能是正确的。主机消息帧定义如下所示:
起始位 | 设备地址 | 功能代码 | 寄存器地址 | 寄存器长度 | CRC校验 | 结束符 |
T1-T2-T3-T4 | 8Bit | 8Bit | 16Bit | 16Bit | 16Bit | T1-T2-T3-T4 |
图3主机 RTU消息帧
从机消息帧定义如下所示:
起始位 | 设备地址 | 功能代码 | 数据 | CRC校验 | 结束符 |
T1-T2-T3-T4 | 8Bit | 8Bit | n个8Bit | 16Bit | T1-T2-T3-T4 |
图4 从机RTU消息帧
五、Modbus协议命令编码定义
Lmag-BV1协议遵从Modbus协议,,但Lmag-BV1协议使用简化的Modbus协议,仅采用03、04和06功能码。
功能码 | 名称 | 作用 |
01 | 读取线圈状态 | 保留 |
02 | 读取输入状态 | 保留 |
03 | 读取保持寄存器 | 保留 |
04 | 读取输入寄存器 | 读电磁流量计实时信息 |
05 | 强置单线圈 | 保留 |
06 | 预置单寄存器 | 保留 |
07 | 读取异常状态 | 保留 |
08 | 回送诊断校验 | 保留 |
09 | 编程(只用于484) | 保留 |
10 | 控询(只用于484) | 保留 |
11 | 读取事件计数 | 保留 |
12 | 读取通信事件记录 | 保留 |
13 | 编程(184/384 484 584) | 保留 |
14 | 探询(184/384 484 584) | 保留 |
15 | 强置多线圈 | 保留 |
16 | 预置多寄存器 | 保留 |
17 | 报告从机标识 | 保留 |
18 | (884和MICRO 84) | 保留 |
19 | 重置通信链路 | 保留 |
20 | 读取通用参数(584L) | 保留 |
21 | 写入通用参数(584L) | 保留 |
22~64 | 保留作扩展功能备用 | 保留 |
65~72 | 保留以备用户功能所用 | 保留 |
73~119 | 非法功能 | 保留 |
120~127 | 保留 | 保留 |
128~255 | 保留 | 保留 |
六、电磁流量计寄存器地址定义
(针对PLC组态软件的专用寄存器)
PLC Addresses(Base 1) | Protocol Addresses (Base 0) | 数据格式 | 寄存器定义 |
34113 | 0x1010 | Float Inverse | 瞬时流量浮点表示 |
34115 | 0x1012 | Float Inverse | 瞬时流速浮点表示 |
34117 | 0x1014 | Float Inverse | 流量百分比浮点表示(电池供电表保留) |
34119 | 0x1016 | Float Inverse | 流体电导比浮点表示 |
34121 | 0x1018 | Long Inverse | 正向累积数值整数部分 |
34123 | 0x101A | Float Inverse | 正向累积数值小数部分 |
34125 | 0x101C | Long Inverse | 反向累积数值整数部分 |
34127 | 0x101E | Float Inverse | 反向累积数值小数部分 |
34129 | 0x1020 | Unsigned short | 瞬时流量单位 |
34130 | 0x1021 | Unsigned short | 累积总量单位 |
34131 | 0x1022 | Unsigned short | 上限报警 |
34132 | 0x1023 | Unsigned short | 下限报警 |
34133 | 0x1024 | Unsigned short | 空管报警 |
34134 | 0x1025 | Unsigned short | 系统报警 |
七、基础数据解析
瞬时流量,瞬时流速,流量百分比,流体电导比,正反向累积量小数部分以浮点数的格式传输。正反向累积量得整数部分以长整型数传输。
瞬时流量单位表示:
0-------------L/S
1-------------L/M
2-------------L/H
3-------------M3/S
4-------------M3/M
5-------------M3/H
6-------------T/S
7-------------T/M
8-------------T/H
9-------------GPS
10------------GPM
11------------GPH
累积总量单位表示:
0--------------L
1--------------M3
2--------------T
3--------------USG
上限报警,下限报警,空管报警,系统报警表示:
0---------不报警
1---------报警
2010年12月10日
附录1:针对PLC的寄存器使用说明
以modbus调试软件 modbus poll 为例,使用PLC地址采集数据。
假设从机地址为1,波特率9600,想要采集瞬时流量,设置如下图。
图1设置数据显示格式
图2设置采集命令
图3设置串口数据
以modbus调试软件modscan32为例,使用protocol为例采集数据:
图1:串口参数设置
图2:设置采集命令
图3:设置数据显示方式
以组态王6.53为例说明使用方法。
**步:
创建组态王工程
**步:
添加标准modbus设备,组态王设备列表里的-PLC-莫迪康-modbus(RTU)。
第三步:
设置设备地址,举例为 1
第四步:
设置串口参数,举例为9600 n 8 1
第五步:
添加变量举例瞬时流量寄存器为84113格式为浮点数(float),同时添加流速,百分比,空管比,正反向累积值。
分别为
变量名 | 寄存器值 | 数据格式 |
瞬时流量 | 84113 | Float |
瞬时流速 | 84115 | Float |
流量百分比 | 84117 | Float |
流体电导比 | 84119 | Float |
正向累积值整数部分 | 84121 | Long |
正向累积值小数部分 | 84123 | Float |
反向累积值整数部分 | 84125 | Long |
反向累积值小数部分 | 84127 | Float |
寄存器值为8XXXX而不是3XXXX,原因详见组态王驱动说明
第六步:
创建窗口界面并连接变量
第七步:
保存更改并运行工程
以力控6.1为例,说明使用方法
**步:
创建一个工程
**步:
IO口设备组态选择IO设备-modbus-标准modbus-modbus(RTU串口)
选择串口
设置显示数据格式
第三步:
数据库组态
设置数据格式及地址偏移
数据举例
第四步:
创建窗口并连接变量
第五步:
运行工程