Git Product home page Git Product logo

canopen's Introduction

CANopen for Python

A Python implementation of the CANopen standard. The aim of the project is to support the most common parts of the CiA 301 standard for a master node wrapped in a Pythonic interface.

The library supports Python 2.7 and 3.3+ and runs on Windows, Linux and Mac.

Features

  • Object Dictionary from EDS
  • NMT master
  • SDO client
  • PDO producer/consumer
  • SYNC producer
  • EMCY consumer
  • TIME producer

Installation

Install from PyPI using pip:

$ pip install canopen

Install from latest master on GitHub:

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

If you want to be able to change the code while using it, clone it then install it in develop mode:

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

Documentation

Documentation can be found on Read the Docs:

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

It can also be generated from a local clone using Sphinx:

$ python setup.py build_sphinx

Hardware support

This library supports multiple hardware and drivers through the python-can package. At the time of writing this includes:

  • SocketCAN on Linux
  • Kvaser
  • Peak CAN
  • IXXAT
  • USB2CAN
  • NI-CAN

It is also possible to integrate this library with a custom backend.

Quick start

Here are some quick examples of what you can do:

import canopen

# Start with creating a network representing one CAN bus
network = canopen.Network()

# Add some nodes with corresponding Object Dictionaries
node = network.add_node(6, '/path/to/object_dictionary.eds')
network.add_node(7, '/path/to/object_dictionary.eds')

# Connect to the CAN bus
# Arguments are passed to a python-can bus
# (see https://python-can.readthedocs.io/en/latest/bus.html).
network.connect(channel=0, bustype='kvaser', bitrate=250000)

# Read a variable using SDO
device_name = node.sdo['Manufacturer device name'].raw
vendor_id = node.sdo[0x1018][1].raw

# Write a variable using SDO
node.sdo['Producer heartbeat time'].raw = 1000

# Read PDO configuration from node
node.pdo.read()
# Transmit SYNC every 100 ms
network.sync.start(0.1)

# Change state to operational (NMT start)
node.nmt.state = 'OPERATIONAL'

# Read a value from Tx PDO 1
node.pdo.tx[1].wait_for_reception()
speed = node.pdo.tx[1]['ApplicationStatus.ActualSpeed'].phys

# Disconnect from CAN bus
network.sync.stop()
network.disconnect()

TODO

There are a lot of things that still needs implementing and fixing. Pull requests are most welcome!

  • More unit test coverage
  • Period transmits using python-can cyclic API
  • SDO block transfer
  • XDD support

canopen's People

Contributors

christiansandberg avatar luminize avatar tuwuhs avatar wodz avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.