Vai al contenuto
PLC Forum


Istuzione SPLIT Tia 17


STEU

Messaggi consigliati

Buongiorno

 

Nella configurazione del mio PLC c'è una scheda seriale collegata ad uno strumento che mi da dei dati su una stringa

i dati sono distanziati da uno spazio, secondo la seguente formattazione

 

A XXXXXX XXXXXX XXXXX XXXXX XXXXXX XXXXX

 

vorrei splittare utilizzando lo spazio come separatore, con l'istruzione split appunto, la stringa in un array di stringhe, ma non riesco a parametrizzare ( e quindi a capire) l' FC .

Qualcuno sa spiegarmi come fare? L' H_elp in linea non è esaustivo

Modificato: da STEU
Link al commento
Condividi su altri siti

  • 2 weeks later...

ifachsoftware

Non capisco il perchè hai aggiunto nel secondo esempio il CTU ; in teoria essendo un FC dovrebbe essere eseguito il tutto in un unico ciclo

Link al commento
Condividi su altri siti

Ciao STEU

io il tuo problema l'ho risolto così:

          FOR #_Char := #RECIVE_FirstElement TO #RECIVE_LastElemet DO    // Ciclo for dal primo caratteri all'ultimo carattere ricevuto
                IF #BARCODE_RECIVED[#_Char] = '$R' OR #BARCODE_RECIVED[#_Char] = '$L' OR #BARCODE_RECIVED[#_Char] = '$r' OR #BARCODE_RECIVED[#_Char] = '$l' THEN  // Se il carattere nel barcode è un ritorno a capo esco dal ciclo for
                    #END_DECODE := TRUE;   // Esco dal loop se trovo o un cattere di fine come ritorno a CR o LF
                END_IF;
                IF #BARCODE_RECIVED[#_Char] <> #Separator1 AND #BARCODE_RECIVED[#_Char] <> #Separator2 AND #BARCODE_RECIVED[#_Char] <> #Separator3 AND NOT(#END_DECODE) THEN
                    #add_Char := Serialize(SRC_VARIABLE := #BARCODE_RECIVED[#_Char], DEST_ARRAY => #CHAR_DECODE, POS := #_CountChar);   // Aggiunta del carattere ricevuto per decodificarlo
                    IF #BARCODE_RECIVED[#_Char] = ',' THEN
                        #_FormatOfNumber := w#16#0001; // Numero decimale separato da , (virgola)
                    END_IF;
                ELSE
                    IF #CONFIGURATION[#_Field].ENABLE AND (#CONFIGURATION[#_Field].LENGHT >= #_CountChar) AND (#_CountChar >= 1) THEN
                        Chars_TO_Strg(Chars := #CHAR_DECODE,
                                      pChars := 0,
                                      Cnt := #_CountChar,
                                      Strg => #DECODE[#_Field]."STRING");
                        
                        IF #CONFIGURATION[#_Field].IS_NUMBER THEN // Se il campo deve essere interpretato come numero lo converto
                            STRG_VAL(IN := #DECODE[#_Field]."STRING",
                                     FORMAT := #_FormatOfNumber,
                                     P := 1,
                                     OUT => #DECODE[#_Field].NUMBER);
                        END_IF;
                        #_Field += 1;   // Incremento il numero del campo da decodificare
                        #_CountChar := 0;   // ReInizializzo il numero dei caratteri estrapolati per la decodifica
                        #_FormatOfNumber := w#16#0000; // Usato nella funzione di conversione della stringa in valore reale se il separore delle unità è un punto oppure una virgola
                        IF #_Field > #DECOD_LastElemet OR #END_DECODE THEN // Se il numero del capo eccede il numero massimo di campi nell'array esco dal ciclo for di decodifica
                            EXIT;
                        END_IF;
                    ELSE        // <= se c'è stato un errore nella scrittura del campo viene dato errore e la funzione viene terminata
                        #CONFIGURATION_ERROR := TRUE;
                        EXIT;
                    END_IF;
                END_IF;
            END_FOR;                // <= Fine ciclo for di decodifica

Questo FC lo uso per decodificare una array di caratteri ricevuti da un lettore di codici a a barre, mediante un DB di configurazione che dice come quanti suddivisioni ci sono che è questo:

image.png.0e2766200b11f135bb266cd36e968896.png

 

Dimenticavo all'interno del FC c'è questa dichiarazione:

image.png.19244e8348136227073636ebb44e05ce.png

 

Che dice quali siano i caratteri che separano i vari campi.

Saluti

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...