LabVIEWForum.de - Steureung eines Temperaturreglers

LabVIEWForum.de

Normale Version: Steureung eines Temperaturreglers
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
huhu leute,

ich arbeite erst seit ein-einhalb wochen mit lv. und da ergeben sich, wie sich das für einen
anfänger gehört, haufenweise probleme.
ich soll hier einen temperaturregler über die serielle schnittstelle ansteuern. ihm also einen sollwert übergeben dann die ist-werte abfragen ( z.b. alle 20 sec.) wenn dann der ist-wert gleich soll-wert ist wird eine messung gestartet. danach wiederholt sich ganze mit einer einer anderen vorgeben temperatur usw.
habe jetzt geschaft das der regler mit mir "spricht" ich gebe also z.b den string: @00201030070*r ein danach springt der sollwert auf 30 °C
(der befehl schlüsselt sich auf in @ dann 00 = baugruppe, 2 = befehlstyp (wobei 2 für Speichern steht) 01 = befehlscode (soll-wert) 0300 = daten (hier = 30,0 °C) , die 70 ist der FCS (framecheck) dann noch der * und ein CR). als antwort bekome ich dann das gleiche als bestätigung zurück. schicke ich nun den befehl zum ist-wert abfragen,bekomme ich sofern die 30 °C sind erreicht sind @0010000030072* vom regler gemeldet (sind die 30°C nicht erreicht den jeweiligen temperaturwert + den dazugehörigen fcs). das ganze funktioniert auch wenn ich jeden wert oder die abfrage von hand eingebe. ich möchte das aber nun automatisiern und habe mir das vom prinzip so gedacht, dass ich die befehle für die sollwerte (30-150°C ) in ein array schreibe. da ich die antworten der ist-wert abfrage incl. fcs bei erreichtem ist-wert weiß, wollte ich diese auch in einen array scheiben. dann müßte in z.b. 20 sec. eine ist wert abfrage erfolgen ist nun die antwort der ist-wert abfrage gleich dem wert im array ist die temp. ja erreicht und die messung könnte starten.
leider bekomme ich das mit den arrays irgendwie nicht hin (es hackt schon beim array in den ich die sollwerte eintrage um zu sehen das er automatisch die sollwerte ändert). vielleicht kann mir das ja von euch einer einfach erklären


vielen dank im vorraus für die mühen!!!!

grüsse
hb74
Hallo hb74,

da ich nicht weiß, welche Messungen Du nach Erreichen der jeweils vorgegebenen Temperatur starten möchtest, habe ich in Schreiben_und_Lesen_Reglermit_Array2.vi die rudimentären Ergänzungen vorgenommen, mit denen Deine beabsichtigte Automatik funktionieren sollte.

Die Messungen erfolgen im oben genannten VI, sobald der vom Temperaturregler ausgelesene Temperatur-String gleich dem gesendeten ist. Mit den ins VI eingefügten Kommentaren solltest Du die von mir gemachten Schritte nachvollziehen können.

Die Routinen für die Messungen musst Du noch in den Case "True" einfügen. Smile

Schöne Grüße


BeFu

[attachment=2876]
Hallo hb74,

in Schreiben_und_Lesen_Reglermit_Array3.vi habe ich Enum zur Temperatur-Vorgabe in die While-Schleife gesetzt. So ist die Vorgabe einer neuen Temperatur mit jedem Schleifendurchlauf (hier also ca. alle 20s) möglich.

Eleganter kann man die Temperatur-Vorgabe über ein sogenanntes Shift- (Schiebe-) Register in die Schleife führen, wie in http://www.fu-net.de/projekt_LabVIEW.html gezeigt. Smile

Viele Grüße,

BeFu

[attachment=2877]
hallo befu,

super nett das du dir soviel mühe gemacht hast!!!!!!
vielen vielen dank!!!!!
es ist noch nicht ganz so wie ich es benötige.
ich möchte die temp. nicht immer einstellen müssen sondern sie soll nach den messungen (das wird der nächste teil meiner aufgabe) automatisch auf den nächst höheren wert springen. dazu kommt das ich einen weiteren array mit den antworten der istwert-abfrage, bei den für mich wichtigen temperaturen, einbauen muß. ich kann keinen vergleich mit der antwort auf die sollwert-einstellung machen da die sollwertabfrage und die istwertabfrage (inclusive antwort ) unterschiedlich aussehen.
z.b. sollwert von 30°C einstellen = @00201030070*r (wobei r ein carriage return sein soll) die antwort ist dann @0020100030070* und bedeutet das der sollwert von 30°C eingestellt ist. die istwert-abfrage lautet: 001000000*r die antwort darauf, wenn 30°C erreicht ist, lautet: 00100030072*( bedeutet 30°C sind ist-wert. bei 28 °C würde z.b.: 001000280xx* als antwort da stehen. xx steht für den frame check).
ich weiß jetzt bei allen von mir gesuchten temperaturen die komplette istwert-anwort inclusive frame check. diese müßte ich also in einen weiteren array schreiben und mit diesen dann bei der jeweiligen temperatur den vergleich mit der wirklichen istwert-abfrage machen.
eieiei ich glaube das ist wirklich sehr umständlich geschrieben. aber ich hoffe doch, dass man es verstehen kann.
werde aber versuchen das selbst hinzubekommen!! man will ja auch was lernen! ich gehe aber trozdem mal davon aus, das die ein oder andere frage noch auftauchen wird.

nochmals vielen dank!!!!!!!!!!
grüsse
hb74
Hallo HB74,

das Curriage-Return musst Du mittels String-Konstante an die jeweilige Steuersequenz anhängen. Die so gebildeten Steuer-Strings fügst Du zu einem Array zusammen, aus dem dann mittels Enum gewählt werden kann.

In Schreiben_und_Lesen_Reglermit_Array4.vi habe ich die genannten Änderungen eingefügt.

Nun funzt alles, hoffe ich. Dry

Schöne Grüße


BeFu

[attachment=2878]
Referenz-URLs