habe auf einem BeagleBone Ubuntu 14.04 Arm mit Python3.4. Zusätzlich ist eine CAN Platine auf dem Board. Die CAN Kommunikation per "linux-can-can-utils" funktioniert. Ich habe folgendes kleine Beispiel für den Einstieg in SocketCAN+Python verwendet:
http://python.readthedocs.org/en/latest ... ocket.html
Code: Alles auswählen
import socket
import struct
# CAN frame packing/unpacking (see 'struct can_frame' in <linux/can.h>)
can_frame_fmt = "=IB3x8s"
can_frame_size = struct.calcsize(can_frame_fmt)
def build_can_frame(can_id, data):
can_dlc = len(data)
data = data.ljust(8, b'\x00')
return struct.pack(can_frame_fmt, can_id, can_dlc, data)
def dissect_can_frame(frame):
can_id, can_dlc, data = struct.unpack(can_frame_fmt, frame)
return (can_id, can_dlc, data[:can_dlc])
# create a raw socket and bind it to the 'vcan0' interface
s = socket.socket(socket.AF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
s.bind(('vcan0',))
while True:
cf, addr = s.recvfrom(can_frame_size)
print('Received: can_id=%x, can_dlc=%x, data=%s' % dissect_can_frame(cf))
try:
s.send(cf)
except OSError:
print('Error sending CAN frame')
try:
s.send(build_can_frame(0x01, b'\x01\x02\x03'))
except OSError:
print('Error sending CAN frame')
ID's und dlc passen, nur eben die Datenbytes nicht immer. linux/can.h habe ich im Projektordner verlinkt und die can.h aus den linux-can-can-utils verwendet. Könnte schon der erste Fehler sein.Received: can_id=8cffaab7, can_dlc=8, data=b'\xadf\xb0f\xb0f\xabf'
Received: can_id=8cffaab9, can_dlc=8, data=b'\x82f\x84f\x89f\x86f'
Received: can_id=8cffaabb, can_dlc=8, data=b'hcfc`cic'
Received: can_id=8cff0b83, can_dlc=8, data=b'\x00\x00\x00\x00\x00\x00\x00\x00'
Received: can_id=8cff0b86, can_dlc=8, data=b'\xef\xff\xff\xbb\x00\x00\x00\x00'
Received: can_id=8cff0b89, can_dlc=8, data=b'\xc8\x1d\x04\x0e\x0f\n\t\xff'
Received: can_id=8cffaab7, can_dlc=8, data=b'\xb0f\xaef\xacf\xacf'
Received: can_id=8cffaab9, can_dlc=8, data=b'\x85f\x85f\x87f\x87f'
Received: can_id=8cffaabb, can_dlc=8, data=b'bclcfchc'
Received: can_id=8cff0b83, can_dlc=8, data=b'\x00\x00\x00\x00\x00\x00\x00\x00'
Received: can_id=8cff0b86, can_dlc=8, data=b'\xef\xff\xff\xbb\x00\x00\x00\x00'
Received: can_id=8cff0b89, can_dlc=8, data=b'\xc8\x1d\x04\x0e\x0f\n\n\xff'
Hat da jemand schon Erfahrungen gemacht, kann Tipps geben?
Gruß und Dank Markus