STEU Inserito: 22 giugno 2022 Segnala Share Inserito: 22 giugno 2022 (modificato) 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: 22 giugno 2022 da STEU Link al commento Condividi su altri siti More sharing options...
STEU Inserita: 6 luglio 2022 Autore Segnala Share Inserita: 6 luglio 2022 Soluzione 1 senza split Soluzione 2 con split array di char Per chi interessa Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 9 luglio 2022 Segnala Share Inserita: 9 luglio 2022 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 More sharing options...
TravelMen Inserita: 14 luglio 2022 Segnala Share Inserita: 14 luglio 2022 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: Dimenticavo all'interno del FC c'è questa dichiarazione: Che dice quali siano i caratteri che separano i vari campi. Saluti Link al commento Condividi su altri siti More sharing options...
STEU Inserita: 14 luglio 2022 Autore Segnala Share Inserita: 14 luglio 2022 Interessante anche questa opzione la studierò bene Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora