emilio20
Well-known member
- Beiträge
- 835
- Punkte Reaktionen
- 20
-> Hier kostenlos registrieren
Hallo
bin grade dabei einen Baustein zu erstellen der Texte an ein Arduino zu Sendet, für ein LCD Display
Ich möchte die (rot) markierten Texte als Anfangswerte in das (blau) Array of STRUCT als Anfangswerte schreiben.
bin grade dabei einen Baustein zu erstellen der Texte an ein Arduino zu Sendet, für ein LCD Display
Ich möchte die (rot) markierten Texte als Anfangswerte in das (blau) Array of STRUCT als Anfangswerte schreiben.
Code:
FUNCTION_BLOCK TEXT_SPRECHANLAGE_LCD
VAR_INPUT
CODE_OK: BOOL;
CODE_FALSCH: BOOL;
CODE_EINGABE: BOOL;
SONDERFUNKTION_EIN: BOOL;
ZAHL_TASTATUR: INT;
ECHO_CHAR :ARRAY[0..31] OF CHAR;
END_VAR
VAR_OUTPUT
SENDE_TEXT :ARRAY[0..31] OF CHAR;
SENDEN :BOOL;
END_VAR
VAR_TEMP
i :INT;
i2 :INT;
i3 :INT;
textNr :INT;
Anfang :INT;
RETVAL :INT;
END_VAR
VAR
[COLOR=#0000cd]TEXTE:ARRAY[0..20] OF STRUCT // MAX mögliche Texte von 20.
ZEILE1 :STRING[16];
ZEILE2 :STRING[16];
END_STRUCT ; [/COLOR]
TEXT_HMI_EIN :BOOL;
TEXT_LCD :STRING[32];
atTEXT_LCD_BY AT TEXT_LCD:ARRAY[0..33] OF BYTE;
atTEXT_LCD_CH AT TEXT_LCD:ARRAY[0..33] OF CHAR;
END_VAR
[COLOR=#ff0000]/// TEXTE Hinterlegen
TEXTE[0].ZEILE1:=' ';
TEXTE[1].ZEILE1:=' CODE OK ';
TEXTE[2].ZEILE1:=' CODE FALSCH ';
TEXTE[3].ZEILE1:='SONDERFUNKTION ';
TEXTE[4].ZEILE1:='1=TOR klein AUF ';
TEXTE[4].ZEILE2:='3=TOR gross AUF ';
TEXTE[5].ZEILE1:='5=Hoflicht EIN ';
TEXTE[5].ZEILE2:='0=Alarmanlag EIN';
TEXTE[6].ZEILE1:='Straße';
TEXTE[6].ZEILE2:='HausNr. ';
TEXTE[7].ZEILE1:=' CODE EINGABE ';
TEXTE[7].ZEILE2:=' *';[/COLOR]
BEGIN
(*****************************************************************************************************************************************************)
IF CODE_OK THEN
textNr:=1;
ELSIF CODE_FALSCH THEN
textNr:=2;
ELSIF SONDERFUNKTION_EIN THEN
textNr:=4;
ELSIF TEXT_HMI_EIN THEN
textNr:=20;
ELSE
textNr:=6;
END_IF;
/// TEXT zusammensetzen
TEXT_LCD:= CONCAT( in1 := TEXTE[textNr].ZEILE1,
in2 := TEXTE[textNr].ZEILE2);
// String mit Leehrzeichen auffüllen wenn nicht komplett gefüllt
Anfang:=BYTE_TO_INT (atTEXT_LCD_BY[1]);
FOR i := Anfang TO 31 DO
atTEXT_LCD_CH[i+2]:=' ';
END_FOR;
// STRING in CHAR
FOR i2 := 0 TO 31 DO
SENDE_TEXT[i2]:=atTEXT_LCD_CH[i2+2];
END_FOR;
// SENDEN TRUE wenn ECHO ungleich SENDEN_TEXT
FOR i3 := 0 TO 31 DO
SENDEN:=SENDE_TEXT[i3]<>ECHO_CHAR[i3] ;
IF SENDEN=TRUE THEN
EXIT;
END_IF;
END_FOR;
;
END_FUNCTION_BLOCK