现在位置:范文先生网>理工论文>电子通信论文>DNP3.0在基于DSP的FTU中的实现

DNP3.0在基于DSP的FTU中的实现

时间:2022-08-06 15:15:29 电子通信论文 我要投稿
  • 相关推荐

DNP3.0在基于DSP的FTU中的实现

摘要:馈线终端单元(FTU)是配电自动化系统中的重要组成部分,以DSP为核心构成的FTU具有运算速度快和精度高等特点,而DNP3.0则是FTU与配网主站通信的主流规约。讨论了在DSP平台上实现DNP3.0的特殊性,介绍了DSP片内异步串口的使用方法,给出了程序的主要流程图和数据结构以及涉及串行通信的C语言源码。
  关键词:分布式网络规约数字信号处理器配电自动化馈线终端单元异步串行口
  
  DNP(DistributedNetworkProtocol,分布式网络规约)是HARRIS公司推出的一种远动通信规约,是目前电力系统自动化产品市场上的一种主流通信规约。它既可作为FTU(FeederTerminalUnit,馈线终端单元)与配网主站之间的规约,又可作为RTU与调度主站之间的规约。由于目前我国的大部分配电自动化(DA)产品都支持DNP3.0,为使产品更具兼容性和标准性,FTU有必要采用DNP3.0作为其与配网主站之间的通信规约。
  
  FTU作为配电自动化系统(DAS)中重要的组成部分,除担负最基本的测量与控制任务外,还要与中心子站或主站进行通信。某些FTU还具有微机保护功能,故而其核心部分一般采用高档次的16位或32位单片机。但在交流采样的情况下,单片机计算U、I有效值以及P、Q等参数往往力不从心,导致实时性较差。虽然可以通过采用主—从结构来解决,但这样无疑要增加成本。DSP(数字信号处理器)恰恰以数学计算(如快速傅立叶变换)而见长,虽然它的控制功能逊于单片机,但由于FTU只负责监控一路柱上开关,故而在这种测控量不多的情况下,如果不需要就地保护功能,一片DSP还是完全能够胜任的。TMS320F206(以下简称F206)是TI公司生产的TMS320C2000系列中的一款主流DSP,它属于16位定点DSP,可应用于电机控制以及工业自动化和电力行业中,价格接近普通16位单片机。FTU以一片TMS320F206为核心,并辅以A/D转换器等外围器件,即可完成测控、参数计算和通信等任务。
  
  由于DNP3.0帧格式中的基本单元是8位整型数(BYTE字节),而F206中的数据总线是16位的,寻址时是以字(WORD)为单位,而且TI提供的C语言中也没有8位整型数,这样在F206平台上实现DNP3.0时就存在一个8位/16位转换的问题。另外,大多数DSP利用外接UART(通用异步收发器)来实现串行通信。本文着重讨论如何在保证程序清晰和高效的前提下利用F206片内异步串口实现以DNP3.0为通信协议的串行通信。
  
  1DNP3.0简介[4~5]
  
  DNP3.0为纯软件的通信协议,其结构如图1所示。它基于IEC870-5标准,采用了ISO七层模型中的三层:物理层、数据链路层和应用层,其结构为增强协议结构。这种分层结构使得数据传送的可靠性大大提高,同时也便于软件编程的模块化。物理层一般采用普通的RS232或RS485;链路层采用CRC校验;为了满足较长数据包的传送,又增加了一个伪传输层。发送数据时它可以将较长的应用层报文拆分为多个短帧然后多帧传送,反之,接收时将短帧组装成完整的应用层报文。
  
  2系统硬件
  
  2.1结构框图
  
  硬件结构框图如图2所示。
  
  2.2F206片内异步串行口介绍[2~3]
  
  F206片内具有一个8位全双工ASP(AsynchronousSerialPort,异步串行口),可以完成并行数据与串行数据的相互转换,并可以产生可屏蔽硬件中断TXRXINT。有关的外部引脚共6个:发送端TX、接收端RX、IO0、IO1、IO2、I03,一般情况下只使用TX和RX就足够了(另外还有一根地线)。
  
  与编程有关的片内16位寄存器共4个:异步数据发送和接收寄存器ADTR、异步串口控制寄存器AS-PCR、I/O状态寄存器IOSR、波特率除数寄存器BRD,均映射至I/O空间。ADTR为读/写寄存器,高8位恒为0,向ADTR写数据即可启动串口发送。ASPCR用来控制串口的工作方式,BIT8为发送中断屏蔽TIM,BIT7为接收中断屏蔽RIM,BIT6为停止位选择STB。IOSR反映串口的工作状态,BITll为发送寄存器空指示位THRE,BIT8为接收数据准备就绪位DR。BRD用作波特率发生器,BRD值=CLKOUTl频率/(16×波特率)。
  
  值得注意的是,F206片内串口与通用异步串口略有不同。它只支持最常见的1位起始位、8位数据位、1或2位停止位。另外几种特殊格式不予支持,如6或7位数据位、1.5位停止位等。为适应现场各种可能的通信方式,还应当扩展一路以上的通用异步收发器(UART),本例采用TI公司的单路异步串口TLl6C550。关于这类芯片有很多文章介绍过,在此不再赘述。
  
  3软件部分
  
  3.1编程语言
  
  
  
  
  采用C语言开发DSP程序不仅可读性和可移植性都很好,还能大大加快开发速度。但用C语言实现某些硬件控制不如汇编方便,且实时性不如汇编[1]。因此采用在C程序中直接嵌入汇编语句来完成通信模块程序的编写,除极少数采用汇编语言以外,绝大部分采用C语言编写。
  
  3.2数据结构定义
  
  由于F206中的数据总线为16位,故而TI提供的C语言(以下简称TIC)与标准C语言的数据类型略有不同。char、unsignedchar、int和short均为16位,enum也为16位。相应地,sizeof(int)和sizeof(short)的结果为1,而不是2,这一点在计算帧长度时尤为重要,习惯于标准C的编程人员一定要特别注意。
  
  由于DNP3.0帧格式中的基本单元是字节,而TIC中却没有这一数;据类型,在用结构体类型定义具体的数据结构时,都是按字(WORD)对齐的,因此只能将DNP3.0数据格式中的BYTE定义为16位无符号整数WORD,将DNP3.0中的WORD定义为32位无符号整数DWORD。接收数据时将每个字节都存储至一个字的低8位,发送时则只取每个字的低8位,这样虽然浪费了一半的存储器空间,但程序编写容易,效率也较高。
  
  根据DNP3.0的层次结构定义三个结构体——链路层DL_LAYER、传输层T_LAYER和应用层APP_LAYER,每个结构体再按照DNP3.0中相应层规定的字段去逐个定义相应的成员即可。如链路层包括报头和n个数据块,报头又包括起始字、长度、控制字节等字段,控制字节按比特位又包括功能码、方向位和帧计数位等。链路层结构定义为:
  
  (1)DL层控制字
  
  typedefstruct{
  
  WORDb0-3_FuncCode:4,/*功能码*/
  
  b4_FCV:1/*帧计数有效位*/
  
  b5_FCB:1,/*帧计数位*/
  
  b6_PRM:l/*主站标志位*/
  
  b7_DIR:1;/*方向位*/
  
  }DL_CONTROL;
  
  (2)DL层报头
  
  typedefstruct{
  
  DWORDdwStart;/*起始字*/
  
  WORDwLength;/*长度*/
  
  DL_CONTROLDLCtrl;/*控制字*/
  
  DWORDdwDest;/*目的地址*/
  
  DWORDdwSource;/*源地址*/
  
  DWORDdwCRC;/*校验码*/
  
  }DL_HEADER;
  
  (3)DL层数据块
  
  typedefstruct{
  
  WORDawUserData[l6]/*用户数据*/
  
  DWORDdwCRC;/*校验码*/
  
  }DL_DATABLOCK;
  
  3.3流程图
  
  DNP3.0已经详细规定了协议的层次结构及每一层的功能,程序的层次结构只要与其一致就会非常清晰,编程时只需遵照这些层次间的数据流向编写相应的函数即可。物理层对应串口收发中断子程序,链路层、传输层和应用层在接收与发送时各有一套函数去处理,以对应串口的全双工工作方式。其中,链路层接收处理流程如图3所示。
  
  3.4ASP的相关程序
  
  3.4.1ASP的寄存器定义
  
  ioportunsignedportFFF4;
  
  #defineADTRportFFF4/*收发寄存器*/
  
  ioportunsignedportFFF5;
  
  #defineASPCRpoaFFF5/*控制寄存器*/
  
  ioportunsignedportFFF6;
  
  #defineIOSRpoaFFF6/*I/O状态寄存器*/
  
  
  
  
  >ioportunsignedportFFF7;
  
  #defineBRDportFFF7/*波特率发生器*/
  
  3.4.2初始化ASP
  
  voidInitASP(){/*初始化异步串口*/
  
  ASPCR=0xE080;/*RIM=1L:允许接收中断,
  
  STB=0:一位停止位*/
  
  IOSR=0xl800;/*THRE=1:ADTR空*/
  
  BRD=0x0020;/*20MHz/38400bps*/
  
  }
  
  3.4.3异步串口呻断服务子程序
  
  voidinterruptaspint(){
  
  if((IOSR&0x0l00)==0x0l00){
  
  Recv();}/*有接收数据*/
  
  if((IOSR&0x0400)==0x0400){
  
  ……;}/*帧错误处理*/
  
  if((IOSR&0x0800)==0x0800){
  
  Send();}/*可以发送数据*/
  
  *IFR=0x20;/*清中断标志*/;
  
  asm("clrcINTM")/开中断*/;
  
  }
  
  由于采用F206的片内串口作为通信工具,充分利用了DSP的片内集成外设,不仅使得通信模块可靠性较高,而且接口方法简单,ASP的控制和读写通过几个寄存器就可完成,非常方便。采用本文所介绍的方法编写的以DNP3.0为规约的通信子程序流程清晰,符合模块化的要求。自现场投入试运行以来,整个通信模块工作稳定可靠,能迅速响应主站请求,主动上报数据,及时准确。但是随着现场总线技术的发展,FTU还应具备至少一个现场总线接口(如CAN总线接口)。这样不光通信质量有保证,还可以简化通信规约(只保留一个应用层即可),这应该是FTU通信方式的一个发展方向。
  
  
  
  

【DNP3.0在基于DSP的FTU中的实现】相关文章:

基于新课标实现教学需求08-16

基于Linux内核的键盘模拟实现08-19

基于Client/Server 的课件系统的设计与实现04-12

TigerSHARC DSP在信号处理系统中的应用04-12

TM1300 DSP系统的以太网通信接口的设计与实现04-12

实现基于Spring框架应用的权限控制系统08-19

基于Vxworks实时操作系统的串口通信程序设计与实现08-19

在反思中实现自我教育08-17

《在奋斗中实现理想》的教案08-17

在反思中实现自我教育08-13