Hallo liebe Forumsgemeinde,
als Einleitung:
Ich bin relativ frisch in der Materie und habe schon etwas im Forum quer gelesen, um Anregungen zu finden, wie man ein vernünftiges Programm aufbaut.
Als Anwendung habe ich für meine Bachelor-Thesis (Fachrichtung Maschinenbau) einen Prüfstand aufgebaut, der zyklisch rein schwellend eine Bolzen-Gelenkverbindung belastet. Ohne jetzt näher darauf einzugehen, muss dennoch erwähnt werden, dass am langen Ende eine Kraft mit einem HBM C2 Kraftaufnehmer gemessen wird, dessen Signal geht in ein QuantumX MX840A. Isochron dazu läuft ein QuantumX MX878, um ein 4/2-Wegeventil anzusteuern.
In dem VI (und diversen SubVIs...) wird die gemessene Kraft mit einer einstellbaren Ober- und Untergrenze verglichen, das ganze läuft dann im Prinzip im Zweipunkt-Regler-Betrieb.
Mein PC kommuniziert über Ethernet und einem Switch mit den Messverstärkern. Ich habe dafür die von HBM mitgelieferten Beispiel-VIs QX_GetAllMeasVals.vi zum Messen und QX_ConfigAnalogOutChannel.vi. verwendet - und natürlich diverse andere zum Verbindungsaufbau etc.
Ehrlich gesagt weiß ich gerade nicht, was ich jetzt alles beschreiben soll, ohne mit sinnlosen Infos alles zu überfluten. Wenn was essenzielles fehlt, bitte einfach kurz ein Stichwort nennen ;-).
Ich hänge alle VIs natürlich an.
Nun aber zu meinem eigentlichen Problem. Die Dauer für eine Schleife innerhalb des VIs beträgt mindestens 12ms. Hinzu kommt, dass das Programm mindestens 3 Schleifenumläufe braucht, um eine gewünschte Reaktion zu zeigen. Ich habe das einmal an Hand dieses nachfolgenden Bildes zu verdeutlichen versucht. Im oberen Teil der gemessene Kraftverlauf, die horizontalen Linien zeigen die angestrebten Hysteresegrenzen. Im unteren Teil ist einmal die gemessene Ventilposition (grau) und, was hier das eigenartigste ist, die Variabel, die im Programm die Ventilposition steuern soll. Und eben diese bleibt mehrere Schleifendurchläufe auf ihrem "alten" Wert stehen, obwohl sie schon längst umspringen sollte. Auf der x-Achse ist die Zeit in ms aufgetragen.
Wie kann das sein?
Zu der Schleifendauer: sicherlich gibt meine Programmstruktur Raum für Optimierung ;-). Ich habe schon viel geändert (ich habe mit 30ms angefangen...), meine fehlende Erfahrung ist da sicherlich ein Problem. Hier im Forum habe ich die goldene Regel gelesen a la "passt dein Programm nicht auf den Bildschirm, ist es zu groß". Daran muss ich definitiv noch immens arbeiten! Das würde sicherlich einiges an Übersichtlichkeit mit sich bringen... Dass das bisher noch nicht passiert ist, dafür entschuldige ich mich bei allen, die sich das anschauen...
![Sad Sad](images/smilies/sad.gif)
Zum Anderen habe ich leider keine Ahnung, was genau ich entfernen sollte, was also Perfomance-Einbußen mit sich bringt, und was ruhig drin bleiben kann. Beispielsweise habe ich eben einmal im "obersten" VI alles entfernt, was nicht unbedingt notwendig ist - ohne erkennbaren Mehrwert.
Fällt euch vielleicht auf einen Blick etwas auf, was möglichst zu unterlassen wäre, wenn man schnell arbeitende Programme haben möchte?
Letztendlich, damit mein Programm für meine Anwendung brauchbar ist, bräuchte ich eine Schleifendauer von ~1ms.
Ich habe einmal Spaßes halber ein kleines Programm geschrieben, was einfach nur eine Schleife hat, worin bis 30.000.000 gezählt wird. Das dauert etwa 1ms...
Großen Einfluss auf die Schleifendauer, das habe ich bereits ausgeklügelt, ist die Messrate der Messverstärker. Gibt es andere Aspekte, die euch pauschal auffallen?
Über eine Antwort würde ich mich sehr freuen! Ich bemühe mich, so viele Infos nachzuliefern, sofern gewünscht!
Edit jg: VI-Anhang auf Wunsch der M.K.D. gelöscht.