Acasă > forum > Programare IEC 61131 (LogicLab) > Gestionați sincronizările în limba ST
- Acest subiect are 3 răspunsuri, 2 participanți și a fost actualizat ultima dată 13 ani, acum 9 luni da Sergio Bertana.
-
AutorPost
-
Iulie 27, 2010 la 3: 04 pm #34883AnonimInactiv
Trebuie să gestionez o sincronizare în limba ST. Anterior foloseam produsele dvs. Picolog și programam în limbajul „C”.
Funcția IsMsecTimeOver () a fost disponibilă în bibliotecile dvs., ceea ce a făcut executarea sincronizării extrem de simplă. Există așa ceva pe SlimLine ?
Iulie 27, 2010 la 3: 07 pm #36500Sergio BertanaAdministrator al forumuluiFuncția IsMsecTimeOver () se bazează pe controlul bifării sistemului, care în sistemele Picolog crește automat fiecare 1 mS.
În sisteme SlimLine din limbajul ST este posibilă testarea variabilei de sistem SysTime de tip UDINT, care crește de fiecare dată când se atinge valoarea maximă, este reinitializată. În practică, pentru a executa sincronizarea în mod similar cu ceea ce ați făcut în „C” pe sistemele Picolog, puteți face ceva similar cu programul de mai jos, care efectuează inversarea ieșirii Do00M00 în fiecare secundă. Variabila RefTimeBuf trebuie să fie declarat tipul UDINT.
(* Inițiți timpul de referință la prima buclă de programe. *)
IF SysFirstLoop THEN
RefTimeBuf: = SysTime; (* Salvați timpul de referință *)
end_if;(* Verificați dacă 1 Sec este trecut și inversați starea logică DoOOM00. *)
IF (SysTime> (RefTimeBuf + 1000)) THEN
RefTimeBuf: = SysTime; (* Salvați timpul de referință *)
Do00M00: = NOT (Do00M00);
end_if;Iulie 27, 2010 la 3: 23 pm #36501Sergio BertanaAdministrator al forumuluiDe asemenea, funcția există SysGetSysTime () ceea ce permite citirea unei bifări de sistem care crește fiecare uS, în acest caz programul anterior poate fi modificat în felul acesta.
(* Inițiți timpul de referință la prima buclă de programe. *)
IF SysFirstLoop THEN
RefTimeBuf: = SysGetSysTime (TRUE); (* Salvați timpul de referință *)
end_if;(* Verificați dacă este trecută 1 Sec și inversați starea logică DoOOM00. *)
IF (SysGetSysTime (TRUE)> (RefTimeBuf + 1000000)) THEN
RefTimeBuf: = SysGetSysTime (FALSE); (* Salvați timpul de referință *)
Do00M00: = NOT (Do00M00);
end_if;Rețineți apelul către SysGetSysTime () cu steagul FALS pentru a utiliza același timp în comparație și pentru a nu pierde timpul necesar pentru a executa instrucțiunile de comparație.
Iulie 27, 2010 la 3: 52 pm #36502Sergio BertanaAdministrator al forumuluiCu toate acestea, există și blocuri de funcții eTOF, temporizator oprit ed eTON, Timer pornit că limbile IEC5 pot fi utilizate în toate 61131-urile. Ambele blocuri de funcții execută temporizări cu timpul definibil în mS.
-
AutorPost
- Trebuie să fiți autentificat pentru a răspunde la acest subiect.