CanFestival是一个CANOpen开源C库,其自带对象字典编辑器,但是得用Python2来打开,其界面库使用的也是老版本的wxPython,使用起来非常不方便。
本人复制了一份对象字典编辑器源码,然后经过辛苦的修改,终于可以使用Python3和最新的wxPython来运行了。
代码在https://github.com/happybruce/objdictgen
如何运行
运行前要先安装wxPython,
pip install -U wxpython
安装完后就可以运行了,本人用的wxPython版本是4.2.1
python objdictedit.py
运行后显示如下,
点击File可以新建对象字典工程或者打开已有的对象字典工程,也可以导入EDS文件,
主要做的工作
这里总结一下主要做的适配工作以及采用的方法
- 把Python2的代码格式转为Python3,使用Python3自带的2to3.py工具来实现转换(位于Python安装目录下的Tools\scripts里)
- 把使用到的老版wxPython API替换成新版的API,这里主要是针对新版已经不再支持的API,需要到wxPython官网API文档中逐个查找
- 把加载和保存对象字典文件的库使用Python自带的pickle库代替,原本使用的是Gnosis库,但是这个库非常老而且只能Python2使用。经过本人阅读源码,原作者使用Gnosis主要是为了序列化和反序列化,所以这里使用pickle代替。
- 生成对象字典.c/h文件的python代码进行一定的优化
这里要注意:pickle和Gnosis生成的文件格式不一样,前者是二进制字节序列,后者是xml,所以源码里自带的examples目录下的对象字典文件是无法导入的,不过使用pickle新生成的对象字典文件是可以导入的,同时也能看出pickle更加高效。
后续工作
后续会在Linux下使用CanFestival源码结合对象字典编辑器生成的源码来搭建工程进行进一步的验证,如果一切OK,再往STM32上移植。