Konvertieren in andere Datentypen

Hans_der_Kann`s

Level-1
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,ich habe mit folgendem Problem zu kämpfen: Versuche einen Impuls FB (TP aus der Standard PLC Libary) mit einer Input Variablen Typ BOOL zu füttern und mit der Ausgangsvariablen Typ REAL auszugeben (Analoge Outputkarte 0-10V). Da der FB wohl nur BOOL Typen verwertet, kommt es spätestens bei der Verknüpfung mit meiner Gobalen variablen (typ real) zum konflikt. was auch die fehlermeldung bestätigt. "Fehler 4013: Kann 'BOOL' nicht in 'REAL'konvertieren!"Entweder ich hab was grundlegend nicht verstanden oder ich seh den Trick bei der Sache nicht. Was hat es mit den "Konvertierungen" bei der Eingabehilfe (über F2) aufsich? Wenns hilft, hier mal mein Codeschnipsel (*Deklaration*)FUNCTION_BLOCK LED_TESTVAR_INPUT Button_Mod2:BOOL; Button_Start:BOOL; PlatGrundpos:BOOL; Button_Manuell:BOOL;END_VARVAR_OUTPUT Spule_Kanal1: BOOL;END_VARVAR Impuls:TP; x: INT;END_VAR(*Code*)IF(Button_Mod2 AND PlatGrundpos AND Button_Manuell)THENImpuls(IN:=Button_Start , PT:=T#10s , Q=>Spule_Kanal1 , ET=> );ELSEx:=x+1;END_IF
 
Hallo Hans,

der Baustein TP macht dir aus einem Eingangssignal (hier:Button_Start) einen Puls (hier: Spule_Kanal1) definierter Länge (hier: T#10s). Du musst jetzt nur noch deiner Outputkarte einen Wert zuweisen, wenn Spule _Kanal1 TRUE ist, zb so:
if Spule_Kanal1 then
Analog_Output_Real := 16238 (BEISPIEL! ! !);
else
Analog_Output_Real := 0;
end_if

Gruß SPS-Fuzzi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oh..was ist denn da mit der Formatierung von dem Code passiert...mir erst garnicht aufgefallen, entschuldige mich dafür. gibts ne möglichkeit den irgendwie zu edditieren?

@SPS-Fuzzi
jepp, das war auch schon mein gedanke es so zu machen...ist halt mehr schreibaufwand...und da ich die Konvertierung BOOL_TO_REAL in der Eingabehilfe gefunden habe
wusst ich eben nicht ob da ein Trick gibt.
Aber, für was ist jetzt diese Konvertierung der Datentypen, und wie wendet man sie an?...konnte bisher sonst nirgendwo Infos dazu finden.

Gruß Hans
 
Nehmen wir mal an, ein BOOL könnte die Zustände "0" und "1" annehmen - welchen Wert würde dann der BOOL_TO_REAL dann wohl jeweils auf die Real-Variable schreiben ?
Nach welchen Kriterien sollte der gleiche Befehl, deiner Meinung nach, mögliche andere Zahlenwerte in den Real bringen ?
 
Mir war bisher halt nicht klar wie ich mit einem boolschen wert, von mir aus TRUE, meine analoge Ausgangsspannung von 10V schalten sollte. Mit dem oben aufgeführten Beispiel von SPS-Fuzzi wird ja dann explizit gesagt Analog_Output_Real := 16238 oder eben 10.0V.
Aber ohne Definition wirds auch wohl kaum gehen...meine SPS kann ja vorneweg nicht wissen das z.b 3.4V = FALSE und 5.7V dann TRUE sind
Trotzdem würds mich interessieren für was diese Konvertierungen genau verwendet werden und obs da ein Beispiel gibt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit den BOOL_TO...-Konvertierungen kann man neckische Sachen machen.
Für Dein Beispiel könnte man schreiben
Code:
IF Bool_Var
THEN
   Real_Var:=5.7;
ELSE
   Real_Var:=3.4;
END_IF;
Aber das versteht ja jeder. Schöner ist doch
Code:
Real_Var:=BOOL_TO_SINT(Bool_Var)*2.3+3.4;
Es gibt aber auch sinnvolle Konvertierungen, z. B. ..._TO_STRING. Damit kann man Zahlenwerte einfach in Strings umwandeln, um sie z. B. in eine CSV-Datei zur weiteren Verarbeitung mit Excel zu schreiben. Manchmal kommt man auch in die Verlegenheit, Integer-Typen unterschiedlicher Grösse miteinander verknüpfen oder zuweisen zu müssen. Dazu muss man dann die entsprechenden Konvertierungen verwenden.
 
Zuletzt bearbeitet:
Hallo,
Hans_der_Kann`s schrieb:
jepp, das war auch schon mein gedanke es so zu machen...ist halt mehr schreibaufwand...
Code:
IF Spule_Kanal1 THEN
    Analog_Output_Real := 16238 (*BEISPIEL! ! !*);
ELSE
    Analog_Output_Real := 0;
END_IF
Für solche simplen Auswertungen benutze ich gerne:
Code:
MyReal:=[COLOR=#0000ff]SEL[/COLOR](Impuls.Q,3.4,5.7);
Soll heißen, solange Impuls.Q (Ausgang deines Impuls FBs kann direkt gelesen werden) FALSE ist wird 3.4 in deinen REAL geschrieben und bei TRUE 5.7!
 
Zurück
Oben