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变量始终存储0值。为什么?   如何使用Java/REST将Azure blob从一个存储容器移动到另一个存储容器?   java将commons DBCP从1.2升级到1.4,我应该害怕吗?   java如何使用分隔符拆分字符串?   java使用数组读取json对象   java在groovy中切片字符串   交换数组java的两个邻域元素   java移动用于确定字符串是否为回文的逻辑   java Android应用程序在一个活动中崩溃   java Sparkjava将webapp文件夹设置为静态资源/模板的文件夹   java复杂条件表达式,用户易用。   java如何仅在表存在时从表中选择值   java I无法将数据从Recyclerview传递到其他活动   java数据结构最佳设计(大数据)   java Android从DatePickerDialogFragment中删除日历视图   java将数据从Firebase获取到片段   数组。sort()在java中运行不正常