Die Übertragung großer Dateien über CAN mit der Python-Canopen-Bibliothek wird unerwartet vorzeitig abgebrochenPython

Python-Programme
Anonymous
 Die Übertragung großer Dateien über CAN mit der Python-Canopen-Bibliothek wird unerwartet vorzeitig abgebrochen

Post by Anonymous »

Wir versuchen, Firmware-Updates mit CANopenNode durchzuführen. Es scheint, dass dazu das neue Firmware-Image an den Objektverzeichniseintrag 0x1F50:1 gesendet werden muss. Wenn wir dies versuchen, wird der Prozess früh beendet und nicht immer nach dem Senden der gleichen Anzahl von Bytes. Manchmal kann es schon nach dem Versenden einiger Dutzend fehlschlagen, manchmal können bis zu 5.000 gesendet werden. Dies scheint kein Fehler auf der Empfängerseite zu sein, da alle anderen CAN-Kommunikationen nach dem Abbruch der Dateiübertragung normal ausgeführt werden. Der spezifische Fehler, der über Python zurückgemeldet wird, ist Code 0x05040001, Unbekannter SDO-Befehl angegeben. Natürlich haben wir nach dieser Fehlercodenummer gesucht, aber die Suchergebnisse haben keine hilfreichen Hinweise darauf ergeben, warum dieser Vorgang möglicherweise fehlschlägt. Die Routine in Python zum Senden der Datei lautet wie folgt:

Code: Select all

def do_sdo_file_upload(filename, index : int, subindex : int = 0x0) :
info_text = "@[" + hex(index) + "][" + hex(subindex) + "]"
try :
logger.info("doing file upload")
logger.info("OD entry supports 'open' method: " \
+ str(hasattr(node.sdo, 'open')))
filesize = os.path.getsize(filename)
logger.info("size of " + filename + " is " + str(filesize) + " bytes")
node.sdo.MAX_RETRIES = 6
node.sdo.PAUSE_BEFORE_SEND = 0.001
node.sdo.RESPONSE_TIMEOUT = 1.0
with open(args.filename, 'rb') as f_in, \
node.sdo.open(\
index = index, subindex = subindex, \
mode = 'wb', size = filesize, buffering = 0x00, block_transfer = False) as f_out :
bytes_sent = 0x00
chunk_size_max = 0x40
while bytes_sent < filesize :
if chunk_size_max

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post