Alepre93 Inserito: 17 febbraio 2020 Segnala Inserito: 17 febbraio 2020 Ciao a tutti, volevo chiedervi una cosa, per voi mostri programmatori, molto semplice. come posso trasformare una variabile tempo che prendo dal mio HMI cioè anno mese e giorno in una stringa da otto caratteri ? Mi spiego meglio io dovrei mettere l’anno il mese e il giorno in una stringa da otto caratteri per esempio “20100522” come posso fare?
pigroplc Inserita: 17 febbraio 2020 Segnala Inserita: 17 febbraio 2020 con le funzioni di conversione. Ora non ho sottomano un TIA ma al massimo converti da duale a BCD quindi mascheri con 30hex e ottieni il carattere numerico in formato ASCII. Se vuoi poi dall'array di caratteri ti componi la stringa.
Alepre93 Inserita: 18 febbraio 2020 Autore Segnala Inserita: 18 febbraio 2020 scusami ma non mastico molto plc, cosa intendi da duale a BCD
pigroplc Inserita: 18 febbraio 2020 Segnala Inserita: 18 febbraio 2020 1 ora fa, Alepre93 ha scritto: cosa intendi da duale a BCD a questa domanda trovi tante risposte in rete di gente più titolata del sottoscritto, quanto alla tua conversione puoi passare direttamente senza troppa fatica: esempio: mioDint:= DINT_TO_CHAR(mioChar) dove mioDint è una parte della data espressa coi numeri e mioChar è la sequenza di 4 caratteri corrispondenti ai numeri.
ifachsoftware Inserita: 19 febbraio 2020 Segnala Inserita: 19 febbraio 2020 (modificato) Lo puoi fare con 2 Fc come indicato : FUNCTION "FcFillCharsLeftDintToString" : String { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT Value : DInt; MaxChars : Int; CharFill : Char; END_VAR VAR_TEMP i : Int; l : Int; tmpString : String; END_VAR BEGIN #tmpString := DINT_TO_STRING(IN := #Value); // Remove Sign #tmpString := RIGHT(IN := #tmpString, L := LEN(#tmpString) - 1); #l := LEN(#tmpString) + 1; FOR #i := #l TO #MaxChars DO #tmpString := CONCAT(IN1 := #CharFill, IN2 := #tmpString); END_FOR; #FcFillCharsLeftDintToString := #tmpString; // Return Converted String END_FUNCTION FUNCTION "FcFormatTimeStamp" : Void { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT D : DInt; M : DInt; Y : DInt; END_VAR VAR_IN_OUT RetString : String; END_VAR VAR_TEMP tmpString : String; tmpStr : String; END_VAR VAR CONSTANT cCharFill : Char := '0'; END_VAR BEGIN #tmpStr := "FcFillCharsLeftDintToString"(Value := #D, MaxChars := 2, CharFill := #cCharFill); #tmpStr := CONCAT(IN1 := #tmpStr, IN2 := "FcFillCharsLeftDintToString"(Value := #M, MaxChars := 2, CharFill := #cCharFill)); #RetString := CONCAT(IN1 := #tmpStr, IN2 := "FcFillCharsLeftDintToString"(Value := #Y, MaxChars := 4, CharFill := #cCharFill)); END_FUNCTION Questo l'esempio , se richiami FcFormatTimeStamp passando come parametri quelli indicati nell'esempio , vedrai in C il risultato della conversione in stringa del tuo dato. Nell'esempio imposto a 2 gli zeri alla sinistra di giorno e mese e 4 per l'anno. Modificato: 19 febbraio 2020 da ifachsoftware
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