Я использую два набора инструментов 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