HART协议详解:工业通讯的关键技术

4星 · 超过85%的资源 需积分: 12 23 下载量 131 浏览量 更新于2024-07-30 收藏 99KB DOC 举报
"深入理解HART协议" HART(Highway Addressable Remote Transducer,可寻址远程传感器高速通道)协议是一种广泛应用于工业自动化领域的通信协议,它允许模拟信号和数字信号在同一根电缆上同时传输,从而实现了现场设备与控制系统之间的双向通信。HART协议由美国Rosemount公司开发,并逐渐成为国际标准,它基于OSI(开放系统互连)模型的物理层、数据链路层和应用层,确保了不同厂商设备之间的互操作性。 在物理层,HART协议采用了Bell 202标准的FSK(Frequency Shift Keying,频率移位键控)技术。这意味着在4~20mA的模拟信号上叠加频率为1200Hz和2200Hz的数字信号,分别代表逻辑“1”和“0”。这种设计使得设备能够同时处理模拟过程信号和数字通信,且两者互不干扰。数字信号的幅度为0.5mA,数据传输速率是1200bps。 数据链路层规定了HART协议帧的结构。协议帧可以寻址0~15个设备,其中地址0表示设备与主设备间的点对点通信,此时4~20mA模拟信号与数字信号并存。在单站操作中,主变量可以模拟或数字形式输出。而地址1~15则对应点对多点的全数字通信,支持问答式和突发式两种工作模式。问答式模式的数据更新率为2~3次/s,突发式为3~4次/s。在本质安全环境中,单个电源最多能连接15台现场设备,每个设备可拥有256个变量,每个信息最多包含4个变量。 多点操作模式是HART协议的一大特点,尤其适合于远程监控场景,如管道系统和油罐储存场地。在多点模式下,4~20mA的模拟信号失去作用,所有现场设备以4mA的电流运行,主要目的是为设备供电,各设备并联连接,形成一个网络。这使得系统能够有效地管理和监控大量分散的现场设备,提高了生产效率和维护便捷性。 HART协议通过其独特的通信机制,实现了模拟和数字通信的结合,增强了工业现场设备的智能化和网络化能力,是现代工业自动化领域的重要通信协议之一。理解和掌握HART协议对于从事相关行业的工程师来说至关重要,因为它不仅提供了灵活的通信方案,也为设备的集成、故障诊断和系统升级提供了便利。
2018-02-21 上传
#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;