第二章 HART软件设计 — HART协议代码

第二章 HART软件设计 — HART协议代码

在这里插入图片描述

一、HART协议帧

上文我们简单介绍了HART硬件设计,这章我再简单的介绍一下HART协议
在这里插入图片描述
HART协议的帧格式以8位为一个字节进行编码,对每个字节加上一个起始位、一个奇偶校验位和一个停止位以串行方式进行传输。通常采用UART(通用异步接收/发送器)来完成字节的传输。由于数据的有无和长短不恒定,所以HART数据的长度不能超过25个字节。
(1)PREAMBLE 导言字节,一般是5~20个FF十六进制字节。
(2)START 起始字节,他将告之使用的结构为“长”还是“短”、消息源、是否是“突发”模式消息。主机到从机为短结构时,起始位为02,长帧时为82。
(3)ADDR 地址字节,他包含了主机地址和从机地址,短结构中占1字节,长结构中占5字节。
(4)COM 命令字节,他的范围为253个,用HEX的0~FD表示。31,127,254,255为预留值。
(5)BCNT 数据总长度,他的值表示的是BCNT下一个字节到最后(不包括校验字节)的字节数。接收设备用他可以鉴别出校验字节,也可以知道消息的结束。因为规定数据最多为25字节,所以他的值是从0~27。
(6)STATUS 状态字节,他也叫做“响应码”,顾名思义,他只存在于从机响应主机消息的时候,用2字节表示。他将报告通讯中的错误、接收命令的状态(如:设备忙、无法识别命令等)和从机的操作状态。
(7)DATA 数据字节,首先我想说明的是并非所有的命令和响应都包含数据字节,他最多不超过25字节(随着通讯速度的提高,正在要求放宽这一标准)。
(8)CHK 奇偶校验,方式是纵向奇偶校验,从起始字节开始到奇偶校验前一个字节为止。另外,每一个字节都有1位的校验位,这两者的结合可以检测出3位的突发错误。
举例:
短帧
主机到从机
FF FF FF FF FF 02 80 00 00 82
FF FF FF FF FF 导言字节
02 代表短帧
80 地址
00 命令
00 数据长度
82 校验位
从机回复
FF FF FF FF FF 06 80 00 0E 00 00 FE 00 57 05 05 05 02 00 00 11 00 04 33
FF FF FF FF FF 导言字节
06 定界符
80 地址
00 命令
0E 数据长度
00 00 表示OK
FE 数据的头字节
00 制造商ID
57 制造商设备类型
05 请求的前导符数
05 通用命令文档版本号
05 变送器规范版本号
02 设备软件版本号
00 设备硬件版本号
00 设备标志
11 00 04 设备序号
33 校验位
在这里插入图片描述
详细指令含义要参要HART协议的命令手册,这里不一一举例
在这里插入图片描述

二、单片机串口配置

本文以MSP430F149示例

void UART1_Init(void)
{
   
  U1CTL|= CHAR | PENA;             //复位SWRST,8位数据模式
  U1TCTL|=SSEL1;                      //SMCLK为串口时钟
  U1BR1=baud_h;                       //BRCLK=4MHZ,Baud=BRCLK/N
  U1BR0=baud_l;                        //N=UBR+(UxMCTL)/4
  U1MCTL=0;                        	    //微调寄存器为0,波特率1200bps
  ME2|=UTXE1;                         //UART1发送使能
  ME2|=URXE1;                         //UART1接收使能
  U1CTL&=~SWRST;
  IE2|=URXIE1;                        //接收中断使能位
 
  P3SEL|= BIT6 + BIT7;            //设置IO口为第二功能模式,启用UART功能
  P3DIR|= BIT6;                       //设置TXD1口方向为输出           
}

HART协议帧是一个标准UART帧,该帧包含一个起始位、8位数据、一个奇偶校验和一个停止位。
要注意校验允许位。
波特率是1200b/s

三、主循环函数

等待接收数据

void HartOperationMain(void)
{
   
	// 判断数据是否发送完成
	if((HartTransferFlag & COMM_STATE_TX_COMPLETE) == COMM_STATE_TX_COMPLETE)
	{
   
		// 清除发送完成标志
		HartTransferFlag &= (~COMM_STATE_TX_COMPLETE);
		
		// 数据发送完成,进行数据接收
		HartStartReceiveCommand();
	}
	
	// 判断数据是否接收完成
	if((HartTransferFlag & COMM_STATE_RX_COMPLETE) == COMM_STATE_RX_COMPLETE)
	{
   
		// 清除接收完成标志
		HartTransferFlag &= (~COMM_STATE_RX_COMPLETE);
		
//		// 数据接收完成,进行数据解析处理,如有需要,生成新的命令
//		HartFrameResolution();
		
		// 如解析数据成功,发送生成的命令帧
		if(HartFrameResolution() == TRUE)
		{
   
			// 侦听载波,确保传输路径上的数据已经传输完成
			//while((Get_OCD & 0x01) == 0x01);
			
			// 开始发送数据
			HartStartSendCommand();
		}
		else    // 如解析数据失败,继续接收数据
		{
   
			HartTransferFlag = COMM_STATE_READY;
			
			HartStartReceiveCommand();	// 开始接收数据
		}
	}	
	return;
}

发送数据

void HartStartSendCommand(void)
{
   
    // 判断通讯接口是否为空闲状态
    if((HartTransferFlag | COMM_STATE_READY) == COMM_STATE_READY)
    {
   
      // 设置计数差异为0,开始计时,用于判断通讯是否超时
      TimerOutSoftCountus = TimerSoftCountus;
      
      // 置为调制状态
      INRTS_Low;
      
      delay_ms(5);
      // 设置为调制状态后,延时5ms,等待信号主机HART达到解调要求
      //for(nTime = TimerSoftCountus; TimerSoftCountus - nTime < 5*1e3;);
      
      // 清除空闲标志,设置发送忙标志
      HartTransferFlag &= (~COMM_STATE_READY);
      HartTransferFlag |= COMM_STATE_BUSY_TX;
      
      // 设置通讯标志,即发送的数据结构
      CommunicationFlag = BllWethFlag | DataOutFlag | DataCouFlag;
      
      // 发送数据
      sendData(HartSenBuffer,HartSenCount);
      //sendData(testRead,0x16);
      delay_ms(20);
      //sendData(HartSenBuffer,HartSenCount);
      //HAL_UART_Transmit_IT(&HartUsart, HartSenBuffer, HartSenCount);//stm32如果用了HAL库 就用这个发送
      // 数据发送完成,清除发送忙标志
      HartTransferFlag &= (~COMM_STATE_BUSY_TX);
      
      // 设置数据发送完成标志
      HartTransferFlag |= COMM_STATE_TX_COMPLETE;
    }
	
    return ;
}

数据解析

uint32_t HartFrameResolution(
  • 36
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#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;
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
hart协议软件是用于工业自动化领域的通信协议,主要用于控制和监测现场设备。要编写hart协议软件,可以按以下步骤进行: 1.了解hart协议:首先,需要深入了解hart协议的工作原理和通信规范。这包括掌握hart协议的数据传输格式、命令和响应的结构以及协议的各种功能和特性。 2.选择合适的编程语言和平台:根据实际需求和开发环境,选择合适的编程语言和平台来编写hart协议软件。常用的编程语言包括C、C++和Python等,而平台可以是Windows、Linux或嵌入式系统等。 3.实现hart协议通信:根据hart协议的通信规范,编写代码实现与现场设备的通信。这包括建立通信连接、发送和接收命令、解析和处理数据等。 4.提供接口和功能:根据实际需求,提供适当的接口和功能给用户使用。这可以包括对设备参数的读写、实时监测和故障诊断等。 5.测试和调试:完成编写后,进行充分的测试和调试来确保软件的稳定性和正确性。这涉及模拟设备和场景、检查通信数据、处理异常情况等。 6.文档和发布:编写详细的文档说明软件的使用方法、功能和限制,并准备好软件的发布版本。 编写hart协议软件需要对hart协议有深入的理解,并具备相应的编程技术和经验。同时,还需要与现场设备进行充分的通信测试和验证,以确保软件的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值