从站设计张冰波,朱爱华,郝莉信息产业部电子第六研究所,北京(100083)E-mail:zhangbingbo@hollysys.com摘要:本文给出了一种在PROFIBUS-DP协议之上实现PROFIsafe协议从站的方式,提供了一种实现故障安全通信的方案,并在具体项目中得以应用。关键词:PROFIBUS-DP,PROFIsafe,故障安全通信1.引言PROFIsafe故障安全通信技术对于安全生产具有重要的意义,它是在标准PROFIBUS上实现主、从站之间故障安全通信的技术规范。PROFIBUS-DP是现场总线PROFIBUS协议的重要组成部分之一,主站和从站之间采取轮询方式,支持高速的循环数据通信,主要应用于自动化系统中现场级的通信[5]。长期以来,故障安全通信技术方面的任务只能在ISO/OSI模型的第二层采用常规手段或通过专用总线分散地加以解决,这限制了现场总线PROFIBUS的生存空间。1999年,PROFIBUS用户组织(PNO)在德国汉诺威博览会上公布了在标准PROFIBUS上实现主、从站之间故障安全通信的技术规范,其注册商标名为PROFIsafe[2]。PROFIsafe作为PROFIBUS-DP的补充技术,定义了与故障安全相关的自动化任务,以及安全设备怎样用安全控制器在PROFIBUS上通信。PROFIsafe考虑了在串行总线通信中可能发生的故障,例如数据的延迟、丢失、重复,不正确的时序、地址和数据的损坏等。2.PROFIsafe协议从站部分概述PROFIsafe协议在PROFIBUS-DP的基础上实现,只支持主从模式。主站对总线具有控制权,主站间通过传递令牌来传递对总线的控制权。主站取得控制权后,可向从站发送、获取数据。而从站完全被动通信,只回复主站的轮询。PROFIsafe协议在PROFIBUS-DP添加的通信控制包括流水号和CRC校验,并根据一个确定状态机来控制通信的状态,达到失效安全的效果。2.1PROFIsafe协议通信过程通PROFIsafe协议的正常通信过程与DP协议大致相同,唯一的不同是在设置参数的阶段,从站需要检验参数数据的校验和,如果校验和不正确,就说明设置参数出错。正常的通信过程如下,通信由DP主站发起,从站接收到请求以后进行应答。在进入正常的数据交换循环之前,要经过诊断、设置参数、检查配置、再次诊断4个交互阶段,这四个阶段有任何错误都要重新开始。完成这四个阶段之后,从站就进入通常所说的“在线”状态,可以开始正常的数据通信[3]。2.2PROFIsafe协议从站状态机PROFIsafe协议的从站状态机控制了从站的所有动作及状态的转移,是PROFIsafe协议的核心。图1给出了PROFIsafe协议的从站状态机图,下面表1是对图1中所用到的变量的说明。协议从站状态机中的变量说明[1]x从站本地流水号PVi过程输入数据PVo过程输出数据FVi失效安全输入值FVo失效安全输出值TO从站发现超时,会把状态位第3位设为1来报告超时错误CRC,cons_nr从站发现CRC和cons_nr错误,会把状态位第2位设为1来报告错误ack应答Slavetimer从站中用来识别超时错误的时钟Lastoractualfault根据这个周期识别的错误或者因为ok-nr-circle=2而必须设置的错误来设置错误。Ok-nr-circle+1把变量ok-nr-circle模3加1nr主站发送过来的数据中的流水号2.3PROFIsafe协议数据帧内容安全数据帧采用与标准数据帧相同的格式,只是对数据单元部分的数据进行重新定义。下面图2为标准的PROFIBUS-DP数据帧格式[4],图3描述了PROFIsafe协议对DP数图1PROFIsafe协议从站状态机[1]据帧的数据单元的定义。表2PROFIBUS-DP数据帧各项意义类型含义数值备注SYN同步码33TBit(TBit,传输一位所用时间,等于波特率的倒数)SD帧起始定界符68H可变长度数据帧LE数据长度LEr数据长度重复DA目标地址SA源地址FC功能码(消息类型)DATA_UNIT数据单元1~244字节,安全通信数据FCS帧校验校验和ED帧结束定界符16H表3PROFIsafe数据帧各项的意义备注安全过程数据安全设备输入、输出值及设备状态等。状态/控制字节F-从站向F-主机发送其状态字节;F-主机向F-从站发送控制字节。流水号F-主机产生并控制其值的变化。CRC2校验数据传输的正确性。3.PROFIsafe协议实现环境CPU板级软件开发环境为KeiluVision3,CPU板级软件编译环境为Franklinc513.20,表3中介绍了各个编译软件的版本。CPU输出控制板软件运行在24Mhz晶振的P89C51RD2FN微控制器裸机(无支撑软件)上,该微控制器自带64K程序存储器及1K数SYNDATA_UNITFCSADASDLErLESDFCSED图2完整的安全数据帧安全过程数据状态/控制字节流水号CRC2最多12字节或122字节1字节1字节2/4字节图3PROFIsafe数据帧的内容据存储器。DP通讯接口通过SPC3通讯控制器进行,采用EN50170Vol.2规范。表4编译软件的版本1C51.exe编译命令文件编译代码命令Version3.202BL51.exe连接命令文件目标代码连接命令Version3.203oh51.exeINTEL格式文件文件转换器4.PROFIsafe协议实现该协议实现的核心内容是对spc3芯片的控制和PROFIsafe协议状态机的实现,其中对spc3芯片的控制分为两个部分:spc3初始化和spc3中断处理函数,而PROFIsafe的状态机实现则分为初始化安全通信相关部分程序、设置安全用户参数、检验通信数据的CRC和流水号和计算通信数据的CRC和流水号,下面是对各个函数的解析。4.1固件程序的整体流程在处理器程序中可分为初始化过程和正常通信过程。其中,初始化过程有spc3初始化和安全通信建立过程。而在正常通信过程中,最主要的部分是轮询Spc3_Int()函数,在该函数中,会接收发送给本站的数据和把待发送的数据发送出去,并调用操作状态机的函数设置状态机状态。4.1spc3初始化函数该函数的主要作用是设置spc3芯片的寄存器,图4是spc3芯片初始化过程的流程图。4.2spc3中断处理函数在spc3中断处理函数中,实现了对dp数据的处理。首先实现了dp通信的初始化过程,即接收主站发送到从站的配置数据,主站给从站设置参数这两个步骤。其次,完成了对接收数据和待发送数据的处理。图5是该中断处理函数的流程图。设置从站号设置从站识别号设置spc3芯片的工作模式设置在spc3芯片中的用户缓冲区重启spc3芯片内部的看门狗设置Spc3中断控制设置spc3芯片内部的看门狗值启动spc3芯片设置spc3配置数据图4spc3初始化过程通信过程中设置参数的过程。因为在DP通信之上加上了PROFIsafe通信过程,因此需要校验参数的CRC值。图6是设置参数过程的流程图。图5spc3中断处理过程读取spc3的中断寄存器设置spc3的相关寄存器清除中断标志,退出中断函数是最新的广播命令?是新的诊断数据是新的配置数据是新的输出数据根据命令针对具体的应用做相应的处理根据具体的应用做相应的处理检查是否与该从站的配置数据匹配调用相应的函数检查接收到的参数数据的正确性和crc值正确性是新的参数数据调用相应的函数为新的发送数据计算CRC值并设置状态机状态调用相应的函数检查接收到的数据的CRC值和流水号准确性,并设置状态机NNNNYYYYY和流水号并设置状态机这个函数主要的作用是在接收到数据后,判断接收到的数据的CRC值和流水号是否正确,并对当前状态机的状态做出相应的调整。图7是该过程的流程图。根据安全参数设置各个参数对发送过来的参数进行CRC16校验判断CRC16校验值与传送过来的CRC16值相等?返回0返回错误码0xffYN图6设置安全参数的过程值,设置当前的流水号,并设置状态机当前的状态。图8是该过程的流程图。置第一次接到数据交换标志变量Safe_First为0计算CRC2计算所得CRC2与接收的CRC2相等?置位F_Status的第2位和第4位,并置函数返回值为1发送过来的数据被设置为安全代码?设置函数返回值为1看门狗溢出超过了48ms置位F_Status的第3位和第4位,并置函数返回值为1根据Profisafe的状态图调整状态变量F_State,流水号YNNYNY图7检验接收数据的CRC和流水号.总结本文大体介绍了PROFIsafe协议的内容,给出了一种PROFIsafe协议从站的具体实现方案,并在铁路的列车控制中心项目中得以应用,迄今运行稳定。参考文献[1]PNO:PROFIBUSProfile“PROFIsafe-ProfileforSafetyTechnology”,Version1.30,June2004.[2]惠敦炎.PROFIBUS故障安全通信技术探讨.西门子(中国)有限公司A&D,2004.[3]惠敦炎.PROFIBUS:开放的,通用的和标准的现场总线.西门子(中国)有限公司A&D,1998.[4]刘美俊.PROFIBUS现场总线的通信及实现.电子质量,2003,第9期.[5]阳宪惠.现场总线技术及应用.北京:清华大学出版社,1999.PROFIsafeSlaveStationDesignBasedonSPC3ChipZhangBingbo,ZhuAihua,HaoLiTheSixResearchInstitute(Electronics)ofMII,Beijing,PRC(100083)AbstractThispaperprovidesarealizationofPROFIsafeslavestationbasedonPROFI-DPprotocol,andsupportsamethodtorealizefail-safecommunication.Thedesignhasbeenappliedinfieldproject.Keywords:PROFIBUS-DP,PROFIsafe,fail-safecommunication根据Profisafe协议的状态图设置变量F_State如果尚未接收到过安全帧,即变量Safe_First==1?设置输入缓冲区中流水号和状态字节为变量x和F_Status设置输入缓冲区中数据为0计算输入数据的CRC2,并放入输入缓冲区的最后四个字节中YN图8计算待发送数据的CRC并设置状态机状态