《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > 工业通信用网关设计及其关键技术研究
工业通信用网关设计及其关键技术研究
夏继强, 梁超众, 邢春香
北京航空航天大学 机械工程及自动化学院, 北京100191
摘要: 提出了工业通信用网关系统的一般设计方法,并以PROFIBUS-DP智能网关设计为例对网关设计的关键技术——数据映射关系、实时性、可靠性及故障处理进行了研究。对其他类型的工业网关的设计具有指导意义。
中图分类号: TP393
文献标识码: A
The design of PROFIBUS-DP intelligent gateway
XIA Ji Qiang, LIANG Chao Zhong, XING Chun Xiang
Mechanical Engineering and Automation School, Beihang University, Beijing 100191, China
Abstract: Proposed a general method of industrial communication system design adopting gateway. Details of key issues, namely data-mapping management, real-time and reliability performance as well as troubleshooting was described, with PROFIBUS-DP/MODBUS gateway as an example. It provides a reference model for other gateway′s design.
Key words : FCS; gateway; real-time performance; reliability performance; data mapping

    采用现场总线技术的工业测控系统具有结构简单、易于维护、开放性、分散性和可互操作性等优点。但因为现阶段多种现场总线协议的共存,导致其上述优点不能充分体现出来。针对目前工业测控领域多种现场总线共存的客观事实,探讨如何将两种或多种现场总线系统集成具有重要意义。
    在上述情况下,网关无疑是系统集成解决方案很好的选择。结合国家863课题,本文以中国四联集团与北京航空航天大学共同研发PROFIBUS-DP智能网关为例对工业通信网络用网关的设计进行了阐述并对其实现的关键技术进行了详细分析。
1 网关系统解决方案设计
    现场总线用网关一般要担负两种或多种总线之间的协议数据转换的责任,属于系统连接的关键部分。因此系统大多采用图1所示的的结构来实现。

    应用本网关所组成的系统总体结构如图2所示。智能网关在系统中无缝连接PROFIBUS-DP(以下简称”DP”)现场总线系统与MODBUS总线系统,实现同一系统内两种总线设备的共存。

    本系统中,微控制器为中国四联集团研发的控制器。本智能网关在设计上为其预留了一个用于与控制器通信的接口。底层的I/O模块实现工业现场信号的检测或控制执行设备的运行。
2 网关结构设计
    现阶段的网关设计主要有协议芯片、硬核、软核三种解决方案:
    (1) 协议芯片解决方案:采用专门芯片来实现相关协议,这种方法开发周期短,实现起来相对简单,比较适合于快速开发,但成本稍高。
    (2) 硬核解决方案:主要是对ASIC如CPLD、FPGA等进行硬件编程来实现相关协议的IP核。此方案对开发人员的硬件及软件知识要求最高,协议稍复杂,实现难度就很大。但是网关性能可以与采用协议芯片实现方式相媲美。
    (3) 软核解决方案:用软件实现协议数据链路层协议处理功能,结合相应的外围硬件电路实现协议功能。此方法成本低,但需要开发人员充分了解相关协议及协议运作机制。对于复杂的协议,编程工作量巨大,且可靠性不易保证,受单片机处理速度影响,通常网关的性能不如其他两种方法。
    在一般工业控制用网关设计中,都有较短的开发周期及很高的可靠性要求。因此,对于复杂的协议如DP、CAN、FF总线等一般选用协议芯片实现;对于较简单的协议如MODBUS等一般用软核实现。本网关采用了DP协议芯片与MODBUS软核相结合的实现方式。其硬件结构如图3所示。

    按照功能划分,网关可以分为电源管理模块、中央管理模块、DP从站模块和RS485通信模块。
    本网关设计要求串行口速率能够达到921.6 kb/s。基于此要求,硬件平台选用PHILIPS公司的ARM7-TDMI核微处理器。
    电源管理模块负责整套系统的电源供给,系统的稳定运行与电源模块的稳定性能关系密切,此处设计的电源模块兼有热插拔和电压转换功能;DP从站模块的核心功能由协议芯片(VPC3+C)实现;中央管理模块除了实现对DP从站模块的配置和管理,还要完成MODBUS协议的实现以及两种协议数据交换协议栈的实现。
3 网关系统的实现
    网关系统在软件设计方面与网关连接总线系统所采用的协议有较大差别,但一般协议在定义时为了实现灵活性好、易于实现和维护等优点都采用分层结构。网关软件设计时也可以采用分层结构,最后在应用层实现协议数据的相互转换。本网关协议栈的实现采用的就是这种分层的思想。
  网关协议栈是连接MODBUS输入/输出模块与DP通信的桥梁。协议栈分为DP通信层、协议数据映射层和MODBUS通信层三层。网关协议栈分层结构及各层功能如图4所示。

3.1 软件总体结构设计
    本网关的软件总体流程如图5所示。CPU通过驱动VPC3+C来实现对DP通信过程的控制,包括通信接口检查、正常和发生故障情况下的诊断数据的发送及数据交换等过程;通过MODBUS协议实现对下挂的输入/输出从站模块的查询操作;通过对模块应答帧(或通信超时)进行分析来判断模块的状态以及模块的通道状态,根据模块状态信息填充DP的诊断域的数据,并以此为依据实现对网关通信状态(正常通信、报告故障或警告信息)的控制。

3.2 PROFIBUS-DP总线驱动
    此网关DP通信部分采用协议芯片VPC3+C,其内部含有4 KB RAM,用户可根据需要对其进行设置;具有两种微处理器接口:数据/地址总线复用或单独操作。因为ARM核对外部RAM操作的速度较快,时序不能满足VPC3+C的操作时序,因此这里用ARM的GPIO口来模拟VPC3+C的操作时序。本文模拟的是其在Intel模式下内部寄存器的读写时序。
    此驱动主要提供了以下功能:nxp_vpc3_read、nxp_vpc3_write  、nxp_vpc3_init、nxp_vpc3_reset、nxp_vpc3_isr,这些函数分别向上层应用提供了读写VPC3+C寄存器、对其初始化、复位操作及中断的处理功能。其中对寄存器的读写操作是关键部分,函数原型如下:
    unsigned char nxp_vpc3_read(unsigned int addr);    
    void nxp_vpc3_write(unsigned int addr,unsigned char data);
其中addr为要读写的寄存器地址,data为要写入的数据。
3.3 MODBUS协议的实现
  为提高信号传输的距离及抗干扰能力,此处MODBUS物理层采用标准RS485通信。为了保证MODBUS协议软核的健壮性,设计了其有限状态机[1]模型,如图6所示,并根据此有限状态机模型运用状态路由器进行软件实现。

3.4 协议数据的映射处理
    此部分处理效率的高低直接关系到网关系统的性能,因此设计过程中应该谨慎设计。
  此部分完成协议数据映射层的实现,具体的数据映射关系管理见4.1节阐述。
4 网关关键技术研究
    对于工业用网关应用来说,保证网关正常工作的首要条件是其所连接的系统数据映射关系的正确性,其次可靠性和故障处理能力是网关可长期稳定工作的重要影响因素,对网关实时性的要求则因系统的不同而各异。
4.1 数据映射关系管理
  如何管理网关连接的两种或多种系统中的设备在通信数据中的映射关系,即通常意义上的寻址,是很重要的步骤。而这一部分针对网关所连接的不同,总线设备也有很大区别。
  本网关对所有可能下挂的模块的输入输出数据格式进行分析,然后分别定义了各个模块对应的通信接口配置字,并在GSD文件以下例格式进行描述:
    Module="AI31xx——4 channels" 0xd3; 输入模块AI31xx占4个字长
    EndModule
  这样在对其进行硬件组态时,只需要将对应的模块放到对应的地址槽中即可。
  在网关协议栈中同样保留上述表用来查询下挂模块类型对应的控制字和硬件组态数据进行比较。并以硬件组态数据为标准填充数据映射表,单个模块数据映射表数据结构如下:
typedef struct{
  unsigned char cfg_data;       /*记录模块的参数配置字*/
  MODULE_STATE this_state;         /*当前模块的状态*/
  unsigned char start_position;             /*记录模块数据在
              PROFIBUS-DP中交换数据中的起始地址*/
  unsigned char data_length;            /*记录模块数据在
                PROFIBUS-DP中交换数据中所占长度*/
  unsigned char data_direction;        /*记录模块数据在
             PROFIBUS-DP中是输入数据还是输出数据*/
    } IO_CONFIG_PRM。
其中MODULE_STATE为枚举数据类型,代表MODBUS从站当前状态,数据结构如下:
typedef enum module_state{
        TYPE_OK,
    NOT_EXIST,
        TYPE_DISAGREE
}MODULE_STATE;
4.2 保证实时性措施
    网关在对两种协议的数据进行映射的过程中采用了一次性内存拷贝技术和单缓冲区技术来尽快完成数据的处理且保证是最新数据,以此来保证网关通信的实时性能。
    一次性内存拷贝技术是指网关从协议芯片内部读取到DP的输出数据后,直接将此数据填充到MODBUS输出帧对应的位置;从MODBUS输入模块得到的数据直接填入到DP协议芯片的输入缓冲区的对应位置。用这种方式来减少内存拷贝过程中所耗费的时间。
    网关单缓冲区[2,3]技术也是为了保证数据为最新数据而采用的。所谓单缓冲区即不管两种协议通信中待转换的数据而只保留当前最新的一帧。此网关连接的两种设备的正常数据通信都是周期性的,且周期一般固定不变。如果MODBUS数据交换的周期小于DP的数据交换周期,网关的缓存中只有一帧有效数据;如果MODBUS数据交换周期大于DP的数据交换周期,且采用链表结构保存DP的帧数据,则不管预先缓冲区有多大,肯定导致缓冲区溢出的问题,从而使DP的输出数据不能及时更新到MODBUS从站的通道上进而影响系统的实时性。
    高效地使用指针可以大大提高网络协议栈性能。本网关在MODBUS协议实现过程的信息处理中就采用了函数指针实现指针路由功能,避免了因过多判断对系统性能的影响,这样做不仅提高了系统处理信息的能力,也使系统有很好的扩展性能。上述一次性内存拷贝技术也是通过指针来实现的。
4.3 保证可靠性措施
  在硬件方面,除了保证网关性能所必须的参数外,还应在成本和可靠性方面做出一定的折中。本系统中为了提高系统的抗干扰能力,与外界通信的部分和系统在物理接口上都进行b 电气隔离,此处的3个通信接口都需要进行隔离。根据通信性能要求的不同,选择磁耦隔离+驱动芯片完成DP通信的隔离兼物理层电平转换功能;用双通道磁耦隔离芯片来完成另外两路串行口通信的隔离。这两款芯片都采用了最新的基于芯片尺寸的变压器隔离技术的磁耦,与传统的光耦比较,其转换速度、瞬态共模抑制能力、功耗、尺寸及成本等方面均有很明显的优势。为了满足工业现场即插即用的要求,设计了电源转换及保护电路来实现网关供电系统的稳定,保证系统的可靠运行,并支持带电作业(热插拔功能)。
    系统除了在上电之后对下挂的MODBUS模块进行类型查询并与DP主站组态模块类型进行比较外,在进入正常数据交换之后,也会实时地对模块的状态进行分析以判断是否有故障发生。故障标志是在网关和MODBUS从站进行通信过程中根据从站的回应帧来判断的。
    网关系统中如何保证多种总线通信的互不干扰是很重要的环节。此网关系统中MODBUS协议是由软件来实现的,考虑到需要定时器等保证通信的可靠性,为了防止两种协议通信的相互影响,对DP输出数据的读取采用查询的方式而非中断方式进行访问。这样在DP的数据到来后不会打断正在进行的MODBUS通信过程,尤其是在DP通信速率较高的情况下,这种设计的可靠性更加明显。如果采用中断的方式,当DP通信速率超过一定值后,其势必影响网关与MODBUS从站之间的通信,严重时会导致MODBUS帧传输的不完整性,从而导致网关对MODBUS模块通信状态的误判,进而影响系统的可靠性。
4.4 模块故障信息的处理
  如果MODBUS模块出现故障,如何将对应的故障上传到对智能网关进行组态的DP主站是很重要的一环,处理得当可以使系统的运行和维护变得简便灵活。
  西门子的DP从站设备只要有一个模块出现错误,则模块从属的从站会退出正常的数据交换状态,这样导致此从站相连的其他正常模块也不能进行数据交换,进而对于整个设备的运行产生影响。这种处理方式认为所有的模块都属于关键模块,只要有一个出现问题其余都会“被迫下线”,但这种处理方式不太灵活。本网关处理方式为:在查询到模块类型之后,实际模块类型和组态类型一致则网关将对应模块映射为标准的DP模块;否则,将判断故障,并将故障诊断信息传递给DP主站,并不断查询错误模块的类型,直到相应故障解除后将其映射成标准的DP模块。在此过程中正常模块的通信不受影响。相比来看,本网关在处理故障的策略则更加灵活。本网关可以判断的故障诊断信息包括:模块类型错误、模块超时故障、模块不存在故障以及模拟量输入模块的通道断线标志。
  本网关在其对应的GSD文件中的用户自定义诊断数据部分定义了上述4种故障对应的代码。故障代码格式如下:
    Unit_Diag_Bit(x)=“插槽x中模块不存在”
    Unit_Diag_Bit(8+x)=“插槽x中模块类型错误”
    Unit_Diag_Bit(16+x)=“插槽x中模块超时”
    Unit_Diag_Bit(24+x+8×y)=“插槽x中模块通道y断线”
  在正常运行中,在标准的诊断信息后只需要使用3+x个字节即可描述x个模块的诊断信息。在系统运行过程中该诊断信息由中央管理模块管理,如果存在故障,则填入VPC3+C的用户诊断缓冲区,然后置位诊断状态位,这样主站会在检测到此诊断位的下一个访问周期发送请求从站诊断报文帧,待取回诊断帧后继续进行正常的数据交换请求。上述过程不断重复,直至网关下挂的模块故障消除为止。在此过程中不存在上述故障的模块则仍然映射成标准的DP从站模块,正常的数据更新不受影响。该网关采用这种方式来保证状态正常的模块不停止工作,提高系统的灵活性。
5 网关性能测试
    网关在设计好之后,必须对其进行性能测试以判断其是否达到设计指标,并为用户进行系统设计提供依据。
  本网关的性能和下挂模块以及DP总线波特率设定有直接的关系。经过测试和DP通信速率可以到达DP协议规定的最高速度12 Mb/s;与MODBUS每个模块完成一次通信的最长时间为10.7 ms(波特率为115.2  kb/s时);一个扫描周期内故障判断等所用时间为400 ?滋s。用户在设计过程中可以根据实际系统需求进行具体分析和配置。
  本文对工业通信用网关的设计进行了阐述,以PROFIBUS-DP智能网关的设计为例对此类网关实现的关键技术进行了分析。针对本网关,硬件方面,采用电源管理模块实现网关的热插拔功能,采用专用芯片解析DP协议,采用磁耦隔离代替传统的光耦隔离,提高了系统的性能和可靠性。软件方面,采用单缓冲区设计、一次性内存拷贝技术以及合理的中断应用来保证系统的实时性和可靠性。对网关的数据映射处理和故障处理进行了详细的分析,并给出了其性能参数。本设计为其他工业通信用网关的设计提供了参考依据。
参考文献
[1]  杨瑞霞.运用状态机提高嵌入式软件效率[J].单片机与嵌入式系统应用,2009(5):69-71.
[2]  LEE K C, LEE S, LEE H H. Implementation and PID tuning of network-based control systems via profibus polling network[J] .Computer Standards and Interfaces, 2004,26 (3) :22-240.
[3]  LEE S, HA K N. NDIS-based virtual polling algorithm  for IEEE 802.11b for guaranteeing the real-time requirements. Computer Standards & Interfaces,2007,29:316-324.

此内容为AET网站原创,未经授权禁止转载。