LabVIEWForum.de - Parameter auf Frequenzumrichter mittels NI CanOpen Library schreiben

LabVIEWForum.de

Normale Version: Parameter auf Frequenzumrichter mittels NI CanOpen Library schreiben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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:
[attachment=27390]

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
Offtopic2
Bitte LVF-Regeln beachten. Anhänge hier im Forum hochladen. Danke.

Gruß, Jens
Sorry, wurde mir eigentlich schonmal gesagt, da es aber schon länger her ist, dass ich in LabVIEW aktiv war hab ich das auch schon wieder vergessen Rolleyes
Da du den Beitrag editiert hast kann ich ihn nun anscheinend nicht mehr editieren und muss mich dafür schämen, dass ich verivizieren geschrieben habe...
Ich hab bisher nur mit PDO's gearbeitet. SDO's sind aber wohl genauso einfach.

Es sollte auch bei SDO's ausreichend sein, einen einfachen "SDO Read" und einen einfachen "SDO Write" zu machen. Das ganze Management mit dem Response und auf Request warten etc. macht alles das CANOpen-Modul. Dass bei "SDO Read" alles so einfach geht (Frage 1) ist also richtig.

Warum das Schreiben von Daten nicht klappt, kann ich aus der Ferne ohne genaue Information nicht sagen. Ich vermute mal, dass die Daten im SDO-Paket (also die Bytes 4 bis 7 !) formal zwar richtig sind, aber inhaltlich falsch. Formal heißt, dass das Datenarray, das in SDO-Schreiben reingeht, aus vier (Byte 4 bis 7!) Stück U8 (Byte!) besteht. Inhaltlich heißt, dass der Wert, der übertragen werden soll, z.B. außerhalb eines Bereiches liegt. (Beispiel: Eine Frequenz im Bereich 0 bis 10000 kann gesetzt werden. Würde aus dem U8-Array hervor gehen, dass die Frequenz 30000 ist, wäre der Inhalt falsch).
' schrieb:Ich vermute mal, dass die Daten im SDO-Paket (also die Bytes 4 bis 7 !) formal zwar richtig sind, aber inhaltlich falsch. Formal heißt, dass das Datenarray, das in SDO-Schreiben reingeht, aus vier (Byte 4 bis 7!) Stück U8 (Byte!) besteht. Inhaltlich heißt, dass der Wert, der übertragen werden soll, z.B. außerhalb eines Bereiches liegt. (Beispiel: Eine Frequenz im Bereich 0 bis 10000 kann gesetzt werden. Würde aus dem U8-Array hervor gehen, dass die Frequenz 30000 ist, wäre der Inhalt falsch).

Danke für die Anregung aber ich denke ausschließen zu können, dass die Daten inhaltlich falsch sind. Hab mittlerweile auch schon mit dem Wert 0 (also Byte 4 - 7 = 0) getestet, um zum einen genau diese Geschichte (zulässiger Wertebereich) ausschließen zu können (die Parameter erlauben lt. Doku einen Wert von 0) und zum anderen sicherzustellen, dass eben kein formaler Fehler vorliegt (vertauschen von MSB & LSB, Fehler beim erstellen des Datenarrays, ...).

Übrigens denke ich, dass mir das SDO Write mittels des Completion Code einen aussagekräftigeren Fehler zurückliefern würde, wenn es sich um so eine Sache wie den falschen Wertebereich handeln würde. Wenn ich zB. eine nicht vorhandene Index-Subindex-Kombi übergebe kriege ich eine Fehlermeldung, die genau das sagt (sinngemäß, "Index unbekannt")...

Dabei fällt mir gerade ein:
Beim falschen Index-Paar liefert mir nur das SDO Read den aussagekräftigen Fehler ("Index unbekannt"). Das SDO Write liefert trotzdem den "General error".
Riecht doch ein wenig nach einem Bug...

Naja, mal schaun, was der NI-Tel-Support am Mo zu sagen hat.

danke, lg

ps.:
' schrieb:Warum das Schreiben von Daten nicht klappt, kann ich aus der Ferne ohne genaue Information nicht sagen.
Welche Daten könnte ich dir noch zukommen lassen, mit denen du vll etwas anfangen könntest? Werde später noch ein Bild meines VI's hier reinstellen...
Da liegt kein Bug vor, da bin ich mir ganz sicher. Du musst nur alles richtig verdrahten. Der Function Code wird automatisch gesetzt, den musst du nicht vorgeben. Bei Data übergibst du logischerweise ein Array mit maximal 4 Byte.

Edit: Das VI oder zumindest ein Bild davon wäre zur Fehlersuche ungemein hilfreich.
Etwas später als eigentlich gedacht, aber doch: hier noch ein Test-VI mit eingeschränkter Funktionalität (samt Screenshot dessen), welches den Fehler ziemlich einschränken sollte...

Noch was: Meine Profilangaben stimmen nicht mehr ganz: Aktuell arbeite ich nicht mehr mit LabVIEW Version 7.1, sondern mit LabVIEW 2009.

[attachment=27413]
Lv09_img2[attachment=27412]
Was genaues kann ich nicht sagen. Aber:

Hast du denn die aktuelle CANOpen-Software?

Ich bin bisher immer so vorgegangen: [list]
[*]Interface Create<>
[*]Reset Node<>
[*]Stop remote none<>
[*]PDO create<>
[*]SDO create ??<>
[*]Start remote node
<>
[*]Jetzt erst Datenaustausch<>
[st]
Referenz-URLs