easy-forum
Deutsch - Hardware => easyE4 => Thema gestartet von: Illucens am Juli 20, 2022, 14:12:06 Nachmittag
-
Liebe Community,
in den meisten meiner Programme taucht das Problem nicht auf, in einem aber schon:
In den Datenlogs erscheinen negative Werte, ohne dass ich nachvollziehen kann weshalb.
Hier der Funktionsbaustein (Programmiersprache ST):
MD131 := IA01/4+1024*IA02/4+1024*128*QA05;
MD132 := IA03/4+1024*IA04/4+1024*128*QA06;
MD133 := IA05/4+1024*IA06/4+1024*128*QA07;
DL01 (
EN := TRUE,
T1 := M01, // jede Minute
T2 := Q22, // Ampel Nursery
T3 := Q04, // Ampel Puppenstube A2
T4 := Q03, // Ampel C5
I1 := IA01/4+1024*IA02/4+1024*128*QA05, // 128=1024/8 um Vorzeichenwechsel zu vermeiden
I2 := MD132,
I3 := MD133,
I4 := MW7,
RY => ,
BY => M02, // Warnung, dass loggen nicht möglich
E1 => M03 // Warnung, dass keine SD-Karte vorhanden
);
Das Ergebnis sieht z.B. so aus:
Counter;Date;Time;Time (ms);DL01T1;DL01T2;DL01T3;DL01T4;DL01I1;DL01I2;DL01I3;DL01I4
00000000;18.05.2022;08:51:05;005;1;0;0;0;108105133;108082698;108084714;0
00000001;18.05.2022;08:52:05;004;1;0;0;0;108101558;108083974;108084971;0
00000002;18.05.2022;08:53:05;000;1;0;0;0;108105138;108085510;108084970;0
00000003;18.05.2022;08:54:05;002;1;0;0;0;108104895;108086532;108084711;0
00000004;18.05.2022;08:55:05;005;1;0;0;0;108104913;108088068;108084709;0
00000005;18.05.2022;08:56:05;006;1;0;0;0;108105430;108089348;108084710;0
00000006;18.05.2022;08:57:05;000;1;0;0;0;108105440;108090884;108084709;0
00000007;18.05.2022;08:58:05;003;1;0;0;0;108105396;-4760583;108084708;0
00000008;18.05.2022;08:59:05;006;1;0;0;0;108105688;-4759308;108084451;0
00000009;18.05.2022;09:00:05;008;1;0;0;0;108105142;-4759059;108084449;0
00000010;18.05.2022;09:01:05;000;1;0;0;0;108104869;-4760344;108084704;0
Der naheliegende Gedanke wäre, dass es einen Vorzeichenwechsel gab, weil die Zahl zu groß geworden ist. Die Zahl kann aber maximal 2^30 groß werden, die oberen beiden Bits werden nicht verwendet.
Durch den Vorzeichenwechsel kann ich die Daten nicht wieder auseinander rechnen.
Was könnte hier passiert sein und vor allem, wie kann ich das verhindern? (Natürlich müssen alle 9 Parameter geloggt werden).
Besten Dank,
Justus
-
Hallo.
Sie können angeben, wie QA6 gebildet wird, denn wenn Sie -45 benötigen, wird Ihr Wert erhalten.
Fotos werden angezeigt.
-
Vielen Dank, dron.ard72,
für die Antwort. QA06 ist ein Analogausgang, parametriert mit 0-10V.
Nach meinem Verständnis kann der keine negativen Werte annehmen.
QA06 wird wie folgt geschrieben:
QA06 := MW102; // Ventilator (analog)
Der Wert für MW102 wird mit einem Wertbegrenzer aus einem DWord hergestellt.
DC06 (// PID-Regler Ventilator Puppenstube A2
EN := TRUE,
EP := TRUE,
EI := TRUE,
ED := FALSE,// Kein D-Anteil
SE := (MD103 > MD113 + 80), // Übersteuern wenn Temperatur zu hoch
I1 := MD112, // Sollwert
I2 := MD102, // Istwert
KP := 200, // Verstärkung Proportionalglied 100 entspricht 1
TN := 6000, // I-Anteil 10 min = 600 s, schneller führt zu Overshoot
TV := ,
TC := 10,
MV := -4095, // negatives Vorzeichen, siehe VC02
LI => ,
QV => MD202,
QP => ,
QI => ,
QD =>
);
VC02 ( // Min/Max Lüfterdrehzahl Puppenstube
EN := TRUE,
I1 := -MD202,
SH := MW113, //
SL := MW112, //
QV => MW102 // Zuluftventilator
);
Der PID-Regler ist tatsächlich vorzeichenbehaftet, da der Ventilator hoch drehen soll, wenn der Sollwert unter dem Istwert liegt und nicht schwächer werden. (BIP-Logik).
MW113 und MW112 sind wiederum rein positive Werte (denke ich zumindest).
Habe ich hier einen Fehler?
Fröhliche Grüße,
Justus
-
Danke Justus für die Klarstellung.
Ich habe noch eine Frage.
Was ist der maximale Wert der Wörter MW113, MW112 und MW102?
Achten Sie auf das Bild.
Der analoge Ausgang hat 12 Bit, aber das ihm zugeordnete QA06-Register hat 16 Bit. dh dem Wort MW102 kann der Wert 65500 zugewiesen werden, dann MD112=-4718592
Fröhliche Grüsse,
Andreas
-
Noch eine Frage.
Ist es möglich, den Wert der IA- und QA-Register einzufrieren, wenn das MD132-Doppelwort beim Schreiben ins Protokoll negativ wird?
Zum Beispiel :
IF MD132<0 THEN
MD210=IA03;
MD211=IA04;
MD212=QA06;
END_IF;
Und zeigen Sie eine Nachricht auf dem Bildschirm EASY
-
Danke, Andreas,
für die spannende Antwort. Hardware-nahe Programmierung hat ganz überraschende Tücken. Ich werde in Zukunft für solche Fragen immer alle Ein- und Ausgänge erst auf Wordmerker schreiben, dann bin ich mir sicher, dass die Werte nur von 0..4095 gehen können.
Fröhliche Grüße,
Justus