36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
import can
|
||
import time
|
||
|
||
# === 修改成你的介面 ===
|
||
# 如果你用 socketCAN-tcp (slcand) 綁到 can0:
|
||
# bus = can.interface.Bus(bustype="socketcan", channel="can0", bitrate=500000)
|
||
|
||
# 如果是 PCAN (Peak):
|
||
# bus = can.interface.Bus(bustype="pcan", channel="PCAN_USBBUS1", bitrate=500000)
|
||
|
||
# 如果是 Kvaser:
|
||
# bus = can.interface.Bus(bustype="kvaser", channel=0, bitrate=500000)
|
||
|
||
# 這裡先假設你用 socketcan
|
||
bus = can.interface.Bus(bustype="socketcan", channel="can0", bitrate=500000)
|
||
|
||
# === 設定參數 ===
|
||
node_id = 1
|
||
cob_id = 0x200 + node_id # PLC 的 RxPDO1
|
||
value = 1234 # 要送的整數值 (INT16)
|
||
|
||
# 轉成小端 (因為 PLC 是 little endian)
|
||
data_bytes = value.to_bytes(2, byteorder="little", signed=True)
|
||
|
||
# 塞進 CAN 幀
|
||
msg = can.Message(arbitration_id=cob_id, data=data_bytes, is_extended_id=False)
|
||
|
||
# 傳送多次測試
|
||
for i in range(10):
|
||
try:
|
||
bus.send(msg)
|
||
print(f"Sent {value} to PLC (COB-ID=0x{cob_id:X})")
|
||
except can.CanError:
|
||
print("Message NOT sent")
|
||
time.sleep(1)
|