ifachsoftware Inserito: 29 novembre 2019 Segnala Share Inserito: 29 novembre 2019 Buongiorno , viste le recenti discussioni circa al TON di Siemens , ho realizzato il seguente FB che potrebbe sostituire il TON di Siemens aggiungendo le seguenti caratteristiche : 1) Su fronte di salita l'Enable inizializza il conteggio ed inizia a contare 2) Cambiando il Set Value (Sv) lo prende anche se è già partito a contare 2) Oltre all'ET (Elapsed Time) riporta il TIME_LEFT (ossia il count down per l'attivazione dell'uscita Q) Lo condivido pensando di fare cosa gradita. Se avete dei suggerimenti per migliorarlo sono bene accetti. Link al commento Condividi su altri siti More sharing options...
MatteoR11 Inserita: 29 novembre 2019 Segnala Share Inserita: 29 novembre 2019 Molto gentile da parte tua, lo proverò appena possibile. Grazie Link al commento Condividi su altri siti More sharing options...
STEU Inserita: 29 novembre 2019 Segnala Share Inserita: 29 novembre 2019 (modificato) Lo proverò Modificato: 29 novembre 2019 da STEU Link al commento Condividi su altri siti More sharing options...
batta Inserita: 30 novembre 2019 Segnala Share Inserita: 30 novembre 2019 E pensare che se, dopo 2147483647, anziché ripartire da zero il conteggio fosse continuato passando a -2147483648 (Dint con segno), non ci sarebbe nemmeno stato bisogno di gestire l'overflow. Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 30 novembre 2019 Segnala Share Inserita: 30 novembre 2019 Il 29/11/2019 alle 10:25 , ifachsoftware ha scritto: Lo condivido pensando di fare cosa gradita. Settimana prossima lo provo di sicuro, per mia comodità, tutto in SCL. Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 3 dicembre 2019 Segnala Share Inserita: 3 dicembre 2019 @ifachsoftware mi sono permesso di aggiungere una funzione al tuo prezioso codice in modo da discriminare il timer che tiene il tempo in memoria se si toglie l'abilitazione prima dello scadere. Quando scade il tempo il flag si azzera e per far ripartire basta ridare i bit di enable e ritenzione. FUNCTION_BLOCK "FbTON_Tck" { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT Enable : Bool; // Timer start enable Sv : Time; // Delay END_VAR VAR_OUTPUT Q : Bool; // Output TimeLeft : Time; // Time left ET : Time; // Elapsed time END_VAR VAR_IN_OUT TimeRetain : Bool; // 0=timer restart 1=timer hold on last elapsed END_VAR VAR LastTck : Time; CurrTck : Time; Increments : Time; PvTime : Time; TmpDifu : Bool; rtTimerStart {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : R_TRIG; rtTimerStop {InstructionName := 'R_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : R_TRIG; END_VAR VAR CONSTANT cMaxTcks : Time := T#24D_20H_31M_23S_647MS; // Max Ticks supported END_VAR BEGIN REGION Handle increments (* leggi ora di sistema (solo per 1500) *) #CurrTck := TIME_TCK(); IF #Enable THEN IF #LastTck > #CurrTck THEN #Increments := (#cMaxTcks - #LastTck) + #CurrTck; ELSE #Increments := #CurrTck - #LastTck; END_IF; ELSE #LastTck := #CurrTck; #Increments := T#0ms; END_IF; END_REGION REGION Handle Timer #rtTimerStart(CLK := #Enable); IF #rtTimerStart.Q AND NOT #TimeRetain THEN #PvTime := t#0ms; END_IF; #rtTimerStop(CLK :=NOT #Enable AND #Q); IF #rtTimerStop.Q THEN #PvTime := t#0ms; END_IF; #LastTck := #CurrTck; // save last Tck END_REGION REGION Output IF #Enable THEN IF #PvTime < #Sv THEN #PvTime := #PvTime + #Increments; IF #PvTime > #Sv THEN #PvTime := #Sv; END_IF; END_IF; #Q := #PvTime >= #Sv; IF #Q AND #TimeRetain THEN #TimeRetain := false; END_IF; #ET := #PvTime; #TimeLeft := #Sv - #ET; END_IF; IF NOT #Enable THEN IF NOT #TimeRetain THEN #TimeLeft := T#0ms; END_IF; #Q := FALSE; END_IF; END_REGION END_FUNCTION_BLOCK spero sia utile a qualcuno..... Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 3 dicembre 2019 Autore Segnala Share Inserita: 3 dicembre 2019 Ottimo lavoro, i suggerimenti sono sempre bene accetti. 😉 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