LabVIEWForum.de
Motorregelung - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Motorregelung (/Thread-Motorregelung)



Motorregelung - Daerstofer - 17.12.2010 08:06

ich habe die Aufgabe eine Positionierregelung mit LV zu betreiben, als Motor wird ein Faulhaber DC Motor 2224 mit Motion Controller MCDC 3006 verwendet, die Kommunikation erfolgt über RS232. Die Taktzeit für die Sollwertvorgabe bzw. Istwert abfrage soll bei ca. 0,25s liegen. Das Programm läuft soweit, wenn ich jedoch die Zeiten in der Schleife verkürze habe ich keine Kommunikation mehr! kann mir jemand bei diesem Problem helfen, oder hat jemand Erfahrung mit Faulhaber und LV ?
Klaus


Motorregelung - Y-P - 17.12.2010 08:19

:offtopic2:Bitte Profil_ergaenzen. Da steht noch LabVIEW 7.1.

Gruß Markus


Motorregelung - GerdW - 17.12.2010 09:09

Hallo Klaus,

du hast deinen COM-Port mit 9600baud konfiguriert!
D.h. pro Byte/Zeichen musst du ca. 1ms nur für die reine Übertragung veranschlagen. Jetzt zähl mal zusammen, wieviele Bytes da jeweils übertragen werden und wieviel Zeit das benötigt...

Noch was:
- Überall, wo rote Punkte an des Anschlüssen auftauchen, hast du den falschen Datentyp verwendet.
- Deine Sequenzen wären bei Benutzung des Errorclusters unnötig.
- Eine StackedSequence mit 11 Frames ist schon grenzwertig...
- Man kann auch einen Draht verwenden, statt gefühlte 20mal die VISA-Konstante "COM1"!
- Wenn deine zu lesenden Geräteantworten eine bekannte Länge (oder ein schönes Endezeichen) aufweisen, kannst du auf Wartezeiten und "BytesAtPort" verzichten und die VISA-Read-Funktion stattdessen auf die Bytes warten lassen...


Motorregelung - Lucki - 17.12.2010 10:11

Was mir bei flüchtiger Betrachtung zu dem was GerdW schon bemerkt hat noch auffällt:
Die hast in der PortKonfig Termend (x0A) konfiguriert, benutzt es aber nicht. Die Wartezeiten und "Bytes on Board", es würde alles überflüssig.
Beim Senden schließt Du einen String aber nicht mit x0A ab, sondern mit x0D. Was denn nun? Wenn der Controller x0D als Abschlußzeichen braucht, dann wird er seinerseit auch die Strings mit diesem Abschlußzeichen senden.
Also: Mache Dich schlau, welches Abschlußzeichen (x0D oder x0A) der Controller sendet und nutze es zur Daten-Steuerung!
Warten auf soundsoviel Bytes, Warten eine bestimmte Zeit vor Empfang und dann Bestimmen das Anzahl bytes im Buffer - das ist alles Shit im Vergleich zur Datensteuerung mit einem Abschlußzeichen. Das ist ein Notbehelf für den Fall, daß der Controller seine Strings ohne Abschlußzeichen sendet.