TIA Meldungsverlängerung

Zuviel Werbung?
-> Hier kostenlos registrieren
Denk nochmal drüber nach: bevor dein Konstrukt irgendwelche Bits rücksetzt, woher weiß der OB31, wie lange ein Bit gesetzt war? Ob das länger als die HMI-Aktualisierungszeit war? Auch wenn der OB31 nur seltener als die HMI-Aktualisierungszeit aufgerufen wird, kann es sein, dass ein Bits rücksetzt wird, was nur 1ms lang gesetzt war. Man kann es viel einfacher (und nur im OB1) lösen, wenn nur alle > 2x HMI-Aktualisierungszeit verglichen wird, ob ein Bit schon beim letzten Check gesetzt war. Man muss sich das natürlich zusätzlich merken.

Anstatt zykluszeitfressender FOR-Schleifen kann man auch einfach wordweise verarbeiten.
 
Anstatt zykluszeitfressender FOR-Schleifen kann man auch einfach wordweise verarbeiten.

Das Verstehe ich nicht. Ich hab ein "Array of UDT" über das ich Iteriere um die Bits zu rangieren.

Denk nochmal drüber nach: bevor dein Konstrukt irgendwelche Bits rücksetzt, woher weiß der OB31, wie lange ein Bit gesetzt war? Ob das länger als die HMI-Aktualisierungszeit war?
Jetzt hab ichs kapiert.
Okay man Könnte das Word weg speichern und somit erreichen, dass "verglichen wird, ob ein Bit schon beim letzten Check gesetzt war" so eine Art Word Flanke. dabb OB31 = 520 ms. Somit steht es immer mind. 520ms+1 Zyklus an.

Man Könnte aus im OB1 auch machen wenn Man ein Impuls alle 520 ms schickt und dann sowas wie
Code:
IF IMP_520ms then

 MW.X0 := not (MW_old.X0 and NOT X0);

...


MW_old:= MW;

end_If;

Ist an sich das gleiche wie oben.
 
Zurück
Oben