571
社区成员
发帖
与我相关
我的任务
分享Hart转modbus控制器需求分析
1.课题目的及需求分析
该课题主要为基于单片机实现一款类似网关的中转控制器,作为modbus的主站获取传感器从站的相应参数,发送命令,同时作为hart的从站接收hart命令,并进行相应的处理。采用的主板为国产型号,相比西门子plc上百元的价格,有大幅度的成本节约。同时HART协议采用基于Bell202标准的FSK频移键控信号,在低频的4-20mA模拟信号上叠加幅度为0.5mA的音频数字信号进行双向数字通讯,可以通过模数转换器直接在模拟信道传输数字信号,在国内的使用较少,而modbus的使用较多,该转换器具有较高的实现价值。
2.调研
HART通信采用的是半双工的通信方式,其特点是在现有模拟信号传输线上实现数字信号通信,属于模拟系统向数字系统转变过程中过渡性产品,因而在当前的过渡时期具有较强的市场竞争能力,得到了较快发展。HART 规定了一系列命令,按命令方式工作。它有三类命令,第一类称为通用命令,这是所有设备都理解、都执行的命令;第二类称为一般行为命令,所提供的功能可以在许多现场设备(尽管不是全部)中实现,这类命令包括最常用的的现场设备的功能库;第三类称为特殊设备命令,以便于工作在某些设备中实现特殊功能,这类命令既可以在基金会中开放使用,又可以为开发此命令的公司所独有。在一个现场设备中通常可发现同时存在这三类命令。

采用Bell202标准的FSK频移键控信号,1200Hz代表逻辑“1”,2200Hz代表逻辑“0”。
引导码 定界符 地址 命令号 数据长度 响应码 数据字节 奇偶校验
1) PREAMBLE: 引导码, 一般是5..20个0xFF, 他是一组同步传输的同步信号, 用以保证信息的同步. 在开始通讯的时候,使用的是20个FF引导码, 从机应答0信号时将告之主机他“希望”接收几个字节的引导码, 另外主机也可以用59号命令告诉从机应答时应用几位引导码.
2) START 起始字节, 说明结构为“长”还是“短”, 消息源, 是否是“突发”模式消息.
0x02: 主机到从机的短帧
0x82: 主机到从机的长帧
0x06: 从机到主机的短帧
0x86: 从机到主机的长帧
0x01: 突发模式的短帧
0x81: 突发模式的长帧
一般设备进行通讯接收到2个FF字节后, 就表示数据位的接收已经同步, 就将侦听起始位.
//突发模式待商定
3) ADDR(1/5Bytes)
地址字节,他包含了主机地址和从机地址,如前所述,短结构中占1字节,长结构中占5字节。无论长结构还是短结构,因为HART协议中允许2个主机存在,所以我们用首字节的最高位来进行区分,值为1表示第一主机地址,第二主机用0表示。“突发”模式是特例,0,1值将交替出现,也就是说,在该模式下,赋予2个主机的机会均等。次高位为1表示为“突发”模式,短结构用首字节的0~4位表示值为0~15的从机地址,第5,6位赋0;而长结构用后6位表示从机的生产厂商的代码,第2个字节表示从机设备型号代码,后3~5个字节表示从机的设备序列号,构成“唯一”标志码。
短帧:

长帧:
长结构用后6位表示从机的生产厂商的代码, 第2个字节表示从机设备型号代码,后3~5个字节表示从机的设备序列号, 构成“唯一”标志码.
另外,长结构的低38位如果都是0的话表示的是广播地址,即消息发送给所有的设备。
4)COM(1Byte)
命令字节, 范围为253个, 用HEX的0~FD表示. 31,127,254,255为预留值。
5). BCNT(1Byte)
数据总长度,他的值表示的是BCNT下一个字节到最后(不包括校验字节)的字节数.
接收设备用他可以鉴别出校验字节, 也可以知道消息的结束.
因为规定数据最多为25字节, 所以他的值是从0~27。
6. STATUS(2Bytes)
状态字节, 他也叫做“响应码”,顾名思义, 他只存在于从机响应主机消息的时候, 用2字节表示.
他将报告通讯中的错误\接收命令的状态(如:设备忙、无法识别命令等)和从机的操作状态。
如果我们在通讯过程中发现了错误, 首字节的最高位(第7位)将置1,其余的7位将汇报出错误的细节,而第2个字节全为0.
否则,当首字节的最高位为0时,表示通讯正常,其余的7位表示命令响应情况,第2个字节表示场设备状态的信息。
UART发现的通讯错误一般有:奇偶校验、溢出和结构错误等。
命令响应码可以有128个, 表示错误和警告, 他们可以是单一的意义, 也可以有多种意义,我们通过特殊命令进行定义、规定.
现场设备状态信息用来表示故障和非正常操作模式。
7. DATA(BCNT-2)
数据字节,首先是并非所有的命令和响应都包含数据字节,他最多不超过25字节(随着通讯速度的提高,正在要求放宽这一标准)。
数据的形式可以是无符号的整数(可以是8,16,24,32 b),浮点数(用IEEE754单精浮点格式)或ASCII字符串,还有预先制定的单位数据列表。具体的数据个数根据不同的命令而定。
8. CHK(1Byte)
奇偶校验,方式是纵向奇偶校验,从起始字节开始到奇偶校验前一个字节为止。另外,每一个字节都有1位的校验位,这两者的结合可以检测出3位的突发错误。
3.软件实现思路、
该控制器主要分为两大模块,分别是hart模块以及modbus模块。

其中每个模块的代码流程基本遵从一下流程图。