Wert von Touch Panel in DB und umwandeln

Benni89

Level-1
Beiträge
153
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe hier ein Touch Panel über Profibus am laufen wo ich einen Sollwert für eine Heizung einstellen möchte

Dafür nutzen ich einen DB

Also der DB hat den anfangswert 150 als INT

dieser wird mir auch im Touch reingeladen und kann ihn dann in +- 5er schritten verändern soweit alles gut =)

nun habe ich den Regelbaustein FB42 der quasi mein touchpanel sollwert mit dem istwert vergleichen soll
Code:
       SP_INT  :=2.000000e+002 // manueller Sollwert
       PV_IN   :=DB2.DBD0         // Istwert
Da der Sollwert ein Real sein muss dachte ich mache das so
Code:
      L     DB3.DBW    0 // INTwert von meinem Touch
      ITD   
      DTR   
      T     DB3.DBW    4 // Ausgabe in REAL
FB42 ändern in
Code:
       SP_INT  :=DB3.DBW4
       PV_IN   :=DB2.DBD0         // Istwert

Leider wird der gewandelte wer nicht im DB eingetragen beobachte ich meine umwandlung macht diese etwas aber in meinem DB3.DBW4 bleibt immer eine 0.0000e000


Hat da eine eine Idee?


Edit:

wenn ich den FB42 nun 200°C vorgebe heißt meine heizung nur bis 195°c eigenltich müsste er doch weiter hochgehen?

Sorry aber ist das erste mal das ich mit so einem baustein arbeite die hilfe über F1 hab ich mir angesehen aber so ganz verstehen zu ich das nicht und in der Berufsschule machen wir sowas momentan nochnicht

Danke
 
Zuletzt bearbeitet:
Code:
L DB3.DBW 0 // INTwert von meinem Touch
ITD 
DTR 
T DB3.DB[COLOR=red][B]D[/B][/COLOR] 4 // Ausgabe in REAL

FB42 ändern in
SP_INT :=DB3.DB[COLOR=red][B]D[/B][/COLOR]4
PV_IN :=DB2.DBD0 // Istwert

Real braucht ein Doppelwort (32bit)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst nicht den Wert von INT nach REAL wandeln und dann im selben Bereich abspeichern, da kann nur Chaos entstehen! Du vermisdcht 2 unterschiedliche Formate!

Warum gibst Du den Wert im TP (und auch im DB) nicht direkt als REAL an und sparst Dir das umwandeln? Dann kannst Du auch direkt in die Variable schreiben!

Oder arbeite mit einem Zwischenspeicher:

L DB3.DBW 0 // INTwert von meinem Touch
ITD
DTR
T MD50 // Ausgabe in REAL

...

FB42 ändern in
SP_INT :=DB3.DBW4
PV_IN :=DB2.DBD0 // Istwert

...

L MD 50
RND
T MD 54

L MD 54
T DB3.DBW 0
 
ich bin für verbesserungsvorschläge offen

wie gesagt mir fehlt dafür etwas die Praxis noch (probiere quasi momentan etwas auf der arbeit rum mit analogwerten und so) da das bei uns in der Berufschule leider nochnicht behandelt wurde
 
Was willst denn wissen, oder wo hängst du?

Code:
  CALL  "CONT_S" , DB421
       COM_RST :=
       LMNR_HS :=
       LMNR_LS :=
       LMNS_ON :=
       LMNUP   :=
       LMNDN   :=
       PVPER_ON:=
       CYCLE   :=
       SP_INT  :=DB3.DBD4
       PV_IN   :=DB2.DBD0
       PV_PER  :=
       GAIN    :=
       TI      :=
       DEADB_W :=
       PV_FAC  :=
       PV_OFF  :=
       PULSE_TM:=
       BREAK_TM:=
       MTR_TM  :=
       DISV    :=
       QLMNUP  :="Patrone hinten an"
       QLMNDN  :=
       PV      :=
       ER      :=
      NOP   0

DB3.DBD4 gibt nun 150 vor (meine Temperatur die ich haben möchte)

DB2.DBD0 gibt mir nun zurück 30 meinetwegen (ist temperatur)

das funktioniert super temperatur steigt also QLMNUP gibt eine "1"

Bis dann DB2.DBD0 145 sagt ab dann hört meine regelung auf bzw regelt halt nicht viel höher

wenn ich 150 haben will, möchte ich die auch haben und nicht 145

hoffe ihr versteht das problem? =)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Berechnungen dieser Art führe ich vorwiegend mit REAL-Werten durch. Zuvor wandle ich die Werte, wenn nicht vorhanden ins REAL-Format und anschließend wieder zurück. Für die REAL-Werte, soweit sie nicht anders benötigt werden, kann man auch gut Lokale TEMP- oder STAT-Variablen nehmen!
 
Du kannst nicht den Wert von INT nach REAL wandeln und dann im selben Bereich abspeichern, da kann nur Chaos entstehen! Du vermisdcht 2 unterschiedliche Formate!

Warum gibst Du den Wert im TP (und auch im DB) nicht direkt als REAL an und sparst Dir das umwandeln? Dann kannst Du auch direkt in die Variable schreiben!

Oder arbeite mit einem Zwischenspeicher:

L DB3.DBW 0 // INTwert von meinem Touch
ITD
DTR
T MD50 // Ausgabe in REAL

...

FB42 ändern in
SP_INT :=DB3.DBW4
PV_IN :=DB2.DBD0 // Istwert

...

L MD 50
RND
T MD 54

L MD 54
T DB3.DBW 0



Wie würde ich das denn Realisieren das im TP direkt einzugeben?

mein EA fenster steht auf Dezimal

muss ich im DB lediglich das INT auf REAL ändern?
 
Wie würde ich das denn Realisieren das im TP direkt einzugeben?

mein EA fenster steht auf Dezimal

muss ich im DB lediglich das INT auf REAL ändern?

Wenn Du den INT (2-Byte-Länge) in REAL (4-Byte-Länge) änderst und noch weitere Folgewerte im DB hast verschieben sich Deine Adressen!

Lösche die Variable aus dem TP / bzw. aktualisiere sie, nachdem Du diese im DB geändert hast, dann weise Deinem Eingabefeld die neue Adresse, bzw. das neue Symbol zu und WinCC erkennt den REAL-Wert.
 
also wenn ich meine vorgabe auf 200 stelle steigt der istwert bis 195 sind also wieder 5° unterschied
Hast du dir den Sollwert mal in der Online Sicht angeschaut?
Stehen da wirklich 200 drin.
Mir kommt das komisch vor wenn du eine Taste hast die +/- 5 macht und dein Istwert genau um diese 5 zu niedrig ist.
 
also mit dem +-5 mein ich

150 "+" stellt er den wert auf 155 wieder "+" auf 160 usw

ja online steht wirklich soll 200 und ist schwankt logischerweise etwas 194,2-195,8 so um den dreh

ab 195 schaltet der ausgang des regler auf "0" und wenn er dann wieder auf 198,8 so gefallen ist regelt er wieder (ausgang "1") aber halt nicht hoch bis 200
 
Zurück
Oben