easy-forum

Deutsch - Hardware => easyE4 => Thema gestartet von: Illucens am Juli 20, 2022, 14:12:06 Nachmittag

Titel: Negative Werte im Datenlogger (DL)
Beitrag 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
Titel: Antw:Negative Werte im Datenlogger (DL)
Beitrag von: dron.ard72 am Juli 22, 2022, 20:18:11 Nachmittag
Hallo.
Sie können angeben, wie QA6 gebildet wird, denn wenn Sie -45 benötigen, wird Ihr Wert erhalten.

Fotos werden angezeigt.
Titel: Antw:Negative Werte im Datenlogger (DL)
Beitrag von: Illucens am Juli 25, 2022, 09:56:56 Vormittag
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
Titel: Antw:Negative Werte im Datenlogger (DL)
Beitrag von: dron.ard72 am Juli 25, 2022, 16:20:36 Nachmittag
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
Titel: Antw:Negative Werte im Datenlogger (DL)
Beitrag von: dron.ard72 am Juli 26, 2022, 09:21:50 Vormittag
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
Titel: Antw:Negative Werte im Datenlogger (DL)
Beitrag von: Illucens am August 30, 2022, 17:07:48 Nachmittag
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