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例外。Lang.Stringindexoutofboundsexception索引超出范围(0)   java Spring引导Freemarker从2.2.0升级失败   重构Java反模式名称?包含对象的对象包含。。。等   用java处理JDBC可能出现的死锁的最佳方法   java无法访问主线程上的数据库,因为它可能会在很长一段时间内锁定UI   java如何将固定大小的画布包装在边框窗格中的滚动窗格居中?   java解析xsd文件后得到空结果   在html页面中表示XML文件的java   socketjava对象流   sql Java越界异常数据库   JavaJBoss7.1.1不会在Mavericks上启动   Twincat ADS事件驱动读取在一段时间后停止工作(Java)   java MyBatis使用生成的ID插入所有   Mojave上缺少MacOS Java控制面板   JavaGuice:如果多次注入相同的依赖项,是否注入了该依赖项的相同实例?