Hallo zusammen,
ich stehe gerade vor einem riesigen Problem und weiß nicht mehr weiter:
Ich muss ua. gewisse Parameter eines Frenquenzumrichters der Firma Schneider Electric (pDrive MX Pro 4V) mittels Can-Bus beschreiben bzw. umstellen.
Das Manual des FU's sagt mir dabei zum Protokoll folgendes:
Der Schreibvorgang sieht prinzipiell folgendermaßen aus:
SDO Request schreiben (Request Code, der sagt, dass Parameter geschrieben werden, zu schreibende Parameter, ...) -> SDO Response erhalten (geschriebene Daten verivizieren)
Der Lesevorgang:
SDO Request schreiben (Request Code, der sagt, dass Parameter gelesen werden) -> SDO Response erhalten (angeforderte Daten)
Das heißt, Lese- & Schreibvorgang unterscheiden sich eigentlich nur durch den Request-Code im 1. Packet & den Daten.
Die Telegramme SDO Request & Response sollten dabei folgendermaßen aussehen:
Nun stehen mir in der CANOpen Library von NI ja die beiden VI's "CANopen SDO Write Object" & "CANOpen SDO Read Object" zur Verfügung. Soweit, so gut.
Meine 1. Frage:
Das lesen der Parameter mittels "SDO Read Object" funktioniert soweit, obowhl ich ja die Normierung (Request schicken -> Response erhalten) eigentlich nicht einhalte.
Ich rufe lediglich das VI "CANopen SDO Read Object" mit den entsprechenden Parametern auf und erhalte von diesem als Ausgang meine Daten.
Meine nun: Ist das Protokoll vom obigem Bild CAN-Standard und wird intern vom SDO Read Object so eingehalten (also intern 1 Packet verschicken und danach 1 erhalten)?
Wenn nicht verstehe ich nicht ganz, wie ich überhaupt die richtigen Daten erhalte, da ich dem VI zB. den im Bild ersichtlichen "Request code" gar nicht mitteile (nicht mitteilen kann...).
Meine 2. Frage:
Das schreiben schlägt bei mir immer fehl. Der Completion Code hat dabei immer die Nummer 134217728 und "CANopen SDO Completion Code to String.vi" sagt mit, dass es sich dabei um den Fehler COE_SDO_GENERAL (General error) handelt. Hat irgendjemand eine genauere Beschreibung zu diesem Fehler?
Auch hier verstehe ich nicht ganz, wie ich die Daten nun genau schicken soll:
Eingangsobjekte hab ich folgende zur Verfügung:
- SDO object in, object index, object sub-index (sind soweit klar und passen auch sicher, da ich mit den selben Parametern/Objekten die Daten erfolgreich lesen kann)
- data:
Sind das die reinen Rohdaten (Byte 4 - 7 im Bild oben) oder stellt das mein ganzes Telegramm dar (also Request code, Objekt index, Sub-Index & 4 Daten-Bytes)?
Zweiteres wäre eher unlogisch, da sonst die Eingänge für object index und sub-index ja nicht nötig wären, allerdings stellt sich wieder die Frage, wie ich im 1. Fall meinen Request code in die Daten packen müsste/kann...
Hab jedenfalls schon beides in vielen verschiedenen Varianten versucht und gelange immer wieder zum oben genannten "General error".
Wäre wirklich sehr dankbar, wenn mir hier irgendwer speziell zum 2. Punkt ein wenig Hilfestellung oder Anregungen geben könnte. Der 1. Punkt würde mich zwar interessieren, ist aber nicht so wichtig, da es ja soweit funktioniert...
Danke, mfg
mik