Vai al contenuto
PLC Forum


Da variabile tempo a stringa


Alepre93

Messaggi consigliati

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?

Link al commento
Condividi su altri siti


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.

Link al commento
Condividi su altri siti

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.

 

Link al commento
Condividi su altri siti

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