使用Python3运行CanFestival的对象字典编辑器

CanFestival是一个CANOpen开源C库,其自带对象字典编辑器,但是得用Python2来打开,其界面库用的也是老版本的wxPython,使用起来非常不方便。

本人复制了一份对象字典编辑器源码并为其单独创建了一个仓库,然后经过辛苦的修改,终于可以使用Python3和最新的wxPython来运行了。

代码在https://github.com/happybruce/objdictgen


一 下载源码

执行下面语句下载源码,

git clone https://github.com/happybruce/objdictgen.git

二 运行对象字典编辑器

Windows下

运行前要先安装wxPython,

pip install -U wxpython

安装完后就可以运行了,本人用的wxPython版本是4.2.1

python objdictedit.py

运行后显示如下,
在这里插入图片描述

点击File可以新建对象字典工程或者打开已有的对象字典工程,也可以导入EDS文件,
在这里插入图片描述

Linux下

本人用的Debian11,直接用pip安装wxPython会安装失败,这是因为在Linux下wxPython需要依赖GTK库,这个库专门用来做显示用的。

还好wxPython已经帮用户考虑到了这个问题,它们提供了带GTK的wxPython版本,打开https://extras.wxpython.org/wxPython4/extras/linux/,显示如下,
在这里插入图片描述
然后点击gtk3,里面会显示对应各种Linux版本的目录,这里选择debian11,如果是Ubuntu就选择Ubuntu的版本目录,
在这里插入图片描述
进入后,点击最新版本的whl文件进行下载,
在这里插入图片描述
下载完后拷贝到Linux下,然后执行下面命令进行安装,

pip install wxPython-4.2.1-cp39-cp39-linux_x86_64.whl

注意:这里的cp39是指Python的版本,Debian11里默认安装的Python3版本是3.9

安装完毕后,再去运行objdictedit.py就可以打开界面了,
在这里插入图片描述


三 主要做的工作

这里总结一下主要做的适配工作以及采用的方法

  • 把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比Gnosis更加高效。


四 后续工作

后续会在Linux下使用CanFestival源码结合对象字典编辑器生成的源码来搭建工程进行进一步的验证,如果一切OK,再往STM32上移植。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值