# file: write_sdo_min.py # pip install python-can canopen import time import can import canopen # === 請依你的硬體改這裡 === IFACE = "pcan" # pcan | kvaser | ixxat | slcan CHANNEL = "PCAN_USBBUS1" # kvaser/ixxat 用 0;slcan 用 "COM5" BITRATE = 500000 NODE_ID = 1 # 你的 PLC Node-ID EDS = "PLC.eds" # 你的 EDS/DCF(放同資料夾) INDEX = 0x2000 # 你在 PLC 端對外開放的 OD 物件 SUB = 0x00 VALUE = 1234 # 要寫入的整數(型別需與 EDS 一致) # === 建立 bus & network === bus = can.interface.Bus(bustype=IFACE, channel=CHANNEL, bitrate=BITRATE) net = canopen.Network() net.connect(bustype="python-can", channel=bus) node = canopen.RemoteNode(NODE_ID, EDS) net.add_node(node) # 建議在 PRE-OP 寫參數 node.nmt.state = "PRE-OPERATIONAL" node.sdo[INDEX][SUB].raw = VALUE time.sleep(0.05) print(f"SDO write OK -> {INDEX:04X}:{SUB:02X} = {VALUE}") net.disconnect()