Vai al contenuto
PLC Forum


Da variabile tempo a stringa


Messaggi consigliati

Inserito:

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?


Inserita:

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.

Inserita:

scusami ma non mastico molto plc, cosa intendi da duale a BCD

Inserita:
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.

 

Inserita: (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

 

Esempio.PNG.ba6309875cf32601ae722a82d640f853.PNG

 

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: da ifachsoftware

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...