- Beiträge
- 11.473
- Reaktionspunkte
- 4.009
-> Hier kostenlos registrieren
Interessant wäre, ob bei S7-300/400/1200/1500/Vipa/Soft-PLC/PLCSIM... unter Classic/TIA/AWL/SCL... immer das gleiche rauskommt...
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Wert := (Wert + Devisor + Inkrement) mod Devisor; // Inkrementieren
Wert := (Wert + Devisor - Inkrement) mod Devisor; // Dekrementieren
Divisor von Division, Herr Namensvetter!Code:Wert := (Wert + Devisor + Inkrement) mod Devisor; // Inkrementieren Wert := (Wert + Devisor - Inkrement) mod Devisor; // Dekrementieren
Mario
Wenn man bei etwas "Rundem" (*) rückwärts durchfährt und nach der 0-Position kommt man wieder an die höchste Position. Oder bei einem Encoder fährt man rückwärts über die 0-Position.Bei was für Anwendungen kommt man denn in die Verlegenheit, die Modulofunktion auf negative Zahlen zu verwenden?
Na, oder so (hatte ich nur noch nicht)Wenn man bei etwas "Rundem" (*) rückwärts durchfährt und nach der 0-Position kommt man wieder an die höchste Position. Oder bei einem Encoder fährt man rückwärts über die 0-Position.
(*) Drehtisch, Magazin, Ringpuffer, Uhrzeiger, ...
Harald
Kannst du das genauer erklären bitte? Kann mir nicht vorstellen wie oder wo man das braucht? Evtl. ein kurzes Codebeispiel?Wenn man bei etwas "Rundem" (*) rückwärts durchfährt und nach der 0-Position kommt man wieder an die höchste Position. Oder bei einem Encoder fährt man rückwärts über die 0-Position.
(*) Drehtisch, Magazin, Uhrzeiger, Ringpuffer, Listen ...
Harald
nextIndex := currentIndex + 1;
IF nextIndex >= ArraySize THEN
nextIndex := 0; //Ring: Nachfolger des letzten Elements ist das erste Element!
END_IF;
nextIndex := (currentIndex + 1) MOD ArraySize; //liefert "rechten" Nachfolger im Ring
nextIndex := (currentIndex - 1) MOD ArraySize;
(0 - 1) MOD ArraySize
" nicht ArraySize-1 ergibt (wie man vlt. erwarten könnte)! Das bemerkt man dann, wenn man den Code auch bei den Überläufen testet. nextIndex := currentIndex - 1;
IF nextIndex < 0 THEN
nextIndex := ArraySize - 1; //Ring: Vorgänger des ersten Elements ist das letzte Element!
END_IF;
nextIndex := (currentIndex + ArraySize - 1) MOD ArraySize; //liefert "linken" Vorgänger im Ring
maxIndex := ArraySize - 1;
...
nextIndex := (currentIndex + maxIndex) MOD ArraySize; //liefert "linken" Vorgänger im Ring
Ich sehe das eigentlich auch so, aber:Ich denke die IF-ELSE Variante ist deutlich einfacher und leichter lesbar. Bei der kämen auch solche Themen wie dieses nicht auf, da man nicht Herstellerabhängig den Code ändern müsste.
IF..THEN(-Orgien) erscheinen Programmierern, die überwiegend nur in Hochsprache programmieren (können), natürlich nicht als "umständlich".die zwei IF-ELSE als umständlich zu bezeichnen verstehe ich nicht.
Und nicht jeder, der ausgiebig mit IF..THEN programmiert, ist sich darüber im Klaren, was er damit u.U. anrichtet.IF..THEN(-Orgien) erscheinen Programmierern, die überwiegend nur in Hochsprache programmieren (können), natürlich nicht als "umständlich".![]()
-1 mod 5 = -1 (sind die doof???
Wobei nicht sicher ist, ob mod wirklich effizienter als ein (in diesem Fall) einziges If ... Then ... Else ist. Orgie?? NA ja... Aber so effizeient brauchen wir es i.d.R. nicht mehr, die Steuerungen sind inzwischen für alltägliche Dinge schnell genug, wenn man grundsätzlich zur Kleinsten greift.IF..THEN(-Orgien) erscheinen Programmierern, die überwiegend nur in Hochsprache programmieren (können), natürlich nicht als "umständlich".Es schadet aber trotzdem nicht, wenn man ein paar solche grundlegenden und bewährten Algorithmen kennt (und anwendet). Besonders wenn man unbedingt effizienten/schnellen Code programmieren will/muss.
(Für SPS und den Mini-Code hier eher nicht relevant: Bedingte Programmzweige sind z.B. Gift für den Prozessor-Befehls-Cache und parallele Codeausführung.)
Die Einzeiler mit MOD kann man auch einfach in FUP/KOP programmieren. Versucht das mal mit der IF-Variante ... das wird sehr "umständlich".
Harald
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen