Как создать сокет между двумя наборами CANtact для отправки и получения сообщения CAN с использованием библиотеки python-can? - PullRequest
0 голосов
/ 01 марта 2019

Я использую два набора инструментов CANtact, подключенных с помощью кабеля DB9 к гнезду DB9.Я хочу отправить CAN сообщение из одного инструментария, и сообщение должно быть получено из другого инструментария. Я использовал следующий код

#!/bin/env python
import socket
import struct

canformat = '<IB3x8s'

class CanBridge():
    def __init__(self, interface_from, interface_to):
        self.interface_from = interface_from
        self.interface_to = interface_to
        self.canSocket_to = socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
        self.canSocket_from = socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
        try: 
            self.canSocket_to.bind((self.interface_to,))
            self.canSocket_from.bind((self.interface_from,))
        except OSError: 
            print("Could not bind to interfaces")
        #put the sockets in blocking mode.
        self.canSocket_to.settimeout(None)
        self.canSocket_from.settimeout(None)

    def run(self):
        while True:
            raw_bytes = self.canSocket_from.recv(512)
            try:
                self.canSocket_to.send(raw_bytes)
            except OSError: #Buffer overflow usually from lack of connection.
                pass

            rawID,DLC,candata = struct.unpack(canformat,raw_bytes)
            canID = rawID & 0x1FFFFFFF
            candata_string = " ".join(["{:02X}".format(b) for b in candata])
            print("{:08X} {}".format(canID, candata_string))

if __name__ == '__main__':
    bridge = CanBridge('slcan1','slcan0')
    bridge.run()

Я получаю следующую ошибку

AttributeError: 'У объекта CanBridge нет атрибута 'run'

Как можно устранить эту ошибку?или есть какой-нибудь лучший код?Я получил этот код со следующего сайта https://github.com/Heavy-Vehicle-Networking-At-U-Tulsa/can-man-in-the-middle

...