加载中,请稍候...
LChid0
浏览历史

 

 

 

 

 

基于赫优讯嵌入式模块EtherCAT从站设备的开发

摘要:随着实时工业以太网技术的发展,在最新版本的IEC61158 Ed.4标准中已经包含了Profinet,EtherCAT,Ethernet/IP,SERCOS III等11种实时以太网行规集。以netX网络控制器为处理器的嵌入式模块comX,是支持所有主流实时以太网协议的嵌入式模块。本文在介绍了实时以太网和netX网络控制器的基本结构和功能的基础上,详细探讨了基于该嵌入式模块comX的实时以太网从站设备的网络接口硬件组成和软件实现,以及在智能分拣系统中的应用。
关键字:实时以太网;netX网络控制器;双端口内存DPM;嵌入式模块comX
   
0 引言
     随着计算机、通信、网络等信息技术的发展,信息交换的领域已经覆盖了工厂、企业乃至世界各地的市场,因此,需要建立包含从工业现场设备层到控制层、管理层等各个层次的综合自动化网络平台,建立以工业控制网络技术为基础的企业信息化系统。 
     20世纪80年代产生和发展起来的现场总线技术,以全数字的通信代替4~20mA电流的模拟传输方式,使得控制系统与现场仪表之间不仅能传输生产过程测量与控制信息,而且能够传输现场仪表的大量非控制信息,使得工业企业的管理控制一体化成为可能。然而,现场总线技术在其发展过程中存在不足:标准过多,不同总线之间不能兼容;专用实时通信网络,成本高;速度较低,支持的应用有限,不便于和Internet信息集成。
      由于现场总线的互连、互通与互操作性问题很难解决,于是现场总线开始转向以太网。经过近几年的努力,以太网技术已经被工业自动化系统广泛接受。为了满足高实时性能应用的需求,各大公司和标准组织纷纷提出各种提升工业以太网实时性的技术解决方案,从而产生了实时以太网(Real Time Ethernet,简称RTE)。目前,在最新版的IEC 61158 Ed.4标准中包含了11种实时以太网行规集:Profinet,EtherCAT,Ethernet/IP,SERCOS III,PowerLink, EPA, Modbus/TCP,TC-net,Vnet/IP,P-NET和HSE
      本文介绍了一种基于嵌入式模块comX的EtherCAT实时以太网从站设备设计方案,该模块支持目前所有主流的实时以太网协议,并详细讨论了其硬件组成和软件实现,以及在智能分拣系统中的应用。
   
1 netX网络控制器

 

1.1 netX基本结构
      netX网络控制器是赫优讯(Hilscher)公司推出的新一代工业网络控制芯片,目前具有netX500、netX100、netX50三种型号,是一种高度集成的网络控制器,它具有全新的系统优化结构,适合工业通讯和大规模的数据吞吐。支持目前所有主流的实时以太网和现场总线系统: PROFINET、Ethernet/IP、EtherCAT、Powerlink、SERCOS III、Open Modbus on TCP/IP、AS-Interface、Interbus、CC-Link、CANopen、DeviceNet、Profibus等协议。
      netX 500的结构如图1所示。netX 500/100以32位ARM 926EJ-S为CPU核,主频200MHz,片上集成144KB SRAM、装有引导程序和实时内核的32KB ROM,通过Memory控制器可以外扩SDRAM、SRAM或FLASH,通过双端口内存DPM接口还可以连接到主机系统。netX包含丰富的外设功能:如UART,USBSPI,I2C以及集成的显示控制器,可以满足广泛的应用需求。此外,netX采用中央数据交换(Data Switch),它连接着各个功能单元,允许同时在不同的主从端口之间通信,同时可以防止它们在传输数据时相互阻塞。netX最大的亮点在于具有可以自由定义4个智能通讯口,可以配置为现场总线或实时以太网通道。因此,netX是名副其实的“高端”网络控制器。


图1 netX 500结构框图

1.2 netX基本功能
     netX 500网络控制器内部集成ARM 926的CPU核,因此可以做为一个单片系统,所有的应用都可以在netX上实现。其次,netX具有双端口内存DPM接口,也可以再外接一个CPU,实现双核系统: CPU负责处理应用程序,netX专门实现网络通讯。
      netX500最大的特点就是具有可配置的4个通信通道,它们建立在两层结构上,而且相互等同。它们具有专门的ALU,并且有特殊的逻辑单元,通过Microcode来实现各协议的基本功能。xMAC(Medium-Access-Controller)分别按照各自的总线存取进程,发送和接收数据,加密或者将它们转化为字节方式。xPEC(Protocol Execution Controller)负责编译,并将数据打包,管理报文通讯。当数据量大时,可通过DMA通道进行数据交换。而且,每个通道有一个双端口内存DPM,可用于保存状态信息或本地数据。
     其中,前两个通道集成PHY,可直接用于以太网的连接。并且内部已经集成了各种实时以太网协议所需的ASIC硬件资源,如Hub、Switch、IEEE1588等,如图2所示。

 
图2 实时以太网通道结构图
     因此,通过这种智能的通讯ALU,在netX芯片上可以实现各种不同的通讯协议,可以是现场总线协议,也可以是各种实时以太网协议,并且可以自由组合。而且,同步过程不受CPU响应时间的限制。 

2 实时以太网设备的设计
      在该从站设备中,使用的是德国赫优讯(Hilscher)自动化系统有限公司的嵌入式模块comX-CA-RE,模块内部已经集成专用的ASIC芯片和固化程序Firmware,由该模块实现实时以太网协议,主机CPU通过嵌入式模块提供的双端口内存(Dual-Port Memory,DPM)接口与模块进行数据通信,用户不需要关心协议的具体实现,只需往DPM接口读/写数据就可以,因此,该模块就像一个内存,使用起来特别方便。该模块的另一个特点是,同一个硬件模块上就能支持各种不同实时以太网协议:Profinet、EtherCAT、Ethernet/IP、SERCOS III、Powerlink和Modbus TCP,并且还支持主站或从站,只需下载不同的协议堆栈Firmware。因此,减少了硬件开发成本,只需在软件上更改相关协议的API,这大大的保护了投资,减少了开发的再投入成本。

2.1 硬件设计
     嵌入式模块comX-CA-RE提供给用户的硬件接口只有X1一个排针连接头(50根管脚),即双端口内存接口,该连接头包含了与主机通信必备的控制线、16位数据总线和14位地址总线。
      由于该模块已经集成实现实时以太网接口的所有必备电路,因此在外围电路设计的时候非常简单方便,其电路连接与MCU和内存的连接相似。实时以太网协议都由模块内部实现,用户应用程序只需通过提供的API接口和访问方式,对双端口内存进行读/写操作。嵌入式模块comX与主机接口电路如图3所示。在该设备中,同时还设计了IO、AD采集电路,DA输出电路,以及其它的外设接口电路。


图3 嵌入式模块与主机接口电路

2.2 软件设计
    嵌入式模块comX提供的主机接口是双端口内存DPM,用户应用程序通过DPM接口来访问该模块。同时,为了提高整个系统的实时性和可靠性,主机系统使用的是实时多任务操作系统Linux。因此,在进行软件设计时,主要完成驱动程序以及应用程序的编写。

2.2.1 双端口内存DPM结构
     用户应用程序通过双端口内存DPM来访问实时以太网嵌入式模块comX,嵌入式模块comX提供的双端口内存DPM接口是16 KByte的地址空间,其具体结构如图4所示。


图4 双端口内存地址空间

     netX提供的双端口内存最大地址空间是64KByte,分为系统通道、握手通道、通讯通道0~3、应用通道0~1。对于嵌入式模块comX,实时以太网的协议堆栈(如EtherCAT从站的Firmware)已经保存在模块的Flash中,因此只使用了默认的系统通道、握手通道和通讯通道0,16KByte的地址空间。

     系统通道512个字节,位于双端口内存DPM的起始位置,是最重要的通道,总是存在。它包含了系统本身(netX硬件和实时操作系统rcX)的关键信息,并且提供一种邮箱的传输机制,用于发送/接收跟系统相关的报文。各功能块如表1所述。

表1 系统通道结构

     握手通道256字节,从偏移地址0x0200开始,提供主机系统与netX固件(运行在netX芯片中的协议堆栈)之间的数据传输同步机制。所有通道的握手寄存器都在此区域,每个握手寄存器包含两类握手信息:系统握手信息和通讯握手信息。系统握手信息与“系统设备”相关,由主机应用执行netX系统相关的命令,如复位等。通讯握手信息用于同步循环或非循环数据,同时向主机系统提供状态变化信息。
     通讯通道m*256字节,从偏移地址0x0300开始,现场总线协议堆栈使用该通道,与主机系统进行循环数据和非循环数据的数据交换。共有四个通讯通道,每个通讯通道分别对应netX芯片的xMAC/xPEC端口,其结构都相同。通讯通道0的默认大小是16KByte,其各功能块如表2所述。

表2 通讯通道结构
 

     应用通道m*256字节,根据实际的需求,并不一定需要该通道,该通道实现用户特殊的信息交互,由客户定义使用。
2.2.2 驱动程序的设计
     赫优讯提供嵌入式模块comX的驱动源码Toolkit,用户可以根据实际的需求,在不同的目标系统中集成该Toolkit提供的驱动接口,这样用户应用程序就能很方便的访问嵌入式模块comX的双端口内存。Toolkit提供的驱动接口与实时以太网协议无关,只与comX双端口内存DPM相关,因此,如果基于comX模块开发多种实时以太网协议(Profinet、EtherCAT、Ethernet/IP主从站等)的设备,其驱动程序是通用的。
     在本系统中,使用Linux实时操作系统,设备驱动主要完成对嵌入式模块comX双端口内存DPM的访问,用户程序通过调用Toolkit提供的接口函数来访问实时以太网嵌入式模块comX。Linux设备驱动的框架如图5所示。


图5 Linux设备驱动框架
     Linux设备驱动主要实现的函数如表3。

表3 Linux设备驱动函数表

2.2.3 应用程序的设计
     由于赫优讯提供的嵌入式模块comX,在同一个硬件模块上就能支持各种主流的实时以太网协议:Profinet、EtherCAT、Ethernet/IP、SERCOS III、Powerlink和Modbus TCP,并且还支持主站或从站,只需下载不同的协议堆栈Firmware。也就是说,如果开发不同实时以太网通讯接口的同类产品,除了不同的实时以太网协议接口不一样,其它的程序接口都是一样的。
     在本系统中,使用嵌入式模块COMX-CA-RE/ECS,即EtherCAT从站模块。因此,应用程序主要实现的功能:模块的初始化,从站热启动参数的下载,外围采集模块的数据采集,以及与EtherCAT主站设备的数据交换等等。
      嵌入式模块comX的Flash中已经保存了EtherCAT从站的协议堆栈,在系统上电后,会自动加载该协议堆栈。然后再加载从站的热启动参数,需应用程序加载。不同的实时以太网从站,其热启动参数是不一样的,以报文的方式,通过双端口内存DPM的系统邮箱发送给comX。EtherCAT从站关键的热启动参数如下,
      ptWarmstartReq->tData.ulSystemFlags = 0; /* System Flags */
      ptWarmstartReq->tData.ulWatchdogTime=1000; /* Watchdog time */
      ptWarmstartReq->tData.ulVendorId = 0x44;  /* Vendor Id */
      ptWarmstartReq->tData.ulProductCode = 0x7874656E; /* Product code*/
      ptWarmstartReq->tData.ulRevisionNumber = 0x0000FFFE; /* Revision number */
      ptWarmstartReq->tData.ulSerialNumber = 0; /* Serial number */
      ptWarmstartReq->tData.ulProcessDataOutputSize = 4; /* Process Data Output Size */
      ptWarmstartReq->tData.ulProcessDataInputSize = 4; /* Process Data Input Size */
      热启动参数的下载处理代码如下:
      /***** 从站热启动参数下载 *****/
      if( true != GetWarmstartPacket( ulFirmwareSelection, ulDeviceSelection, &tSendPacket))
      {
        printf("Error reading WARMSTART packet for the given protocol\r\n");              
      } else
      {
        // 发送包
        lRet = ptCifXFnc->pfnChannelPutPacket( hChannel, &tSendPacket, 2000);
        if( CIFX_NO_ERROR == lRet)
        {
          printf("Sending WARMSTART packet: DONE\r\n");
        } else
        {
          printf("Error sending WARMSTART to the device: Error=0x%08X\r\n", lRet);
        }
        // 接收包
        lRet = ptCifXFnc->pfnChannelGetPacket( hChannel, sizeof(tReceivePacket), &tReceivePacket, 2000);
        if(CIFX_NO_ERROR != lRet)
        {
          printf("Error while wait for WARMSTART response: Error=0x%08X\r\n", lRet);
        } else if(0 != (lRet = tReceivePacket.tHeader.ulState))
        {
          printf("Error in WARMSTART response: Error=0x%08X\r\n", tReceivePacket.tHeader.ulState);
        } else
        {
          // 等待,直到BUS位被设置
          CHANNEL_INFORMATION tChannelInfo = {0};
          do 
          {
            lRet = ptCifXFnc->pfnChannelInfo( hChannel, sizeof(tChannelInfo), &tChannelInfo);
            printf(".");
          } while ( (CIFX_NO_ERROR == lRet) &&
                      (!(tChannelInfo.ulDeviceCOSFlags & (RCX_COMM_COS_RUN | RCX_COMM_COS_READY))) );
        }
      }
    当把热启动参数下载完成后,通过xChannelIOWrite()和xChannelIORead()两个函数,主机应用程序就可以与comX模块进行数据交换了。comX模块中运行的EtherCAT协议堆栈会自动将主机应用发来的循环数据或非循环数据发送到EtherCAT网络上。反之,自动截取EtherCAT主站发送给该从站的数据,并传送给主机应用程序。

3 EtherCAT从站模块在智能设备的应用


图6 智能分拣系统示意图
     此智能分拣系统要求以流水方式顺序检测产品的若干个质量特征,并对相应的质量特征作出判别,并由主控制器对各个传感器的检测结果加以汇总从而得到某一产品的分拣结果,并控制分拣电机将相应的产品分拣到指定的分拣仓中,同时将该产品的质量信息存入数据库中。
     在本系统中,传感器检测频率设计为40Hz,由于传感器位置和处理时间的原因留给数据传输的时间要求小于1ms。同时由于要求质量判定结果要存入数据库,所以单一传感器的传输数据量为10~1kByte,因此,要求采用的现场总线的数据带宽不能小于10M。所以,在本系统中选用了EtherCAT实时以太网作为数据传输总线,采用德国赫优讯的comX嵌入式模块作为从站接入模块,嵌入式系统通过DPM与comX通讯,采用轮询的方式向主控制器发送检测结果。  
4 结束语
    目前,国内厂家多限于对现场总线产品的开发,对实时以太网产品的的研究开发甚少,本文介绍了一种支持所有主流实时以太网协议的嵌入式模块comX,并详细讨论了其关键的开发步骤,对实时以太网产品的开发具有借鉴作用。从实时工业以太网技术发展形势看,实时以太网在工业控制系统中的应用必将越来越广。