今天以电磁流量计的一种自定义串口协议具体介绍一下串口通讯在电磁流量计上面的应用。
通讯协议针对电磁流量计工业应用设计,版本:MBmagCP V4.2,该版本主要用于实
时数据采集、流量测量及流量累计控制。
一、主机系统通讯部件要求
标准RS-485通讯接口部件,不小于10 Bytes 的通信缓冲区(FIFO),支持600、1200、2400、4800、9600、14400通讯波特率,支持半双工通讯模式。通讯程序应允许FIFO,从机要求主机FIFO不小于10Bytes。
二、协议结构
MBmagCP V4.2协议遵从基本开放系统互连(OSI)参考模型,基本开放系统互连参照模型提供通讯系统基本结构和要素,但MBmagCP V4.2协议使用简化的OSI参照模型,仅采用1、2和7层。
基本开放系统互连参考模型
层号 | 层名 | 功能 | MBmagCP V4.2 |
7 | 应用层 | MBmagCP 命令 | |
6 | 表示层 | ||
5 | 会话层 | ||
4 | 传输层 | ||
3 | 网络层 | ||
2 | 链路层 | 数据链路连接 | MBmagCP Link |
1 | 物理层 | 设备连接 | RS-485 |
三、MBmagCP V4.2物理结构
MBmag 电磁流量计的网络通讯接口为半双工方式,标准通讯速率大于250khz,通讯方向转换时间3.5uS。通讯接口电气标准遵从RS232/RS485标准。
MBmagCP V4.2协议可用于星型式网络结构和总线式网络结构。标准通讯连接介质为屏蔽双绞线。
四、MBmagCP V4.2主机信息结构
MBmagCP V4.2协议为主从扫描式通讯协议,每次通讯过程均由主机发起,然后从机进行响应,回传规定的信息,完成一次通讯过程。
主机至从机信息结构
起始码(0x2A) | 地址码 | 功能码 | 结束码(0x2E) |
主机发送至从机的信息由四字节组成,字节是起始码(0x2A),第二字节为从机地址,其编码:0---127(高二进制位另有定义),第三字节为数据分类命令(下表定义),第四字节是结束码(0x2E)。从机通讯缓冲区(FIFO)为一字节,因此,主机发送至从机的四个字节必须留时间间隔。
主机应使用10位串行数据格式,并且不使用奇偶校验。
数据分类命令
命令编码 | 命令定义 | 命令编码 | 命令定义 |
00 | 瞬时流量 | 05 | 反向总量 |
01 | 瞬时流速 | 06 | 报警状态 |
02 | 流量百分比 | 07 | 管道直径 |
03 | 流体电阻值 | ||
04 | 正向总量 | 14 | 切换到参数设置 |
数据分类命令指示从机回送的数据类型,数据分类命令编码:0---127,MBmagCPV4.2仅使用0—7和14号编码,其他编码暂时保留。
五、 MBmagCP V4.2从机信息结构
从机接受到主机命令信息后,按命令要求回传测量数据。
从机响应信息数据结构
从机地址 | 命令 | D0 | D1 | D2 | D3 | D4 | D5 | 校验和 | 结束标志 |
从机响应主机命令,回送10个字节数据,分为命令段、数据段、校验和、结束标志四部分。
1、 命令段
命令段由两字节组成:从机地址和数据分类命令,该段是将主机发来的信息直接返回,用于主机校验从机对主机传送信息中地址和命令响应的正确性。
2、 数据段
由于流量计各测量数据长度、单位、符号等信息各不相同,因此,从机回传的数据段按各命令具体定义。
3、 校验和
校验和 = D0 xorD1 xor D2 xor D3 xor D4 xor D5;
xor --- 逻辑异或。
4、结束标志
结束标志 =0AAH; (十进制170)
0)流量定义
数据段的D2、D1、D0三个字节组成十位流量计测量数据,每字节表示两位十进制数的压缩BCD码格式。D2、D1、D0需要先规格化为十进制格式,具体算法如下:
D0= ( D0 >> 4) *10 + (D0 & 0x0F)
D1= ( D1 >> 4) *10 + (D1 & 0x0F)
D2= ( D2 >> 4) *10 + (D2 & 0x0F)
流量值 = 10000 *D2 + 100 * D1 + D0;
其中符号 >> 为C语言中的逻辑右移操作。
D3字节:流量值的指数(10的幂)
幂值 = D3 – 5, 幂值范围: -5 – +5
D4字节:流量单位
D4 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
单位 | m3/s | m3/min | m3/h | m3/d | L/s | L/min | L/h | L/d |
D4 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
单位 | t/s | t/min | t/h | t/d | kg/s | kg/min | kg/h | kg/d |
D5字节:流体流动方向:
位 | B6…….B1 | B0 |
定义 | 保留 | 0---正向; 1---反向 |
1) 流速定义
D2、D1、D0需要先规格化为十进制格式,具体如下:
D0= ( D0 >> 4) *10 + (D0 & 0x0F)
D1= ( D1 >> 4) *10 + (D1 & 0x0F)
D2= ( D2 >> 4) *10 + (D2 & 0x0F)
其中符号 >> 为C语言中的逻辑右移操作。
流速值 = 10000 * D2 + 100 * D1 + D0;
值范围 = 00.000 ~ 99.999
流速单位:固定为m/s
D3字节:小信号切除标志;0 --- 允许; 1--- 禁止。
D4字节:流量值显示精度(保留小数点后位数)(固定值3)
D5字节:流动方向;0 --- 正向、1 --- 反向;
2) 流量百分比定义
D1、D0需要先规格化为十进制格式,具体如下:
D0= ( D0 >> 4) *10 + (D0 & 0x0F)
D1= ( D1 >> 4) *10 + (D1 & 0x0F)
其中符号 >> 为C语言中的逻辑右移操作。
百分比 = 100 * D1 + D0;
值范围 = 000.0 ~ 999.9 %
D2字节:量程比
0- 1:1
1- 1:2
2- 1:4
3- 1:8
D3字节:上限报警允许
0- 允许
1- 禁止
D4字节:下限报警允许
0- 允许
1- 禁止
D5字节:流动方向;0 --- 正向、1 --- 反向;
3) 流体电阻
D1、D0需要先规格化为十进制格式,具体如下:
D0= ( D0 >> 4) *10 + (D0 & 0x0F)
D1= ( D1 >> 4) *10 + (D1 & 0x0F)
其中符号 >> 为C语言中的逻辑右移操作。
电阻 = 100 * D1 +D0;
值范围 = 0000 ~ 999.9 KW
D2字节:保留
D3字节:保留
D4字节:空管报警允许
0- 允许
1- 禁止
D5字节:流动方向;0 --- 正向、1 --- 反向;
4)正向总量定义
D4、D3、D2、D1、D0需要先将压缩BCD码规格化为十进制格式,具体如下:
D4= ( D4 >> 4) *10 + (D4 & 0x0F)
D3= ( D3 >> 4) *10 + (D3 & 0x0F)
D2= ( D2 >> 4) *10 + (D2 & 0x0F)
D1 = ( D1 >> 4) *10 + (D1 & 0x0F)
D0= ( D0 >> 4) *10 + (D0 & 0x0F)
其中符号 >> 为C语言中的逻辑右移操作。
总量 =100000000 * D4 + 1000000 * D3 + 10000 * D2 + 100 * D1 + D0;
D5字节:
D5 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
单位 | 0.001L | 0.01L | 0.1L | 1L | 0.001m3 | 0.01m3 | 0.1m3 | 1m3 |
D5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
单位 | 0.001kg | 0.01kg | 0.1kg | 1kg | 0.001t | 0.01t | 0.1t | 1t |
5)反向总量定义
D4、D3、D2、D1、D0需要先将压缩BCD码规格化为十进制格式,具体如下:
D4= ( D4 >> 4) *10 + (D4 & 0x0F)
D3= ( D3 >> 4) *10 + (D3 & 0x0F)
D2= ( D2 >> 4) *10 + (D2 & 0x0F)
D1 = ( D1 >> 4) *10 + (D1 & 0x0F)
D0= ( D0 >> 4) *10 + (D0 & 0x0F)
其中符号 >> 为C语言中的逻辑右移操作。
总量 =100000000 * D4 + 1000000 * D3 + 10000 * D2 + 100 * D1 + D0;
D5字节:
D5 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ||||||||
单位 | 0.001L | 0.01L | 0.1L | 1L | 0.001m3 | 0.01m3 | 0.1m3 | 1m3 | ||||||||
D5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ||||||||
单位 | 0.001kg | 0.01kg | 0.1kg | 1kg | 0.001t | 0.01t | 0.1t | 1t | ||||||||
6) 报警状态定义
D0字节:
位定义:Bx =0 无警状态;Bx = 1报警状态;
ALAM位 | B0 | B1 | B2 | B3 | B4 |
报警定义 | 保留 | 励磁报警 | 电极报警 | 空管报警 | 上限报警 |
ALAM位 | B5 | B6 | B7 | B8 | B9 |
报警定义 | 下限报警 | 保留 | 保留 | 保留 | 保留 |
7)流量计管径定义
D0字节定义管径 (单位mm)
D0数值 | 代表管径 | D0数值 | 代表管径 | D0数值 | 代表管径 |
00 | 3 | 15 | 200 | 30 | 1400 |
01 | 6 | 16 | 250 | 31 | 1600 |
02 | 8 | 17 | 300 | 32 | 1800 |
03 | 10 | 18 | 350 | 33 | 2000 |
04 | 15 | 19 | 400 | 34 | 2200 |
05 | 20 | 20 | 450 | 35 | 2400 |
06 | 25 | 21 | 500 | 36 | 2600 |
07 | 32 | 22 | 600 | 37 | 2800 |
08 | 40 | 23 | 700 | 38 | 3000 |
09 | 50 | 24 | 800 | ||
10 | 65 | 25 | 900 | ||
11 | 80 | 26 | 1000 | ||
12 | 100 | 27 | 1100 | ||
13 | 125 | 28 | 1200 | ||
14 | 150 | 29 | 1300 |
14)禁止总量累积
从机接到连续6个该命令后,立即进入参数设置状态。
六、 MBmagCP V4.2通讯过程时序
通讯过程时序指编制通讯软件时应遵从的时间间隔、延时、等待时间等。
1. 主机发送时序
主机发送的两个信息字节间的时间间隔小为0,大时间间隔为20毫秒,大于20毫秒,从机认为发送超时。
2. 从机回传时序
从机小回传响应时间为1毫秒,大为10毫秒 + 11位传送时间。
从机每个回传字节时间间隔大为10毫秒 + 11位传送时间。
(11位传送时间根据选用波特率计算出)
3. 从机允许的通讯频度
从机允许的通讯频度为10次/每秒,大于该值,可能影响从机其他功能。
七、 MBmagCP V4.2通讯波特率
MBmagCP V4.2支持的通讯波特率为:600、1200、2400、4800、9600、14400。
八、 MBmagCP V4.2通讯数据块侦错信息
1.从机地址和数据分类命令回传,主机可用于校对从机是否正确响应;
2.从机回传字节异或和校验,主机可用于校对是否有数据位错误;
3.从机回传字节中B7 = 0为数据字节,B7 = 1为命令字节;
4.从机回传字节中的数据字节值不大于153(十六进制数99);
5.从机回传字节数长度固定,共十字节长度,主机可做长度检验;
6.从机回传结束标志,主机可用于长度检验和数据字节定位。