POWERLINK的网络组态
更新时间:2024-05-01 16:36:01 阅读量: 综合文库 文档下载
POWERLINK的网络组态
作者 联系方式 版本 王谨秋 Email: openpowerlink@163.com V 1.00 13917489045 021-54644800-819 2015-06-01 日期
组建POWERLINK网络,包括组建一个物理上的网络和一个逻辑上的网络。物理网络是指真实的物理硬件通过物理介质连接组成的网络。 逻辑上的网络是指软件处理上的网络,通过软件,为每个物理节点指定一个节点号,以及配置每个节点的参数。物理网络与逻辑网络要一致。
例如: 我们想组建如下的一个网络,如下图 1所示.
主 站 控制器 伺服驱动器 CN1 0x6040 控制字 0x6041 状态字 IO 站 CN2 0x6000 输入 0x6100 输出 传感器 CN3 0x2000 输入 图 1 POWERLINK逻辑图
在该系统中,有一个控制器做为POWERLINK主站;有一个伺服驱动器,做为节点号为1的从站;有一个IO站,做为节点号为2的从站;还有一个传感器,做为节点号为3的从站。
1
节点号为1的伺服驱动器,接收来自主站数据,放到0x6040 控制字里;同时将0x6041 状态字的值发给主站。
节点号为2的IO站,接收来自主站数据,放到0x6100 输出;同时将0x6000 输入的值发给主站。
这些数据都是周期性的同步通信(PDO),由前面
主站有两种方法来配置网络,一种是将这些“SDO写”的命令固化在主站的程序中,使之成为主站程序的一部分。使用这个方法,每次更改了网络的配置,都需要修改主站的程序。
另一种方法是将配置信息写入一个配置文件,主站读取这个配置文件,解析出其中要配置的参数索引和子索引,动态生成“SDO写”命令。这种方法的好处是,修改了网络配置, 只需要更新配置文件,不需要修给或更新主站程序。
1. openCONFIGURATOR介绍
如果使用手动配置网络,那么每次修改网络参数,都要重新编译程序,重新下载,显然在某些场合是不能接受的。而且手动配置的过程过于复杂。因此手动配置适合用于产品开发和调试阶段。当产品开发完成,交付给客户时,就不适合使用手动配置的方式来配置网络。
为此我们提供了一个工具openCONFIGURATOR,使用此工具可以方便快速的组建一个网络、轻松地配置各个节点的网络参数和映射参数。openCONFIGURATOR是一个POWERLINK 的组网工具或者组态工具。该工具的输入为网络设备的XDD文件,输出文件主要是后缀名.cdc的网络配置文件。该cdc文件是一个二进制文件,保存了整个网络的配置信息。主站会根据这个cdc文件来配置网络主站的参数,以及各个从站的网络参数和映射参数以及循环周期等参数,这个文件不是程序的一部分,他只是一个存储文件。
每种设备的供应商都会提供一个XDD文件,来描述这种设备, 如下图 2所示。
2
伺服驱动器 XDD文件 IO 站 XDD文件 传感器 XDD文件 openCONFIGURATOR Mnobd.cdc 文件
图 2 openCONFIGURATOR 的功能
Mnobd.cdc 文件是一个二进制信息保存文件,该文件包含了整个网络的配置信息,如该网络中一共有几个从节点,每个从节点是什么类型的设备,每个从节点要接收哪些数据以及发送哪些数据等。可以将该文件存放到主站的某个目录下,当主站开始运行时,会到指定的目录下去读取Mnobd.cdc 文件,从中得到网络配置信息,根据这些信息去配置主站自己的参数,以及通过发送SDO来配置各个从站的参数, 如下图 3所示。
.cdc文件 主 站 配置自身的OD 伺服驱动器 主站发送SDO, 配置从站的OD IO 站 CN1 CN2 传感器 CN3
图 3 使用.CDC文件配置网络
3
1.1 openCONFIGURATOR的安装
首先安装ActiveTcl,然后从http://sourceforge.net/projects/openconf/下载最新版的openCONFIGURATOR进行安装。注意,一些杀毒软件会将openCONFIGURATOR的dll 文件当作病毒删除掉,从而导致软件无法运行。遇到这种情况,需要将杀毒软件禁止掉。
openCONFIGURATOR目前有基于windows和linux两个平台的版本。通常我们习惯使用基于windows平台的openCONFIGURATOR,而且使用基于windows平台的openCONFIGURATOR生成的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所示。
4
图 6安装openCONFIGURATOR
至此,成功安装了openCONFIGURATOR,接下来是openCONFIGURATOR的使用。
2.openCONFIGURATOR的使用
2.1 创建新的openCONFIGURATOR工程 1. 打开openCONFIGURATOR, 如下图 7所示。
5
图 7安装openCONFIGURATOR
2. 在弹出的页面中有2个选项:“Create New Project”和“Open Existing Project”。如
果想新建一个项目请选择“Create New Project”;如果想打开已有的项目,请选择“Open Existing Project”,然后选择工程所在的目录,以及.oct文件。 这里我们选择“Create New Project”来创建一个新的项目,点击“OK” , 如下图 8所示。
图 8 创建openCONFIGURATOR工程
3. “Project Name” 是工程的名字,可以保持默认,也可以根据自己的需要取名字,最好取
英文名;“Choose Path”是工程的保存路径,选择你想要用来保存工程的目录,路径中最好不要有中文,然后点击“Next” , 如下图 9所示。
6
图 9创建openCONFIGURATOR工程
这里面有三个选项:“Auto Save”, “Prompt”, “Discard”。
“Auto Save”:当用户改变了配置,openCONFIGURATOR会自动保存修改的内容。 “Prompt”:当用户修改了配置或者退出时,openCONFIGURATOR会弹出一个窗口来询问是否保存。
“Discard”:当用户修改了配置,需要手动点击“Save”按钮来保存。
这三种方式,只是把配置数据保存在openCONFIGURATOR的窗口里,并没有真的把数据保存在硬盘中,如果要永久保存,需要保存整个工程。在导航栏上有一个用来保存工程的。
4. 接下来导入主站的XDD文件,这里有两个选项:“default”和“Import XDD / XDC”。
因为POWERLINK的应用层是CANopen,因此无论主站还是从站,都有对象字典,因此就会有XDD文件来描述他。
“default”选项:在openCONFIGURATOR的安装目录下有一个名称为openPOWERLINK_MN.xdd的XDD文件。当用户选择“default”时,openCONFIGURATOR会用该XDD文件作为主站的XDD文件。值得注意的是,我们前面提到XDD文件需要与对象字典OD一致。这个默认的openPOWERLINK_MN.xdd文件是与POWERLINK源码中ObjDicts\\CiA302-4_MN\\objdict.h的OD定义一致。所以用户如果使用默认的XDD文件,那么主站的源程序就需要使用ObjDicts\\CiA302-4_MN\\objdict.h来定义OD。从网上下载的源码中,openPOWERLINK 1.7.1 的版本中Examples\\X86\\Windows\\VC8\\demo_cfm_pcap下主站的例子,使用的就是ObjDicts\\CiA302-4_MN\\objdict.h来定义的OD。
“Import XDD / XDC”:用户自己开发的主站或者第三方提供的主站,可以用此选项来导入与主站相对应的XDD文件。
接下来,有一个“Auto Generate”选项:单选择了“Yes”, openCONFIGURATOR会自动计算并填写主站中如下参数的值:
(1) 主站的PDO mapping 信息:主站的0x16xx和0x1axx 的值。
(2) Object 0x1F26 :这个参数保存了各个从站配置信息的日期,这里保存了从1984
年1月1日起至今的天数。0x1F26/0x01保存了节点号为1的从节点的配置日期,0x1F26/n保存了节点号为n的从节点的配置日期。
(3) Object 0x1F27 :这个参数保存了各个从站配置信息的时间,这里保存了从凌晨0
点起至现在的毫秒数。0x1F27/0x01保存了节点号为1的从节点的配置时间,0x1F27/n保存了节点号为n的从节点的配置时间。
这里我们选择“Auto Generate”,然后点击“OK” , 如下图 10所示。
图标,是
7
图 10 导入主站XDD文件
上述步骤创建了一个网络配置的工程,并在网络里添加了一个默认的主站。
接下来添加从站,在View菜单中勾选“AdvancedView”,这样就能看到每一个节点的对象字典里的Object, 如下图 11所示。
图 11 设置显示风格
5. 右键选择“OPENPOWERLINK_MN”,选择“ADD CN” , 如下图 12所示。
8
图 12 添加POWERLINK从站
6. 弹出的窗口, 如下图 13所示。
图 13 设置从站节点号
有如下选项:
9
“Name ”: 新加入的从节点的名字, 用户可以根据自己的需要来修改。
“Node ID”: 节点号,每个POWERLINK设备有一个节点号。我们加入了一个从设备,他的逻辑节点号为1 ,在组建真实的物理网络时,该真实的设备的节点号也应该设置为1 。
“Default”: 在openCONFIGURATOR的安装目录下有一个名称为openPOWERLINK_CN.xdd的XDD文件。当用户选择“default”时,openCONFIGURATOR会用该XDD文件作为该从站的XDD文件,如果作为测试openCONFIGURATOR的例子,可以使用“Default”选项,否则建议使用“Import XDD / XDC”。
“Import XDD / XDC”:用户自己开发的从站或者第三方提供的从站,可以用此选项来导入与从站相对应的XDD文件。
这里我们选择“Import XDD / XDC”,然后点击“Browse”选择源码目录下ObjDicts\\Api_CN文件夹下的00000000_openPOWERLINK_demo_CiA401_IO_1Byte.xdd, 如下图 14所示。
图 14 选择从站的XDD文件
点击“open”。这样就增加了一个节点号为1的从节点。
前面讲了每一个POWERLINK设备都有一个对象字典,这个对象字典就是参数的集合。设备的使用者需要知道此设备有哪些参数,每个参数的用途,以及参数的数据类型。因此设备提供者就需要提供一个设备描述文件(XDD)文件。换言之,一个XDD文件,描述了一种设备的参数,它也就代表了一种设备。
10
这里我们添加的XDD文件,与之相对应的OD的声明为ObjDicts\\Api_CN 下的objdict.h。在Examples\\X86\\Windows\\VC9\\demo_pcap目录下的例子工程,就使用了ObjDicts\\Api_CN 下的objdict.h作为对象字典。所以在本例程中,我们使用Examples\\X86\\Windows\\VC9\\demo_pcap目录下的例子作为从站。
7. 点击“View”->“Advanced View”,这样主站和从站的包含的object都会显示出来, 如
下图 15所示。
图 15 设置显示风格
8. 单击某个从节点,此时在右边显示如下界面, 如下图 16所示。
图 16 选定从站的网络参数
这里面有两个重要的选项:
PollResponse Timeout:这个是指主站接收该从站PollResponse数据桢的超时时间,也可
11
以看作是主站为该从站发送数据所分配的时间片。因为网络中的从站有可能发生故障或者网络故障,导致从站无法发送数据或者发送的数据无法到达主站,在这种情况下,主站不能一直等待该从站,否则整个网络就无法正常工作。如果主站在PollResponse Timeout这个时间段内没有收到该从站的回复数据时,主站就会认为该从节点丢失了一次数据,相应的错误计数值累加8 。接下来主站继续和下一个从节点通信,也就是主站只会等待该从节点一定时间,如果一定时间内没收到该从节点的数据,就会将该节点略过,和下一个节点通信。当网络故障或者设备故障,导致该节点从网上脱离时,显然主站不能一直停留在等待该从站的状态上,因为这会影响到与其他站点的通信。此外,某些设备反应太慢,也就是该从站是一个慢设备,这种设备的反应时间很长,那么就需要将PollResponse Timeout参数设置的大一些,具体设置多大,取决于具体的应用,例如如果该从站基于FPGA,这个参数设置为2 – 20 微秒均可,如果该从站基于windows,这个参数可能要设置为几个毫秒。
Type of station:
Normal station:指该从节点是基于preq/pres模式通信的。 Chained station:指该从节点是基于PRC模式通信的。 9. 配置接收和发送的网络参数和映射参数。
配置从站的发送PDO的映射信息:
发送PDO 的映射信息,描述了如何将该节点对象字典中的object打包成一个数据桢。也就是周期性发送的object与发送的数据桢的字段之间的映射关系,是一个组建数据桢的过程。
左键单击CN1的PDO中的TPDO,会在右侧显示一个填写信息的表格, 如下图 17所示。
图 17 选定从站的RPDO信息
这个数据桢有如下属性:
12
Node Id :表示该数据桢的目标节点。也就是这个数据桢要发送给哪个节点,由于从站的发送都是广播的,因此目标Node Id 都是255 。这里不需要设置数值,保持默认值0就可以了,Preq/Pres模式和PRC模式,都如此。
Index(索引)和SubIndex(子索引):用来标示要发送的object。
Offset:(偏移量):标示该发送的object在数据桢中的偏移量,也就是该object应放到数据桢的哪个位置。
Length(数据长度):标示该发送的object在数据桢中占用的数据长度,单位为bit。例如填写如下信息,这段的意思是将Object 0x6041/0x01放到发送数据帧的偏移量0000,长度为16 bits。这样就将接收到的数据桢中的某个数据段与某个object 建立了映射关系。一个PDO 可以包含很多个object,也就是可以建立多个这样的映射关系, 如下图 18所示。
图 18 设置RPDO中的数据长度
接下来,我们向TPDO中添加了第二个object, 该object 的索引为0x2000,子索引为01, 它被放到了数据桢的偏移量为0x0010的地方,数据长度为8 bits, 如下图 19所示。
图 19设置RPDO中数据的偏移量
配置完以后,我们打开CN1的Object0x1A00/0x01,看到他的值被设置成了0x0010000000016041,这个值代表什么意思,前面讲过了, 如下图 20所示。
13
图 20 显示RPDO mapping 的值
配置从站的接收PDO的映射信息:
接收PDO 的映射信息,描述该节点如何解析收到的数据桢。也就是周期性接收数据的object与接收到的数据桢的字段之间的映射关系,是一个解析数据桢的过程。
左键单击CN1的PDO中的TPDO,会在右侧显示一个填写信息的表格, 如下图 21所示。
图 21 选定的从站TPDO表
这个数据桢有如下属性:
Node Id :表示该数据桢的源地址。也就是该节点需要接收来自哪个节点的数据。通信模式不同(Preq/Pres 模式,PRC模式以及交叉通信),这个参数的设置会不同。该参数的详细使用方法,会在后面的实例中详细介绍。
Index(索引)和SubIndex(子索引):标示用来保存接收到的数据的object。 Offset:(偏移量):标示数据段在数据桢中的偏移量,数据段在数据桢中的起始地址。 Length(数据长度):标示数据段在数据桢中的数据长度,单位为bit。例如填写如下信息,这段的意思是将从主站接收到的数据桢的0x0000位置起,取出0x0010 bits 的数据,存放到自己的0x6040/0x01这个 Object中。这样就将接收到的数据桢中的某个数据段与某个
14
object 建立了映射关系。同理,可以将数据桢中的其他字段与object建立映射关系,从而完成数据解析过程, 如下图 22所示。
图 22 选定的从站TPDO的映射表
最后设置循环周期,左键单击openPOWERLINK_MN(240),在右边的CycleTime里填写期望的循环周期,单位为us, 如下图 23所示。
图 23 设置POWERLINK主站的参数
10. 编译工程,点击“BuildProject” , 如下图 24所示。
图 24 编译工程
11. 当在openCONFIGURATOR最下面一栏显示如下信息,说明编译成功,如果不成功,
会显示相应的错误, 如下图 25所示。
15
图 25 输出的编译信息
12. 编译成功后,会在工程所在的目录下的cdc_xap文件夹生成一些文件,其中包括monbd.cdc和xap.h这两个文件。monbd.cdc文件是一个二进制文件,这个文件包含了整个网络的配置信息,即主站和所有从站的参数设置信息,如图 26所示。而xap.h定义了一个数据结构,主站定义了这种数据结构的变量,并把这个变量和对象字典中通信的Object连接起来。在主站的应用程序里可以直接使用这些变量。这两个文件的详细信息,我们在后面会详细解释。
图 26 编译生成的网络配置文件
2.2 openCONFIGURATOR配置preq-pres 模式通信
(1) 创建新工程,在MN Configuration 的Import XDC/XDD选择源码
ObjDicts\\CiA302-4_MN下的00000000_openPOWERLINK_MN.xdd,这个XDD文件与Examples\\X86\\Windows\\VC8\\demo_cfm_pcap 下的主站例子中对象字典匹配, 如下图 27所示。
16
图 27 导入主站XDD文件
(2) 添加从站,右键单击“open_POWERLINK_MN”,选择“add CN”,在弹出的“Import
XDC/XDD”选择ObjDicts\\Api_CN下的0000003F_openPOWERLINK_demo_CN.xdd文件。这个XDD文件和源码目录Examples\\X86\\Windows\\VC9\\demo_pcap下的例子的对象字典一致。因此需要将Examples\\X86\\Windows\\VC9\\demo_pcap例子做为从站。, 如下图 28所示。
图 28 添加从站
(3) 配置接收和发送的网络参数和映射参数。
使用openCONFIGURATOR时,如果在“project setting”中将“Auto generate ”设置为“yes”,则不需要配置主站的网络参数和映射参数,该工具会根据从站的设置,自动产生主站的映射参数,使用者只需配置从站的接收和发送的网络参数和映射参数。
17
TPDO的配置:
左键单击CN1的PDO中的TPDO,会在右侧显示一个填写信息的表格,在这里设置发送PDO的映射参数。如下,对于从站的发送,由于是广播的,因此在NodeId一栏中保持默认的0, 如下图 29所示。
图 29 设置TPDO的网络参数
配置完以后,我们打开CN1的Object 0x1A00/0x01,看到他的值被设置成了0x0008000000016000,这个值代表的意思,前面讲过了。接下来把Object 0x1A00/0x00的值设置为0x01。该参数值等于在TPDO的表格中设置的object数量, 如下图 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的表格中设置的object数量, 如下图 32所示。
18
图 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文件被放置在工程的目录下, 如下图 34所示。
图 34 生成的网络配置文件
(5) 运行例子
到openCONFIGURATOR工程的目录,将cdc文件和xap.h文件复制到Examples\\X86\\Windows\\VC8\\demo_cfm_pcap目录下。这个程序作为POWERLINK的主站。 打开main.c文件,修改同步回调函数。
Examples\\X86\\Windows\\VC9\\demo_pcap目录下的VS工程作为从站,运行到另外一台
19
电脑上,别忘了将该从站的节点号修改为1。 2.3 openCONFIGURATOR配置PRC 模式通信 (1)
首先需要修改对于PRC 模式,相应的从站的XDD文件的CNFeatures属性里需要
添加这行代码:DLLCNPResChaining=”true” DLLCNFeatureMultiplex=\true\ DLLCNPResChaining=\ NMTCNSoC2PReq=\0\ /> 相应的主站的XDD文件的MNFeatures属性里需要添加这行代码:DLLMNPResChaining=”true” DLLMNPResChaining=\true\ /> (2) 创建openCONFIGURATOR工程,Import 主站和从站的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所示。 20 图 36 设置选定从站的RPDO的映射参数 (4) (5) 编译openCONFIGURATOR工程,然后运行例子,这些与Preq/Pres模式相同。 Wireshark 抓取POWERLINK 数据包,显示网络中没有了Preq cn2数据桢,因为2 号节点从主站的Pres MN 数据桢得到数据。 2.4 openCONFIGURATOR配置交叉通信 交叉通信,是指某个从站除了可以接收来自主站的数据,还可以接收来自其他从站的数据。例如2号从站除了可以接收来自主站的数据,还可以接收来自1号从站的数据以及3号从站的数据。经过配置,2号从站可以接收来自任何从站的数据。这称为交叉通信。 (1) 创建openCONFIGURATOR工程,Import 主站和从站的XDD文件。 (2) 配置接收和发送的网络参数和映射参数。 TPDO的配置:此处与Preq/Pres模式完全相同。 RPDO的配置: 如果该从站节点需要接收来自n号从站节点的数据,那么NodeId一栏的值设为n。例如,该从站节点需要接收来自主站的数据,并把接收到的数据存放到object 0x6200/01中;该从站节点需要接收来自1号节点的数据,并把接收到的数据存放到object 0x6200/02中;同时该从站节点需要接收来自3号节点的数据,并把接收到的数据存放到object 0x6200/03中,对于该种应用,由于这里的2号从节点需要接收来自主站的数据,也需要接收来自1号从站和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, 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) 21 EPL_OBD_END_INDEX(0x1400) // Object 1401h: 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, 0x00) 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, kEplObdAccConst, 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) // 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, ObjectMapping, 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) 22 EPL_OBD_SUBINDEX_RAM_VAR(0x1601, 0x00, kEplObdTypUInt8, 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_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, kEplObdAccRW, 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_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, tEplObdUnsigned8, Recvb1, 0x0) EPL_OBD_SUBINDEX_RAM_USERDEF(0x6200, 0x03, kEplObdTypUInt8, kEplObdAccVPRW, tEplObdUnsigned8, Recvb1, 0x0) EPL_OBD_END_INDEX(0x6200) 同样,XDD文件修改如下图 37所示: 23 图 37 XDD文件中的object XDD文件中关于0x6200的描述, 如下图 38所示。: 图 38 XDD文件中索引为0x6200的object 接下来创建新的openCONFIGURATOR工程,对2号从节点的配置, 如下图 39所示: 图 39 设置选定节点的RPDO的通信参数 这里需要说明如下几点: 24 (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个独立的数据包。在取数据的时候,都是从数据包的开始位置取,因此“offset”都为“0x0000”。 (3) 这里省略了对主站发送给2号从站的TPDO的配置,以及1号从节点和3号从节点的 TPDO的配置。 完成上述配置后,接下来运行该例程: (1) 编译工程,将生成的.CDC文件和xap.h文件复制到主站工程目录下。 (2) 程序运行。我们需要有3台 PC, 一台作为主站,运行 Examples\\X86\\Windows\\VC8\\demo_cfm_pcap下的例子,另外两个运行Examples\\X86\\Windows\\VC9\\demo_pcap下的例子,将节点号一个设置为2,另一个设置为3。 (3) 对于2号从节点的程序修改如下: 定义3个变量,分别和0x6200/01,0x6200/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, &ObdSize, 0x02); if (EplRet != kEplSuccessful) { goto ExitShutdown; } EplRet = EplApiLinkObject(0x6200, &bVarOut1_3, &uiVarEntries, &ObdSize, 0x03); if (EplRet != kEplSuccessful) { goto ExitShutdown; } 同步回调函数修改如下: 25 EplKernel PUBLIC AppCbSync(void) { tEplKernel EplRet = kEplSuccessful; bVarIn1_l+=2; printf(\ %d, bVarOut1_3: %d\\n\, 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。 在Examples\\X86\\Windows\\VC8\\demo_cfm_pcap的例子里demo_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 连接起来。EplApiProcessImageSetup()函数的底层,也是通过调用EplApiLinkObject(),来将变量AppProcessImageIn_g和 AppProcessImageOut_g 与对象字典中的object 连接起来的。 PI_IN AppProcessImageIn_g变量是用来保存主站发送到网络上的数据,以网络为参考点,是网络从主站得到数据,所以定义为PI_IN 。PI_OUT AppProcessImageOut_g变量是用来保存主站从网络接收到的数据,,以网络为参考点,是网络输出数据到主站,所以定义为PPI_OUT。 Mnobd.cdc文件:这个文件是一个二进制文件,包含了网络的配置信息,即主站参数的设定和各个从站参数的设定。再POWERLINK网络中,主站具有配置从站的功能,在主站索引0x1f22 子索引n的object里保存了对n号从节点的配置信息,当POWERLINK 网络上电以后,主站会根据object 0x1f22/n的内容,通过发送SDO 的方式来配置从站的参数。因此Mnobd.cdc文件实际上是对主站object的值的设置。下面我们打开一个cdc文件,做一个概要性的介绍。 Mnobd.cdc文件信息(红色字体为标注的信息) 26 00000015 这里是16进制的15,表示一共有21个object需要设置 //// NodeId Assignment 索引 子索引 数据长度 数值 1F81 1A00 1600 1006 us 1C02 1C02 1C09 1C14 1F26 1F27 1F81 1F92 1A00 1A00 1400 1600 1600 1A00 1600 01 00000004 03 00000004 01 00000004 00 00000004 01 00000004 01 00000004 F0 00000004 01 00000004 01 00000008 02 00000008 01 00000001 01 00000008 02 00000008 00 00000001 00 00000001 00000028 00000028 00000028 02faf080 000027d9 0286e190 80001001 00006978 001000000001A100 主站的TPDO映射参数 001000100002A100 01 001000000001A580 主站的RPDO映射参数 001000100002A580 02 02 01 00000004 00 00000001 00 00000001 00 00000004 00000007 00 00 00002710 这个object是循环周期,值为0x2710,单位 ////Configuration Data for CN-1 1F22 01 000000be 主站object 1F22/01 保存了对1号从站的配置信息 00000011 1600 1A00 1006 1020 00 00000001 00 00000001 00 00000004 01 00000004 00 00 00002710 1号从节点的循环周期 000027d9 27 1020 1C0B 1C0D 1C14 1F81 1F98 1400 1600 1600 1A00 1A00 1600 1A00 02 00000004 03 00000004 03 00000004 00 00000004 F0 00000004 08 00000002 01 00000001 01 00000008 02 00000008 01 00000008 02 00000008 00 00000001 00 00000001 0286e190 00000050 00000050 02faf080 80001001 012C f0 0010000000016040 1 号从节点的RPDO映射信息 001000100001604c 0010000000016041 1 号从节点的TPDO映射信息 00100010000160fc 02 02 //// NodeId Reassignment 1F81 01 00000004 80004007 主站读取cdc文件,解析出每个object的索引,子索引,数据长度和数值,然后将这个数值写入对应的object中。这样就完成了主站的参数设置。主站中索引0x1F22/ n里保存了对n号从节点的配置信息,主站根据这些信息,通过发送SDO读/写来配置从节点的object的值。从而完成对网络的配置。 28
正在阅读:
POWERLINK的网络组态05-01
专项预案10-07
2016-2017年新国标苏教版小学数学五年级上册第八单元试卷及答案质量检测试卷(精品)06-02
中考《三国演义》练习题汇总及答案10-08
管理统计学试卷A卷01-30
城镇街景改造可行性研究报告01-05
电子商务项目投标书01-03
数学日记作文(优秀6篇)03-22
高一下物理竞赛试题05-05
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 组态
- POWERLINK
- 网络
- 吉林实验中学2012-2013学年高一上期末考试数学试题
- 长沙教育学院教师培训改革与创新发展纪实
- 基础工程习题答案(好多啊)
- 长春平安纸业公司2-5-1在被审计单位整体层面了解内部控制
- 风险预控管理相关知识考试复习题
- 爱情与婚姻 - 观《暗恋桃花源》有感
- 中国诗词大会检测试卷(2月份)
- 山东省烟台市2017届高三上学期期末考试英语试题.doc
- 福建省2015年下半年一级建筑师材料与构造:模具考试试卷
- WinCC中全局脚本VBS归档到Excel
- 勘查技术与工程、岩土工程毕业实习报告 - 图文
- 秘书沟通与谈判练习题一
- CAD试题1
- 四年级下册岭南版美术测试题
- 中国区著名消费品行业资深高级经理和总监名录
- 运动会总表
- 2016年11月《探索发现 - 生命》满分题库
- 新课标高考语文文言文阅读复习专题
- 公司应急预案
- 风力发电对电力系统的影响中英文翻译