INÍCIO > Fórum > Programação IEC 61131 (LogicLab) > Gerenciar horários em idioma ST
- Este tópico tem 3 respostas, 2 participantes e foi atualizado pela última vez 13 anos, 9 meses atrás da Sergio Bertana.
-
autorPublique
-
Julho 27, 2010 em 3: 04 pm #34883Anônimoinativo
Eu tenho que gerenciar um tempo na linguagem ST. Anteriormente, eu estava usando seus produtos Picolog e programação em linguagem "C".
A função IsMsecTimeOver () estava disponível em suas bibliotecas, o que tornou a execução do tempo extremamente simples. Há algo assim em SlimLine ?
Julho 27, 2010 em 3: 07 pm #36500Sergio BertanaAdministrador do fórumA função IsMsecTimeOver () é baseada no controle do controle do sistema, que incrementa automaticamente cada 1 mS nos sistemas Picolog.
Em sistemas SlimLine a partir da linguagem ST é possível testar a variável de sistema SysTime do tipo UDINT, que aumenta cada vez que o valor máximo é atingido, ela é reinicializada. Na prática, para executar a cronometragem de forma semelhante ao que você fez em "C" nos sistemas Picolog, você pode fazer algo semelhante ao programa abaixo que realiza a inversão da saída Do00M00 a cada segundo. A variável RefTimeBuf deve ser declarado como tipo UDINT.
(* Tempo de referência inicial no primeiro ciclo do programa. *)
IF SysFirstLoop THEN
RefTimeBuf: = sysTime; (* Salve o tempo de referência *)
END_IF;(* Verifique se o 1 Sec é passado e inverte o estado lógico DoOOM00. *)
IF (SysTime> (RefTimeBuf + 1000)) ENTÃO
RefTimeBuf: = sysTime; (* Salve o tempo de referência *)
Do00M00: = NÃO (Do00M00);
END_IF;Julho 27, 2010 em 3: 23 pm #36501Sergio BertanaAdministrador do fórumA função também existe SysGetSysTime () o que permite a leitura de um tick do sistema que aumenta a cada uS, neste caso o programa anterior pode ser modificado no caminho.
(* Tempo de referência inicial no primeiro ciclo do programa. *)
IF SysFirstLoop THEN
RefTimeBuf: = SysGetSysTime (true); (* Salve o tempo de referência *)
END_IF;(* Verifique se 1 segundo é passado e inverta o estado lógico DoOOM00. *)
IF (SysGetSysTime (TRUE)> (RefTimeBuf + 1000000)) THEN
RefTimeBuf: = SysGetSysTime (FALSE); (* Salve o tempo de referência *)
Do00M00: = NÃO (Do00M00);
END_IF;Observe a chamada para SysGetSysTime () com a bandeira FALSE para ter o mesmo tempo usado na comparação e não perder o tempo necessário para a execução das instruções de comparação.
Julho 27, 2010 em 3: 52 pm #36502Sergio BertanaAdministrador do fórumNo entanto, existem também blocos de função eTOF, Timer Off ed eTON, Timer On que os idiomas do IEC5 podem ser usados em todos os 61131. Ambos os blocos de função executam os tempos com o tempo definível em mS.
-
autorPublique
- Você deve estar logado para responder a este tópico.