基于ARM的PROFIBUS-PA远程I/O从站设计
2009-05-12
作者:张永德, 文莉辉
摘 要: 分析了总线远程I/O应用现状,提出以ARM为平台开发PROFIBUS-PA远程I/O从站设计思想。以AT91SAM7SE32为管控CPU,基于协议芯片DPC31和西门子公司的SIM1-2,给出其硬件设计方案。分析PA协议的层次结构,给出PA从站的软件组成。充分利用ARM的快速性实现了PA总线要求的高实时性、高可靠性。
关键词: PROFIBUS-PA; ARM; 远程I/O
总线远程I/O是基于现场总线控制系统FCS中的主要设备。据统计,目前典型的FCS系统中可直接接入现场总线的仪表、设备不超过22%;其余超过78%的现场仪表、设备是由总线远程I/O或Hart协议接入现场总线的。总线远程I/O的主要功能分为输入、输出两部分。输入是将采集到的现场模拟信号(如4 mA~20 mA)和数字量信号(如24 VDC)转换成数据报文,并按照通信协议传送到现场总线中。输出是将现场总线通信数据转换成模拟量输出和数字量信号输出。
PROFIBUS-PA是专为过程控制应用而设计的,它是PROFIBUS-DP的延伸和扩展,其通信协议以DP-V1为基础,是一种非循环通信,与DP-V0循环通信同时存在于一个系统中。由于PA设备必须由DP段的主站控制,所以PA网段总是嵌入在DP网络中。
1设计要求与实现方案
1.1 设计要求
总线远程I/O作为PA从站连接到PROFIBUS-PA网段中,处理收集到的外部数字量/模拟量数据,通过PROFIBUS-PA现场总线传送这些数据,同时能够获取一类主站与二类主站的输出数据进行相应处理后输出。
1.2 实现方案
使用ProfiScript(软件)+ProfiCore(硬件)来充当主站。ProfiScript是经过PROFIBUS认证,能够测试DP、DP-V1和PA设备协议功能的分析工具,通过PC机的USB端口和PROFIBUS-DP总线之间的通信管理机(ProfiCore)与DP/PA耦合器相接,形成完整的PA通信通道。编写ProfiScript的脚本文件,可形成用户想要的PROFIBUS运行机制,单步或连续地发送各种报文。
(1) 硬件设计上,主体部分由完全集成了PROFIBUS的V0状态机制及部分V1机制的专用协议芯片DPC31、SIEMENS最新推出的SIM1-2信号调制芯片及ATMEL公司的基于ARM7内核的AT91SAM7SE32芯片构成。
(2) 外部8点数字量输入,8点数字量输出,输入/输出使用LED显示。
(3) 外部8路模拟量输入。
(4) ARM+Firmware软件实现CPU与专用ASIC芯片结合。
(5) 编写相应产品的GSD文件,对该从站的特性与性能进行说明,包括用户自定义的参数值(如扩展报警信息,扩展诊断信息等)。
2 硬件设计
电路设计的主体示意图如图1所示。
2.1 微处理芯片AT91SAM7SE32
AT91SAM7SE32是由ATMEL公司推出的AT91SAM7SE系列芯片,具有ARM7TDMI内核。其优点是:高运算速度,低功耗,3.3 V低电压供电,内部具有32 KB的可在线调试Flash,8 KB的SRAM,保证程序运行的需求。具有外部总线接口EBI,EBI拥有8个片选信号,可同时接8个片外设备。EBI是与协议芯片DPC31通信所必须的接口,它支持NAND Flash,和SDRAM接口,方便片外Flash与SDRAM的扩展。同时片内还集成了8路最高10位转换精度的A/D转换器,从而免去了外部再接A/D转换电路,降低了硬件成本。多达3个PIO控制器共88个可编程I/O口,这对多路的数字量输入/输出是极有好处的,避免了因I/O口不足而需要加入的锁存电路。
2.2 协议芯片DPC31
DPC31内部已经集成了PROFIBUS中的V0机制,从而减少了产品开发的难度,并集成部分PROFIBUS的V1机制。内部共8 KB可寻RAM地址,用户可用部分RAM(大约为5.5 KB)。由于其集成了V0机制,所以在V0工作方面,从DPC31的初始化至正常工作,都由其内部状态机制进行控制完成,不需要太多的人为干预。而重点在于将DPC31中的寄存器及数据缓冲区进行正确的配置,对DPC31内部RAM的读写操作即相当于完成了主站与从站间的通信工作。而对于V1机制,还需要对其进行软件设计建立其工作机制,包括在DPC31的RAM内建立SAP类型,同样需要进行数据缓冲区的相应设置等工作。
DPC31使用8 MHz晶振,取其2分频4 MHz作为ARM的时钟输入,再经过ARM内部的分频/倍频后,得到期望的内部时钟(如48 MHz)。DPC31与CPU的通信类型,可通过设置DPC31的“BUS TYPE”相应引脚使其工作在INTEL或MOTOROLA方式。对于本设计,应设为“000”,即异步INTEL方式。需要指出的是,DPC31上的“RAEDY”信号与AT91SAM7SE32上使用EBI时的“NWAIT”信号运行时序机制是不匹配的,不可使用。应该分析DPC31在此模式下对其进行读写的信号时序,从而在ARM中EBI的时序设置寄存器(SMC_CSRx)中对相应的值进行正确的设置,来完成对DPC31双口RAM的读写。
2.3 Modem芯片SIM1-2
SIEMENS公司继SIM1-1之后最新推出了SIM1-2芯片,与SIM1-1功能相同,接收PROFIBUS-PA上的IEC61158-2信号,解调成可与DPC31通信的四线制RXS、RXE、TXS、TXE信号,同样反方向调制成PA总线上的IEC61158-2信号。相比而言,SIM1-2采用了MLPQ封装,具有更小的体积,同时去掉了SIM1-1中的本地供电功能,即SIM1-2上的电源只能从PA总线上获取,而不能再由外部对其进行供电,但SIM1-2通过内部电源转换功能,可作为外部芯片电源。通过设置相应电阻阻值,可使其对外供电电流设定在2 mA~50 mA之间,避免了原SIM1-1供电电流不可设定存在的隐患:因PA从站出现某种故障,使得从站耗电量大幅增长,从而造成总线供电不足影响其他设备工作。SIM1-2对外可供电压也由原来的恒定3.3 V更改为可设置在2~5 V之间,这显然为外部芯片的选择提供了更大的空间。SIM1-2时钟晶振为固定值2 MHz。
由于SIM1-2芯片自身电源电流只能从PA总线上获取,最大为50 mA,而I/O设计中有多路数字量输入/输出的LED显示,产品化时需要考虑到对输入/输出进行的光电隔离,再加上模拟量输入电路的电流消耗以及各芯片的电流消耗,因此芯片电源电流单从总线上获取是满足不了要求的。这就需要将供电电路分成两个部分:SIM1-2部分电路从PA总线上汲取电流,其他电路全由外部电源供电。因而在DPC31与SIM1-2之间的四线通信线路需要光电隔离(见图1)。
图2所示是SIM1-2与PA总线的连接图。需要特别指出的是,对PNP三极管Q1的选择要注意它的“最大消散功率”指标,由于PA总线上电压较高(9~32 V之间,由用户选择的DP/PA Link决定),再加上如果用户设置的汲取电流较高,将造成开关三极管的消散功耗较大。若此三极管选择不当,不但极易烧毁且将损坏SIM1-2芯片,其最大消散功率应大于1 W。
2.4 模拟量输入部分
PA适用于过程控制领域,其中有大量的模拟量数据处理,硬件设计中可充分利用AT91SAM7SE32上自带的8路最高10位分辨率的逐次逼近式A/D转换控制器来实现数据采集,该ADC给每路A/D转换配置一个相应数据寄存器,以减少CPU的中断开销。每个通路可单独允许和禁止,多种触发方式:硬件或软件触发、外部触发引脚触发、利用定时器/计数器输出进行触发。电路设计中,采用外部取稳定3.3 V作为转换的参考电压,通过电位器变化输入电压的方式,来实现外部模拟量输入。如图3所示,为一路模拟量输入的电路原理图,其余7路与此路相同。其中AD5~AD8与PIO复用,在CPU程序初始化时应将它们分配给A/D外设。
3 软件设计
3.1 Firmware 结构
PROFIBUS-PA通信基于DP-V1,包含了循环通信与非循环通信,在非循环通信中,又分为从站与一类主站、二类主站间的通信,即MS1与MS2之间的通信。程序软件运行于ARM7中,称为Firmware,根据用户具体的硬件条件编写。图4是本设计的Firmware的整体结构图。软件中,DPC31的驱动为其通信底层,其上层为C0 Firmware和C2 Firmware,其中,C0 Firmware 包含一类主站循环通信MSCY1S、非循环通信中的MSAC1S(数据读/写)、MSAL1S(报警确认功能);C2 Firmware 包含相比而言有其特殊性的二类主站通信MSAC2S。可以根据实际需要,在程序的宏定义中设定本远程I/O所希望支持的通信功能。
3.2 程序主体结构
整个总线远程I/O的通信,是通过对DPC31的内部寄存器、内部双口RAM的读写过程来实现的。在DPC31中,已经对PROFIBUS相应的状态机制进行了集成,分配了相应的读/写寄存器的物理地址。为了方便ARM对DPC31相应寄存器的访问,应该将整个DPC31已经定义的寄存器结构,再加上用户所想加入的“指示队列”结构、SAP访问存取点结构、用户初始化数据结构,归于一个较为庞大的结构体中,再定义一指向此类型结构体的指针,并将此指针强制定义到DPC31内部RAM基地址处。其基地址与ARM上所选用的片选信号有关,本设计中选择为CS0,其绝对基地址为0x10000000,其代码为:
#pragma pack(1) //字节必须对齐
Typedef struct
{…
.. . //DPC31内部结构
} *V1SLPS_STRUC_PBC_DPC31;
#pragma pack()
#define DPC31_BASE_STR ((V1SLPS_STRUC_PBC_DPC31) 0x10000000)
V1SLPS_STRUC_PBC_DPC31 dpc31=DPC31_BASE_STR;
至此对DPC31的访问通过“dpc31->”的方式来进行。
如图5所示为整个Firmware 的流程图。
3.3 中断处理
在程序进入永久循环后,对中断事件的响应处理是进行通信的关键所在,程序设计中采用了在永久循环中不断查询中断寄存器,根据判断相应位的值进入中断处理程序的方法。由于ARM拥有快速处理能力,从而能够保证中断响应的及时性。虽然循环与非循环对中断事件的处理都在中断查询中进行,但其中断产生是不一样的。对循环通信,当从站接收到相应的V0报文,判断其正确后将会给中断寄存器相应位进行置位。而非循环通信中断的产生,是经过请求“指示队列”来完成。对主站的非循环通信请求,不要求从站像循环通信那样迅速得到所请求的内容,当接收到非循环报文时,DPC31会自动生成一个条目(Entry),一个条目占3 B,分别为:Command_Code、Value1、Value2,Value值根据不同命令代码(Command_Code)而定。众多条目构成“指示队列”,读/写指针指向“指示队列”,用户只需要对队列读指针进行操作,写指针由MAC进行管理,中断只在读/写指针不一致时产生。因此,在“Passive Idle”模式下“指示队列”的合理初始化是很重要的。一次非循环通信的完成可能要经过好几个总线周期,在主站得到想要的数据前会不断地进行轮询。图6所示为查询方式中的中断程序流程。
二类主站与一类主站不同,它不像一类主站有一个上电初始化过程,通过这个过程(参数设置、组态和诊断),来识别和锁定属于它的从站。二类主站没有这个过程,所以在和从站进行数据交换之前,它必须先和相应的从站建立联系,即初始化数据通道,同时根据内存设定可与二类主站通信的数目。MS1与MS2均会用到“Req_Pdu_Ind”(接收到请求报文)、“Poll_End_Ind”(已经对请求进行了应答)和“SAP_Act_Deact”(FDL_SAP激活或非激活)三个条目类型,由于MS2通信拥有数据通道超时放弃功能,因此它比MS1多一个“FDL_Timer_Expired”(FDL监视计时器溢出)条目类型。
3.4 运行测试
如图7所示,配置S7-300的CPU314+CP342-5为主站对远程I/O进行测试,使用ProfiTrace 监测到的进入数据交换循环通信部分报文结果。
PROFIBUS是目前应用最为广泛的现场总线,在国内对其开发的主要产品是DP,由于PA必须加入非循环通信,并需实现相应设备的PA行规,开发难度较大,对PA产品的开发还较为鲜见。文中具体介绍了PROFIBUS-PA从站远程I/O设备的实现方案,经测试达到了良好的通信效果。但在开发设计中,由于外部电源引入时未考虑其本安特性,所以此PA从站设备是不符合本质安全要求的,这将是未来的改进方向。
参考文献
[1] 王永华,VERWER A.现场总线技术及应用教程——从PROFIBUS到AS-i[M].北京:机械工业出版社,2007.
[2] SIEMENS AG.DPC31 hardware description of step C[EB/CD],Version 2.1,April 2004.
[3] SIEMENS AG.ASIC SIM1-2 function manual[EB/CD],Feb. 2007.
[4] ATMEL.User manual of AT91SAM7SE series[EB/CD],Mar. 2007.
[5] 阳宪惠.现场总线技术及其应用[M].北京:清华大学出版社,1999.