英创Linux主板Python, C#实例之四 CAN总线

 2020-10-27 14:48:26     作者:Emtronix    

  本文主要介绍在英创Linux工控主板(ESM8000、ESM7000和ESM6800H)上,采用Python和C#编程,实现对CAN总线接口的访问。Python和C#实例,均采用Visual Studio Code作为基本的编程工具,其代码可在主板 + ESMARC评估底板上运行,其基本的硬件环境采用采用ESM8000工控主板 + 评估底板构成,如下图所示:


英创Linux主板的Python, C#实例之四 CAN总线.png


  在Linux平台,CAN总线接口设备已纳入网络的socket架构。英创的Linux主板有两路CAN接口,网络名称为”can0”和”can1”。在本文后面的实例代码中使用can0接口,评估底板上有相应的CAN驱动电路,与开发主机的CAN适配器连接,就可进行测试了。


  可选择任何一款CAN调试模块,如PCAN,作为CAN总线测试的对端,通过其APP可看到CAN数据帧的收发情况。


Python应用实例


  Python支持can接口操作库文件Python-CAN已经安装在ESM8000板卡文件系统中,调用import can 即可调用API函数对于can接口进行读写操作。对于socketcan的操作模式,一般需要调用ip 命令来激活can接口,并设置相应的波特率。

  #>ip link set can0 type can bitrate 2500000

  #>ip link set can0 up


  Python CAN实例代码如下:


英创Linux主板的Python, C#实例之四 CAN总线.png


C#应用实例


  C#的实例是来自第三方的开源案例:https://github.com/jormenjanssen/netcore-can-example。实例通过C#的InteropServices机制,直接调用Linux socket相关函数,并不依赖于libsocketcan库。目前还只有.NETCore3.1能支持该实例的正常运行,.NET5.0的预发行版都还不能正常工作,希望在计划的2020年11月的正式发布版中,微软能解决System.Net.Sockets库中的相关问题。


  运行程序前,需要通过Linux的ip link命令,让can0接口up。具体操作参考Python实例中的说明。


  鉴于本程序代码较多(包含6个C#文件),仅例出main函数。感兴趣的客户可与英创技术部门联系,获取完整代码。


英创Linux主板的Python, C#实例之四 CAN总线.png