TC3: Frage zur Aktualisierungszeit gemappter I/O-Variablen

Beiträge
5.697
Reaktionspunkte
1.182
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich möchte gerne über eine schnellere Task (<<10ms) auf einen Eingang zugreifen. Welcher das sein wird weiß diese Task jedoch nicht, eine langsamere Task, in der dieser Eingang mit "AT %I*" angelegt ist, übergibt der schnellen Task über eine globale Variable einen Pointer auf diese Variable. Da ich nicht genau weiß was beim Mapping alles passiert würde mich jetzt mal interessieren, mit welcher Geschwindigkeit die dereferenzierte Variable in der schnellen Task aktualisiert wird, mit der Zykluszeit der I/O-Task oder mit der Zykluszeit der langsamen Task? Das das Programm der schnellen Task die Variable natürlich nur so schnell auswertet wie ihre Zykluszeit ist, ist mir dabei klar.

Gruß

Oliver
 
Zuletzt bearbeitet:
Das sollte die "langsamere" Task sein.

Frage ist natürlich noch, wie bekommt diese Task die Daten selber?

Hardware I/O, irgendein Bus mit im Spiel, z.B. CAN oder EtherCat?

Dann wird das noch komplizierter mit der Beurteilung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo RobiHerb,
Das sollte die "langsamere" Task sein.
die Antwort war richtig. ;)
Ich hatte heute ein Gespräch mit Beckhoff und da kam genau das bei raus, allerdings kann man daran etwas ändern. Es gibt das Attribut Pragma "TcContextName", übergibt man diesem eine andere Task wird die Variable in der Zykluszeit dieser Task aktualisiert.


Beispiel:
Code:
{attribute 'TcContextName':='Task2'}
b_Test AT %I* : BOOL;

Die Variable b_Test wird in der Zykluszeit der Task "Task2" aktualisiert.
Ein großes Dankeschön an Herrn Hansmann von Beckhoff.

Allerdings läuft das Ganze nicht mit jeder Version. Ich habe es mit der 4018.44 und der 4020.14 erfolgreich getestet.
 
In TC2 kann man im Systemmanager per Drag&Drop die Variablen den Task's zuordnen. So wie ich die entsprechenden Dokumente verstanden habe, wird die Variable dann im jeweiligen Zyklus aktualisiert. Praktisch konnte ich das nachvollziehen, da ich einen durch eine schnelle Task gut ausgelasteten CX9010 am laufen habe. In der schnellen Task sieht man die Auswirkungen dann deutlich, je nachdem an welche Task man die E/A's dranhängt. Das ist dann völlig egal, wo die im Programm definiert sind (global, lokal).
Per Pragma ist bei umfangreichen Mappings natürlich bequemer. Geht m.W bei TC2 leider nicht.
 
Zuletzt bearbeitet:
@weissnix
Du hast vollkommen recht. Bei TC2 ist es so wie Du es sagst.
Hier geht es jedoch um TC3 und da kann man es per Attribut übersteuern.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beispiel:
Code:
{attribute 'TcContextName':='Task2'}
b_Test AT %I* : BOOL;

In Ergänzung dazu: Das Attribute kann man auch über eine ganze Globale Variablen-Liste schreiben um das Verhalten für alle Variablen zu erzwingen und kann dennoch innerhalb der GVL das Attribute nochmal verwenden um es für einzelne Teilnehmer dann doch wieder anders zu machen..
 
Zurück
Oben