(10条消息) 基于Linux的powerlink实现
一,POWERLINK优和平台
1,POWERLINK优势:只要有以太网的地方就可以实现 POWERLINK,例如你的 PC 机上可以运行POWERLINK、一个带有以太网接口的 ARM 可以运行 POWERLINK、一片 FPGA也可以运行 POWERLINK。POWERLINK 是站在标准以太网的肩膀上,现在POWERLINK 支持10M/100M/1000M 的以太网。只需在硬件驱动程序中进行小的改动,POWERLINK就可以支持 10G 的以太网。实现成本低。如果用户的产品以前是基于 ARM 平台,一般 ARM 芯片都会带有以太网,这样用户无须增加任何硬件,也无需增加任何成本,就可以在产品中集成POWERLINK,用户所付出的只是把 POWERLINK 的程序集成到应用程序中,而POWERLINK 的源程序又是开放且免费的。
2,POWERLINK实现平台:powerlink基于普通以太网的实时通信协议,物理层采用标准的以太网,而数据链路层的控制和应用层的CANopen协议都是开源的标准C 语言编写,可以运行于各种支持 C 语言的平台:ARM,单片机,DSP,X86,FPGA,ZYNQ等,可以运行在多种操作系统上如 WinCE、Windows、Linux、uc/os、VxWorks、或者没有操作系统。
二,POWERLINK原理: 是一个三层的通信网络,它规定了物理层、数据链路层和应用层。
1,POWERLINK 的物理层采用标准的以太网,遵循 IEEE802.3 快速以太网标准。POWERLINK 的主站和从站,都运行在标准的以太网。
2,POWERLINK 的数据链路层:也就是 POWERLINK 的核心,主要包括如下功能:
(1)构建/解析数据桢、对数据桢定界、网络同步、数据桢收发顺序的控制。
(2)传输过程中的流量控制、差错检测、对物理层的原始数据进行数据封装等。
(3)实时通信的传输控制。
(4)网络状态机。
在 POWERLINK 网络中,至少有一个设备做为主站(MN),其他的设备做为从站(CN)。每个从站设备都有唯一的节点号,该节点号是用来区分网络中的设备,取值范围为 1-239。主站设备(MN)的节点号为 240,主站的作用是为了为协调各个从站,合理分配总线使用权,避免冲突,实现实时通信。
3,同步机制:POWERLINK 支持 1588 分布式时钟协议,每个循环周期的开始,主站都会广播一个 SoC数据帧到网络上,该数据帧包含了两个重要信息:网络的绝对时间和相对时间。
绝对时间信息:年、月、日、时、分、秒、毫秒、微秒、纳秒。
相对时间信息:从网络开始工作,到现在一共运行了多少 us。
4,POWERLINK的数据帧格式:一共有 5 中数据帧(SoC、Preq、Pres、SoA、AsyncData)。
POWERLINK 的数据桢嵌在标准的以太网数据桢的数据段中。因此 POWERLINK 数据包具有标准的以太网数据帧的帧头和帧尾。如上图从第 14 字节到第 n 字节为 POWERLINK数据帧信息,而 0 至 13 字节是标准以太网的帧头。
三,基于Linux的powerlink实现
在 Linux下,openPOWERLINK有两种工作模式:一种工作在内核空间,此时 POWERLINK 协议栈就需要有针对该的网卡的驱动程序,目前我们提供的源程序里有针对 8139 芯片的网卡驱动和 82573 系列的驱动程序,如果使用者使用了其他类型的芯片,可以参照我们给的源程序进行修改。另一种工作在用户空间,此时和 windows 的工作方式相同,安装一个 wincap的libpcp库。
1,cmake编译:下载 cmake2.8.4解压。cmake2.8.4解压后的目录 bin下,找到 cmake-gui,双击打开 cmake-gui。
2,创建一个新的文件夹(mkdir epl_make),用来保存编译后的文件。
3,在cmake-gui设置 source code目录,即根目录openPOWERLINK1.7.1,设置编译后生产文件所在的目录epl_make。
4,点击“Flile”->“deletecache”。
5,点击“configure”,选择如下设置,然后 finish。
6,去掉勾选Grouped和Advanced,根据需要选择配置选项。
支持process_image的控制台程序 , 因此勾选CFG_X86_LINUX_DEMO_PROCESS_IMAGE_CONSOLE;
使用内核模式的协议栈,因此勾选 CFG_KERNEL_STACK;
使用 openCONFIGURATOR 来配置网络,因此勾选 CFG_POWERLINK_CFM;
使用8139 网,因此在 CFG_POWERLINK_EDRV 里写入 8139;
使 用 process_image,因此勾选CFG_POWERLINK_PROCESS_IMAGE , 需 要 把openCONFIGURATOR 工 具 生 成 的 mnobd.cdc 文 件 和 xap.h 文 件 复 制 到Examples\X86\Linux\gnu\demo_process_image_console 这个目录下,这样在编译的时候, 就会将 xap.h 编译进来,同时把 mnobd.cdc 复制到执行目录。
7,配置完以后,点击“Configurate”,如果没有红色的报警,说明配置成功。
点击“Generate”,如果没有红色的报警,显示如下,说明配置成功。
8,到 epl_make目录下查看 ,在这里就生成了 makefile文件
打开 linux 的 shell,cd 到 epl_make 目录下,执行 make 命令,就完成了编译。
安装,在 Linux 的 shell 里,cd 到 epl_make 目录下,执行makeinstall,完成安装。
9,加载内核模块,如使用了内核的协议栈,需要首先加载内核模块,在 epl_make/bin目录下生成了一些文件,有 powerlink8139.ko 和 demo_pi_console。powerlink8139.ko是内核模块,demo_pi_console 是应用程序。
在 Linux 的 shell 里敲入如下命令:cd bin
在 epl_make/bin 目录下有刚刚编译生成的 powerlink8139.ko,
输入sudo ./EplLoad -c mnobd.cdc powerlink8139.ko加载该内核模块
如需卸载模块,cd bin使用如下命令:sudo ./ EplUnload powerlink8139.ko
运行应用程序。
如果使用的内核协议栈,在 Linux 的 shell 里敲入如下命令:
#cd bin
#./demo_pi_console
如果使用的是用户空间协议栈,在Linux的shell里敲入如下命令:
#cd bin
#sudo ./demo_pi_console