LabVIEWForum.de
CANopen VISA Read liefert unerwartete Antwort - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: CANopen VISA Read liefert unerwartete Antwort (/Thread-CANopen-VISA-Read-liefert-unerwartete-Antwort)

Seiten: 1 2


CANopen VISA Read liefert unerwartete Antwort - MarkusS - 06.08.2019 13:44

Hallo zusammen,
ich beschäftige mich seit einiger Zeit mit seriellen Schnittstellen und verwende aktuell eine Nantotec C5-E Motorsteuerung mit einem NEMA-23 Schrittmotor. Die Steuerung ist über USB und einer RS485 (mit DS402) Schnittstelle mit dem PC verbunden, Betriebssystem ist Windows 7.

Ich bau an einem umfangreichen VI indem ich mehrere subVI's aufrufe und ausführe. Jedoch bereitet mir das read VI öfter Probleme.
Kurze Erläuterung zum Programm: Ich schreibe in die Steuerung den Befehl "Motor fahren" (bei CANopen mittels Controlword ist es eine Befehlskette) -> solange der Motor fährt und keine Befehle geschrieben werden, führe ich das im Anhang aufgeführte read_ever.VI aus, welches mir die aktuelle Motorposition ausgibt. Das VI read_ever funktioniert auch anfangs.

Jedoch, aus einem mir unbekannten Grund, liefert die Funktion "VISA Read" ein offensichtlich falschen String im "read buffer"

Geschrieben wird der String (als Beispiel):
4E54 000F 052B 0D00 0001 6062 0000 0000 04F8 6D
dabei ist 6062 00 das Register für die Position

Als Antwort kommt üblicherweise dieser String:
4E54 0013 052B 0D00 001 6062 0000 0000 04EA FEFF FFF4 E5
dabei ist der Anfang des Strings der Header und bleibt immer gleich, dann das Register 6062 00, dann die Antwortlänge 0000 0004, dann die Antwort in Hex-Dezimal für die Position FEFF FFF4 E5
(Der letzte Teil ist der, der sich üblicherweise mit der Taktrate ändert) -> soweit funktioniert alles

JETZT ABER gibt das VISA Read plötzlich folgendes aus:
0000 AEE9 4E54 0013 052B 0D00 001 6062 0000 0000 049B FF
Der Header stimmt nichtmehr, sodass meine Positionsantwort eine null ergibt. Insgesamt sieht die Antwort verschoben aus.
Ich habe bereits versucht die Zeit zwischen VISA Write und VISA Read zu verlängern, jedoch ohne erfolg. Die Taktrate von 250ms sollte mehr als genug sein um die Schnittstelle nicht zu "überladen".

Kann mir bitte jmd helfen und sagen wie ich diese Fehlantwort umgehen kann?


PS: im VI: das setzen der Konstanten und die Indicator-Array dienten einem anderen Zweck, der hier jetzt nicht so relevant ist.

LG
Markus


RE: CANopen VISA Read liefert unerwartete Antwort - jg - 06.08.2019 16:04

Wie hast du die VISA Schnittstelle beim Öffnen konfiguriert? Hoffentlich ohne Termination Char?

Gruß, Jens


RE: CANopen VISA Read liefert unerwartete Antwort - MarkusS - 07.08.2019 08:12

Hallo Jens,
habe sie nur mit dem COM-Port und der VISA Open Funktion geöffnet. TerminationChar habe ich nicht verwendet


RE: CANopen VISA Read liefert unerwartete Antwort - MarcoN - 07.08.2019 09:33

Hallo ,

wenn du das VI "Configure Serial Port" benutzt dann steht der TermChar aber standardmäßig auf True.


RE: CANopen VISA Read liefert unerwartete Antwort - MarkusS - 07.08.2019 10:35

Hallo Marco,

Zitat:wenn du das VI "Configure Serial Port" benutzt dann steht der TermChar aber standardmäßig auf True.
Das stimmt. Ich verwende zum öffnen der Schnittstelle jedoch lediglich das VISA "Open" VI.
Ich habe das mal in den Anhang gepackt.


Folgendes konnte ich herausfinden:

-das "write" funktioniert einwandfrei, der Header/Register etc. wird richtig überliefert
-Antwortstring aus der "read" Funktion sieht üblicherweise aus wie die 3. Zeile (siehe Bild2 im Anhang) -> die Position des Motors liegt dabei im Abschnitt 4 (rote Zahl)

-die flasche bzw falsch interpretierte Antwort (Bsp. 2. Zeile) liefert den String in einer veränderten Reihenfolge jedoch mit allen Informationen, nur leicht verschoben

Die graphische Darstellung der Stringlänge über der Zeit zeigte mir, dass ein String nur mit 18 anstatt 23 Zeichen gelesen wurde. Der Grund ist mir nicht bekannt.
Ich werde versuchen nach dem lesen den String direkt zu prüfen auf seine Länge und bei einer Länge von weniger als 23 Zeichen diesen Ergebnisstring zu überspringen.

Für weitere Anregungen bin ich gerne offen, ich weiß nicht, ob diese Methode zielführend ist

LG Markus


RE: CANopen VISA Read liefert unerwartete Antwort - GerdW - 07.08.2019 10:53

Hallo Markus,

Zitat:Ich verwende zum öffnen der Schnittstelle jedoch lediglich das VISA "Open" VI.
Dann verwende doch mal ConfigureSerialPort - und stelle das TermChar explizit aus AUS!


RE: CANopen VISA Read liefert unerwartete Antwort - jg - 07.08.2019 10:55

Schreiben-Lesen läuft auch nicht aus Versehen irgendwo parallel in deinem Programm? Auf einer RS485-Leitung kann immer nur einer senden, da kann bei Parallelaufrufen schon was schief laufen!

Gruß, Jens


RE: CANopen VISA Read liefert unerwartete Antwort - MarkusS - 07.08.2019 11:21

@Gerd
Hallo Gerd,
Zitat:Dann verwende doch mal ConfigureSerialPort - und stelle das TermChar explizit aus AUS!
Das werde ich mal so ausprobieren, danke.


@Jens
Zitat:Schreiben-Lesen läuft auch nicht aus Versehen irgendwo parallel in deinem Programm? Auf einer RS485-Leitung kann immer nur einer senden, da kann bei Parallelaufrufen schon was schief laufen!
Über diese Thematik bin ich schon mal vorher gestolpert und habe meine Sache daraus gelernt Big Grin
Ich habe extra Acht gegeben, dass entweder gelesen oder geschrieben wird.


RE: CANopen VISA Read liefert unerwartete Antwort - GerdW - 09.08.2019 10:51

Hallo Markus,

Crosslinks bitte immer selbst bekannt geben!

Zum dort geposteten VI:
- TimedWhileLoops sollte man nicht unter Windows benutzen. Normale Loops mit Wartezeit reichen aus!
- Wozu bitte eine TWL mit 1kHz Iterationsrate, wenn darin dann mehrfach für 1ms gewartet wird? Was soll das bringen???
- Viel zu viele lokale Variablen…
- Viel zu großes Blockdiagramm!
- keine Projekt-Datei…


RE: CANopen VISA Read liefert unerwartete Antwort - MarkusS - 09.08.2019 12:21

Hallo Gerd,

danke für deine Verbesserungsvorschläge.

Zitat:Crosslinks bitte immer selbst bekannt geben!
das mit dem Crosslink wusste ich nicht. Werde das in Zukunft natürlich angeben!

Zitat:- TimedWhileLoops sollte man nicht unter Windows benutzen. Normale Loops mit Wartezeit reichen aus!
- Wozu bitte eine TWL mit 1kHz Iterationsrate, wenn darin dann mehrfach für 1ms gewartet wird? Was soll das bringen???
Mit der TWL gebe ich dir recht, das ist an der Stelle Unsinn. Gint es einen Grund dafür, dass man TWLs unter WIN vermeiden sollte?

Zitat:- Viel zu viele lokale Variablen…
Hättest du weiterhin einen Tipp, wie ich die lokalen Variablen vermeiden bzw verringern kann?

Zitat:- keine Projekt-Datei…
Da das diese VI auch nur ein Sub-VI werden soll, und ich gerade an den Basics "rumdoktore" habe ich noch kein Projekt dazu angelegt, sollte ich aber der Übersichtlichkeit halber tun ebenso wie das Blockdiagramm anpassen.


Kann meine VISA Read Problem an einem (oder mehreren) deiner hier aufgeführten Punkte liegen? Trotz des schlecht organisierten VIs arbeitet der PC vermutlich immer noch schneller als die Steuerung (Support meinte 1ms Taktrate). Oder fehlt mir da gerade ein Zusammenhang?

LG
Markus