Startseite > Forum > IEC 61131-Programmierung (LogicLab) > Verwalten Sie Timings in der Sprache ST
- Dieses Thema hat 3 Antworten, 2 Teilnehmer und wurde zuletzt aktualisiert 13 Jahre, 9 Monate da Sergio Bertana.
-
AutorPost
-
Juli 27, 2010 bei 3: 04 pm #34883AnonymLeerlauf
Ich muss ein Timing in ST-Sprache verwalten. Zuvor habe ich Ihre Picolog-Produkte verwendet und in der Sprache "C" programmiert.
Die Funktion IsMsecTimeOver () war in Ihren Bibliotheken verfügbar, was die zeitliche Ausführung extrem einfach machte. Da ist so etwas an SlimLine ?
Juli 27, 2010 bei 3: 07 pm #36500Sergio BertanaAdministrator des ForumsDie IsMsecTimeOver () - Funktion basiert auf der System-Tick-Steuerung, die automatisch jede 1 mS in Picolog-Systemen inkrementiert.
In Systemen SlimLine In der ST-Sprache kann die Systemvariable SysTime vom Typ UDINT getestet werden, die sich jedes Mal erhöht, wenn der Maximalwert erreicht wird. Sie wird neu initialisiert. In der Praxis können Sie, um das Timing ähnlich wie in "C" auf Picolog-Systemen durchzuführen, etwas Ähnliches wie das folgende Programm tun, das die Inversion der Do00M00-Ausgabe jede Sekunde durchführt. Die Variable RefTimeBuf muss als Typ deklariert werden UDINT.
(* Anfangsreferenzzeit bei der ersten Programmschleife. *)
WENN SysFirstLoop DANN
RefTimeBuf: = SysTime; (* Referenzzeit speichern *)
END_IF;(* Überprüfen Sie, ob 1 Sec übergeben wurde und invertieren Sie den logischen DoOOM00-Status. *)
WENN (SysTime> (RefTimeBuf + 1000)) DANN
RefTimeBuf: = SysTime; (* Referenzzeit speichern *)
Do00M00: = NOT (Do00M00);
END_IF;Juli 27, 2010 bei 3: 23 pm #36501Sergio BertanaAdministrator des ForumsDie Funktion existiert auch SysGetSysTime () Dies ermöglicht das Lesen eines System-Ticks, der sich mit jedem US erhöht. In diesem Fall kann das vorherige Programm auf diese Weise geändert werden.
(* Anfangsreferenzzeit bei der ersten Programmschleife. *)
WENN SysFirstLoop DANN
RefTimeBuf: = SysGetSysTime (TRUE); (* Referenzzeit speichern *)
END_IF;(* Überprüfen Sie, ob 1 Sekunde vergangen ist, und invertieren Sie den logischen DoOOM00-Status. *)
IF (SysGetSysTime (TRUE)> (RefTimeBuf + 1000000)) THEN
RefTimeBuf: = SysGetSysTime (FALSE); (* Speichern Sie die Referenzzeit *)
Do00M00: = NOT (Do00M00);
END_IF;Beachten Sie den Aufruf von SysGetSysTime () mit dem Flag FALSCH die gleiche Zeit in dem Vergleich zu verwenden und die Zeit nicht zu verlieren, die für die Ausführung der Vergleichsanweisungen notwendig ist.
Juli 27, 2010 bei 3: 52 pm #36502Sergio BertanaAdministrator des ForumsEs gibt jedoch auch Funktionsblöcke eTOF, Timer aus ed eTON, Timer ein dass die Sprachen von IEC5 in allen 61131 verwendet werden können. Beide Funktionsbausteine führen Zeitabläufe mit definierbarer Zeit in ms aus.
-
AutorPost
- Sie müssen angemeldet sein, um auf dieses Thema antworten zu können.