Autor Thema: Negative Werte im Datenlogger (DL)  (Gelesen 2898 mal)

Offline Illucens

  • Newbie
  • *
  • Beiträge: 7
Negative Werte im Datenlogger (DL)
« 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

Offline dron.ard72

  • Newbie
  • *
  • Beiträge: 6
Antw:Negative Werte im Datenlogger (DL)
« Antwort #1 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.

Offline Illucens

  • Newbie
  • *
  • Beiträge: 7
Antw:Negative Werte im Datenlogger (DL)
« Antwort #2 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

Offline dron.ard72

  • Newbie
  • *
  • Beiträge: 6
Antw:Negative Werte im Datenlogger (DL)
« Antwort #3 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

Offline dron.ard72

  • Newbie
  • *
  • Beiträge: 6
Antw:Negative Werte im Datenlogger (DL)
« Antwort #4 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

Offline Illucens

  • Newbie
  • *
  • Beiträge: 7
Antw:Negative Werte im Datenlogger (DL)
« Antwort #5 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