AMF电磁流量计通信协议
2025年02月06日 17:35:49
来源:云南昌晖仪表制造有限公司 >> 进入该公司展台
阅读量:57
本电磁流量计通信协议针对AMF智能电磁流量计工业应用设计,通信协议版本:AMF CP V1.1。通信协议主要用于电磁流量计实时数据采集、流量测量及流量累计控制。
一、主机系统通讯部件要求国际标准RS-485通讯接口部件,不小于10Bytes的通信缓冲区(FIFO),支持600、1200、2400、4800、9600、14400通讯波特率,支持半双工通讯模式。通讯程序应允许FIFO,从机要求主机FIFO不小于10Bytes。二、协议结构AMF CP V1.1协议遵从基本开放系统互连(OSI)参考模型,基本开放系统互连参照模型提供通讯系统基本结构和要素,但昌晖AMF CP V1.1协议使用简化的OSI参照模型,仅采用1、2和7层。基本开放系统互连参考模型三、AMF电磁流量计通信协议物理结构AMF电磁流量计的网络通讯接口在物理结构上采用电气隔离方式,隔离电压1500伏。通讯数据传输接口为半双工方式,标准通讯速率大于250khz,通讯方向转换时间3.5uS。通讯接口电气标准遵从RS-485国际标准。昌晖AMF CP V1.1协议可用于星型式网络结构和总线式网络结构。标准通讯连接介质为屏蔽双绞线。
四、AMF CP V1.1主机信息结构AMF CP V1.1协议为主从扫描式通讯协议,每次通讯过程均由主机发起,然后从机进行响应,回传规定的信息,完成一次通讯过程。主机至从机信息结构
主机发送至从机的信息由两字节组成,字节为从机地址,其编码:0-127(二进制位另有定义),字节为数据分类命令(下表定义)。从机通讯缓冲区(FIFO)为两字节,因此,主机发送至从机的两字节可连续发送,不必留时间间隔。从机工作在多机通讯方式,因此,主机应使用11位串行数据格式,并且不使用奇偶校验,将奇偶校验位作多机通讯寻址标志使用。主机发送个字节时,奇偶校验位强制为1,发送第二个字节时,奇偶校验位强制为0。(见附录一)数据分类命令
数据分类命令指示从机回送的数据类型,数据分类命令编码:0---127,昌晖AMF CP V1.1 仅使用0—9号编码,其他编码暂时保留。五、AMF CP V1.1从机信息结构从机接受到主机命令信息后,按命令要求回传测量数据。从机响应信息数据结构
从机响应主机命令,回送10个字节数据,分为命令段、数据段、校验和、结束标志四部分。1、命令段命令段由两字节组成:从机地址和数据分类命令,该段是将主机发来的信息直接返回,用于主机校验从机对主机传送信息中地址和命令响应的正确性。 2、数据段由于流量计各测量数据长度、单位、符号等信息各不相同,因此,从机回传的数据段按各命令具体定义。(1)流量信息定义数据段的D4、D3、D2、D1、D0五个字节组成十位流量测量数据,每字节表示两位十进制数,每字节表示的十进制数值范围:0-99。
主机恢复流量测量值十进制数据的算法:a)流动方向将D4D3D2D1D0 恢复成十六进制数据DATA_HEX;若DATA_HEX=H则智能电磁流量计流体流动方向为负;
b)原数据将DATA_HEX中的位(符号位)消掉,得到无符号原数据;即原数据=DATA_HEX与7FFFFFFFH;流量测量数据值为99999D5字节以段位方式定义流量单位、小数点位置:5位定义
流量单位定义:0----L/S(升/秒) 1----L/M(升/分) 2----L/H(升/时) 3----M3/S(立方米/秒) 4----M3/M(立方米/分) 5----M3/H(立方米/时)小数点位置: 4 -------±.00000 5 -------±0.0000 6 -------±00.000 7 -------±000.00 8 -------±0000.0 9 -------±00000; 10 ------±00000×10 . . . 13-------±00000×10000(2)流速信息定义数据段的D4、D3、D2、D1、D0五个字节组成十位流速测量数据,每字节表示两位十进制数,每字节表示的十进制数值范围:0-99。
主机恢复流速十进制数据的算法:a)流动方向将D4D3D2D1D0恢复成十六进制数据DATA_HEX;若DATA_HEX=H则流动方向为负。 b)原数据将DATA_HEX中的位(符号位)消掉,得到无符号原数据;即原数据=DATA_HEX与7FFFFFFFH;流量测速数据值为19.999。D5无定义:流速单位固定:m/S(米/秒)。数点位置固定:±00.000。(3)流量百分比信息定义数据段的D4、D3、D2、D1、D0五个字节组成十位流量百分比测量数据,每字节表示两位十进制数,每字节表示的十进制数值范围:0-99。
主机恢复流量百分比十进制数据的算法:a)流动方向将D4D3D2D1D0 恢复成十六进制数据DATA_HEX;若DATA_HEX=H则流动方向为负。b)原数据将DATA_HEX中的位(符号位)消掉,得到无符号原数据;即原数据=DATA_HEX与7FFFFFFFH;流量测量百分比数据值为999.99。D5无定义:向定义: 0-----流体正向流动 1-----流体反向流动流量百分比单位固定:%数点位置固定:±0000.0%(4)流体电导比信息定义数据段的D4、D3、D2、D1、D0五个字节组成十位电导比测量数据,每字节表示两位十进制数。
主机恢复流体电导比十进制数据的算法:原数据=10000×D2+100×D1+D0;流体电导比测量数据值为999.9。D5无定义。流体电导比单位固定:%小数点位置固定:000.0%(5)正向流量累积信息定义数据段的D4、D3、D2、D1、D0五个字节组成十位正向流量测量数据,每字节表示两位十进制数。
主机恢复流量十进制数据的算法:原数据=100000000×D4+1000000×D3+10000×D2+100×D1+D0;流量累积数据值为4294967296(十六进制0FFFFFFFFH)。D5字节以段位方式定义流量单位、小数点位置:D5字节位定义
小数点位置及单位:0 ------- 1L 1 ------- 0.1L 2 ------- 0.01L 3 ------- 0.001L 4 ------- 1m³ 5 ------- 0.1 m³ 6 ------- 0.01 m³ 7 ------- 0.001 m³(6)反向流量累积信息定义反向流量累积信息定义同正向流量累积信息定义。(7)报警状态信息定义数据段的D1、D0两个字节组成二进制报警状态。
主机恢复报警状态二进制数据的算法:原数据(二进制)=D0报警状态定义
(8)流量计管径信息定义数据段的D0字节指示流量计管径
(9)禁止流量累积信息定义从机接到该命令后,立即停止流量累积,并回送命令认可信息。停止流量累积延续时间为20秒,20秒后从机自动恢复流量累积计算。因此,若想连续禁止流量累积计算,必须以小于20秒的间隔,向从机发送该命令。该功能可用于断续过程计量。回送的命令认可信息由数据段的D4、D3、D2、D1、D0五个字节组成。
主机恢复命令认可信息码的算法:命令认可信息码=100000000×D4+1000000×D3+10000×D2+100×D1+D0;正确的命令认可信息码=2A3A4A5AH(十六进制)。(10)启动流量累积信息定义从机接到该命令后,立即启动流量累积计算,并回送命令认可信息。该功能可用于断续过程计量。命令认可信息由数据段的D4、D3、D2、D1、D0五个字节组成。
主机恢复命令认可信息码的算法:命令认可信息码=100000000×D4+1000000×D3+10000×D2+100×D1+D0;正确的命令认可信息码=5A4A3A2AH(十六进制)。3.校验和从机回传的数据校验和为前八个字节的异或和。异或和(byte8) = byte0 ⊕ byte1 ⊕ byte2 …………byte6 ⊕ byte7;4.信息块结束标志从机以结束标志表示本次回传信息块完毕。结束标志编码为:0AAH(通讯结束命令,十六进制格式)。六、昌晖AMF CP V1.1通讯过程时序通讯过程时序指编制通讯软件时应遵从的时间间隔、延时、等待时间等。1、主机发送时序主机发送的两个信息字节间的时间间隔最小为0,时间间隔为20毫秒,大于20毫秒,从机认为发送超时。2、从机回传时序从机最小回传响应时间为0,为10毫秒+11位传送时间;从机每个回传字节时间间隔为10毫秒+11位传送时间。(11位传送时间根据选用波特率计算出)3、从机允许的通讯频度从机允许的通讯频度为20次/每秒,大于该值,可能影响从机其他功能。七、AMF电磁流量计通信协议波特率昌晖AMF CP V1.1支持的通讯波特率为:600、1200、2400、4800、9600、14400。八、AMF CP V1.1通讯数据块侦错信息1、从机地址和数据分类命令回传,主机可用于校对从机是否正确响应。2、从机回传字节异或和校验,主机可用于校对是否有数据位错误。3、从机回传字节中B7 = 0为数据字节,B7 = 1为命令字节。4、从机回传字节中的数据字节值不大于99。5、从机回传字节数长度固定,共十字节长度,主机可做长度检验。6、从机回传结束标志,主机可用于长度检验和数据字节定位。九、AMF电磁流量计标准通讯网络连接图 附录一 通讯实验程序 (MSDOS TURBO C)#incLude#incLude/* MODE setting */#define BIT_5 0x00 /* Word Length define */#define BIT_6 0x01#define BIT_7 0x02#define BIT_8 0x03#define STOP_1 0x00 /* Stop bits define */#define STOP_2 0x04#define P_EVEN 0x18 /* Parity define */#define P_ODD 0x08#define P_SPC 0x38 /* Set tb = 0 */#define P_MARK 0x28 /* Set tb = 1 */#define P_NONE 0x00#define I_RDA 0x01 /* EnabLe recieve-data-avaiLabLe interrupt */#define I_TRE 0x02 /* EnabLe transmitter-hoLding-register-empty interrupt */#define I_RLS 0x04 /* EnabLe recieve-Line-status interrupt */#define I_MS 0x08 /* EnabLe modem-status interrupt */#define I_NON 0x00 /* DisabLe interrupt */#define B600 0xc0#define B1200 0x60#define B2400 0x30#define B4800 0x18#define B9600 0x0C#define B14400 0x08#define COM1_ADDR 0x3e8unsigned char COMM_Buf[100];unsigned char baud_rate;unsigned int error_cnt;void SioInit_1(void){ outportb(COM1_ADDR + 2, 0xcf); /* EnabLe FIFO and cLear FIFO */ outportb(COM1_ADDR + 3, 0x80); /* Set DLAB = 1 */ /* Set bps */ outportb(COM1_ADDR, baud_rate % 256); outportb(COM1_ADDR + 1, baud_rate / 256); outportb(COM1_ADDR + 3, BIT_8 | STOP_1 | P_MARK); /* 11 bits mode & P = 1 */ outportb(COM1_ADDR + 1, I_NON); /* disabLe interrupt */}void SioInit_0(void){ outportb(COM1_ADDR + 2, 0xcf); /* EnabLe FIFO and cLear FIFO */ outportb(COM1_ADDR + 3, 0x80); /* Set DLAB = 1 */ /* Set bps */ outportb(COM1_ADDR, baud_rate % 256); outportb(COM1_ADDR + 1, baud_rate / 256); outportb(COM1_ADDR + 3, BIT_8 | STOP_1 | P_SPC); /* 11 bits mode & P = 0 */ outportb(COM1_ADDR + 1, I_NON); /* disabLe interrupt */}int SioRecieve(){ unsigned k; for (k=0;k<10000;k++) {if((inportb(COM1_ADDR + 5) & 1) == 1) { return inportb(COM1_ADDR); } deLay(1); } return 0;}void SioSend(unsigned char data){ outportb(COM1_ADDR,data); /* Send data */ whiLe((inportb(COM1_ADDR + 5) & 0x40) == 0){}}main(){ int i; unsigned char ch_n; unsigned char ch; int cnnt; baud_rate = B14400; cnnt=0; error_cnt = 0; ch_n = 0; for(;;) { SioInit_1(); cnnt++; cprintf("%03d ",cnnt); cprintf("Send Data "); ch = 0x03; SioSend(ch); outportb(COM1_ADDR + 3, BIT_8 | STOP_1 | P_SPC); SioSend(ch_n); ch_n = (ch_n + 1) & 7; for (i=0;i<10;i++) { COMM_Buf[i] = SioRecieve(); } deLay(20); for (i=0;i<10;i++) { cprintf("%03d ",COMM_Buf[i]); } if ((COMM_Buf[9] != 0xaa) && (COMM_Buf[9] != 0)) { error_cnt++; } cprintf("%05d/n/r",error_cnt); deLay(20); }}
版权与免责声明:
1.凡本网注明"来源:全球装备网"的所有作品,版权均属于全球装备网,转载请必须注明全球装备网。违反者本网将追究相关法律责任。
2.企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
3.本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
4.如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系。