CANopen堆栈实现

canopen的Python项目详细描述


CANopen标准的python实现。 该项目的目的是支持CIA301最常见的部分 pythonic接口中的标准。

库支持Python2.7和3.4+。

功能

  • EDS的对象字典
  • NMT主/从
  • SDO客户机/服务器
  • PDO生产者/消费者
  • 同步生产者/消费者
  • emcy消费者/生产者
  • 时间生产者
  • LSS主机

安装

使用pip从PyPI安装:

$ pip install canopen==0.9.0

从github上的最新主机安装:

$ pip install https://github.com/christiansandberg/canopen/archive/master.zip

如果要在使用时更改代码,请将其克隆,然后安装 在develop mode

$ git clone https://github.com/christiansandberg/canopen.git
$ cd canopen
$ pip install -e .

文档

在阅读文档时可以找到文档:

http://canopen.readthedocs.io/en/stable/

也可以使用Sphinx

$ python setup.py build_sphinx

硬件支持

这个库通过python-can包支持多个硬件和驱动程序。 见the list of supported devices

还可以将此库与自定义后端集成。

快速启动

下面是一些您可以做的快速示例:

PDO可以通过三种形式访问:

1:node.tpdo[n]node.rpdo[n]

2nd:node.pdo.tx[n]node.pdo.rx[n]

3:node.pdo[0x1A00]node.pdo[0x1600]

n是pdo索引(通常为1到4)。第二种访问方式是向后兼容。

importcanopen# Start with creating a network representing one CAN busnetwork=canopen.Network()# Add some nodes with corresponding Object Dictionariesnode=canopen.RemoteNode(6,'/path/to/object_dictionary.eds')network.add_node(node)# Connect to the CAN bus# Arguments are passed to python-can's can.interface.Bus() constructor# (see https://python-can.readthedocs.io/en/stable/bus.html).network.connect()# network.connect(bustype='socketcan', channel='can0')# network.connect(bustype='kvaser', channel=0, bitrate=250000)# network.connect(bustype='pcan', channel='PCAN_USBBUS1', bitrate=250000)# network.connect(bustype='ixxat', channel=0, bitrate=250000)# network.connect(bustype='vector', app_name='CANalyzer', channel=0, bitrate=250000)# network.connect(bustype='nican', channel='CAN0', bitrate=250000)# Read a variable using SDOdevice_name=node.sdo['Manufacturer device name'].rawvendor_id=node.sdo[0x1018][1].raw# Write a variable using SDOnode.sdo['Producer heartbeat time'].raw=1000# Read PDO configuration from nodenode.tpdo.read()node.rpdo.read()# Re-map TPDO[1]node.tpdo[1].clear()node.tpdo[1].add_variable('Statusword')node.tpdo[1].add_variable('Velocity actual value')node.tpdo[1].add_variable('Some group','Some subindex')node.tpdo[1].trans_type=254node.tpdo[1].event_timer=10node.tpdo[1].enabled=True# Save new PDO configuration to nodenode.tpdo[1].save()# Transmit SYNC every 100 msnetwork.sync.start(0.1)# Change state to operational (NMT start)node.nmt.state='OPERATIONAL'# Read a value from TPDO[1]node.tpdo[1].wait_for_reception()speed=node.tpdo[1]['Velocity actual value'].physval=node.tpdo['Some group.Some subindex'].raw# Disconnect from CAN busnetwork.sync.stop()network.disconnect()

调试

如果你需要更详细地了解情况,你可以增加 logging级别:

importlogginglogging.basicConfig(level=logging.DEBUG)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JPanel不会对键绑定做出反应   当时间大于零时,不得在UI线程上调用java Await   JTextArea的java线程安全。追加   Java用户输入的字和行计数器   java以spreedsheat格式将数据保存到文件中   java构造函数的意义是什么?   java findViewById返回null,尽管组件的ID存在   java如何向按钮添加图像   java如何中断ExecutorService的线程   java如何将属性(例如枚举)绑定到不同类型的组件属性(例如每个枚举的映像)?   随机森林分类器的java实现   html使用java连接到一个站点并发布,HTTP状态代码200   从类访问属性时发生java编译错误   Java自动填充ArrayList,搜索更好的选项