SCL Array of STRUC Anfangswerte

emilio20

Well-known member
Beiträge
831
Punkte Reaktionen
20
Zuviel Werbung?
->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.



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
 

Thomas_v2.1

Well-known member
Beiträge
8.818
Punkte Reaktionen
2.703
Zuviel Werbung?
->Hier kostenlos registrieren
Intitialwerte lassen sich bei Strukturen nicht vorgeben.
Du kannst aber beim Erzeugen des Instanz-DBs zumindest die Aktualwerte vorgeben.

Code:
DATA_BLOCK DI_TEXT_SPRECHANLAGE_LCD TEXT_SPRECHANLAGE_LCD

BEGIN
    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:='   *';
END_DATA_BLOCK
 
Oben