基于Windows的Powerlink主从站通信.doc

上传人:文库蛋蛋多 文档编号:2395322 上传时间:2023-02-17 格式:DOC 页数:21 大小:790KB
返回 下载 相关 举报
基于Windows的Powerlink主从站通信.doc_第1页
第1页 / 共21页
基于Windows的Powerlink主从站通信.doc_第2页
第2页 / 共21页
基于Windows的Powerlink主从站通信.doc_第3页
第3页 / 共21页
基于Windows的Powerlink主从站通信.doc_第4页
第4页 / 共21页
基于Windows的Powerlink主从站通信.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《基于Windows的Powerlink主从站通信.doc》由会员分享,可在线阅读,更多相关《基于Windows的Powerlink主从站通信.doc(21页珍藏版)》请在三一办公上搜索。

1、基于Windows的Powerlink主从站通信一、设计任务(要求)二、总体方案三、硬件原理图四、软件框图五、设计总结六、 参考文献一、设计任务(要求)1、设计要求两人一组,一人作为主站(MN),一人作为从站(CN),实现Windows下的Powerlink主从站通信,在两台PC的控制台分别显示MN:姓名和学号CN:姓名和学号2、课程设计任务及工作量的要求根据任务书要求,完成以下设计任务:1 参考学习Powerlink实现以太网教程相关部分,学习怎样修改openPowerlink源代码,怎样使用openConfigurator配置从站网络参数和映射参数2 掌握Powerlink工作原理2在Wi

2、ndows系统下安装Visual Studio 2008,编译openPowerlink开源代码 3. 利用开源配置工具openConfigurator配置网络参数和映射参数,将产生的mnobd.cdc和xap.h文件放置正确的目录下4. 根据配置参数,修改源代码相关部分,重新编译源代码,完成主从站通信功能,并在控制台显示各自的姓名和学号 5. 通过wireshark进行功能演示。 二、 Powerlink工作原理 现场总线由来已久,几种出现较早、应用较多的现场总线,如CAN、deviceNet、modBus、RS485等,这些总线速度慢、每次传输的数据包小。随着工业自动化由低速向高速、由低精

3、度向高精度、由集中式控制向分布式控制的发展,对现场总线的传输速度和数据量都提出了新的要求。于是就有很多厂家提出了基于以太网技术来实现现场总线,由此诞生了POWERLINK、EtherNet/IP、ModBusTCP、ProfinetRT、EtherCat、MECHATROLINK等这些工业实时以太网的技术。目前高速实时现场总线种类繁多,很多厂家都在推广自己的总线协议,这些协议从性能上可分为两类:高实时总线和低实时总线。高实时性的总线:POWERLINK,EtherCat,MECHATROLINK。POWERLINK实际的实时性能最高为100us的循环周期,EtherCat实际的实时性能最高为2

4、50us的循环周期(这里指的是实际实时性能,而不是理论值,因为EtherCat的宣传资料中的性能为理论值)。在这三种总线中EtherCat和MECHATROLINK需要用专用的ASIC才能实现,之所以采用ASIC芯片来实现是为了能够控制市场,使他们处于有利地位。众所周知,工业自动化行业的厂家在2009、2010年取得了大丰收,很多公司的业绩翻了一倍。他们不缺客户、不愁订单,但是发愁芯片,由于很多芯片采购不到,而不得不丢掉很多客户。提供ASIC解决方案的公司,目的就是通过ASIC来控制市场、控制竞争对手。EtherCat和MECHATROLINK只解决了数据链路层和物理层,而没有实现应用层。用户

5、买了ASIC芯片,还不得不自己来实现应用层(如CANopen),这需要花费用户很长时间。此外不同用户实现的应用层往往不同,这就造成同样都是基于EtherCat的设备,却相互不能通信。POWERLINK是一个可以在普通以太网上实现的方案,无需ASIC芯片,用户可以在各种平台上实现POWERLINK,如FPGA、ARM、x86CPU等,只要有以太网的地方,就可以实现POWERLINK。POWERLINK公开了所有的源码,任何人都可以免费下载和使用(就像Linux)。POWERLINK的源码里包含了物理层(标准以太网)、数据链路层(DLL)、应用层(CANopen)三层完整的代码,用户只需将POWE

6、RLINK的程序在已有的硬件平台上编译运行,就可以在几分钟内实现POWERLINK。POWERLINK是一个易于实现的、高性能的、不被任何人垄断的、真正的互连互通的平台。低实时性的总线:EtherNet/IP,ModBusTCP,ProfinetRT。这三种总线可以用普通的以太网实现,但是他们基本上是对TCP/IP协议的修改或补充,没有从根本上解决实时的需求。而POWERLINK完全丢掉了TCP/IP,定义了一个精简的、实时性极高的数据链路层协议,同时定义了CANopen为应用层协议。这样用户在实现了POWERLINK的同时,也实现了CANopen。在纷繁的总线协议中,POWERLINK将是实

7、时以太网的未来,原因如下:1.POWERLINK是一项开源技术,开放性好,无需授权,无需购买。2.POWERLINK基于标准的以太网,无需专用的ASIC芯片,有以太网的地方,就可以实现POWERLINK,硬件平台多种多样(ARM,FPGA,DSP,X86等),不依赖于某一个公司。3.POWERLINK速度快,支持10M/100M/1000M的以太网。以太网技术进步,POWERLINK的技术就会跟着进步,因为POWERLINK是基于标准以太网的。4.POWERLINK性能卓越,使用价格低廉的FPGA(几美元)来实现POWERLINK,性能也能达到100-200us的循环周期。5.POWERLIN

8、K支持标准的网络设备,如交换机、HUB等。支持所有以太网的拓扑结构,使得布线更自由、更灵活。2.1POWERLINK是IEC国际标准POWERLINK是IEC国际标准,同时也是中国的国家标准。通信描述:IEC61784-2服务和协议:IEC61158-300IEC61158-400IEC61158-500IEC61158-600设备描述:ISO15745-12.2OSI模型OSI是一个用于开放信息处理系统标准化的通信模型,它是当今许多通用无数据优先级传输协议的参考模型。这个模型将数据传输的任务分为7层,每层(除了最底层)建立在另一层的基础之上。POWERLINK是一个三层的通信网络,它规定了物

9、理层、数据链路层和应用层。2.3POWERLINK的物理层POWERLINK的物理层采用标准的以太网,遵循IEEE802.3快速以太网标准。这意味着无论POWERLINK的主站还是从站,都可以运行于标准的以太网之上。这带来的好处是:1.只要有以太网的地方就可以实现POWERLINK,例如你的PC机上可以运行POWERLINK、一个带有以太网接口的ARM可以运行POWERLINK、一片FPGA也可以运行POWERLINK。2.以太网的技术进步,就会带来POWERLINK的技术进步。因为POWERLINK是站在标准以太网的肩膀上,而标准的以太网是一个开放的、全民的网络,在各个领域广泛应用,各行各业

10、的人不断地为以太网的升级而奋斗。目前POWERLINK支持10M/100M/1000M的以太网。只需在硬件驱动程序中做小小的改动,POWERLINK就可以支持10G的以太网。3.实现成本低。如果用户的产品以前是基于ARM平台,一般ARM芯片都会带有以太网,这样用户无须增加任何硬件,也无需增加任何成本,就可以在产品中集成POWERLINK,用户所付出的只是把POWERLINK的程序集成到应用程序中,而POWERLINK的源程序又是开放且免费的。用户可以购买普通的以太网控制芯片(MAC)来实现POWERLINK的物理层,如果用户想采用FPGA的解决方案,POWERLINK提供开放源码的openMA

11、C。这是一个用VHDL语言实现的基于FPGA的MAC,同时POWERLINK又提供了一个用VHDL语言实现的openHUB,支持16个端口。如果用户的网络需要做冗余,如双网、环网等,就可以直接在FPGA中实现,易于实现且成本很低。此外由于基于FPGA的方案,从MAC到数据链路层(DLL)的通信,POWERLINK采用了DMA,因此速度更快。2.4POWERLINK的数据链路层POWERLINK的数据链路层:也就是POWERLINK的核心,主要包括如下功能:1.构建/解析数据桢、对数据桢定界、网络同步、数据桢收发顺序的控制。2.传输过程中的流量控制、差错检测、对物理层的原始数据进行数据封装等。3

12、.实时通信的传输控制。4.网络状态机。在POWERLINK网络中,至少有一个设备做为主站(MN),其他的设备做为从站(CN)。每个从站设备都有唯一的节点号(NodeId),该节点号是用来区分网络中的设备,取值范围为1-239。主站设备(MN)的节点号为240,主站的作用是为了为协调各个从站,合理分配总线使用权,避免冲突,实现实时通信。POWERLINK的实时通信机制:POWERLINK有两种通信机制,基于请求/应答模式和基于定时主动上报模式(PRC模式)。2.4.1基于请求/应答模式该种模式主站(MN)轮询所有从站(CN)。首先主站发送Preq数据帧(PReqCN1)给1号从站,该数据帧是单播

13、的,只有1号节点接收,其他节点不接收。在该数据帧中包含了主站(MN)要发送给1号从站的数据。当1号节点收到来自主站的Preq数据帧,就会上报一个Pres数据帧(PresCN1),该数据帧是广播的,除了主站可以接收到以外,网络中其他任何一个从节点都能收到。主站(MN)与1号从节点(CN1)一来(Preq)、一往(Pres),就完成了一次信息交互;接下来主站(MN)与2号从节点(CN2)的信息交互,以此类推,将网络中所有的节点扫描一次,称为一个循环周期。假定循环周期为200us,那么网络中的每个设备每200us就有一次收取/发送数据的机会,而且不会与其他设备造成冲突。该种模式下的性能:完成一个站的

14、通信所需要的时间,取决于物理层的传输速度和需要传送的数据包大小。假定物理层为100M以太网,该种网络的传输速度为12.5bytes/us,假定数据包大小为64bytes(每个Preq和Pres数据帧最大可传输1490bytes的数据),那么完成一个站的通信所需要的时间:T=Tpreq+Tgap+TpresTpreq:主站发送Preq数据帧给从站,时间长度为64/12.5=5.12usTpres:从站发送Pres数据帧给主站,时间长度为64/12.5=5.12usTgap:Preq数据帧与Pres数据帧之间的时间间隙,约为2us因此完成一个站的通信,总时间长度为12.24=5.12+2+5.12

15、2.4.2PRC模式在基于请求-应答模式(PREQ-PRES)通信时,从节点什么时候上报自己的数据,取决于主站什么时候发生请求(PREQ)给它。该种模式省掉了主站的Preq数据帧,取而代之的是一个挨一个的Pres。有人会问各个从站如何知道自己应该在什么时候上报数据?是否会出现两个或多个从站同时上报数据?这样岂不是发生了冲突?该种模式下,POWERLINK主站在开始通信之前,会去配置从站的参数,告诉每个从站应该在循环周期的哪一时刻上报。举个例子:假定我们有3个从站,主站可以通过配置,让1号从站在收到PresMN后的第5us上传PresCN1数据帧,而2号从站在收到PresMN后的第15us上传P

16、resCN2数据帧,而3号从站在收到PresMN后的第22us上传PresCN3数据帧。这样就避免了冲突。因为POWERLINK是基于时间槽的通信,而且POWERLINK支持1588分布式时钟协议,每个POWERLINK节点都有一个时钟,因此POWERLINK很方便实现这种通信模式。在该种模式下的性能:完成一个站的通信所需要的时间,取决于物理层的传输速度和需要传送的数据包大小。假定物理层为100M以太网,该种网络的传输速度为12.5bytes/us。假定数据包大小为64bytes(每个Preq和Pres数据帧最大可传输1490bytes的数据)。那么完成一个站的通信所需要的时间T=Tgap+T

17、presTpres:从站发送Pres数据帧给主站,时间长度为64/12.5=5.12usTgap:Preq数据帧与Pres数据帧之间的时间间隙,约为2us因此完成一个站的通信,总时间长度为7.12=5.12+2这种通信比基于请求/应答模式至少能提高30%的效率。PRC模式的通信过程:1.主站发生广播数据帧PresMN,主站把多个从站需要的数据在该数据帧里打包,然后以广播的方式发送出去,各个从站根据配置信息,从该数据帧中取走相应的数据。该数据帧为标准的以太网数据帧,最大有效数据容量为1490Bytes。2.从站接受到PresMN以后,根据主站配置的上报时间,来决定什么时候该上报PresCN,当定

18、时器到了上报时间,从站就以广播的方式上报PresCN。该数据帧包含了主站以及其他从站需要的数据信息。3.主站和从站是支持PRC模式,还是支持请求/应答模式,是由它自身的参数决定的。可以通过参数设置,在一个周期内,让某些从节点采用PRC模式,而另外一些从节点采用请求/应答模式。这种搭配使得网络容量可以灵活搭配。2.4.3多路复用在一个系统中,通常有多种不同类型的设备,如有伺服驱动器、I/O、传感器、仪表等。不同种类的设备对通信周期和控制周期的要求往往不同。假设现在有3种设备:伺服驱动器、I/O、传感器。伺服的控制周期为200us,而I/O的控制周期为1ms,传感器却不定时的上传数据。面对如此应用

19、,POWERLINK如何来解决?首先解决伺服的200us和I/O的1ms的配置。因为两种设备需要的循环周期不同,如果将循环周期设为200us,伺服没有问题,可是I/O却会由于通信过于频繁而反应不过来;如果将循环周期设为1ms,那么伺服会由于控制周期太长,而达不到精度的要求。POWERLINK采用多路复用来解决这个问题。在这里,可以将循环周期设置为200us,将伺服配置成每个循环周期都参与通信,将I/O配置成每N个循环周期参与一次通信,N是一个参数,可以设置为任意整数(在这里N的值为5)。这样就可以达到伺服的通信周期为200us,I/O的通信周期为200x5=1ms。如下图所示,有11个节点要通

20、信,其中1、2、3这三个节点每个循环周期都通信;而4、5、6、7、8、9、10、11这8个节点为复用节点,这些节点每3个循环周期才通信一次。这样就可以把快速设备和慢速设备经过合理配置达到系统最优。2.4.4异步阶段以上提到了三种不同设备,伺服的控制周期为200us,而I/O的控制周期为1ms,传感器却不定时的上传数据。上一节讲述了快速设备(伺服)和慢速设备(I/O)的合理配置。接下来讲如何配置不定时上传数据的设备(传感器),这种类型的设备称为异步设备。一个完整的POWERLINK周期分为两个阶段:同步阶段和异步阶段。同步阶段用来传输周期性通信的数据;异步阶段用来传输那些非周期性的通信数据。非周

21、期通信数据包括:1.异步设备的通信数据,如这里所说的传感器;2.一些设备偶尔需要传送的参数,例如在某些应用场合伺服周期性传输位置数据,但可能偶尔传输一下扭矩或者温度数据,这些非周期性传输的数据,就叫异步数据。这些异步数据会在通信周期的异步阶段来传送。从SoC数据帧开始到SoA数据帧的时间段为同步阶段,SoA和AsyncData为异步阶段。SoA数据帧包含了请求哪个从站上报数据,而AsyncData数据帧为该从站上报的数据。在每个循环周期,只能有一个从节点上报异步数据,如果有多个从节点需要异步通信,那么需要在多个周期内完。2.5POWERLINK的同步机制POWERLINK支持1588分布式时钟

22、协议,每个循环周期的开始,主站都会广播一个SoC数据帧到网络上,该数据帧包含了两个重要信息:网络的绝对时间和相对时间。绝对时间信息:年、月、日、时、分、秒、毫秒、微秒、纳秒。如下所示:相对时间信息:从网络开始工作,到现在一共运行了多少us。SoC数据帧有两个功能:时钟同步和动作同步。时钟同步:网络中的节点需要有一个统一的网络时间利用网络时间来同步网络中所有设备的分布式时钟,让网络中所有节点的时钟有一个共同的基准。POWERLINK主站(MN)在每个循环周期的开始将SoC数据帧广播到网络上,该数据帧包含了网络时间信息,网上的各个从节点可以将这个时间作为统一的网络时间。动作同步:网络中的节点需要同

23、时去做一件事情在POWERLINK协议中有两种方法去触发一个同步的事件:1.通过从节点自己的时钟触发;2.通过SoC数据帧触发。这里主要讲通过SoC数据帧触发同步事件的原理。在POWERLINK数据链路层里,每当收到了SoC数据帧,会触发一个同步的回调函数,用户可以将同步执行的程序写在该函数里,这样就可以执行同步动作。举例来说,假设有一个运动控制器,要控制10台伺服做同步运动,例如需要10台伺服同时启动。每个循环周期,运动控制器(作为POWERLINK的主站)将10台伺服所需要的新的位置信息依次传给各个伺服。每个伺服收到新数据的时间是不同的,第一个和最后一个得到位置数据的时间可能会差100多u

24、s。如果收到新数据,伺服就开始启动,那么就会出现这种情况:第一个伺服已经开始运转,而最后一个伺服还没有收到数据,这显然不是我们想要的结果。因此我们需要一个同步信号,使所有的伺服都得到新数据以后,同时启动。这个同步信号就是SoC。主站在上一个循环周期结束(即下一个循环周期开始)时广播一个SoC数据帧,基本上所有的从站会同时收到这个数据帧。该信号触发一个同步回调函数或者硬件中断,来处理同步事件。因为在SoC数据帧之前,每个从站都已经从主站(控制器)那里得到了新的位置信息,因此SoC信号触发的同步事件中可以同时启动,运行到设定位置。如果是星形拓扑,各个从站收到该信号的时间差取决于线缆的长度,电信号可

25、以认为是以光速在导线中传播,因此用户可以计算出该时间差。可近似为1米为3.3ns。这个级别的时间差基本上可以忽略。如果你采用的是菊花链连接,那么没经过一级hub会有40ns的延迟,再加上线缆的延迟,第一个从站和最后一个从站在接受到SoC信号的时间差可能会达到几百纳秒甚至微秒,用户需要根据应用场合的需要来决定该延迟是否可以忽略,如果不可以忽略,POWERLINK提供了测量机制,可以测出来相邻两个节点的传输延迟。用户根据这些延迟时间给各个节点做一个补偿,从而达到各个节点在同一时刻做同步事件。综上,介绍完了POWERLINK数据链路层的整个工作原理和过程。三、 总体实现方案流程 1. 所需软件和硬件

26、:需要准备两台电脑,一台作为主站,一台作为从站;操作系统为Windows XP; 需要安装 VS2008 开发环境;需要安装 WinPcap 或者 Wireshark。 2. 将 POWERLINK 的源码分拷贝到要作为主站和从站的电脑上,随便选哪台电脑做主站都可以,主站和从站上的程序有所不同。 3. 打开主站ExamplesX86WindowsVC9demo_pcap 下的工程,使用 VS2008 打开,此外为了能在Windows上运行openPOWERLINK,你需要安装winpcap或wireshark软件,因为 openPOWERLINK 将 pcaplib 作为网卡驱动程序。 4.

27、修改主站上的网络参数和映射参数,假定我们要通信 2 个参数,一个参数是主站发送给从站,另一个是主站接收来自从站的数据。打开 objdict.h 文件。首先确定要把哪 个 object 作 为 主 站 发 送 给 从 站 的 参 数 , 我 们 注 意 到 源 码 里 有 一 个Object0X2000/01,可以将该 object 作为主站发送给从站的参数。 因此我们配置发送的网络参数和映射参数: 将 0x1801/0x01 的值设为 1,即发送数据给 1 号节点: 将 0x1A01 的参数设置为如下的值: 5. 修改主站上的源程序。打开 demo_main.c 文件,将 NODEID 改为:

28、 #define NODEID 0xF0 /=MN,主站的 nodeid 为 240 即 16 进制的 FO 6. 定义一个变量(BYTE output8),与 0X2000/01 link 起来。 POWERLINK 实时以太网教程 59 在 main.c 中,将与 0x2000/0x01 连接的代码修改如下: 至此,我们就映射了一个 object,并把他和我们自己定义的一个变量 link 起来。 接下来我们再映射一个 object,用来接收数据。 7. 接收的网络参数和映射参数: 我们注意到源码中有索引为 0x2200 的对象字典,可以将 0x2200/02 作为接收的 objcet。 将

29、 0x1402 作为接收 1 号节点的网络参数。将 0x1402/0x01 的值设为 1,即接收来自 1号节点的数据。 相应的映射参数为 0x1602,将 0x1602 的参数设置为如下的值: 8. 定义一个变量(BYTE input8),与 0X2200/02 link 起来。 POWERLINK 实时以太网教程 60 在 main.c 中,在 main.c 中,将与 0x2200/0x02 连接的代码修改如下: 至此,我们映射了一个 object,并把他和我们自己定义的一个变量 link 起来。接下来我们将 AppCbSync 修改如下,这段代码的意思是我们把主站要发给从站的数据不断的累加

30、,同时打印出来自从站的数据。 6.1.2 设置从站的参数 设设置置从从站站的的参参数数 设置从站的参数 1. 从站需要 2 个参数,一个参数用来接收来自主站的数据,另一个参数发送给主站。打开 objdict.h 文件。首先确定我们要把哪个 object 作为发送给主站的参数,我们注意到源码里有一个 Object0X6000/01,可以将该 object 作为从站发送给主站的参数。 因此我们配置发送的网络参数和映射参数: 将 0x1800/0x01 的值设为 0。 POWERLINK 实时以太网教程 61 将 0x1A00 的参数设置为如下的值: 2. 修改从站上的源程序。打开 demo_mai

31、n.c 文件,将 NODEID 改为: #define NODEID 0x01 /=从站的 nodeid 取值范围 1-239 3. 定义一个变量(BYTE output8),与 0X6000/01link 起来。 在 main.c 中,将与 0x6000/0x01 连接的代码修改如下: ObdSize=sizeof(output8); uiVarEntries=1; EplRet=EplApiLinkObject(0x6000,&output8,&uiVarEntries,&ObdSize,0x01); if(EplRet!=kEplSuccessful) Goto ExitShutdown

32、; 至此,我们就映射了一个 object,并把他和我们自己定义的一个变量 link 起来。接下来我们再映射一个 object,用来接收数据。 4. 接收的网络参数和映射参数。 我们注意到源码中有索引为 0x6200 的对象字典,可以将 006200/01 作为接收的 objcet。 POWERLINK 实时以太网教程 62 将 0x1400 作为接收来自主站的网络参数。将 0x1400/0x01 的值设为 0。 相应的映射参数为 0x1600,将 0x1600/01 的参数设置为如下的值: 5. 定义一个变量(BYTE input8),与 0X6200/01link 起来。 在 main.c

33、中,将与 0x6200/0x01 连接的代码修改如下: ObdSize=sizeof(input8); uiVarEntries=1; EplRet=EplApiLinkObject(0x6200,&input8,&uiVarEntries,&ObdSize,0x01); if(EplRet!=kEplSuccessful) goto ExitShutdown; 接下来我们将 AppCbSync 修改如下,这段代码的意思是我们把从站要发给主站的数据不断的累加 10,同时打印出来自主站的数据。 完成上述步骤,我们就完成了主站和从站的配置。先将两台电脑用网线连接起来,接下POWERLINK 实时以

34、太网教程 63 来将从站先运行起来,最后再把主站运行起来。 当把主站或从站运行起来时,出现如下界面来选择使用哪个网口作为 POWERLINK 口。在这里我使用第三个网口(MarvellYukonEthernetController),因此我输入 3,然后回车。 1.所需软件和硬件:需要准备两台电脑,一台作为主站,一台作为从站;操作系统为WindowsXP;需要安装VS2008开发环境;需要安装WinPcap或者Wireshark。2.将POWERLINK的源码分别拷贝到要作为主站和从站的电脑上,随便选哪台电脑做主站都可以,主站和从站上的程序有所不同。3.打开主站ExamplesX86Windo

35、wsVC9demo_pcap下的工程,使用VS2008打开,此外为了能在Windows上运行openPOWERLINK,你需要安装winpcap或wireshark软件,因为openPOWERLINK将pcaplib作为网卡驱动程序。用openCONFIGURATOR配置Windows主站和从站1.使用这种方法配置网络,从站需要一个XDD文件,该文件与从站的对象字典相匹配(即与从站的objdict.h定义的对象字典匹配),例子中从站使用的objdict.h文件在目录ObjDictsApi_CN下,而相应的XDD文件在ObjDicts目录下,名称为0000003F_openPOWERLINK_d

36、emo_CN.xdd。2.使用openCONFIGURATOR配置网络,比较简单,参考第五章第七节5-7使用openCONFIGURATOR组建POWERLINK网络。将生成的monbd.cdc和xap.h这两个文件拷贝到主站源代码的ExamplesX86WindowsVC8demo_cfm_pcap目录下。3.用VS打开主站ExamplesX86WindowsVC8demo_cfm_pcap的工程,然后打开demo_main.c,在AppCbSync(void)函数中,AppProcessImageIn_g变量的类型是xap.h中定义的数据结构PI_IN的类型,AppProcessImage

37、Out_g变量的类型是xap.h中定义的数据结构PI_OUT的类型.这两个变量自动被映射到主站相应的Object上,使用者可以直接使用,而无需link操作。注意,这里AppProcessImageIn_g是指主站输出给从站的数据,而AppProcessImageOut_g是指主站接收的来自从站的数据。4.从站程序的修改:将从站objdict.h文件中的所有映射参数的值都设为0,因为主站会来配置这些参数的值。只是从站的object与用户自己定义的变量的link,还需要使用者自己来调用EplApiLinkObject()来连接。4.1获得POWERLINK源码从下载POWERLINK源码。目前的最

38、新版本为V1.7.1,下载解压后你会看到如下目录。图4-1Documentation:文档的目录,其中包含了源代码中一些重要函数、数据结构的说明,还有关于POWERLINK在Linux下如何编译的说明。EplStack:POWERLINK协议栈的.C文件,这里包含了数据链路层和CANopen的源码。Include:包含了POWERLINK协议栈的.h文件,这个文件夹和EplStack文件夹匹配。ObjDicts:CANopen对象字典的源程序,用户需要根据自己要实现的设备修改对象字典。Edrv:因为POWERLINK可运行于多种不同的软件平台和硬件平台,和不同的平台打交道,就需要有不同的驱动程

39、序,这个文件夹包含了一些常用平台的驱动,如ARM,8139,82573,FPGA等平台的驱动程序,如果你想要将POWERLINK移植到一个新的平台,可以参考这里的例子,修改驱动程序即可。Examples:这里是重点,包含了一些常用平台的例子,你可以直接运行,评估POWERLINK。如基于Windows的、Linux的、FPGA的、ARM的。324.2POWERLINK源码概览图4-2软件架构从下至上,软件分别分为以太网驱动模块、数据链路层模块、对象字典、SDO模块、网络管理NMT模块已经API模块。4.3POWERLINKAPI接口这个是用户的应用程序与POWERLINK协议栈的接口。用户实现

40、POWERLINK时,不需要修改协议栈里面的内容。因为这部分内容是标准的,如果用户修改了,可能会导致最终的协议不遵守POWERLINK标准。用户根据自己需要调用API的一些函数。其中比较重要的函数有如下几个:4.3.1AppCbEvent这个函数是协议栈的回调函数。当协议栈内部发生状态变化、特定事件、以及一些错误等,协议栈自动调用此函数。如果用户需要根据协议栈的状态或者事件做特殊处理,就可以把处理程序写在这里。例如当检查到该节点从网络上脱离开,需要将该设备安全停机。对于33这种应用,用户可以在该回调函数中,检查网络事件,当发现有链接丢失的event时,就执行一段安全停机的程序。4.3.2App

41、CbSync(void)同步回调函数。该函数是协议栈的回调函数,当协议栈收到SoC数据帧,就会触发执行该函数。因为SoC数据帧是广播的,网络中的所有节点基本上同时收到该数据帧,因此网络中的所有节点会同时触发执行各自的同步回调函数。因为SoC是每个循环周期开始时都会发送,因此该函数每个循环周期都会被调用。用户可以将需要周期性处理的程序写在该回调函数中,例如周期性的把接收的新数据取走,把要发送的数据赋予新的值,或者周期性的控制等。4.3.3EplApiExecNmtCommand()用户可以使用该函数发送一些网络命令,来控制协议栈的一些状态变化,或者触发一些事件,目前支持如下命令参数:例如执行EplApiExecNmtCommand(kEplNmtEventSwReset);会使协议栈进入软件Reset状态,使整个协议栈重新启动。具

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号