Wenn der selbst programmierter Baustein zu langsam ist gibt es 2 Gründe dafür:
1. Nicht performat programmiert und somit Zyklen verschwendet,...
2. Dein SPS Zyklus ist zu hoch und du bekommst nicht alle Inkremente mit.
Lösung:
1. Baustein performater programmieren (dazu brauchen wir deinen Code)
2. Absolutwertgeber kaufen der die immer die absolute Position meldet. Dann ist es nicht so schlimm wenn du nicht alle Inkremente mitbekommst da du ja immer den Absolutwert erhälst.
Tipp:
Lösung 2 nutzen oder: Einen Inkrementalgebereingangskarte kaufen
- bei Siemens gibt es sog. Zählerkarten die genau dafür sind im Prinzip sind das kleine CPUs mit ausreichend Leistung um alle Inkremente zu erkennen und diese dann in den langsamen SPS Zyklus zu übergeben als Absolutwert o.ä.
- Bei
Codesys gibt es das natürlich auch, bei Wago z.B. oder bei Festo das Encodermodul auf der CECX Basis (geht nicht bei CPX)
Wenn du einen selbst programmierten Baustein nutzt musst du immer das "Nyquist-Shannon-Abtasttheorem" im Kopf haben. Das sagt aus: Deine Abtastfrequenz muss immer größer als zwei mal die abzutastende Frequenz sein sonst erhälst du Aliasingeffekte.
fAbtast > 2*f
Bei 1000 ink/s bedeutet das => 1 ink / ms
Daraus ergibt sich eine Abtastungsperiode von max 0,4999.. ms also eine Frequenz von 1/0,00049999s = 2000Hz
Das würde keine SPS packen..
==> Kauf dir eine Zählerkarte/Encoderkarte oder ein Absolutwertgeber mit Busanschluss (CAN, PB, PN, Ethercat,.. was auch immer)