1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

シミュレーション上でCANで送受信

1
Posted at

python-canを使用し、シミュレーション上でCANの送受信を行う。


完成イメージ

RequesterがID0x111のCANを送信し、Receiverがそれを受信後、ID0x222を返す。
また、それぞれが送受信するときにprintで出力する。


Receiver

receiver.py
import can
import time

#バス接続
bus = can.interface.Bus(
  interface='vector',
  channel=0,
  bitrate=500000,
  app_name='xlCANcontrol'
)

#受信
while True:
  recv_msg = bus.recv(timeout=1)
  if recv_msg != None:
    print('Receiver: Recieve msg')
    break

#送信
reader = can.io.ASCReader("receve.asc")
start_time = None

for msg in reader:
  if msg.timestamp is not None:
    if start_time is None:
      start_time = msg.timestamp
      t0 = time.time()
    else:
      sleep_time = (msg.timestamp - start_time) - (time.time() - t0)
      if sleep_time > 0:
        time.sleep(sleep_time)

  bus.send(msg)

print('Receiver: Send msg')


bus.shutdown()

receive.asc
Begin Triggerblock
 0.000000 Start of measurement
 0.000000 1  222       Rx   d 02 03 04
End TriggerBlock

Requester

Requester.py
import can
import time

#バス接続
bus = can.interface.Bus(
  interface='vector',
  channel=0,
  bitrate=500000,
  app_name='xlCANcontrol'
)

#送信
reader = can.io.ASCReader("request.asc")
start_time = None

for msg in reader:
  if msg.timestamp is not None:
    if start_time is None:
      start_time = msg.timestamp
      t0 = time.time()
    else:
      sleep_time = (msg.timestamp - start_time) - (time.time() - t0)
      if sleep_time > 0:
        time.sleep(sleep_time)
  bus.send(msg)
print('Requester: Send msg')

#受信
recv_msg = bus.recv(timeout=1)
print('Requester: Receive msg')


bus.shutdown()

request.asc
Begin Triggerblock
 0.000000 Start of measurement
 0.000000 1  111       Rx   d 02 03 04
End TriggerBlock

実行結果

receiver.py→requester.pyの順番で実施したそれぞれの結果が以下。

>python receiver.py
Receiver: Recieve msg
Receiver: Send msg
>python requester.py
Requester: Send msg
Requester: Receive msg

BUSMASTERでの測定結果

test.log
***BUSMASTER Ver 3.2.2***
***PROTOCOL CAN***
***NOTE: PLEASE DO NOT EDIT THIS DOCUMENT***
***[START LOGGING SESSION]***
***START DATE AND TIME 8:2:2026 21:29:27:442***
***HEX***
***SYSTEM MODE***
***START CHANNEL BAUD RATE***
***CHANNEL 1 - Vector - Virtual Channel 1 SN - 100 - 500000 bps***
***END CHANNEL BAUD RATE***
***START DATABASE FILES***
***END DATABASE FILES***
***<Time><Tx/Rx><Channel><CAN ID><Type><DLC><DataBytes>***
21:29:42:4984 Rx 1 0x111 s 2 03 04 
21:29:42:5017 Rx 1 0x222 s 2 03 04 
***END DATE AND TIME 8:2:2026 21:29:45:805***
***[STOP LOGGING SESSION]***
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?