全部博文(85)
分类: C/C++
2009-06-26 21:48:42
关键词:阀门; PROFIBUS-DP; SPC3
1. 引言
在传统的阀门控制领域中,引入嵌入式系统技术和工业现场总线技术是阀门控制器发展的重要方向之一,也是工业执行器实现智能化、网络化、远程控制化的客观要求。本文中的设计方案就是针对这一课题的尝试。希望能为国内阀门控制器的设计提供一些参考。
在阀门选择上,我们选择应用最为广泛,结构也最为简单的普通阀门作为研究对象。普通阀门本身操作也较简单,只有开、关、停三种运动状态,对其进行远程控制改造容易入手。在工业现场总线技术选择上,我们选择PROFIBUS-DP工业现场总线技术,是考虑到PROFIBUS-DP技术发展成熟,有广泛的应用实例,在全球拥有巨大的市场占有率[2]。在国内目前也已经是机械工业推荐标准。因此设计普通阀门PROFIBUS-DP阀门控制器在技术可行性和市场意义上都具有一定的优势。
本设计的最终目的是实现一种实用的普通阀门控制器,可以作为从站兼容于PROFIBUS-DP系统,接受远程的主站的控制。
2. PROFIBUS-DP硬件接口电路设计
在阀门控制器的PROFIBUS-DP硬件接口电路设计方案上,我们采用单片机 + 专用集成芯片SPC3 + RS485驱动的方案。
SPC3是西门子公司用于开发PROFIBUS-DP从站的智能通信专用芯片,集成了完整的PROFIBUS-DP协议,可以独立完成全部PROFIBUS-DP通信功能。SPC3提供了方便的硬件接口,适用于不同的微处理器,如Intel内核的80C32、80X86、80C165还有motorola型单片机等等。本设计选用的是51内核的单片机,所以采用Intel 8位连接方式,为了节约单片机资源,还采用的是地址数据复用模式。SPC3为44管脚的PQFP封装。
SPC3具有1.5Kbyte的信息报文存储器,这1.5K的存储空间包括:处理器参数Processor Parameters、组织参数Organizational Parameter、和所有的输入输出缓冲区DP buffer[1]。在中央处理器对SPC3的操作上,类似于对一个1.5K的RAM进行操作。值得注意的是,SPC3的1.5K存储空间只需要有11条地址线提供地址,而实际SPC3与中央处理器都是16条地址线连接,因为SPC3内部以地址线的最高5位全为零,作为存储空间的选通信号,因此SPC3的16条地址线状态应该在0000H和05FFH范围内,才能进入SPC3的存储空间。
在中央处理器还有其他外部数据存储器的情况下,应注意与SPC3存储空间的地址冲突。一般情况下,选择通过地址译码电路把SPC3的存储空间置于整个中央处理器地址空间的最高部分。
SPC3芯片上有一个引脚XDATAEXCH,复位状态为高电平,而当SPC3进入数据交换状态能够数据通讯时,该引脚会变为低电平。以此可以作为检测通讯是否正常的标志,一般在该引脚上连接发光二极管,作为直观的判断数据通讯正常的指示信号,较为方便。
3. 通讯地址方案
阀门控制器作为PROFIBUS-DP通讯的从站必须有不与其他站冲突的地址。有关PROFIBUS-DP从站通讯地址的设计方案有两种:一种是由远程的PROFIBUS-DP主站通过特定的数据通讯设定或修改从站地址;另一种是禁止PROFIBUS-DP主站设定和修改从站地址,从站的地址由从站本地设定。
本设计采用的是后一种设计方案,通过一个8位的拨码开关手动设定阀门控制器的地址,然后由中央处理器读入并写入SPC3特定的存储位置,位于SPC3存储空间地址16H的 组织参数 R_TS_Adr,从而使SPC3获得通讯地址。由于禁止主站改变该从站的地址,需要在初始化SPC3时,设定组织参数R_Real_No_Add_Change = FFH,并设定另两个组织参数R_SSA_Buf_Ptr = 0和R_Len_SSA_Data = 0,这两个组织参数的意义是:前者为存放来自主站的地址设定帧的缓冲区地址首地址,后者为收到的地址设定帧的数据长度。这样SPC3初始化时,就不会激活负责地址设定功能的服务存取点SAP55,从而使主站无法设定从站地址。
同时,需要在阀门控制器的设备描述文件GSD文件中有这样的语句:Set_Slave_Add_supp = 0
表示该从站禁止主站设定和改变地址。
PROFIBUS-DP支持的站地址由0到126共127个,可以通过改变8位拨码开关的低7位设定。拨码开关的最高位设定阀门处于远程控制下还是本地控制下。作为一个实用的控制器,出于安全和可靠的考虑,除了远程控制还要有本地的控制功能。本设计使得现场的操作人员可以禁止远程控制而手动的操作阀门。在这种状态下,阀门控制器会把从主站获得的阀门运动控制命令抛弃掉,但仍然把阀门的各种状态传给主站,所以此时远程的操作员会得知远程控制失效,并仍然可以看到阀门的各种数据,但不能操作阀门运动。
4. 标识符设计及使用
标识符(Identifier)是一个PROFIBUS-DP产品的重要参数,一般为一个或几个字节构成一个标识符,它表示了该产品在通讯时输入和输出的数据的宽度和特性。比如一个PROFIBUS-DP产品控制8个开关量,需要由主站提供这8个开关量的内容,那么该产品接受主站数据就是8位共一个字节的宽度。而该产品的标识符就必须描述出这种特性和宽度:一个字节。标识符会写入产品的设备描述文件GSD文件,便于系统建立时组态。标识符也必须在SPC3初始化时写入SPC3特定的缓冲区中,便于主站检查验证。
专用标识符用一个字节表示,编写格式如下:
专用标识符的低4位bit0 ~ bit3表示该设备数据输入或输出的数据宽度,数值0到15对应表示宽度为1到16个字节或字,而bit6则指明宽度数值的单位是字节还是字:0表示字节,1表示字;bit4和bit5两位共同来表示以上宽度的数据是输出数据,输入数据,还是输入/输出数据,这里需要指出的是,在PROFIBUS-DP系统中,输入和输出是相对与主站而言的,由主站发送给从站的数据称之为输出数据,由主站自从站读取的数据称之为输入数据。最高位bit7表示一致性程度,所谓一致性要求是指某一区域的数据要求同时写入或同时读入,具体系统中,就是要求主站在一次上载或下载中完成对有一致性要求的数据区域的读或写,而不能分成几次来上载或下载。该位的定义为:0表示仅字节或字内部有一致性要求,1表示整个标识符定义的宽度都有一致性要求。
本设计中,阀门控制器的标识符定义为:B1H。也就是:长度为2,单位为字节,输入/输出,全部一致性要求。
该标识符在PROFIBUS-DP系统上电运行时,会由主站发送给从站,以求证实际的从站特性是否与主站数据集中的一致。从站设计者在编写从站程序时,需要有特定的过程来比较从主站发来的标识符与自己的是否一致,并作相应回应。
此外该标识符必须在SPC3初始化的时候由中央处理器写入SPC3特定的缓冲区:Read Config Buffer,该缓冲区由组织参数R_Read_Cfg_Buf_Ptr存放首地址,由R_Len_Read_Cfg_Data定义缓冲区长度。这样做的目的也是为了远程的主站查询。
同时标识符也必须在GSD文件中说明,语句格式如下:
Module = "2 Bytes Input and Output" 0x31
EndModule
这两个字节就是主站和阀门控制器数据交换时的内容,所以它们应该包含着阀门控制的命令和阀门的状态。按照阀门控制的要求和阀门的功能,本设计对这两个字节的结构做出定义。结构如下
如图所示,数据交换的第一个字节中,bit0和bit1定义阀门控制命令,阀门控制器收到由主站发出的数据,将会分析第一字节的这两位,并根据这两位的内容驱动阀门做相应动作。其余的位在主站读取阀门控制器的状态时有效,bit2和bit3表明阀门现在是否到达关和开的极限位置,bit4和bit5表示阀门目前的运动状态,bit7表示阀门控制器目前的控制模式,控制模式是由上文提到的地址拨码开关的最高位决定,其意义一致。
数据交换的第二字节bit0~bit6存放阀门打开程度,数值范围为0~100,100表示全开,0表示全关。当主站由阀门控制器读取该值时,表示目前阀门的开度;当主站向阀门控制器发送某值时,表示要求阀门开启到该值开度。bit7保留。
5. 诊断功能的使用
所谓诊断功能是指PROFIBUS-DP规范定义的一种主站可以读取自己所控制的从站的出错信息和状态信息的功能,是独立于数据交换功能的另一项功能,发生于数据交换的间隙,由主站发起。
在PROFIBUS-DP规范已有的定义内,主站可以诊断从站有关通讯的出错信息和状态信息,比如:从站不能通过总线到达,响应不合理等。除此之外,PROFIBUS-DP规范还允许用户使用扩展的诊断信息,通过对诊断信息的扩展用户可以把自己定义的自己产品的出错信息和状态信息编入,这样利用PROFIBUS-DP提供的可靠优化的通讯功能来实现具体的用户要求,是PROFIBUS-DP产品设计者理所应当采取的措施。也正因如此,诊断信息设计也就成为PROFIBUS-DP产品设计的重要部分。
诊断信息包括两个部分,PROFIBUS-DP标准诊断信息和扩展诊断信息。前者是诊断信息必须的部分,由固定的6个字节构成,存放着PROFIBUS-DP规范定义的标准出错信息和状态信息。后者是用户根据自己开发的产品要求设定的,它又可以分为三级诊断:关于设备的诊断、关于标识符的诊断、和关于通道的诊断。这三级诊断分作三个字节块在扩展诊断部分依次连续排列,其中每部分都有自己特定的首部字节作为该级诊断的开始标志。本设计的阀门控制器使用到了第一级扩展诊断,也就是关于设备的诊断。
具体在本设计使用的SPC3芯片上,首先在SPC3初始化时给诊断信息开辟专用的缓冲区,缓冲区有两个,共有四个组织参数对其定义:R_Diag_Buf_Ptr1和R_Diag_Buf_Ptr2存放两个诊断缓冲区的首地址,R_Len_Diag_buf1和R_Len_Diag_buf2定义两个缓冲区的长度,两个缓冲区的长度不同是允许的。
当需要使用诊断功能时,一般为阀门控制器发生了一定的事件需要通知主站,则在用户持有的那个缓冲区内填入诊断信息。缓冲区的前6个字节,也就是诊断信息的前6个字节为标准诊断信息,用户基本不需要赋值,除了第一个诊断字节的最后一位bit0,需要由用户设置为1。该位为“扩展诊断位”,置1表示6个字节标准诊断之后跟有扩展诊断。所有使用扩展诊断的设计,该位都必须置位。
第7个字节为扩展诊断第一级关于设备诊断的首部字节,首部字节最高两位固定为00,后6位存放关于设备诊断的块长度,该长度包括首部字节本身,取值2到63。本设计的阀门控制器诊断事件较少,只需要1个字节存放关于设备的诊断信息,所以关于设备诊断的块长度为2。最终阀门控制器的诊断信息长度为8个字节:“标准诊断6字节+首部字节1+设备诊断字节1”。
设备诊断字节8个位的分配如下:bit0对应阀门电机缺相事件,bit1对应阀门过转矩事件,某位被置1表示对应事件发生;bit2~bit5放入一定的错误码,这四位的错误码对应的事件如下:
0000 无错误
0001 工作电压不足
0010 AD采集不正常
0011 本地显示不正常
0100 控制冲突
0101 控制命令错误
0110~1111 保留
为了实现以上的设备诊断字节分配,除了阀门控制器的用户程序在相应事件发生下对正确的位做正确处理外,还需要在阀门控制器的设备描述文件GSD文件中有以下语句:
Unit_Diag_Bit(0) =“Lack power”
Unit_Diag_Bit(1) =“Over-moment”
以上两句把bit0和bit1分配给相应事件。
Unit_Diag_Area =2-5
Value(0) =“No error”
Value(1) =“Low voltage”
Value(2) =“AD error”
Value(3) =“Display error”
Value(4) =“Control conflict”
Value(5) =“Command error”
Unit_Diag_Area_End
以上语句则把bit2~bit5分配给对应的错误码。这样就完成了对阀门控制器诊断信息的设计。
6. 结论
本设计的意图在于工业现场总线PROFIBUS-DP技术与阀门控制工程实际要求的有效结合,突出实用性,也满足阀门控制领域技术更新的要求。事实证明,阀门控制的远程化和网络化是一个重要的发展趋势,现场总线技术在这一领域的应用也是切实可行的。
参考文献
[1] Siemens AG..SPC3 and DPS2 User Description. Siemens AG in Fed Rep of Germany. 1998.
[2] 阳宪惠编. 现场总线技术及其应用[M].北京:清华大学出版社,1998.
[3] 王福来,吴世红等. 采用SPC3的智能型PROFIBUS-DP现场总线接口的开发[J]. 电气传动,2000,2.