通信协议定义
用于实现计算机与网络连接之间的标准,网络如果没有统一的通信协议,电脑 之间的信息传递就无法识别。 通信协议是指通信各方事前约定的用心规则,我们可以简单地理解为各计算机之间进行相互会话所使用的共同语言.两台计算机在进行通信时,必须使用的通信协议。
通信协议的种类和特点
目前常见的通信协议主要有:NetBEUI、IPX/SPX、NWLink、TCP/IP,在这几种协议中用得最多、最为复杂的当然还是TCP/IP协议,最为简单的是NetBEUI协议,它简单得不需要任何设置即可成功配置。
1、 NetBEUI协议
NetBEUI协议它的全称是:NetBIOS Extend User Interface,即用户扩展接口 ,它是由IBM 于1985 年 公司开发的,它是一种体积小、效率高、速度快的通信协议,同时它也是微软最为喜爱的一种协议。它主要适用于早期的微软操作系统如:DOS、LAN Manager、Windows3.x和Windows for Workgroup,但微软在当今流行的WIN9X和WINNT中仍把它视为固有缺省协议,由此可见它并不是我们所认为是“多余”的,而且在有的操作系统 中连网还是必不可少的,如在用WIN9X和WINME组网进入NT网络时一定不能仅用TCP/IP协议,还必需加上“NetBEUI”协议,否则就无法实 现网络连通,不信试试看!
因为它的出现比较早,也就有它的局限性,NetBEUI是专门为几台到百多机所组成的单段网络而设计的,它不具有跨网段工作的能力,也就是说它不具有“路由”功能,如果您在一服务器 或工作站上安装了多个网卡 作网桥时,将不能使用NetBEUI作为通信协议,这一点必需记清楚!
NetBEUI通信协议的特点就是:a、体积小,因原来就要是DOS、LAN Manger等较低版本的操作系统,故它对系统的要求不高,运行后占用系统资源最少;b、上面已讲过,也恐是因为主要服务的对象较低版本的操作系统,它不 具有路由功能,不能实现跨网络通信;c、因为简单,对系统要求低,也就适合初学组网人员学习使用。
2、 IPX/SPX协议
IPX/SPX协议的全称为:Internetwork Packet Exchange/Sequences Packet Exchange,网际包交换/顺序包交换。它是NOVELL公司为了适应网络的发展而开发的通信协议,它的体积比较大,但它在复杂环境下有很强的适应 性,同时它也具有“路由”功能,能实现多网段间的跨段通信。当用户接入的是NetWare服务器时,IPX/SPX及其兼容协议应是最好的选择。但如在 Windows环境中一般不用它,特别要强调的是在NT网络和WIN9X对等网中无法直接用IPX/SPX进行通信。
IPX/SPX的工作方式较简单,不需要任何配置,它可通过“网络地址”来识别自己的身份。在整个协议中 IPX是NetWare最底层的协议,它只负责数据在网络中的移动,并不保证数据传输是否成功,而SPX在协议中负责对整个传输的数据进行无差错处理。在 NT中提供了两个IPX/SPX的兼容协议:NWLink IPX/SPX 兼容协议、NWLink NetBIOS,两者统称为NWLink 通信协议。它继承了IPX/SPX协议的优点,更适应了微软的操作系统和网络环境,当需要利用Windows系统进入NetWare服务器 时,NWLink通信协议是最好的选择。
3、 TCP/IP协议
TCP/IP协议的全称是:TransmissiON Control Protocol /Internet Protocol,即传输控制协议/网际协议。它是微软公司为了适应不断发展的网络,实现自己主流操作系统与其它系统间不同网络的互连而收购开发的,它是 目前最常用的一种协议(包括INTERNET),也可算是网络通信协议的一种通信标准协议,同时它也是最复杂、最为庞大的一种协议。TCP/IP协议最早 用于UNIX系统中,现在是Internet的基础协议。
TCP/IP通信协议具有很灵活性,支持任意规模的网络,几乎可连接所有的服务器和工作站,正因为的灵活性也 带来了它的复杂性,它需要针对不同网络进行不同设置,且每个节点至少需要一个“IP地址”、一个“子网掩码”、一个“默认网关”和一个“主机名”。但是在 局域网中微软为了简化TCP/IP协议的设置,在NT中配置了一个动态主机配置协议(DHCP),它可客户端自动分配一个IP地址,避免了出错。
TCP/IP通信协议当然也有“路由”功能,它的地址是分级的,不同于IPX/SPX协议,这样系统就很容易 找到网上的用户,IPX/SPX协议用的是一种广播协议,它经常会出现广播包堵塞,无法获得最佳网络带宽。但特别要注意的一点就是在用WIN9X和 WINME组网进入NT网络时一定不能仅用TCP/IP协议,还必需加上“NetBEUI”协议,否则就无法实现网络连通。
通信协议选择的原则
1、 所选择的协议要与网络结构、功能一致
如果您的网络有网桥等类似路由设备,则必需选择具有路由功能的协议,如IPX/SPX、TCP/IP等,绝对 不能选择NetBEUI作为通信协议。但是您的网络没有路由选择功能,只是单一的网段,能用NetBEUI作为通信协议的尽量选用,因为此协议占用系统资 源最少,运行速度最快,如在DOS下与NT服务器 相 连,则最好选用NetBEUI作为通信协议,它比TCP/IP协议快且稳定,这一点我是深有体会的。以前我们公司在DOS通常用TCP/IP作为协议,但 总是出现死机,有时根本连不上网,但改用`NetBEUI作为通信协议后,系统性能一下得到了提高。要注意的一点是如果用NetBEUI作为通信协议,则 在您的NT服务器上同时也要装上此协议,否则根本行不通!还有就是在WIN9X(包括WINME)要实现与NT服务器成功连网则必需在客户和服务端安装上 `NetBEUI协议,否则可能连不上网,这一点我也做过多次试验。当然对于较复杂的网络还是选择TCP/IP协议好。
2、 尽量选用一种协议
如果可能的话最好只选用一种通信协议,因为每一仲协议都要占用系统的内存 资源的,会影响系统的工作效率的,在绝大多数情况下一种协议是完全可以满足连网需求的。
3、 保持协议的一致性
当您的网络要与其它网络进行通信时,要注意的是两个网络在协议的选择方面尽量一致,因为如果不一致,会导致在通信时互不相认,不过一般现在的通信协议标准中TCP/IP协议为绝大多数协议所接纳、兼容,不过安装TCP/IP协议一般是不会有这种不相认的现象出现的。
PIC18单片机的CANopen通信协议
引 言
CAN总线 由于具有实时性和可靠性高、组网成本低等优点,近年来在汽车工业、楼宇自动化、工厂自动化、机器人控制等领域得到广泛应用。CANopen协议不仅定义了通信规范,而且为可编程系统、不同器件、接口 等设备应用子协议定义了大量的行规。遵循CANopen协议开发出的设备能实现不同生产厂家的产品间的互操作。
要掌握CANopen协议,重点是对对象字典和设备模型的理解以及对4类通信对象的掌握。本文先对CANopen协议进行削析,再重点介绍在PICl8F458单片机 上开发基于CANopen协议的节点,最后通过温度测控系统实验验证了系统信息传递的可靠性、准确性和实时性。
1 CANopen通信协议简介
CANopen协议是CiA协会基于CAN总线定义的应用层协议之一,在各种控制系统 中得到了广泛应用。它以CAN芯片 为硬件基础,有效利用CAN芯片所提供的简单通信功能来满足工业控制网络的复杂应用层协议要求。CANopen网络是主从站(MA ST ER —Slave)结构,系统的运行由主站控制,主站可以对127个从设备进行控制,不同设备通过CAN总线进行连接组网。图1为CANopen设备模型。 CANopen通信协议接口用于提供在总线上收发通信对象的服务,不同CANopen设备间的通信都是通过交换通信对象来完成的。CANopen协议中定 义了4种通信对象(通信模式),用于对不同作用的信息进行处理:NMT对象(网络管理对象)、SDO对象(服务数据对象)、PDO对象(过程数据对象)、 特殊功能对象。
设备对象字典是CANopen协议的核心概念,位于CANopen设备模型中通信层和用户应用层之间,为用户 应用层提供接口。它是一个结构标准化的、有序的对象组,描述了该设备使用的所有数据类型、通信对象和应用对象。基于CANopen协议的网络系统中每一个 设备都要实现一个唯一的对象字典,区别在于设备类型不同其内容则不同。对象字典中每个对象拥有一个唯一的16位主索引和8位子索引,由此实现对其中各种对 象的访问。对象字典在系统软件设计中得以实现,然后使用标准化的EDS文件对其进行描述。
2 温度测控系统的软、硬件设计
2.1 温度测控系统组成
图2所示温度测控系统包含3个节点,它们构成一个CAN网络。传感温度节点发送测到的温度,此节点由主芯片和温度传感器 组成。温度调节节点接收到从传感温度节点发送的温度数据后,低于下限温度加热,高于上限温度降温,并发送调节状态;此节点由主芯片、状态显示灯和空调设备组成。命令节点接收从传感温度节点发送的温度和温度调节节点发送的状态在液晶屏 上显示,并有按钮可以发送NMT对象,对整个系统进行控制;此节点由主芯片、液晶屏、状态显示灯和按钮组成。
针对系统的要求,选用PICl8F458单片机作为从节点的主芯片。它是MICROCHIP 公司的单片16位高性能微控制器 ,具有片内CAN控制器,CAN模块符合CAN2.0B标准,带有3个发送缓冲区、2个接收缓冲区、2个接收屏蔽寄存器、6个完全接收滤波器 。CAN收发器 采用PCA82C250芯片,它具有高速稳定的差动发送和接收能力,可作为CAN协议控制器和物理总线接口。此外,为了便于调试和与主控制器的通信,系统中还扩展了RS232接口。
对于各个节点都采用预定义连接集中规定的11位ID。它由4位功能码和7位节点ID组成。其中各通信对象具体分配的COB—ID为NMT SERVICE一000、EMER—GENCY一080、TIMESTAMP 一100、SYNC一080、TPD01—180、RPD01—200、TPD02—280、RPD02—300、TSDO一580、RSDO一600、HEARTBEAT一700。
设定传感温度节点的ID为6,以TPDO对象方式发送测到的温度。所以发送对象的COB—ID分别为TP— D02(200+6)、TSD()(580+6)、HEARTBEAT(700+6)、EMERGENCY(080+6),接收对象的COB—ID分别为 NMT SERVICE(000)、RSD()(600+6)。
设定温度调节节点的ID为7,以RPDO对象方式接收从传感温度节点发送的温度,并以TPDO对象方式发送调 节状态。所以发送对象的COB—ID分别为TPD01(180+7)、TSDO(580+7)、HEARTBEAT(700+7)、 EMERGENCY(080+7),接收对象的COB—ID分别为NMT SERVICE(000)、RSDO(600+7)、RPDO2(280+6)。
设定命令节点的ID为8,以RPDO对象方式分别接收从传感温度节点发送的温度和从温度调节节点发送的调节状 态,也可用NMT对象方式发送NMT报文。所以发送对象的COB—ID分别为TSDO(580+8)、HEART—BEAT(700+8)、 EMERGENCY(080+8)、NMT MAS—TER(000),接收对象的COB—ID分别为NMT SERVICE(000)、RSD0(600+8)、RPD02(280+6)、RPD01(180+7)。
2.2 节点对象字典的建立
对象字典的内容除了包括CANopen协议规定的必需项外,还包括调用的各功能模块和参数设定项。它的正确配 置和使用,是保证整个CANopen网络正常运行的核心,是节点实现其预定功能的必要保证。对象字典的组建采用C语言在头文件中编写,通过 Struct(结构)语句实现对象字典内容的寻址。对象字典的规划赋值设计按照CANopen协议规定的格式完成,每个节点的对象字典都具有相同的结构, 但具体内容要根据不同的设备而定义,包含了描述这个设备和它网络的所有参数。对象字典的操作是CANopen协议软件的核心,通过对象字典实现网络间参数 的映射从而完成各种数据的处理,需要编写对象字典解码子函数、读对象字典子函数和写对象字典子函数。下面以温度调节节点为例介绍对象字典的创建、赋值和具 体操作。表1显示了此节点中PDO的各个参数。
OD_ENTRY(0x3000,Ox00,ATTR_RW | ATTR_ROM,TempLo),(对象主索引3000-下限温度)OD_ENTRY(0x3001,0x00,ATTR_RW|ATTR_ROM,TempHi),(对象主索引3001-上限温度)
OD_ENTRY(0x3100,0x00,ATTR_RO,Status),(对象主索引3100一状态)
OD_ENTRY(0x3200,0x00,ATTR_RWW,RemoteTemperature),(对象主索引3200-远程温度)#define ODD_RPDO_PAR_COB_ID_0 Ox40000286L(RPDO的COB-ID为0x286)
OD_ENTRY(0x160l,0x00,ATTR_RO | ATTR_ROM,ODE_RPDO_Mapping_NoOfEntries),OD_ENTRY(0x1601,0x01,ATTR_RO|ATTR_ROM,ODD_RPDO_MAP_0_1, (RPDO映射参数描述)
#define ODD_RPDO_MAP_0_1 0x32000010L(RPDO定位对象字典索引3200子索引00长度2)
OD_ENTRY(0xlA00,0x00,ATTR_RO|ATTR_ROM,ODE_TPDO_Mapping_NoOfEntries),
OD_ENTRY(0xlA00,0x01,ATTR_RO|ATTR_ROM,ODD_TPD0_MAP_0_l,(TPDO映射参数描述)
#define ODD_TPDO_MAP_0_1 0x31000008L(TP-DO定位对象字典索引3100子索引00长度1)
if(RemoteTemperature<TempLo){Status=2;}(低于下限温度加热,为加热状态)
else if(RemoteTemperature>TempHi){Status=1;}(高于上限温度降温,为降温状态)
else{Status=0;}(在设定温度范围内,为保持状态)
在此例中,PDO报文是在对象字典中用通信参数和映射参数来描述的。通信参数决定哪个COB—ID将被PDO 使用,此例中RPD0的COB—ID为286,TPDO的COB—ID为187。映射参数包含映射到PDO里的对象在对象字典中的索引和子索引,以及对象 的数据长度。此例中映射到RPDO里的对象在对象字典中的索引为3200,子索引为OO,长度为2;映射到TPDO里的对象在对象字典中的索引为 3100,子索引为00,长度为1。另外某些相关变量也由对象字典所描述,可以通过sD0对象传输方式进行下载修改或上传观察。此例中的上限温度、下限温 度,就由对象字典主索引3000、子索引00和主索引3001、子索引00分别描述。
2.3 节点的CANopen协议的软件实现
在节点上实现CANopen协议软件,首先要实现节点接收报文和发送报文的功能。接收报文的过程是,一旦有接 收中断产生,就把CAN接收缓冲区接收到的数据和地址放到一内部阵列中,对接收到的报文进行分析,并送去执行相应的子函数(NMT报文接收处理子函数、 SDO报文接收处理子函数、心跳报文接收处理子函数、SDO报文接收处理子函数),最后返回主程序。发送报文的过程是,把需要发送的变量放到对象字典里, 再把它们映射封装成相应的对象,最后将报文发送到总线上。
主程序按照通信流程编写,模块上电后先进行通信初始化。其首先初始化CANopen协议中的通信相关参数、对象字典、节点号,再初始化CAN控制器的硬件,包括单片机的内部寄存器、定时器 、 串行口、CAN控制器。通信初始化后自动进入节点初始化,并进行一些特定用户的初始化。完成后,发送一个启动报文自动进入预操作状态。此时用户的程序循环 执行着,在每个循环里,调用接收报文1次。这个模块用来检查接收到的对象,并作相应的处理。在NMT报文到来之前一直持续在预操作状态。在
这个状态里,节点可以通过SD0被配置和设置参数,但是不允许发送PDO。在相应的NMT报文到来后,即收到 启动远程节点命令后,进入操作状态,在这个状态就可以进行正常的通信了。在收到NMT报文,即停止远程节点命令,节点进入了停止状态,从而停止PDO和 SDO通信。
3 实验结果
在软件设计中编写了与上位机的通信模块 程序,可以将每个节点接收和发送报文的ID号、数据长度、数据转发到串口 ,便于上位机进行观测。
图3为系统传输数据的过程,温度传感节点发送报文过程为发送自启动报文后以周期为1 s发送心跳报文,以周期为100 ms发送PDO1报文,发送数据为传感温度(分别为19°,20°,…,21°…)。上限温度和下限高温都为20°时,温度调节节点接收报文过程为接收到 NMT报文命令后进入操作状态,不断接收PDOl报文。温度调节节点发送报文过程为发送自启动报文后以周期为1 s发送心跳报文,以事件触发方式发送PDOO报文(发送数据为工作状态长度为1,当接收到的温度低于20°时发送数据为02表示加热,当接收到的温度高于 20°时发送数据为01表示降温,当接收的温度为20°时发送数据为OO表示保持),状态显示灯不断闪烁红色、黄色、蓝色。如在命令节点中发送SDO报文 改变对象字典中的上限温度和下限温度,再观察各节点变化。情况1,当上限温度低于20°(为15°)时,温度调节节点一直在降温状态,状态显示灯为红色。 情况2,当下限温度高于20°(为25°)时,温度调节节点一直在加热状态,状态显示灯为黄色,情况3,当上限温度高于20°(为25°),下限温度低于 20°(为15°)时,温度调节节点一直在保持状态,状态显示灯为蓝色。命令节点在液晶显示屏 中显示实时温度,在状态显示灯中显示实时状态。
命令节点进行NMT对象操作时再观察各节点状态:当按下按钮1时,节点进入欲操作状态;当按下按钮2时,节点重启。
从以上两个实验可以看出,整个系统在运行过程中达到了满意的控制效果,实现了基于CANopen协议的对象数据的交换,通信传输理想。
结 语
应用PIC18单片机自行开发的基于CANopen协议的节点,实现了对4种通信对象信息的通信处理,并通过 测试验证了系统信息传递的可靠性、准确性和实时性,很好地满足了基于CANopen协议的温度测控系统的要求;对于CANopen在国内的应用和普及,以 及CAN网络和驱动产品尽早和国际接轨,具有重要的意义。
DMR通信协议与数字对讲机基带模块设计
引 言
随着嵌入式技术的发展,单片机 、DSP 、ARM等处理器 已经广泛应用于通信行业,尤其是在无线通信领域更是有其不可替代的作用。本设计中所用的核心器件MSP430FG4619是TI公司推出的MCU ,TMS320VC5510(简称“VC5510”)是TI公司的5000 系列DSP,而语音编解码芯片 AMBE一2000 也是以DSP为内核的。
无线对讲机 由于具有即时通信、经济实用、成本低廉、使用方便以及无需通信费等优点,因此广泛应用在民用、紧急事件处理等方面。尤其在紧急事件处理以及没有手机 网 络覆盖的情况,对讲机更加显示出它的不可取代的地位。如今,模拟对讲机仍然占据绝大部分的市场,但是由于数字通信可以提供更丰富的业务种类,更好的业务质 量、保密特性和连接性,以及更高的频谱效率,因此数字对讲机的研究、生产和使用是与时俱进的,符合信息化、数字化发展的必然趋势。DMR(Digital Mobile Radi0,数字移动无线电)协议是欧洲电信标准协会(ETSI)于2004 年所提出的一种新型的数字集群通信协议,具有很好的发展前途。
1 DMR通信协议的简要介绍
DMR协议使用一种双时隙TMDA接入的方式,每个突发2个时隙,每个时隙30 ms。其中每个时隙都有1.5 ms的保护时间。DMR协议结构遵守一种普通的分层结构,这种结构适用于描述参考资料和说明分层的通信结构。DMR标准定义了一种模型草案,把模型分成3 层,如图1所示。
2 整体设计及系统工作原理
DMR数字对讲机的基带模块硬件整体设计原理框图如图2所示。
整个基带系统的核心器件为信号处理器 件和控制器件。其中,信号处理器件选择TI公司的DSP芯片VC5510,控制器件为TI公司的MSP430FG4619单片机。
DSP的主要功能自然是数字信号的处理,本设计中VC5510实现信令编解码、语音数据的收发(与AMBE一2000 )的通信、帧同步、4FSK调制解调等功能。
MCU是整个系统的控制中心,人机接口 (键盘、显示)与MCU直接相连。MSP430FG4619实现与射频模块 的通信(包括基带信号发送接收、射频频点控制、信道检测等),DMR协议的高层控制(信令),人机接口互通等功能。MSP430FG4619是TI公司推出的一种超低功耗的16位单片机 口,具有丰富的片内外围资源,有丰富的定时器 、各类串口 、显示驱动、AD/DA等功能,通用端口也可对位进行操作。
语音编解码器 件为AMBE一2000 ,内核其实也是DSP。它是一种采用MBE(AMBE)算法的高性能多速率语音编解码芯片 ,用于实现对数字语音数据的编码及解码,其编解码速率可以硬件、软件控制,根据DMR协议的需要以及AMBE一2000 的特点,编解码速率选择为3.6kbps。与AMBE一2000 相连的AD/DA转换器 选择为AD73311,其兼容性非常好,广泛用于完成语音信号的模拟/数字互相转换。MSP430FG4619FG4619自带的AD/DA与射频接口相连,完成最终基带信号的数字/模拟相互转换。
信令与语音的通信机理是不一样的:信令发送端由人机接口发起,通过MCU组帧,送往DSP编码,再交由MCU 进行D/A转换,经射频模块发送出去;接收端的信号经过MCU的A/D转换后送往DSP进行解码,解码成帧后送往MCU进行处理。而语音的编解码完全由 AMBE一2000 来实现,经过DSP中转,由MCU进行发送或接收。
3 关键模块电路 连接原理
3.1 MCU与DSP之间的连接
由于VC5510具有增强主机接口(EHPI),因此可以直接将主机接口的相应引脚与MCU相连。其中HINT为送往主机的中断,必须为MCU中具有中断功能的通用I/O口,设计中选择P1.3,其他引脚可以为一般的GPIO。其电路连接原理图如图3所示。
HCS为片选信号,始终有效。HMODE为复用/非复用选择信号,低电平为复用模式。HlBE0和HBE1用 来选择高的字节数据有效,本设计中接地,表示高低字节均有效(16位)。HR/W确定HPI的读/写模式。HCNTL0、HCNTL1联合用来确定主机访 问HPI的哪个寄存器:地址寄存器HPIA、数据寄存器HPID、控制寄存器HPIC。HRDY为从机(DSP)数据准备好信号。HINT用于从机 (DSP)中断主机(MCU)。
MCU可以通过与HPI相连的相应引脚直接访问DSP的片内RAM,是一种DMA模式,而无需DSP参与,真 正体现了主机一从机模式。在主机访问从机片内资源时,从机可以独立地执行其他任务。主机需要从机响应时(有信令发往DSP),MCU可以通过访问DSP的 主机控制寄存器HPIC的特定位来向DSP发送一个中断;从机DSP需要主机响应时(向MCU发送信令),也可以通过HINT引脚来中断主机。实验证明, 这种连接方法方便有效,可以实现无差错通信。
3.2 DSP与AMBE一2000 的连接
VC5510与AMBE一2000 之间可以方便地通过多通道缓冲串口(McBSP)来连接。而AMBE一2000 的数据准备好信号EPR应该连到DSP的一个外部中断INT3上。
这部分的电路连接如图4所示。
设计中,AMBE一2000 采用主动模式,因此AMBE一2000 的发送帧同步信号(CHAN_TX_STRB)由自己提供,其他的时钟均由DSP提供。串口时钟频率应当低于2 MHz。
3.3 AD/DA功能
在前期的设计中,AD/DA功能是使用专门的芯片来实现的,与DSP相连。但是由于DSP资源紧张,再加上成 本的考虑,决定使用MSP430FG4619自带的AD/DA功能来实现,其中MSP430FG4619的ADC和DAC都是12位的,有16路ADC通 道和2路DAC通道。采样参考电压、采样率、采样触发信号、采样模式等都很丰富,可以软件编程控制。因此,使用MCU自带的AD/DA功能是一个既方便又 实用的方法。
4 软件简要总体设计
由于分为信令线和语音线这两条线,因此软件设计也应围绕这两条线分别设计:协议的底层部分由VC5510来完成,主要实现信令的编码/解码、4FSK调制解调、帧同步以及时隙;高层部分则完全是在MCU中实现的。
明确了“两条线”体现出模块化的思路,有助于软件的实现。底层模块完全在VC5510之中完成,而高层模块则在MSP430FG4619中实现。VC5510与MSP430FG4619的开发工具 分别为CCS和IAR,均可以使用C语言来编写,另外IAR还可以使用C++语言来编写,因此软件编写就不会显得陌生。
结 语
实验证明,本文所提供的设计方案是可行的,并且在之前的设计方案基础上进行了比较大的简化。本文的创新点在于 使用新型通信协议DMR,并在其基础上设计了一种数字对讲机的整个基带模块。本文的DMR数字对讲机基带模块设计为我国的数字对讲机领域的研发提供了一种 新的思路和方法。相信DMR协议以及在此基础上的数字对讲机行业必将蒸蒸日上。
Modbus RTU通信协议在MCF51QE128上的设计实现
引言
工业控制已从单机控制走向集中监控、集散控制,如今已进入网络集约制造时代。工业控制器连网也为网络管理提供了方便。Modbus就是工业控制器的网络协 议中的一种。
Modbus协议是应用于电子 控制器上的一种通信规约。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信。它已经成为主流的工业标准之一。不同厂商生产的控制设备通过Modbus协议可以连成工业网络,进行集中监控。
Modbus通信协议
1 通信传送方式
每一个数据字节包括:每个字节的位、1个起始位、8个数据位、最小的有效位先发送、1个奇偶校验位(无校验则无)、1个停止位(有校验时)、2个停止位 (无校验时)。
在RTU模式下每个字节的格式(11bit)如下:
编码系统:8位二进制
字节组成:1bit起始位、8bit数据位,最低位最先发送、1bit奇偶校验位、1bit停止位(或者没奇偶校验位,就发送一个附加的停止位)。
2 数据帧结构
地址码:地址码为通信传送的第一字节。这字节表明由用户设定地址码的从机将接收由主机发送来的信息。并且每个从机都有唯一的地址码,并且响应回送均以各自 的地址码开始。主机发送的地址码表 明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。
功能码:通信传送的第二字节。ModBus通信规约定义功能号为1~127。根据实际需要只利用其中的一部分功能码。作为主机请求发送,通过功能码告诉从 机执行什么动作。作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。如果从机发送的功能码的最高位为1,则表明 从机没有响应操作或发送出错。
表1 每一个完整的数据帧构成
数据区:数据区根据不同的功能码而不同。数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。
CRC码:二字节的错误检测码。冗余循环码检查(CRC)包含两字节,即16位二进制。CRC码由发送设备计算,放置于发送信息的尾部。接收信息的设备再 重新计算接收到信息的CRC码,比较计算得到的CRC码是否与接收到的相符,如果两者不相符,则表明出错。CRC码的计算方法是,先预置16位寄存器全为 1。再逐步把每8位数据信息进行处理。在进行CRC码计算时只用8位数据位、起始位及停止位,如有奇偶校验位的话也包括奇偶校验位,都不参与CRC码计 算。
在计算CRC码时,8位数据与寄存器的数据相异或,得到的结果向低位移一位,用0填补最高位。再检查最低位,如果最低位为1,把寄存器的内容与预置数相异 或,如果最低位为0,不进行异或运算。
这个过程一直重复8次。第8次移位后,下一个8位再与现在寄存器的内容相异或,这个过程与以上一样重复8次。当所有的数据信息处理完后,最后寄存器的内容 即为CRC码值。CRC码中的数据发送、接收时低字节在前。在实际应用中,为了提高运算速度,采用了查表的方法取代计算方法。
3 Modbus RTU数据帧结构
在RTU模式下,每一个数据帧之间的间隔至少是3.5个字符位。一个完整的数据帧必须要连续的传送,当一帧消息中两字节间的间距大于1.5字符位时,此数 据帧错误,被接受方放弃。
当通信波特率小于等于19 200b/s。对1.5个字符位/3.5个字符位计算时间有严格要求。当通信波特率大于19 200b/s。1.5个字符位固定为750μs,3.5个字符位固定为1.75ms。官方的Modbus RTU规定标准为3.5个字符长周期,不同的串口 设备由于使用环境不同可能在发送中出现5~10字长的间隙。对于Modbus RTU来说比较安全的设置为50ms。
4 用到的功能代码
用到的功能代码如表2所示。
表2 功能代码
MCF51QE128的主要特性
系统核心控制器采用的是FREESCALE 公司推出的32位单片机 MCF51QE128。它是一款32位ColdFire V1 MCU ,特点包括:停止电流降至370nA,6μs唤醒时间,超低运行电流为50mA;50.33MHz ColdFire V1内核运行频率;25.165MHz的总线 频率;最大为8KB的RAM;最高128KB的闪存;24信道的12位ADC;两个模拟比较器 ;2xSCI、2xI2C、2xSPI;一个6信道和两个3信道的定时器 PWM模块;RTC;最多70路通用输入/输出(GPIO);系统集成频率锁定环(FLL)和软件看门狗;内部时钟源(ICS );低功耗外部32kHz振荡器 ;电压范围为1.8~ 3.6V;增强型内部振荡器、电压调节器 和实时计数器 。通用开发环境是CodeWarrior for MicrocON trollers 6.0。
软件设计
1 接收软件流程
如图1所示。
图1 从机软件流程
2 配置串口和定时器
void usart_init()
{
SCI1C1=0x13;//9bit character mode,odd parity
SCI1C2=0x2c;
SCI1BDL=0x29;//38400bps
SCI1BDH=0;
}
void timer3_init(void)//8MHz主时钟1333Hz中断判断命令包结束
{
TPM3CNTH=0;
TPM3CNTL=0;
TPM3MODH=0x49;
TPM3MODL=0xbe;
TPM3SC=0x48;
}
3 MCF51QE128解包modbus RTU的程序
void interrupt VectorNumber_ Vsci1rx SCI_RX_ISR(void)//字节接收程序
{
if(SCI1S1_PF==1)communication_error=1;//字节校验错误置通信失败标志位
*(pointer_RX1)=SCI1D;//将数据放入缓冲队列
pointer_RX1++;//队列指针后移
len_RX1++;//收到字节长度加1
timer3_reset();//定时器复位
timer3_init();//定时器重启动
}
void interrupt VectorNumber_Vtpm3ovf Timer3_ISR(void)//判断命令包接收结束
{
timer3_cnt++;//定时器中断次数加1
if(timer3_cnt==2)
{
timer3_reset();//定时器复位
pointer_RX1=Buffer_RX1;//队列指针初始化
full_RX1=1;//收完置标志位
}
}
4 CRC查表产生函数
由于篇幅有限,此处不再详述,表具体内容可参照相关参考文献。
总结
笔者的设计基于MCF51QE128控制核心来实现Modbus协议,已经成功进行了实际应用,通信可靠,而且实现起来比较容易。该设计为采用MCF51QE128微控制器 进行工业产品设计通信的应用提供了参考方案。
来源:[http://www.jdzj.com]机电之家·机电行业电子商务平台!
单片机通信协议处理
现在大部分的仪器 设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。其中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等 1. 自定义数据通信协议
这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我们通常所用到的RS232、RS485、红外、光纤 、无线等等通信方式。在这个层面上,底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全部建立在这两个操作方法之上。
通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。
帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链 中判别数据包的误码率越低越好。减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。通常有两种做法,一、减 小特征字节的匹配几率。二、增加特征字节的长度。通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾 的特征字来避开,从而减小特征字节的匹配几率。使用第二种方法的情况更加通用,适合于数据随即的场合。通过增加特征字节的长度减小匹配几率,虽然不能够完 全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。
地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。在一对多的通信系统中,可以只包含目的地址信息。同时包含源地址和目的地址则适用于多对多的通信系统。
数据类型、数据长度和数据块是主要的数据部分。数据类型可以标识后面紧接着的是命令还是数据。数据长度用于指示有效数据的个数。
校验码则用来检验数据的完整性和正确性。通常对数据类型、数据长度和数据块三个部分进行相关的运算得到。最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CRC运算等等,可以根据运算速度、容错度等要求来选取。
2. 上位机和下位机中的数据发送
物理通信层中提供了两个基本的操作函数,发送一个字节数据则为数据发送的基础。数据包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。当然发送的方法也有不同。
在单片机 系统中,比较常用的方法是直接调用串口 发送单个字节数据的函数。这种方法的缺点是需要处理器 在 发送过程中全程参与,优点是所要发送的数据能够立即的出现在通信线路上,能够立即被接收端接收到。另外一种方法是采用中断发送的方式,所有需要发送的数据 被送入一个缓冲区,利用发送中断将缓冲区中的数据发送出去。这种方法的优点是占用处理器资源小,但是可能出现需要发送的数据不能立即被发送的情况,不过这 种时延相当的小。对于51系列单片机,比较倾向于采用直接发送的方式,采用中断发送的方式比较占用RAM资源,而且对比直接发送来说也没有太多的优点。以 下是51系列单片机中发送单个字节的函数。
void SendByte(unsigned CHAR ch)
{
SBUF = ch;
while(TI == 0);
TI = 0;
}
上位机中关于串口通信的方式也有多种,这种方式不是指数据有没有缓冲的问题,而是操作串口 的方式不同,因为PC上数据发送基本上都会被缓冲后再发送。对于编程来说操作串口有三种方式,一、使用windows系统中自带的串口通信控件,这种方式 使用起来比较简单,需要注意的是接收时的阻塞处理和线程机制。二、使用系统的API直接进行串口数据的读取,在windows和linux系统中,设备被 虚拟为文件,只需要利用系统提供的API函数即可进行串口数据的发送和读取。三、使用串口类进行串口操作。在此只介绍windows环境下利用串口类编程 的方式。
CSerialPort是比较好用的串口类。它提供如下的串口操作方法:
void WriteToPort(CHAR * string, int len);
串口初始化成功后,调用此函数即可向串口发送数据。为了避免串口缓冲所带来的延时,可以开启串口的冲刷机制。 3. 下位机中的数据接收和协议解析
下位机接收数据也有两种方式,一、等待接收,处理器一直查询串口状态,来判断是否接收到数据。二、中断接收。两种方法的优缺点在此前的一篇关于串口通信的文章中详细讨论过。得出的结论是采用中断接收的方法比较好。
数据包的解析过程可以设置到不同的位置。如果协议比较简单,整个系统只是处理一些简单的命 令,那么可以直接把数据包的解析过程放入到中断处理函数中,当收到正确的数据包的时候,置位相应的标志,在主程序中再对命令进行处理。如果协议稍微复杂, 比较好的方式是将接收的数据存放于缓冲区中,主程序读取数据后进行解析。也有两种方式交叉使用的,比如一对多的系统中,首先在接收中断中解析“连接”命 令,连接命令接收到后主程序进入设置状态,采用查询的方式来解析其余的协议。
以下给出具体的实例。在这个系统中,串口的命令非常简单。所有的协议全部在串口中断中进行。数据包的格式如下:
0x55, 0xAA, 0x7E, 0x12, 0xF0, 0x02, 0x23, 0x45, SUM, XOR, 0x0D
其中0x55, 0xAA, 0x7E为数据帧的帧头,0x0D为帧尾,0x12为设备的目的地址,0xF0为源地址,0x02为数据长度,后面接着两个数据0x23, 0x45,从目的地址开始结算累加、异或校验和,到数据的最后一位结束。
协议解析的目的,首先判断数据包的完整性,正确性,然后提取数据类型,数据等数据,存放起来用于主程序处理。代码如下:
if(state_machine == 0) // 协议解析状态机
{
if(rcvdat == 0x55) // 接收到帧头第一个数据
state_machine = 1;
else
state_machine = 0; // 状态机复位
}
else if(state_machine == 1)
{
if(rcvdat == 0xAA) // 接收到帧头第二个数据
state_machine = 2;
else
state_machine = 0; // 状态机复位
}
else if(state_machine == 2)
{
if(rcvdat == 0x7E) // 接收到帧头第三个数据
state_machine = 3;
else
state_machine = 0; // 状态机复位
}
else if(state_machine == 3)
{
sumchkm = rcvdat; // 开始计算累加、异或校验和
xorchkm = rcvdat;
if(rcvdat == m_SrcAdr) // 判断目的地址是否正确
state_machine = 4;
else
state_machine = 0;
}
else if(state_machine == 4)
{
sumchkm += rcvdat;
xorchkm ^= rcvdat;
if(rcvdat == m_DstAdr) // 判断源地址是否正确
state_machine = 5;
else
state_machine = 0;
}
else if(state_machine == 5)
{
lencnt = 0; // 接收数据计数器
rcvcount = rcvdat; // 接收数据长度
sumchkm += rcvdat;
xorchkm ^= rcvdat;
state_machine = 6;
}
else if(state _machine == 6 || state _machine == 7)
{
m_ucData[lencnt++] = rcvdat; // 数据保存
sumchkm += rcvdat;
xorchkm ^= rcvdat;
if(lencnt == rcvcount) // 判断数据是否接收完毕
state_machine = 8;
else
state_machine = 7;
}
else if(state_machine == 8)
{
if(sumchkm == rcvdat) // 判断累加和是否相等
state_machine = 9;
else
state_machine = 0;
}
else if(state_machine == 9)
{
if(xorchkm == rcvdat) // 判断异或校验和是否相等
state_machine = 10;
else
state_machine = 0;
}
else if(state_machine == 10)
{
if(0x0D == rcvdat) // 判断是否接收到帧尾结束符
{
retval = 0xaa; // 置标志,表示一个数据包接收到
}
state_machine = 0; // 复位状态机
}
此过程中,使用了一个变量state_machine作为协议状态机的转换状态,用于确定 当前字节处于一帧数据中的那个部位,同时在接收过程中自动对接收数据进行校验和处理,在数据包接收完的同时也进行了校验的比较。因此当帧尾结束符接收到的 时候,则表示一帧数据已经接收完毕,并且通过了校验,关键数据也保存到了缓冲去中。主程序即可通过retval的标志位来进行协议的解析处理。
接收过程中,只要哪一步收到的数据不是预期值,则直接将状态机复位,用于下一帧数据的判断,因此系统出现状态死锁的情况非常少,系统比较稳定,如果出现丢失数据包的情况也可由上位机进行命令的补发,不过这种情况笔者还没有碰到。
对于主程序中进行协议处理的过程与此类似,主程序循环中不断的读取串口缓冲区的数据,此数据即参与到主循环中的协议处理过程中,代码与上面所述完全一样。
4. 上位机中的数据接收和命令处理
上位机中数据接收的过程与下位机可以做到完全一致,不过针对不同的串口操作方法有所不同。 对于阻赛式的串口读函数,例如直接进行API操作或者调用windows的串口通信控件,最好能够开启一个线程专门用于监视串口的数据接收,每接收到一个 数据可以向系统发送一个消息。笔者常用的CSerialPort类中就是这样的处理过程。CSerialPort打开串口后开启线程监视串口的数据接收, 将接收的数据保存到缓冲区,并向父进程发送接收数据的消息,数据将随消息一起发送到父进程。父进程中开启此消息的处理函数,从中获取串口数据后就可以把以 上的代码拷贝过来使用。
CSerialPort向父类发送的消息号如下:
#define WM_COMM_RXCHAR WM_USER+7 // A CHAR acter was received and placed in the input buffer.
因此需要手动添加此消息的响应函数:
afx_msg LON G OnCommunication(WPARAM ch, LPARAM port);
ON_MESS AGE(WM_COMM_RXCHAR , OnCommunication)
响应函数的具体代码如下:
LONG CWellInfoView::OnCommunication(WPARAM ch, LPARAM port)
{
int retval = 0;
rcvdat = (BYTE)ch; if(state_machine == 0) // 协议解析状态机
{
if(rcvdat == 0x55) // 接收到帧头第一个数据
state_machine = 1;
else
state_machine = 0; // 状态机复位
}
else if(state_machine == 1)
{
if(rcvdat == 0xAA) // 接收到帧头第二个数据
state_machine = 2;
else
state_machine = 0; // 状态机复位
……
5. 总结
以上给出的是通信系统运作的基本雏形,虽然简单,但是可行。实际的通信系统中协议比这个要复杂,而且涉及到数据包响应、命令错误、延时等等一系列的问题,在这样的一个基础上可以克服这些困难并且实现出较为稳定可靠的系统。
一种实现RS422通信协议的接口电路
目前通用的串行通信接口 标准主要有RS 232,RS 422和RS 485,其中RS 232属于单端不平衡传输协议,传输距离短,抗干扰性差;RS 485与RS 422均为平衡通信接口,但RS 485他只有一对双绞线 ,工作于半双工模式。RS 422属于一种平衡通信接口,采用全双工通信模式,传输速率高达10 Mb/s,传输距离长2 000 m,并允许在一条平衡总线 上连接最多10个接收器[1]。由于该类电路 的优异性能,RS 422接口芯片 已广泛应用于工业控制、仪器 、仪表 、多媒体网络、机电一体化产品等诸多领域。
1 系统概述
RS 422通信接口芯片 系统框图如图1所示,主要包含数据发送模块和接收模块 。 接收模块主要是将通信总线差分电压转换成数字量送给主机,发送模块主要是将主机发送的数字量转换成差分电压输出。DIN是TTL/CMOS信号输入端 口,TX1,TX2为相应的差分信号输出端。RX1,RX2为差分信号输入端口,DOUT为TTL/CMOS电平输出口。EN为使能输入端,通过使能模块 控制整个芯片的工作与否。此外还含有温控模块,在高温下关断芯片,起到过热保护的作用。
2 电路设计
根据RS 422通信规范的描述,数据发送端使用2根信号线 发送同一信号(2根线的极性相反),在接收端对这两根线上的电压信号相减得到实际信号。逻辑"1"以两线间的电压差为+(2~6 V)表示,逻辑"0"以两线间的电压差为-(2~6 V)表示。
因此,发送器 的目的就是要接收TTL/CMOS信号并把他转换为一对符合要求的差分信号,而接收器则与之相反。
2.1发送器电路的设计
发送器电路的设计有2种方法,一种不限摆率,发送数据速度可达10 Mb/s,但受信号在传输线上的反射(re-flection)、电磁干扰(electron magnet interference)的影响,传输距离较短;另一种采取限摆率技术,通过降低数据传送速度达到长距离传输的目的[2]。本文采取第一种方法。
在CMOS工艺下,这种电路很容易实现,关键是选择具有合适尺寸的电路使其符合输出电流及功率要求。如图2所示为本文设计的电路图,电路要求是输出电平同TTL电平的兼容,所以输功率管 采用的都是NMOS管。
DIN为数据输入端,EN为使能端,EN为高电平时电路工作。当DIN为高时,N0及N3导通而N1,N2截止,T×1输出高电平而T×2输出低电平。反之,若DIN为低时,N0及N3截止而N1,N2导通。这样,逻辑控制电路 便将标准的TTL/CMOS信号分为2路大小相等,相位相反的差分信号T×1和T×2。为提供合适的驱动电流,输出管采用较大的尺寸。
2.2接收器电路设计
接收电路接收RS 422的标准差分信号并将其转化为CMOs/TTL电平,其核心电路为一比较器 [3],主要功能是完成差分信号R×1,R×2的比较,若R×1>R×2,则输出高电平1,若R×1<R×2,则输出低电平0。
P14~P16与N14,N15构成启动电路,P12,P13与N12,N13,R0构成偏置电 路,P0~P6与。N0~N5为比较电路,该比较器利用内部正反馈实现迟滞电压控制[4],以防止受噪声干扰造成输出端的频繁跳变。迟滞电压可通过调节 N0,N1,N2,N3的宽长比来实现。以N1,N2支路为例,阐述阈值电压的推导:当R×1为高,R×2为低时,P1及N1,N2支路导通:R×2不断 降低,与R×1差值达到VTRP输出跳变:
本文选择100 mV的迟滞电压,有效保证了系统的稳定性。由比较器输出的电压,经过施密特触发器 及反相器整形后,成为标准的方波信号输出。
2.3过温保护电路的设计
电路中使用与发送电路中结构相同的迟滞比较器,设置了95℃和135℃两个温度跳转点,消除了热振荡现象。
温度保护电路的工作原理如下:N5,N6,P2,P3,P4, Q3,Q4及R4,R3,R1构成基准发生电路,Y为基准电压输出点。由于共源共栅器件的作用,N5,N6源端电位近似相等.
通过调节R2与R1的比值使基准电压具有零温度系数,调节R4的值使输出合适的基准电压值。
X点电压大约为3VBE,由于VBE是一个具有负温度系数的量,因此随温度的上升而下降。常温时,X点电位高 于Y点电位,OUT端输出高电平,芯片正常工作。当温度上升至135℃时,X点电位低于Y点电位,比较器输出低电平,芯片关断。当芯片温度再次下降,低到 95℃时,比较器再次翻转,芯片恢复正常工作。
3 仿真结果
3.1发送电路的仿真
波形从上至下依次为:使能信号EN、输入波形、TX1、TX2、负载电阻 电流。从图5中可以看出,发送器电路能够将一路CMOS信号转换为一对大小相等、方向相反的差分信号。在带100 Ω负载时,输出高电平为3 V,低电平0.3 v,负载电流27 mA,延迟9 ns上升时间4 ns,下降时间5 ns。使能信号EN为低时,电路不工作。
3.2接收电路的仿真
接收电路的仿真情况,他能够将差分信号转换为标准CMOS电平,延迟大约为2 ns,上升约为0.5 ns,下降时间约为1 ns,迟滞电压约为1 00 mV。
3.3过温保护模块的仿真
对温度保护电路在0~140℃范围内进行扫描可得如上曲线,当芯片温度上升至大约在135℃时,温度保护模块输出低电平,关断芯片。当芯片温度下降至95℃时,温度保护模块输出电平跳变,芯片恢复正常工作。
4 版图设计
(1)为了防止电阻寄生的PN结正向导通,图4比较电路中R1,R2,R3,R4不能选取有源区电阻,只能选取多晶硅电阻。绘制时要注意匹配,如采用1∶2∶4的匹配方式。为了保证所有电阻所处的光刻环境一样,还在电阻阵列2边增加了DUMMY 电阻。
(2)对称性设计:电路中所有对称的MOS管及PNP管都要注意匹配,绘制版图时,可以把一个大的MOS管分成若干小管,采用共质心对称的方式以避免工艺的横向偏差和纵向偏差的影响,并添加DUMMY 管。对于PNP管,如发射极面积比为1∶8的Q4和Q3,可采用1∶8的排列方式,即将Q3分成8个相同的PNP管,对称排列在Q4周围。
(3)ES[)设计:ESD不仅仅要在放在I/O PAD旁,VDD及GND之间的ESD保护同样要引起高度注意,这可以通过添加sLtpply clamp电路实现。ESD器可采用LVTSCR结构以获得更加稳定的性能。
(4)输山功率管设计:对于驱动器 部分的输山火功率管,采用又指晶体管 的设计方式,以减少漏源结面积和栅电阻。
(5)保护环设计:为保护一些结构,要在适当的电路外围添加保护环。本芯片采用P衬底N阱工艺,有2种保护环,N阱的周围应该加吸收少子电子 的 N型保护环(nt-ap),ntap环接VDD,隔离衬底噪声;P衬底的周围应该加吸收少子空穴的P型保护环(ptap),ptap环接gnd,吸收衬底 噪声。而且双环对少子的吸收效果比单环好。添加保护环可有效防止闩锁效应的发生。由于电路中功率管宽长比较大,其上的电流及消耗的功率也较大,容易干扰其 他电路,因此需要在功率管及附近的电路的周围分别都添加保护环。
5 结语
设计了一款适用于RS 422通信协议的接口芯片,他具有高传输速率、大驱动电流、低静态关断电流的特点,且具有多种保护电路,能抵抗恶劣环境,可广泛用于各类数据通信领域。
HART通信协议在现场仪表远程通信中的实现
1 HART协议简介
HART(Highway Addressable Remote Transducer),可寻址远程传感器 高速通道的开放通信协议,是美国Rosemen公司于1985 年推出的一种用于现场智能仪表 和控制室设备之间的通信协议
HART装置提供具有相对低的带宽,适度响应时间的通信,经过10多年的发展,HART技术在国外已经十分成熟,并已成为全世界智能仪表的工业标准
HART协议采用基于Bell202标准的FSK频移键控信号,在低频的
4~20mA模拟信号上叠加幅度为0.5mA的音频数字信号进行双向数字通讯,数据传输率为1.2Mbps由于FSK信号的平均值为0,不影响传送给控制系统模拟信号的大小,保证了与现有模拟系统的兼容性
在HART协议通信中,主要的变量和控制信息由4~20mA传送,在需要的情况下,另外的测量、过程参数、设备组态、校准、诊断信息通过HART协议访问
HART通信采用的是半双工的通信方式
HART协议参考 ISO/OSI(开放系统互连模型 ),采用了它的简化三层模型结构,即第一层物理层,第二层数据链路层和第七层应用层
第一层:物理层规定了信号的传输方法、传输介质,为了实现模拟通信和数字通信同时进行而又互不干扰,HART 协议采用频移键控技术FSK,即在4~20mA模拟信号上迭加一个频率信号,频率信号采用Be11202国际标准,数字信号的传送波特率设定为 1200bps,1200Hz代表逻辑“0”,2200Hz代表逻辑“1”,信号幅值0.5A
通信介质的选择视传输距离长短而定通常采用双绞同轴电缆 作为传输介质时,最大传输距离可达到1500m线路总阻抗应在230~1100Ω之间
第二层:数据链路层规定了HART帧的格式,实现建立、维护、终结链路通讯功能HART协议根据冗余检错码信息,采用自动重复请求发送机制,消除由于线路噪音或其他干扰引起的数据通讯出错,实现通讯数据无差错传送
现场仪表要执行HART指令,操作数必须合乎指定的大小每个独立的字符包括1个起始位、8个数据位、1个奇偶校验位和一个停止位由于数据的有无和长短并不恒定,所以HART数据的长度也是不一样的,最长的HART数据包含25个字节
第七层:应用层为HART命令集,用于实现 HART指令命令分为三类,即通用命令、普通命令和专用命令
2 现场仪表HART协议远程通信硬件设计
某现场仪表的HART协议部分主要完成数字信号到模拟电流信号的转换,并实现对主要变量和测量、过程参数、设备组态、校准及诊断信息的访问
HART通信部分主要由D/A转换和Bell202
MODEM及其附属电路 来实现其中,D/A变换作用是直接将数字信号转换成4~20mA电流输出,以输出主要的变量Bell202
MODEM及其附属电路的作用是对叠加在4~20mA环路上的信号进行带通滤波放大后,HART通信单元如果检测到FSK频移键控信号,则由Bell202
MODEM将1200Hz的信号解调为“1”,2200Hz信号解调为“0”的数字信号,通过串口 通信交MCU ,MCU接收命令帧,作相应的数据处理然后,MCU产生要发回的应答帧,应答帧的数字信号由MODEM调制成相应的1200Hz和2200Hz的FSK频移键控信号,波形整形后,经AD421叠加在环路上发出
D/A变换器 采用AD421,它是美国ADI公司推出的一种单片高性能数模转换器 ,由环路供电,16位数字信号以串行方式输入,可以将数字信号直接转换成4~20mA电流输出它提供了高精度、全集成、低功耗的解决方案 ,采用16引脚DIP、TSSOP、SOIC封装,可实现低成本的远程智能工业控制AD421包括串行输入16位D/A(数字/电流 )转换,除自身用电外,还提供可选择的(5V,3.3 V或 3 V)稳压输出供变送器 其他部分用电
HART MODEM采用 Smar公司的 HT2012,是符合Bell202标准的半双工调制解调器 ,实现HART协议规定的数字通信的编码或译码该芯片专为HART仪器 设计,片内集成了符合 BELL202标准的调制器、解调器、时钟及定时电路、检测控制电路 性价比较高,16脚 DIP和28脚PLC C封装,在+5V供电时工作电流80μAHT2012与微控制器 交换数字信号,同AD421作模拟信号接口 它一方面与MCU的异步串行通信口进行串行通信,一方面将输入的不归零的数字信号调制成FSK信号,再经AD421叠加在4~20mA的回路上输出,或者将回路信号经带通滤波、放大整形后取出FSK信号解调为数字信号,从而实现HART通信
对于HART MODEM所需要的输入时钟,采用7.3728MHz的晶振 通过两个计数器 74LS161进行两次4分频,得到16分频的时钟
由于HART数字通信的要求,有0.5mA的正弦波电流信号叠加在4mA电流上,因此整个硬件电路必须保证在3.5mA以下还能正常工作,因此实现系统的低功耗设计非常重要
通信的软件设计
HART通信程序也即为HART协议数据链路层和应用层的软件实现,是整个现场仪表软件设计的关键
在HART通信过程中,主机(上位机)发送命令帧,现场仪表通过串行口中断接收到命令帧后,由MCU作相应的数据处理,产生应答帧,由MCU触发发送中断,发出应答帧,从而完成一次命令交换
首先在上电或者看门狗复位后,主程序要对通信部分进行初始化,主要包括波特率设定、串口工作方式设定、清通信缓冲区、开中断等
在初始化完成之后通讯部分就一直处在准备接收状态下,一旦上位机有命令发来,HT2012的载波检测口OCD 变为低电平,触发中断,启动接收,程序就进入接收部分然后完成主机命令的解释并根据命令去执行相应的操作,最后按一定的格式生成应答帧并送入通信缓冲区, 启动发送,完成后关闭SCI
在发送应答帧之后,再次进入等待状态,等待下一条主机命令
4 结语
实践证明,上述方法具有结构简单、工作可靠的特点,完全符合HART协议,具有较好的通用性
由于HART众多不容置疑的优点,使得它成为全世界应用最广的现场通信协议,已成为工业上实用的标准因此在今后很长一段时期内,HART协议产品在国内仍然具有十分广阔的市场