Analogwerte einlesen und vergleichen

Elektrikus

Level-2
Beiträge
202
Reaktionspunkte
19
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe folgende Aufgabe

Ich soll eine Temperatur einlesen (PT100) Und dann den Wert ausgeben (BCD) mit einer Kommerstelle. Der wert soll dann noch mit verglichen werden mit vorgegeben Werten und dann soll halt dafür ein Ausgang geschaltet werden also Temp größer als 10°C = P1.


Ich habe jetzt meinen PT 100 richtig eingelesen, nur ich kann den Wert nicht in BCD wandeln, so das ich Ihn mit eine Kommastelle ausgeben kann.

Ich habe dann ein Problem mit dem Vergleichen wie gebe ich die Temperraturen ein die mit dem Wertden des PT100 vergleichen werden. ?


Hier mal mein Programm



Einlesen PT100

L PEW 288
ITD
DTR
L 1.000000e+001
/R
T MD 10


Hier jetzt der Punk wo ich mir nicht sicher bin ist für die Ausgabe in BCD ich bekomme aber die Kommastelle nicht hin




L MD 10
TRUNC
T MD 20
NOP 0

L MD 20
DTB
T MD 30
NOP 0
 
Hallo,

welche Steuerung "sollst" Du verwenden? An welche Analogeingabe ist der PT100 angeschlossen? Wohin sollst Du den Anzeigewert in BCD ausgeben? Wieviel Ziffern vor dem Komma? Kann die Temperatur auch negativ sein?

Bei S7-Analogeingaben kommt der PT100-Wert normal schon als Ganzzahl mit 1 Nachkommastelle, z.B. -12,3°C oder +98,7°C erhält man als -123 bzw. +987. Das muß nur noch in BCD gewandelt werden und optisch ein Komma eingefügt werden.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wo kommt der Vergleichswert 10°C her? Ist das ein fester Wert im Programm oder soll er in einem HMI eingegeben werden?
Bei Festwert vergleiche einfach mit 100 (für +10,0°C), bei Eingabewert rechne besser in REAL.

Harald
 
Also die Temperatur kann bis max 270,0°C ansteigen. Ich verwende die 6ES7-7KF02-0AB0, ich kann aber auch eine andere Karte verwenden, es ist lediglich ein übungsprojekt, was leider nur mit der Simatic Software simuliert wird. Die Vergleichswerte werden direkt im Programm festgehalten und werden nicht über ein HMI eingeben.
 
Also die Temperatur kann bis max 270,0°C ansteigen. Ich verwende die 6ES7-7KF02-0AB0, ich kann aber auch eine andere Karte verwenden, es ist lediglich ein übungsprojekt, was leider nur mit der Simatic Software simuliert wird. Die Vergleichswerte werden direkt im Programm festgehalten und werden nicht über ein HMI eingeben.


Das eingeben der Vergleichswerte ist mir jetzt auch gelungen


So habe ich es gemacht:

L 160.0
T MD14
L180.0
T MD18

Die Werte dann auf dem Vergleicher und fertig, funktioniert auch.

Ich habe jetzt nur das Problem mit der Darstellung der Temperatur mit einer Komma stelle... wäre dankbar wenn mir dabei jemand helfen könnte
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ganzzahlen und BCD-formatierte Zahlen kennen kein Dezimalkomma (Dezimalpunkt). Das Komma wird einfach nur optisch eingefügt. Die Position des Komma muß nur festgelegt werden.

Um Deine Temperatur mit 3 Stellen vor dem Komma und 1 Nachkommastelle darzustellen, reicht es, einfach eine BCD-Wandlung des Analogwertes zu machen und in einem DWORD abzulegen, weil der Temperaturwert von der AI-Karte schon 1 Nachkommastelle hat.

Du könntest Dir auch vorstellen, daß Du ein 4-Ziffern-BCD-Anzeigemodul an Deine SPS anschließt und die Temperatur darauf anzeigst:
Code:
[COLOR="#0000FF"]4 Ziffern BCD-Anzeigemodul mit Vorzeichen bei Minus und feste Kommastelle für Anzeige -799.9 .. 799.9

A4.7         : Vorzeichen (1 bei Minus, 0 bei Plus oder 0)
A4.4 bis A4.6: Hunderterstelle 0..7 (MSB nicht anschließen)
A4.0 bis A4.3: Zehnerstelle 0..9
A5.4 bis A5.7: Einerstelle 0..9
A5.0 bis A5.3: Nachkommastelle 0..9

A4. 4.  4.   5.   5.
 7  654 3210 7654 3210
 V  HHH ZZZZ EEEE.NNNN[/COLOR]

Code:
//PT100-Wert einlesen
      L     PEW  288            //INT: PT100-Wert in 0.1°C
      ITD
      T     #diTemperatur01     //DINT: Temperaturwert in 0.1°C
      DTR                       //Ganzzahl zu Gleitpunkt
      L     1.000000e+001       //Nachkommastelle normieren
      /R
      T     MD    10            //REAL: Temperatur in °C

//Temperatur in BCD -799.9 .. 799.9 ausgeben
      SET                       //garantiert neue Bitverknüfung beginnen
      L     #diTemperatur01     //DINT: Temperaturwert in 0.1°C
      DTB                       //zu BCD
      T     #dwTemperatur01     //DWORD: Temperaturwert in 0.1°C (BCD)
      T     AW     4            //letzte 4 BCD-Ziffern auf Anzeige ausgeben
      SLD   1                   //Vorzeichen in Statusbit A1 schieben, A0=0 
      U     >0                  //A1 in VKE holen
      =     A      4.7          //Vorzeichen-Ausgang, 1 bei negativ

Statt A4.7 kannst Du auch z.B. A6.0 nehmen, dann läßt sich das Programm besser in einer Variablentabelle beobachten.

Harald
 
Also ich habe mal dein Programm eingegeben und es funktioniert, leider kann ich mir die Temperatur aber noch nicht mit einer Nachkomastelle anzeigen lassen. Wie kann ich es in PLCSIM anzeigen lassen. ?
 
Anzeige mit VAT in PLCSIM mit MW288 (statt PEW288) und A6.0 (statt A4.7) siehe Anhang
Wie gesagt: das Dezimalkomma bei der BCD-Anzeige kannst Du nicht sehen. Es wird nur optisch zwischen der 3. und 4. Ziffer eingefügt (z.B. ein ständig leuchtender Dezimalpunkt).
Temperatur: -123.4°C ---> PT100 ---> PEW288 (dez): -1234 ---> BCD (hex): -1234 ---> Anzeige: -123.4

Harald
 

Anhänge

  • VAT_4BCD.jpg
    VAT_4BCD.jpg
    28,3 KB · Aufrufe: 29
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Verständnissfrage

Code:
//Temperatur in BCD -799.9 .. 799.9 ausgeben
      [COLOR="#FF0000"]SET                       //garantiert neue Bitverknüfung beginnen[/COLOR]
      L     #diTemperatur01     //DINT: Temperaturwert in 0.1°C
      DTB                       //zu BCD
      T     #dwTemperatur01     //DWORD: Temperaturwert in 0.1°C (BCD)
      T     AW     4            //letzte 4 BCD-Ziffern auf Anzeige ausgeben
      [COLOR="#FF0000"]SLD   1                   //Vorzeichen in Statusbit A1 schieben, A0=0 
      U     >0                  //A1 in VKE holen[/COLOR]
      =     A      4.7          //Vorzeichen-Ausgang, 1 bei negativ

Hilfe zu AWL schrieb:
SLD (Schiebe links Doppelwort) schiebt den gesamten Inhalt von AKKU 1 bitweise nach links. In die Bitstellen, die durch das Schieben frei werden, werden Nullen geschrieben. Das zuletzt geschobene Bit wird in das Statusbit A1 geladen.
...
Gilt 0 < Schiebezahl <= 32, werden die Statusbits A0 und OV auf "0" zurückgesetzt.
Es wird nur das eine höchstwertige Bit von #dwTemperatur01 geschoben - das Vorzeichenbit. Es ist danach im Statusbit A1.

"U >0" ergibt VKE=1, wenn A1=1 und A0=0 (*1), allerdings nur bei der ersten Bitverknüpfung, ansonsten verknüpft U mit dem bereits vorhandenen VKE (*3). Weil in dem ganzen Beispielcode von mir keine weitere Bitverknüfung vorkommt bzw. abgeschlossen wird, habe ich die Operation SET eingefügt, welche das Erstabfragebit /ER auf 0 setzt (*2). Damit wird garantiert eine neue Bitverknüpfung begonnen und das "U >0" funktioniert garantiert wie gewünscht. (*1)(*3) Wenn vor dem Code eine Bitverknüpfung mit =/S/R endet und immer bearbeitet wird oder der Code mit SPBx angesprungen wird oder egal wie garantiert /ER=0 ist, dann kann das SET auch entfallen.

(*1) siehe Hilfe zu AWL > Index > Abfragen des Zustands der Bits im Statuswort
(*2) siehe Hilfe zu AWL > Index > SET
(*3) siehe Hilfe zu AWL > Index > Statuswort > /ER Erstabfragebit (Statuswort, Bit 0)

Harald
 
Zurück
Oben