Python实现Hart协议

本文介绍了Python如何实现Hart协议,包括协议的介绍、消息帧结构、硬件要求和具体实现过程,特别讲解了命令0和命令1的使用,用于获取和交互智能仪表的数据。
摘要由CSDN通过智能技术生成

Python 实现Hart协议

  1. Hart协议介绍
    Hart协议多数使用在智能仪表上,如电磁流量计,液位计等智能仪表的电流输出端口4~20mA往往会支持Hart协议。Hart协议是在端口电流上添加叠加0.5mA的正弦调制波,以1200Hz代表逻辑‘1’,2200Hz代表逻辑‘0’,成功地把模拟信号和数字信号双向同时通讯,而不互相干扰。如下图:
    电流端口叠加Hart信号
    Hart协议的消息帧要求如下:
    消息帧

其中RES,是状态位,是从站向主站发送信息时才有的。
Hart协议的消息帧主要由以下几个字段来定义:
1.1. PREAMBLE,前导字节,一般是5个“FF”,也就是5个字节
1.2. DELIMITER,起始字节。起始字节来确定后续的ADDR字节是“短”结构还是“长”结构。起始字节主要有短结构的‘02’,长结构的‘82’(主站向从站发送命令)。以及短结构‘06’,长结构‘86’ (从站向主站发送消息)。短结构‘01’,长结构‘81’(突发模式)。
1.3. ADDR,地址字节。ADDR包含主机地址和从站地址。按上述所提,ADDR有两种结构,分别是短结构和长结构,不同的结构会导致ADDR字节数不同
1.3.1 短结构
短结构时,ADDR为1个字节(8位bit),8位bit含义如下:
短结构

主机地址:1表示是第一主机,0表示是第二主机(Hart手持式终端)
突发模式:突发模式是特例,结合上述DELIMITER字节,突发模式,0,1值将交替出现,也就是说,在该模式下,赋予2个主机的机会均等。此位为1 表示为“突发”模式。
SA: 字节后4位为从站地址,也就是说从站地址是0~15。只有16个从站。
1.3.2 长结构
长结构时,ADDR为5个字节,字节含义如下:
长结构

1.4. COM:命令字节,常用的命令有‘0’号命令,‘1’号命令,‘2’号命令等。具体参考Hart命令细节
1.5. BCNT:数据总长度。表示的是从BCNT后面一个字节开始(不包含BCNT自己࿰

#include "use.h" #include "Ver.H" #include #include #include #include "include.h" /******************************************************************* 1、菜单中这几个参数项需要读出和修改: P1中的:L,H,E,dr,P P2中的:Ed,SF,bo 一共7个参数项; ---这7个参数项不知道用什么命令来进行读写? 请你帮助考虑一下。 2、HART命令中,有如下命令应该要用到: ⑴ 0#命令---读标识码 (好像是个广播命令) ⑵ 3#命令---读主变量电流(测量值) ⑶ 6#命令---置随选地址(确定工作模式) ⑷ 15#命令---读主变量输出信息(上下限值) ⑸ 40#命令---进入/退出电流模式 ⑹ 41#命令---执行设备自检 ⑺ 42#命令---执行设备复位 ******************************************************************/ //前面的4个地址是固定的,后面一个是可以改的!用MP1.ADR 代替了! //#define adr0 0x02 //#define adr1 0x23 //#define adr2 0x34 //#define adr3 0x45 //#define MAX_0xff 5 //前导符的个数! //#define HART_VER 5 // 版本 //---------------------------------------------------------------------------------- //static unsigned char fHART_LONG_ADR=0; //=0 短地址标至;=1 是长地址! //static unsigned char cnt_0xff=MAX_0xff; //主机发送0XFF的个数,从机回复添加相同的个数 ! //************************************************************************** extern unsigned char cnt_0xff; //主机发送0XFF的个数,从机回复添加相同的个数 ! extern unsigned char fHART_LONG_ADR; //=0 短地址标至;=1 是长地址! //--------------------------------------------------------------------------------------------- unsigned char HART_Get_FF(unsigned char *p){ memset(p,0xff,cnt_0xff); return cnt_0xff;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值