1. 介绍
ArduCAT是Arduino[1] Compatible 开发板。本产品力图通过Arduino技术,大大简化EtherCAT从站的开发。ArduCAT开发板包含两路可用于EtherCAT实时以太网的100BASE-TX网口,所以它特别适合基于PC的自动化方案。ArduCAT使用ATMega1280 处理器,兼容Arduino Mega开发板,并具有完全相同的引脚定义。板上采用开关稳压器提供5V 或3.3V的2A直流输出,且发热甚微。除配套的开源Arduino库外,还配有从站应用层代码自动生成工具,用户只需编辑EXCEL表格便生成完整的协议栈,大大简化了通信协议的代码的开发,使用户能够将注意力集中在开发具体的应用上。
https://item.taobao.com/item.htm?spm=0.0.0.0.ErA7YS&id=530502226736
2. 代码自动生成
ArduCAT的从站代码由两部分组成。与具体应用无关的部分是‘ArduCAT’ 库,其安装方法已经在《ArduCAT_开发环境安装说明》一文中进行了介绍。而与具体应用相关的部分,包括 “对象字典”, PDO映射等,都可以用本字所用的代码自动生成工具生成。
代码自动生成工具位于下图所述的“EtherCATSlave”文件夹。它以包含了从站信息的Excel表单作为输入,自动生成Arduino脚本(.ino),和EtherCAT 主站使用的EtherCAT从站信息文件(ESI) (.xml) 。
目前,只有EtherCAT 常用的的process data和CoE (CAN over EtherCAT) 应用层服务在本工具中被实现。代码自动生成工具使用Python语言编写,是开源的,欢迎各路朋友为其添砖加瓦。具体使用方法如下:
2.1. 编辑从站描述表单(EXCEL)
“EtherCATSlave”文件夹下的“SSC-Device.xls”即是从站描述表单的一个实例。它可以被用于编写实际所需表单的模板。
该EXCEL 表单包含两部分。前16行是第一部分,它描述了从站的通用信息。其余部分则描述了对象字典(OD, object dictionary). 如果“rx”或“tx”被填入了某行对就的“rx/tx” 列,那么这一行将成为Rx或Tx 过程数据(process data).
2.2. 编辑代码生成工具的配置文件
代码生成工具的输入与输出文件名是通过 “SlaveGenerator.cfg” 文件指定的。
文件的格式非常简单。下面示例中,在 ‘-i', ‘-c’, ‘-x’后的文件名即分别为输入的表单文件,输出的 Arduino脚本文件和EtherCAT从站信息文件(ESI)。建议将输出的从站信息文件的目录直接指向EtherCAT主站软件规定的目录:对于TwinCAT’ 软件,一般是 ‘C:\TwinCAT\Io\EtherCAT’,而对于‘EtherCAT configurator’软件,则一般是‘C:\Program Files\EtherCAT Configurator\EtherCAT’。这样每次主站软件重启后便会直接识别生成的从站描述文件。
-i SSC-Device.xls
-c EtherCATSlave.ino
-x C:\TwinCAT\Io\EtherCAT\SlaveDevice.xml
2.3. 运行代码生成工具
有2种方法运行代码生成工具
最简单的方法是直接双击“SlaveGenerator.py” 文件。工具即会自动运行。
从输出窗口中可以看出,输出文件被成功生成了。
另一种方法是使用Python的GUI。在开始菜单中选择 “Python 2.7/IDLE (Python GUI)。
在菜单中选择“File/Open”,在弹出的对话框中进入代码生成工具的目录,并选择 “SlaveGenerator.py”。
脚本打开后,按下“F5” 或者在菜单中选择“Run/Run module”即运行程序。程序的结果会在Python shell中显示。这种运行方式的好处是脚本的输出会显示在Shell中,便于调试。
3. 编译并下载
通过一条mini-USB电缆将开发板与电脑连接起来。
3.1. 选择开发板
ArduCAT与Arduino Mega是完全兼容的,因此在“Tool/Board”菜单中选择 “Arduino Mega”。
3.2. 打开脚本文件
从“File/Open”菜单,选择要生成的脚本文件。
可以用 “File/Save as”将脚本保存在其它位置。
3.3. 编译与下载
按下“Upload” 键,即自动编译并下载编译好的程序到开发板。
4. 使用TwinCAT进行测试
下载程序后,ArduCAT开发板上便已经建立起了EtherCAT从站。测试从站可以使用TwinCAT、EtherCAT Configurator或其它主站软件。测试方法与测试一般从站是一样的,并无特别之处。本文以TwinCAT软件为例,给出测试从站的方法。使用其它软件,测试方法是类似的。
使用以太网线连接电脑与开发板的Port 0。
4.1. 测试前的准备工作
4.1.1. 拷贝ESI(.xml)文件
如果ESI(.xml)没有直接生成在TwinCAT软件的指定目录里(见2.2条),那么在启动TwinCAT软件前需要手动把生成的.xml文件拷贝到该目录下。
4.1.2. 下载从站EEPROM
4.1.2.1. 从任务栏打开 TwinCAT system manager.
在‘I/O’ device上单击右键,并选择 “Append device”。
选择 “EtherCAT/EtherCAT”, 并点击 OK.
4.1.2.2. 安装并使能网卡(首次运行需进行此步操作)
本节内容只需在 TwinCAT首次运行时进行操作。
如上节所述添加EtherCAT 设备后,单击该设备,并在右边窗体上点击Adapter选项卡。
点击 “Compatible Devices”
选择合适的网卡,并依次单击 “Install”和“Enable”,随后关闭对话框。
点击 Search,选择合适的网卡,点击OK。
4.1.2.3. 扫描设备
单击选择EtherCAT设备,然后点击扫描按钮 (或按F5),在所有弹出的对话框中选择“Yes”。
开发板被搜索到,并在EtherCAT device下面被列出来。单击找到的开发板,在右边窗体上选择“EtherCAT” 选项卡。
点击 “Advanced Settings…” 然后选择 “ESC Access/E2PROM/Hex Editor”.
点击右下角的“Select download from list”, 找到新生成的从站的ESI (.xml)文件对应的设备,并单击OK。稍等片刻,从站信息便被下载入开发板的EEPROM中。
4.2. 测试
4.2.1. 扫描设备
单击选择EtherCAT device,点击扫描按钮 (或按F5),在所有弹出的对话框中选择“Yes”。
开发板被搜索到,并在EtherCAT device下面被列出来。单击找到的开发板。
4.2.2. 测试从站状态切换功能
单击找到的开发板。在窗体右侧点击“Online”选项卡。
在“State Machine”框中按下 “Init”, “Pre-OP”, “Safe-Op”, “Op”按钮,即可在这4个状态间切换。注意,最后两个状态只有在Free run按钮被按下的情况下才能进入。
4.2.3. CoE (CAN over EtherCAT) 功能测试
选择“CoE-Online” 选项卡,即可在下面的窗口中检查对象字典(object dictionary)是否正确,并改变其中可读写变量的数值。
4.2.4. 过程数据(process data)测试
可以借助CoE功能检查过程数据能否被正确传输
4.2.4.1. Tx PDO (process data object) 测试
TxPDO中的输入是由从站向主站输入的数据,因此它们可以通过在CoE中写值,然后通过Process Data进行读取。
将从站在‘Online’选项卡中切换至‘Pre-OP’状态(亦可是“Safe-Op”, “Op”)。在随板附带的“ComboDevice”例子中,有8个TxPDO 变量(entries),其中4个的索引(index)是 0x6000, 另外4个的索引是0x6010。任意修改其数值。
在‘Online’选项卡中状态切换至 ‘OP’状态。
在左边的树状图中选择Tx PDO(即Input mapping)下面的变量,在右边的窗体中选择“Online”选项卡,观察其数据是否与刚才设置的数值相同。
4.2.4.2. Rx PDO (process data object) 测试
RxPDO中的输入是由主站向从站输出的数据,因此它们可以通过在Process Data中写值,然后通过CoE进行读取。
当设备处于‘OP’状态时,在左边树中找到RxPDO变量(即Output mapping 0),选中相应的变量,然后在右边Online选项卡中点击‘Write…’ 按钮,更改变量的值。
在 ‘CoE-Online’选项卡中,找到刚才更改的变量,检查其取值是否与刚才修改的一致。.
5. 测试“灯亮度调节”应用程序
在Arduino脚本(.ino)中,可按照文件中的“TODO:”提示修改程序。该文件前部一般不用修改,与具体应用相关的函数体都在文件尾部。使用“Obj0xXXXX.SubIndexX”读写对象字典中的变量。
例如,如下科所示,我们在APPL_Application函数和setup函数中增加以下两条语句。然后重新下载程序。此时,通过在TwinCAT 软件中修改“Analog Output 1”变量的取值(0-255),就可以调节开发板上引脚13对应的灯的亮度。
[1] Arduino is a registered trademark of Arduino, LLC.