A电磁流量计标准MODBUS通讯协议(版本号: LMAGMODRTUV77)安均 ye(3)

2019-08-30 21:35

L-mag电磁流量计转换器通讯协议

主站接收到从站回传7个字节数据: 01 设备 地址 04 功能码 02 数据 长度 00 05 79 CRC 高位 33 CRC 低位 2个字节整型 (瞬时流量单位) 根据表3查得:流量单位为M3/H 5.读总量流量单位

主站发送读瞬时流量单位8个字节命令: 01 设备 地址 04 功能码 10 寄存器 地址高位 21 寄存器 地址高位 00 寄存器 长度高位 01 寄存器 长度低位 65 CRC 高位 00 CRC 低位 主站接收到从站回传7个字节数据: 01 设备 地址 04 功能码 02 数据 长度 00 01 78 CRC 高位 F0 CRC 低位 2个字节整型 (累积量单位) B型及511型根据表4查得:流量单位为M3 C型 根据表5查得:流量单位为L 6.读报警状态

主站发送读报警8个字节命令: 01 设备 地址 04 功能码 10 寄存器 地址高位 24 寄存器 地址高位 00 寄存器 长度高位 01 寄存器 长度低位 75 CRC 高位 01 CRC 低位 主站接收到从站回传7个字节数据: 01 设备 地址

04 功能码 02 数据 长度 00 01 78 CRC 高位 F0 CRC 低位 2个字节整型 (报警) 状态为1 表示空管是报警状态。 其他报警依次类推。

- 10 -

L-mag电磁流量计转换器通讯协议

七、应用举例

1.C语言MODBUS 示例程序

(1).CRC16算法:

INT16U CRC16(INT8U *puchMsg, INT16U usDataLen) {

INT8U uchCRCHi = 0xFF; /* 高CRC字节初始化 */ INT8U uchCRCLo = 0xFF; /* 低CRC 字节初始化 */ INT8U uIndex; /* CRC循环中的索引 */ while (usDataLen--) /* 传输消息缓冲区 */ {

uIndex = uchCRCHi ^ *puchMsg++; /* 计算CRC */ uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex]; uchCRCLo = auchCRCLo[uIndex]; }

return (uchCRCHi << 8 | uchCRCLo); }

(2)发送命令程序

本例程以Mag64为核心CPU

void Read_InPut(INT8U Addr,INT16U Start,INT16U Len) {

INT16U CRC;

SendBuffer_485[0]=Addr; //设备地址 SendBuffer_485[1]=0x04; //modbus功能码 SendBuffer_485[2]=Start/256; //Start为寄存器地址 SendBuffer_485[3]=Start%6;

SendBuffer_485[4]=Len/256; //Len为读取寄存器长度 SendBuffer_485[5]=Len%6; CRC=CRC16(SendBuffer_485,6);

SendBuffer_485[6]=CRC/256; //CRC校验高位 SendBuffer_485[7]=CRC%6; //CRC校验低位 R485_OUT; //使能RS485发送 SendLen_485=8; SendNum_485=0;

CloseINT0(); //关闭串口接受中断 UCSR0B |= BIT(UDRIE0); //打开串口发送中断 }

- 11 -

L-mag电磁流量计转换器通讯协议

(3)返回数据解析(只以瞬时流量为例)

数据接收使用串口中断,ReceivedBuffer_485为接收数据组,ReceivedNum_485为接收到数据

长度,ReceivedFlag_485接收到数据标志。函数float Datasum(INT8U BYTE1, INT8U BYTE2, INT8U BYTE3, INT8U BYTE4)把浮点数的4个字节转换为1个浮点数。

float Datasum(INT8U FloatByte1, INT8U FloatByte2, INT8U FloatByte3, INT8U FloatByte4) { float aa; union IntTOFP {

FP32 F32; INT8U T8[4]; };

union IntTOFP aa;

aa.T8[0] = FloatByte1; aa.T8[1] = FloatByte2; aa.T8[2] = FloatByte3; aa.T8[3] = FloatByte4; return aa; }

void Read_Lmag(INT8U Ad) {

INT8U i,j;

INT8U Num1[10],BIT; INT16U CRC1,CRC2;

FP32 Flow; //aaa为瞬时流量数值 ReceivedFlag_485=1; Open_Time1_Ms5(20);

Read_InPut(Ad,0x1010,2); //发送设备地址、寄存器地址、寄存器长度 while(ReceivedFlag_485); //等待接收结束

if((ReceivedNum_485==9)&&(ReceivedBuffer_485[0]==Ad)) // 判断数据是否正确 {

CRC1=CRC16(ReceivedBuffer_485,7); CRC2=ReceivedBuffer_485[7]*256+ReceivedBuffer_485[8]; if(CRC1==CRC2) {// 转换数据为浮点数

Flow = Datasum(ReceivedBuffer_485[6], ReceivedBuffer_485[5],

ReceivedBuffer_485[4] ,ReceivedBuffer_485[3]);

}

}

}

- 12 -

L-mag电磁流量计转换器通讯协议

2.modbus调试软件 modbus poll通讯实例

以从站地址为1,波特率9600,读取所有实时数据为例设置方法如下: 按照表2所示:起始寄存器地址4113 寄存器个数为22 1. 设置采集命令包括设备地址(1)、MODBUS功能码(04)、寄存器地址(4113)、寄存器长度(2)、采集间隔(1000)。

2.设置串口数据

根据L-mag电磁流量计串口格式(1位起始位 8位数据位 1位停止位,无校验)设置如下图:

3.设置数据显示格式

- 13 -

L-mag电磁流量计转换器通讯协议

4.通讯成功界面

- 14 -


A电磁流量计标准MODBUS通讯协议(版本号: LMAGMODRTUV77)安均 ye(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《整式的加减》测试题(含答案)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: