POWERLINK的网络组态_第1页
POWERLINK的网络组态_第2页
POWERLINK的网络组态_第3页
POWERLINK的网络组态_第4页
POWERLINK的网络组态_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、POWERLINK的网络组态 日期作者王谨秋联系方式Email: openpowerlin021-54644800-819版本V 1.002015-06-01 组建POWERLINK网络,包括组建一个物理上的网络和一个逻辑上的网络。物理网络是指真实的物理硬件通过物理介质连接组成的网络。 逻辑上的网络是指软件处理上的网络,通过软件,为每个物理节点指定一个节点号,以及配置每个节点的参数。物理网络与逻辑网络要一致。例如: 我们想组建如下的一个网络,如下图 1所示. 主 站 控制器伺服驱动器 CN1IO 站 CN2传感器 CN3 0x6040 控制字 0x6041 状态字 0

2、x6000 输入 0x6100 输出 0x2000 输入 图 1 POWERLINK逻辑图 在该系统中,有一个控制器做为POWERLINK主站;有一个伺服驱动器,做为节点号为1的从站;有一个IO站,做为节点号为2的从站;还有一个传感器,做为节点号为3的从站。 节点号为1的伺服驱动器,接收来自主站数据,放到0x6040 控制字里;同时将0x6041 状态字的值发给主站。 节点号为2的IO站,接收来自主站数据,放到0x6100 输出;同时将0x6000 输入的值发给主站。 这些数据都是周期性的同步通信(PDO),由前面<POWERLINK 应用层>章节可知,需要设置各个从站的0x14x

3、x/0x16xx 和0x18xx/0x1Axx这些参数。 主站可以通过“SDO写”命令,来设置从站的这些参数。主站有两种方法来配置网络,一种是将这些“SDO写”的命令固化在主站的程序中,使之成为主站程序的一部分。使用这个方法,每次更改了网络的配置,都需要修改主站的程序。另一种方法是将配置信息写入一个配置文件,主站读取这个配置文件,解析出其中要配置的参数索引和子索引,动态生成“SDO写”命令。这种方法的好处是,修改了网络配置, 只需要更新配置文件,不需要修给或更新主站程序。1. openCONFIGURATOR介绍如果使用手动配置网络,那么每次修改网络参数,都要重新编译程序,重新下载,显然在某些

4、场合是不能接受的。而且手动配置的过程过于复杂。因此手动配置适合用于产品开发和调试阶段。当产品开发完成,交付给客户时,就不适合使用手动配置的方式来配置网络。为此我们提供了一个工具openCONFIGURATOR,使用此工具可以方便快速的组建一个网络、轻松地配置各个节点的网络参数和映射参数。openCONFIGURATOR是一个POWERLINK 的组网工具或者组态工具。该工具的输入为网络设备的XDD文件,输出文件主要是后缀名.cdc的网络配置文件。该cdc文件是一个二进制文件,保存了整个网络的配置信息。主站会根据这个cdc文件来配置网络主站的参数,以及各个从站的网络参数和映射参数以及循环周期等参

5、数,这个文件不是程序的一部分,他只是一个存储文件。每种设备的供应商都会提供一个XDD文件,来描述这种设备, 如下图 2所示。 openCONFIGURATOR伺服驱动器 XDD文件IO 站 XDD文件传感器 XDD文件 Mnobd.cdc 文件图 2 openCONFIGURATOR 的功能Mnobd.cdc 文件是一个二进制信息保存文件,该文件包含了整个网络的配置信息,如该网络中一共有几个从节点,每个从节点是什么类型的设备,每个从节点要接收哪些数据以及发送哪些数据等。可以将该文件存放到主站的某个目录下,当主站开始运行时,会到指定的目录下去读取Mnobd.cdc 文件,从中得到网络配置信息,根

6、据这些信息去配置主站自己的参数,以及通过发送SDO来配置各个从站的参数, 如下图 3所示。 主 站 配置自身的OD伺服驱动器 CN1IO 站 CN2传感器 CN3 .cdc文件主站发送SDO,配置从站的OD图 3 使用.CDC文件配置网络1.1 openCONFIGURATOR的安装首先安装ActiveTcl,然后从 文件当作病毒删除掉,从而导致软件无法运行。遇到这种情况,需要将杀毒软件禁止掉。openCONFIGURATOR目前有基于windows和linux两个平台的版本。通常我们习惯使用基于windows平台的openCONFIGURATOR,而且使用基于windows平台的openCO

7、NFIGURATOR生成的cdc文件,可以直接用于Linux平台。 安装ActiveTcl,双击ActiveTcl的安装程序,然后点击“Next” , 如下图 4所示。 图 4 安装ActiveTcl选择 “I accept the terms in the ”,然后点击“Next”,然后一直选择“Next” , 如下图 5所示。图 5安装ActiveTcl安装openCONFIGURATOR,双击openCONFIGURATOR_Setup.exe,选择“I Agree”,然后一直点击“Next”,直至最后“Install” , 如下图 6所示。图 6安装openCONFIGURATOR至此

8、,成功安装了openCONFIGURATOR,接下来是openCONFIGURATOR的使用。2openCONFIGURATOR的使用2.1 创建新的openCONFIGURATOR工程 1. 打开openCONFIGURATOR, 如下图 7所示。图 7安装openCONFIGURATOR2. 在弹出的页面中有个选项:“CreateNewProject”和“Open Existing Project”。如果想新建一个项目请选择“CreateNewProject”;如果想打开已有的项目,请选择“Open Existing Project”,然后选择工程所在的目录,以及.oct文件。这里我们选择

9、“CreateNewProject”来创建一个新的项目,点击“OK” , 如下图 8所示。图 8 创建openCONFIGURATOR工程3. “Project Name” 是工程的名字,可以保持默认,也可以根据自己的需要取名字,最好取英文名;“Choose Path”是工程的保存路径,选择你想要用来保存工程的目录,路径中最好不要有中文,然后点击“Next” , 如下图 9所示。图 9创建openCONFIGURATOR工程这里面有三个选项:“Auto Save”, “Prompt”, “Discard”。“Auto Save”:当用户改变了配置,openCONFIGURATOR会自动保存修改

10、的内容。“Prompt”:当用户修改了配置或者退出时,openCONFIGURATOR会弹出一个窗口来询问是否保存。“Discard”:当用户修改了配置,需要手动点击“Save”按钮来保存。 这三种方式,只是把配置数据保存在openCONFIGURATOR的窗口里,并没有真的把数据保存在硬盘中,如果要永久保存,需要保存整个工程。在导航栏上有一个图标,是用来保存工程的。4. 接下来导入主站的XDD文件,这里有两个选项:“default”和“Import XDD / XDC”。因为POWERLINK的应用层是CANopen,因此无论主站还是从站,都有对象字典,因此就会有XDD文件来描述他。“def

11、ault”选项:在openCONFIGURATOR的安装目录下有一个名称为openPOWERLINK_MN.xdd的XDD文件。当用户选择“default”时,openCONFIGURATOR会用该XDD文件作为主站的XDD文件。值得注意的是,我们前面提到XDD文件需要与对象字典OD一致。这个默认的openPOWERLINK_MN.xdd文件是与POWERLINK源码中ObjDictsCiA302-4_MNobjdict.h的OD定义一致。所以用户如果使用默认的XDD文件,那么主站的源程序就需要使用ObjDictsCiA302-4_MNobjdict.h来定义OD。从网上下载的源码中,open

12、POWERLINK 1.7.1 的版本中ExamplesX86WindowsVC8demo_cfm_pcap下主站的例子,使用的就是ObjDictsCiA302-4_MNobjdict.h来定义的OD。“Import XDD / XDC”:用户自己开发的主站或者第三方提供的主站,可以用此选项来导入与主站相对应的XDD文件。 接下来,有一个“Auto Generate”选项:单选择了“Yes”, openCONFIGURATOR会自动计算并填写主站中如下参数的值:(1) 主站的PDO mapping 信息:主站的0x16xx和0x1axx 的值。(2) Object 0x1F26 :这个参数保存

13、了各个从站配置信息的日期,这里保存了从1984年1月1日起至今的天数。0x1F26/0x01保存了节点号为1的从节点的配置日期,0x1F26/n保存了节点号为n的从节点的配置日期。(3) Object 0x1F27 :这个参数保存了各个从站配置信息的时间,这里保存了从凌晨0点起至现在的毫秒数。0x1F27/0x01保存了节点号为1的从节点的配置时间,0x1F27/n保存了节点号为n的从节点的配置时间。这里我们选择“Auto Generate”,然后点击“OK” , 如下图 10所示。图 10 导入主站XDD文件上述步骤创建了一个网络配置的工程,并在网络里添加了一个默认的主站。接下来添加从站,在

14、View菜单中勾选“AdvancedView”,这样就能看到每一个节点的对象字典里的Object, 如下图 11所示。图 11 设置显示风格5. 右键选择“OPENPOWERLINK_MN”,选择“ADD CN” , 如下图 12所示。图 12 添加POWERLINK从站6. 弹出的窗口, 如下图 13所示。图 13 设置从站节点号有如下选项:“Name ”: 新加入的从节点的名字, 用户可以根据自己的需要来修改。“Node ID”: 节点号,每个POWERLINK设备有一个节点号。我们加入了一个从设备,他的逻辑节点号为1 ,在组建真实的物理网络时,该真实的设备的节点号也应该设置为1 。“De

15、fault”: 在openCONFIGURATOR的安装目录下有一个名称为openPOWERLINK_CN.xdd的XDD文件。当用户选择“default”时,openCONFIGURATOR会用该XDD文件作为该从站的XDD文件,如果作为测试openCONFIGURATOR的例子,可以使用“Default”选项,否则建议使用“Import XDD / XDC”。“Import XDD / XDC”:用户自己开发的从站或者第三方提供的从站,可以用此选项来导入与从站相对应的XDD文件。这里我们选择“Import XDD / XDC”,然后点击“Browse”选择源码目录下ObjDictsApi_

16、CN文件夹下的00000000_openPOWERLINK_demo_CiA401_IO_1Byte.xdd, 如下图 14所示。图 14 选择从站的XDD文件点击“open”。这样就增加了一个节点号为1的从节点。前面讲了每一个POWERLINK设备都有一个对象字典,这个对象字典就是参数的集合。设备的使用者需要知道此设备有哪些参数,每个参数的用途,以及参数的数据类型。因此设备提供者就需要提供一个设备描述文件(XDD)文件。换言之,一个XDD文件,描述了一种设备的参数,它也就代表了一种设备。 这里我们添加的XDD文件,与之相对应的OD的声明为ObjDictsApi_CN 下的objdict.h。

17、在ExamplesX86WindowsVC9demo_pcap目录下的例子工程,就使用了ObjDictsApi_CN 下的objdict.h作为对象字典。所以在本例程中,我们使用ExamplesX86WindowsVC9demo_pcap目录下的例子作为从站。7. 点击“View”->“Advanced View”,这样主站和从站的包含的object都会显示出来, 如下图 15所示。图 15 设置显示风格8. 单击某个从节点,此时在右边显示如下界面, 如下图 16所示。 图 16 选定从站的网络参数这里面有两个重要的选项:PollResponse Timeout:这个是指主站接收该从站P

18、ollResponse数据桢的超时时间,也可以看作是主站为该从站发送数据所分配的时间片。因为网络中的从站有可能发生故障或者网络故障,导致从站无法发送数据或者发送的数据无法到达主站,在这种情况下,主站不能一直等待该从站,否则整个网络就无法正常工作。如果主站在PollResponse Timeout这个时间段内没有收到该从站的回复数据时,主站就会认为该从节点丢失了一次数据,相应的错误计数值累加8 。接下来主站继续和下一个从节点通信,也就是主站只会等待该从节点一定时间,如果一定时间内没收到该从节点的数据,就会将该节点略过,和下一个节点通信。当网络故障或者设备故障,导致该节点从网上脱离时,显然主站不能

19、一直停留在等待该从站的状态上,因为这会影响到与其他站点的通信。此外,某些设备反应太慢,也就是该从站是一个慢设备,这种设备的反应时间很长,那么就需要将PollResponse Timeout参数设置的大一些,具体设置多大,取决于具体的应用,例如如果该从站基于FPGA,这个参数设置为2 20 微秒均可,如果该从站基于windows,这个参数可能要设置为几个毫秒。Type of station:Normal station:指该从节点是基于preq/pres模式通信的。Chained station:指该从节点是基于PRC模式通信的。9. 配置接收和发送的网络参数和映射参数。配置从站的发送PDO的映

20、射信息:发送PDO 的映射信息,描述了如何将该节点对象字典中的object打包成一个数据桢。也就是周期性发送的object与发送的数据桢的字段之间的映射关系,是一个组建数据桢的过程。左键单击CN1的PDO中的TPDO,会在右侧显示一个填写信息的表格, 如下图 17所示。图 17 选定从站的RPDO信息这个数据桢有如下属性:Node Id :表示该数据桢的目标节点。也就是这个数据桢要发送给哪个节点,由于从站的发送都是广播的,因此目标Node Id 都是255 。这里不需要设置数值,保持默认值0就可以了,Preq/Pres模式和PRC模式,都如此。Index(索引)和SubIndex(子索引):用

21、来标示要发送的object。Offset:(偏移量):标示该发送的object在数据桢中的偏移量,也就是该object应放到数据桢的哪个位置。Length(数据长度):标示该发送的object在数据桢中占用的数据长度,单位为bit。例如填写如下信息,这段的意思是将Object 0x6041/0x01放到发送数据帧的偏移量0000,长度为16 bits。这样就将接收到的数据桢中的某个数据段与某个object 建立了映射关系。一个PDO 可以包含很多个object,也就是可以建立多个这样的映射关系, 如下图 18所示。图 18 设置RPDO中的数据长度 接下来,我们向TPDO中添加了第二个obje

22、ct, 该object 的索引为0x2000,子索引为01, 它被放到了数据桢的偏移量为0x0010的地方,数据长度为8 bits, 如下图 19所示。图 19设置RPDO中数据的偏移量 配置完以后,我们打开CN1的Object0x1A00/0x01,看到他的值被设置成了0x0010000000016041,这个值代表什么意思,前面讲过了, 如下图 20所示。图 20 显示RPDO mapping 的值配置从站的接收PDO的映射信息:接收PDO 的映射信息,描述该节点如何解析收到的数据桢。也就是周期性接收数据的object与接收到的数据桢的字段之间的映射关系,是一个解析数据桢的过程。左键单击C

23、N1的PDO中的TPDO,会在右侧显示一个填写信息的表格, 如下图 21所示。图 21 选定的从站TPDO表这个数据桢有如下属性:Node Id :表示该数据桢的源地址。也就是该节点需要接收来自哪个节点的数据。通信模式不同(Preq/Pres 模式,PRC模式以及交叉通信),这个参数的设置会不同。该参数的详细使用方法,会在后面的实例中详细介绍。Index(索引)和SubIndex(子索引):标示用来保存接收到的数据的object。Offset:(偏移量):标示数据段在数据桢中的偏移量,数据段在数据桢中的起始地址。Length(数据长度):标示数据段在数据桢中的数据长度,单位为bit。例如填写如

24、下信息,这段的意思是将从主站接收到的数据桢的0x0000位置起,取出0x0010 bits 的数据,存放到自己的0x6040/0x01这个 Object中。这样就将接收到的数据桢中的某个数据段与某个object 建立了映射关系。同理,可以将数据桢中的其他字段与object建立映射关系,从而完成数据解析过程, 如下图 22所示。 图 22 选定的从站TPDO的映射表最后设置循环周期,左键单击openPOWERLINK_MN(240),在右边的CycleTime里填写期望的循环周期,单位为us, 如下图 23所示。图 23 设置POWERLINK主站的参数10. 编译工程,点击“BuildProj

25、ect” , 如下图 24所示。图 24 编译工程11. 当在openCONFIGURATOR最下面一栏显示如下信息,说明编译成功,如果不成功,会显示相应的错误, 如下图 25所示。图 25 输出的编译信息12. 编译成功后,会在工程所在的目录下的cdc_xap文件夹生成一些文件,其中包括monbd.cdc和xap.h这两个文件。monbd.cdc文件是一个二进制文件,这个文件包含了整个网络的配置信息,即主站和所有从站的参数设置信息,如图 26所示。而xap.h定义了一个数据结构,主站定义了这种数据结构的变量,并把这个变量和对象字典中通信的Object连接起来。在主站的应用程序里可以直接使用这

26、些变量。这两个文件的详细信息,我们在后面会详细解释。图 26 编译生成的网络配置文件2.2 openCONFIGURATOR配置preq-pres 模式通信(1) 创建新工程,在MN Configuration 的Import XDC/XDD选择源码ObjDictsCiA302-4_MN下的00000000_openPOWERLINK_MN.xdd,这个XDD文件与ExamplesX86WindowsVC8demo_cfm_pcap 下的主站例子中对象字典匹配, 如下图 27所示。图 27 导入主站XDD文件(2) 添加从站,右键单击“open_POWERLINK_MN”,选择“add CN”

27、,在弹出的“Import XDC/XDD”选择ObjDictsApi_CN下的0000003F_openPOWERLINK_demo_CN.xdd文件。这个XDD文件和源码目录ExamplesX86WindowsVC9demo_pcap下的例子的对象字典一致。因此需要将ExamplesX86WindowsVC9demo_pcap例子做为从站。, 如下图 28所示。 图 28 添加从站(3) 配置接收和发送的网络参数和映射参数。使用openCONFIGURATOR时,如果在“project setting”中将“Auto generate ”设置为“yes”,则不需要配置主站的网络参数和映射参数

28、,该工具会根据从站的设置,自动产生主站的映射参数,使用者只需配置从站的接收和发送的网络参数和映射参数。TPDO的配置:左键单击CN1的PDO中的TPDO,会在右侧显示一个填写信息的表格,在这里设置发送PDO的映射参数。如下,对于从站的发送,由于是广播的,因此在NodeId一栏中保持默认的0, 如下图 29所示。图 29 设置TPDO的网络参数配置完以后,我们打开CN1的Object 0x1A00/0x01,看到他的值被设置成了0x0008000000016000,这个值代表的意思,前面讲过了。接下来把Object 0x1A00/0x00的值设置为0x01。该参数值等于在TPDO的表格中设置的o

29、bject数量, 如下图 30所示。图 30设置TPDO的映射参数RPDO的配置:左键单击CN1的PDO中的RPDO,会在右侧显示一个填写信息的表格,在这里设置发送PDO的映射参数。如下,对于从站的接收,由于是基于Preq/Pres模式,从站接收来自主站的数据,因此在NodeId一栏中保持默认的0, 如下图 31所示。图 31 设置RPDO的网络参数配置完以后,我们打开CN1的Object 0x1600/0x01,看到他的值被设置成了0x0008000000016200,这个值代表的意思,前面讲过了。接下来把Object 0x1600/0x00的值设置为0x01。该参数值等于在RPDO的表格中

30、设置的object数量, 如下图 32所示。 图 32设置RPDO的映射参数最后设置循环周期,左键单击openPOWERLINK_MN(240),在右边的CycleTime里填写期望的循环周期,单位为us, 如下图 33所示。图 33 设置主站参数(4) 编译工程:点击“Project”下的“Build Project”。如果编译没有错误,会在下方显示:files mnobd.txt, mnobd.cdc, xap.xml, xap.h, ProcessImage.cs are generated at location . 表示编译成功,生成的cdc文件和xap.h文件被放置在工程的目录下,

31、 如下图 34所示。图 34 生成的网络配置文件(5) 运行例子到openCONFIGURATOR工程的目录,将cdc文件和xap.h文件复制到ExamplesX86WindowsVC8demo_cfm_pcap目录下。这个程序作为POWERLINK的主站。 打开main.c文件,修改同步回调函数。ExamplesX86WindowsVC9demo_pcap目录下的VS工程作为从站,运行到另外一台电脑上,别忘了将该从站的节点号修改为1。2.3 openCONFIGURATOR配置PRC 模式通信(1) 首先需要修改对于PRC 模式,相应的从站的XDD文件的CNFeatures属性里需要添加这行

32、代码:DLLCNPResChaining=”true” <CNFeatures DLLCNFeatureMultiplex="true" DLLCNPResChaining="true" NMTCNSoC2PReq="0" />相应的主站的XDD文件的MNFeatures属性里需要添加这行代码:DLLMNPResChaining=”true” <MNFeatures DLLMNPResChaining="true" />(2) 创建openCONFIGURATOR工程,Import 主站和从

33、站的XDD文件。单击要设为PRC模式的从站,在右边的选项中有“Normal station”和“Chained station”。 “Normal station”是指该从站工作于Preq/Pres模式,“Chained station” 是指该从站工作于PRC模式, 如下图 35所示。图 35 将选定的从站设置为PRC模式(3) 配置接收和发送的网络参数和映射参数。TPDO的配置:此处与Preq/Pres模式完全相同。RPDO的配置: NodeId一栏的值设为0xF0,意味着接收来自主站的数据,而且这些数据包含在主站的Pres MN数据帧中, 如下图 36所示。图 36 设置选定从站的RPD

34、O的映射参数(4) 编译openCONFIGURATOR工程,然后运行例子,这些与Preq/Pres模式相同。(5) Wireshark 抓取POWERLINK 数据包,显示网络中没有了Preq cn2数据桢,因为2号节点从主站的Pres MN 数据桢得到数据。 2.4 openCONFIGURATOR配置交叉通信交叉通信,是指某个从站除了可以接收来自主站的数据,还可以接收来自其他从站的数据。例如2号从站除了可以接收来自主站的数据,还可以接收来自1号从站的数据以及3号从站的数据。经过配置,2号从站可以接收来自任何从站的数据。这称为交叉通信。(1) 创建openCONFIGURATOR工程,Im

35、port 主站和从站的XDD文件。(2) 配置接收和发送的网络参数和映射参数。TPDO的配置:此处与Preq/Pres模式完全相同。RPDO的配置: 如果该从站节点需要接收来自n号从站节点的数据,那么NodeId一栏的值设为n。例如,该从站节点需要接收来自主站的数据,并把接收到的数据存放到object 0x6200/01中;该从站节点需要接收来自1号节点的数据,并把接收到的数据存放到object 0x6200/02中;同时该从站节点需要接收来自3号节点的数据,并把接收到的数据存放到object 0x6200/03中,对于该种应用,由于这里的2号从节点需要接收来自主站的数据,也需要接收来自1号从

36、站和3号从站的数据,因此2号从节点需要有3个RPDO通道来描述这个通信过程。在2号从节点的对象字典(objdict.h)中需要定义3个RPDO通道,假设分别为0x1400/0x1600, 0x1401/0x1601, 0x1402/0x1602。具体的定义如下:/ Object 1400h: PDO_RxCommParam_00h_REC EPL_OBD_BEGIN_INDEX_RAM(0x1400, 0x03, EplPdouCbObdAccess) EPL_OBD_SUBINDEX_RAM_VAR(0x1400, 0x00, kEplObdTypUInt8, kEplObdAccConst

37、, tEplObdUnsigned8, NumberOfEntries, 0x02) EPL_OBD_SUBINDEX_RAM_VAR(0x1400, 0x01, kEplObdTypUInt8, kEplObdAccRW, tEplObdUnsigned8, NodeID_U8, 0x00) EPL_OBD_SUBINDEX_RAM_VAR(0x1400, 0x02, kEplObdTypUInt8, kEplObdAccRW, tEplObdUnsigned8, MappingVersion_U8, 0x00) EPL_OBD_END_INDEX(0x1400) / Object 1401

38、h: PDO_RxCommParam_01h_REC EPL_OBD_BEGIN_INDEX_RAM(0x1401, 0x03, EplPdouCbObdAccess) EPL_OBD_SUBINDEX_RAM_VAR(0x1401, 0x00, kEplObdTypUInt8, kEplObdAccConst, tEplObdUnsigned8, NumberOfEntries, 0x02) EPL_OBD_SUBINDEX_RAM_VAR(0x1401, 0x01, kEplObdTypUInt8, kEplObdAccRW, tEplObdUnsigned8, NodeID_U8, 0x

39、00) EPL_OBD_SUBINDEX_RAM_VAR(0x1401, 0x02, kEplObdTypUInt8, kEplObdAccRW, tEplObdUnsigned8, MappingVersion_U8, 0x00) EPL_OBD_END_INDEX(0x1401) / Object 1402h: PDO_RxCommParam_02h_REC EPL_OBD_BEGIN_INDEX_RAM(0x1402, 0x03, EplPdouCbObdAccess) EPL_OBD_SUBINDEX_RAM_VAR(0x1402, 0x00, kEplObdTypUInt8, kEp

40、lObdAccConst, tEplObdUnsigned8, NumberOfEntries, 0x02) EPL_OBD_SUBINDEX_RAM_VAR(0x1402, 0x01, kEplObdTypUInt8, kEplObdAccRW, tEplObdUnsigned8, NodeID_U8, 0x00) EPL_OBD_SUBINDEX_RAM_VAR(0x1402, 0x02, kEplObdTypUInt8, kEplObdAccRW, tEplObdUnsigned8, MappingVersion_U8, 0x00) EPL_OBD_END_INDEX(0x1402) /

41、 Object 1600h: PDO_RxMappParam_00h_AU64 EPL_OBD_BEGIN_INDEX_RAM(0x1600, 0x03, EplPdouCbObdAccess) EPL_OBD_SUBINDEX_RAM_VAR(0x1600, 0x00, kEplObdTypUInt8, kEplObdAccRW, tEplObdUnsigned8, NumberOfEntries, 0x00) EPL_OBD_SUBINDEX_RAM_VAR(0x1600, 0x01, kEplObdTypUInt64, kEplObdAccRW, tEplObdUnsigned64, O

42、bjectMapping, 0x00LL) EPL_OBD_SUBINDEX_RAM_VAR(0x1600, 0x02, kEplObdTypUInt64, kEplObdAccRW, tEplObdUnsigned64, ObjectMapping, 0x00LL) EPL_OBD_END_INDEX(0x1600) / Object 1601h: PDO_RxMappParam_01h_AU64 EPL_OBD_BEGIN_INDEX_RAM(0x1601, 0x03, EplPdouCbObdAccess) EPL_OBD_SUBINDEX_RAM_VAR(0x1601, 0x00, k

43、EplObdTypUInt8, kEplObdAccRW, tEplObdUnsigned8, NumberOfEntries, 0x00) EPL_OBD_SUBINDEX_RAM_VAR(0x1601, 0x01, kEplObdTypUInt64, kEplObdAccRW, tEplObdUnsigned64, ObjectMapping, 0x00LL) EPL_OBD_SUBINDEX_RAM_VAR(0x1601, 0x02, kEplObdTypUInt64, kEplObdAccRW, tEplObdUnsigned64, ObjectMapping, 0x00LL) EPL

44、_OBD_END_INDEX(0x1601) / Object 1602h: PDO_RxMappParam_02h_AU64 EPL_OBD_BEGIN_INDEX_RAM(0x1602, 0x02, EplPdouCbObdAccess) EPL_OBD_SUBINDEX_RAM_VAR(0x1602, 0x00, kEplObdTypUInt8, kEplObdAccRW, tEplObdUnsigned8, NumberOfEntries, 0x00) EPL_OBD_SUBINDEX_RAM_VAR(0x1602, 0x01, kEplObdTypUInt64, kEplObdAcc

45、RW, tEplObdUnsigned64, ObjectMapping, 0x00LL)EPL_OBD_SUBINDEX_RAM_VAR(0x1602, 0x02, kEplObdTypUInt64, kEplObdAccRW, tEplObdUnsigned64, ObjectMapping, 0x00LL) EPL_OBD_END_INDEX(0x1602)由于接收到的数据保存到了0x6200/01,0x6200/02,0x6200/03里,因此需要在对象字典中定义如下object。 EPL_OBD_BEGIN_INDEX_RAM(0x6200, 0x04, NULL) EPL_OBD_

46、SUBINDEX_RAM_VAR(0x6200, 0x00, kEplObdTypUInt8, kEplObdAccConst, tEplObdUnsigned8, number_of_entries, 0x3) EPL_OBD_SUBINDEX_RAM_USERDEF(0x6200, 0x01, kEplObdTypUInt8, kEplObdAccVPRW, tEplObdUnsigned8, Recvb1, 0x0)EPL_OBD_SUBINDEX_RAM_USERDEF(0x6200, 0x02, kEplObdTypUInt8, kEplObdAccVPRW, tEplObdUnsi

47、gned8, Recvb1, 0x0)EPL_OBD_SUBINDEX_RAM_USERDEF(0x6200, 0x03, kEplObdTypUInt8, kEplObdAccVPRW, tEplObdUnsigned8, Recvb1, 0x0) EPL_OBD_END_INDEX(0x6200)同样,XDD文件修改如下图 37所示:图 37 XDD文件中的object XDD文件中关于0x6200的描述, 如下图 38所示。:图 38 XDD文件中索引为0x6200的object接下来创建新的openCONFIGURATOR工程,对2号从节点的配置, 如下图 39所示:图 39 设置选定

48、节点的RPDO的通信参数这里需要说明如下几点:(1) 为什么我们修改了“No 0”的“Node Id”, “No 1”的“Node Id”也跟着变?原因是节点2 有3个RPDO通道,第一个RPDO通道有0x1600/01, 0x1600/02两个映射,这两个映射对应着“No 0”和“No 1”。一个RPDO通道只能用于描述来自一个节点的数据,“No 0”和“No 1”属于一个RPDO通道,因此他们的“Node Id”会保持一致。(2) “offset”:这个参数是指从接收到的数据包的哪个位置开始取数据,因来自主站,1号节点和3号节点的数据,是3个独立的数据包。在取数据的时候,都是从数据包的开始

49、位置取,因此“offset”都为“0x0000”。(3) 这里省略了对主站发送给2号从站的TPDO的配置,以及1号从节点和3号从节点的TPDO的配置。完成上述配置后,接下来运行该例程:(1) 编译工程,将生成的.CDC文件和xap.h文件复制到主站工程目录下。(2) 程序运行。我们需要有3台PC, 一台作为主站,运行ExamplesX86WindowsVC8demo_cfm_pcap下的例子,另外两个运行ExamplesX86WindowsVC9demo_pcap下的例子,将节点号一个设置为2,另一个设置为3。(3) 对于2号从节点的程序修改如下:定义3个变量,分别和0x6200/01,0x6

50、200/02,0x6200/03这三个object 链接,并在同步回调函数中打印。ObdSize = sizeof(bVarOut1_l);uiVarEntries = 1; EplRet = EplApiLinkObject(0x6200, &bVarOut1_l, &uiVarEntries, &ObdSize, 0x01); if (EplRet != kEplSuccessful) goto ExitShutdown; EplRet = EplApiLinkObject(0x6200, &bVarOut1_2, &uiVarEntries, &a

51、mp;ObdSize, 0x02); if (EplRet != kEplSuccessful) goto ExitShutdown; EplRet = EplApiLinkObject(0x6200, &bVarOut1_3, &uiVarEntries, &ObdSize, 0x03); if (EplRet != kEplSuccessful) goto ExitShutdown;同步回调函数修改如下:EplKernel PUBLIC AppCbSync(void) tEplKernel EplRet = kEplSuccessful; bVarIn1_l+=2;

52、 printf("bVarOut1_l : %d , bVarOut1_2: %d, bVarOut1_3: %dn", bVarOut1_l,bVarOut1_2,bVarOut1_3); TGT_DBG_SIGNAL_TRACE_POINT(1); return EplRet;(4) 程序运行,察看打印结果。3 . Mnobd 文件解析openCONFIGURATOR生成了两个文件:xap.h 文件和mnobd.cdc文件。xap.h 文件:定义了两个数据结构PI_OUT和PI_IN。在ExamplesX86WindowsVC8demo_cfm_pcap的例子里demo

53、_main.c 程序里定义了这两个数据结构的变量:static PI_IN AppProcessImageIn_g;static PI_OUT AppProcessImageOut_g;然后调用了EplRet = EplApiProcessImageSetup();该函数将变量AppProcessImageIn_g和 AppProcessImageOut_g 与对象字典中的object 连接起来,这样就可以在用户的应用程序中直接使用变量AppProcessImageIn_g和AppProcessImageOut_g。除了这种方法,用户也可以通过调用EplApiLinkObject()函数,将自己定义的变量与用于PDO通信的object 连接起来。Epl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论