diff --git a/ebpfcat/ethercat.py b/ebpfcat/ethercat.py index 743dd74ba22551dcdcfc3467dafac7c31a93ec5f..722398b269252579dde066f0de61e84aa2e69f3c 100644 --- a/ebpfcat/ethercat.py +++ b/ebpfcat/ethercat.py @@ -714,7 +714,7 @@ class Terminal: print(f"expected CoE package, got {type}") coecmd, rodcmd, fragments = unpack("<HBxH", data[:6]) if rodcmd & 0x7f != odcmd.value + 1: - raise EtherCatError(f"expected {odcmd.value}, got {odcmd}") + raise EtherCatError(f"expected {odcmd.value}, got {rodcmd}") ret.append(data[offset:]) offset = 6 return b"".join(ret) @@ -849,11 +849,15 @@ class Terminal: for od in ret.values(): od.entries = {} for i in range(1 if od.maxSub > 0 else 0, od.maxSub + 1): - data = await self.coe_request(CoECmd.SDOINFO, ODCmd.OE_REQ, - "HBB", od.index, i, 7) + try: + data = await self.coe_request(CoECmd.SDOINFO, ODCmd.OE_REQ, + "HBB", od.index, i, 7) + except EtherCatError as e: + print(f"problems reading SDO {od.index:x}:{i:x}:", e) + continue oe = ObjectEntry(od) oe.valueInfo, dataType, oe.bitLength, oe.objectAccess = \ - unpack("<HHHH", data[:8]) + unpack("<BxHHH", data[:8]) if dataType == 0: continue assert i == oe.valueInfo