Wenn es nur um wenig KRL-Code geht, der schneller als 48ms bearbeitet werden muss,
gibt es einen Trick der mit der KRC funktioniert:
Du brauchst dazu nur auf deiner Busverbindung zwischen SPS & KRC in jede Richtung ein
binäres Signal:
SPS:
bOutCyclicToggle:=NOT bInCyclicToggle;
KRC:
Im Signal-Mapping das Signal von der SPS direkt auf das Signal an die SPS verknüpfen.
(Wichtig, dies MUSS im Verschaltungseditor geschehen, NICHT im Submit-Interpreter!).
Ausserdem das Signal auf eine $IN Variable legen.
Dies Konstellation führt dazu, dass das Signal im Buszyklus toggelt, wobei bei meinen Tests
nie Toggle-Zeiten kleiner IPO-Takt resultierten.
Nun deklarierst du dir 2 globale Interrupts, beide auf das gleiche Signal, einmal jedoch mit
einer fallenden, einmal mit einer steigenden Flanke. Beide Interrupts verknüpfst du mit dem
gleichen Programm, in das du die Zeilen aus deiner SPS.SUB kopierst mit denen du Istwerte
auf OUT-Signale der Busverbindung kopierst. Den Code in der SPS.SUB würde ich dennoch
stehen lassen. Was noch Sinn macht, ist eine weitere Ausgangsvariable in dem Interrupt-
Code zu ergänzen, die dort auch einfach bei jedem Aufruf getoggelt wird. So hast du eine
perfekte Möglichkeit um zu Messen, mit welcher Frequenz dein Interrupt-Code tatsächlich
bearbeitet wird. In meinem Fall waren dies absolut zuverlässig 12ms. (Aufgezeichnet mit
mit dem Software-Scope der SPS).
Mit diesem simplen Trick, den ich bisher bei 2 Anlagen umgesetzt habe, war es zuverlässig
möglich die Istwerte im 12ms Takt aus der KRC zu bekommen. Setzte dies beispielsweise ein,
um eine externe Servoachse auf den Roboter zu synchronisieren. Klappt tadellos.
Gruss, Peter
PS: Mit ProConOS lässt sich auch zyklisch die Istposition abgreifen, aber das Produkt ist völlig
überteuert, dito dessen Programmiertool. Ausserdem ist es unter den SPS'en was Flexibilität,
Schnittstellen, und Einsatmöglichkeiten angeht das schlechteste Produkt mit dem ich in den
vergangenen 15 Jahren je arbeiten musste.