Hallo zusammen,
die Ereignissteuerung im HS bringt mich um. Für einen alten Entwickler aus Turbo Pascal-Tagen ist es schon ein hartes Stück Brot, kein echtes if...then...else zu haben.
Mein Szenario: Ich berechne den Zielstatus eines Schaltaktors in Abhängigkeit diverser Eingabeparameter. Am Ende vergleiche ich den Zielstatus mit dem aktuellen Aktorstatus. Bei Nicht-Übereinstimmung wird der Aktorkanal neu gesetzt. Nach Statusmeldung des Aktors stimmen Ziel- und Kanalstatus wieder überein. Fertsch. Ist einfach und klappt einwandfrei, weil der Zielstatus die Führung übernimmt, d.h. dieser immer zuerst geändert wird.
Nun ist allerdings neu hinzugekommen, dass sich der Kanalstatus auch aufgrund eines anderen Ereignisses ändern kann. Die bisherige Schaltung sorgte dann natürlich dafür, dass wieder der Zielstatus eingerichtet wurde, d.h. wurde der Kanal ausgeschaltet, sorgte die Programmierung über den Zielstatus dafür, dass er wieder eingeschaltet wird - was aber nicht passieren darf.
Vielmehr muss ein Eingangsparameter zur Berechnung des Zielstatus geändert werden, der dann dafür sorgt, dass der Zielstatus dem Aktorstatus entspricht. Auf diesen Weg kann ich schwer verzichten, da während der Berechnung einige andere Aktionen gestartet werden.
Das alles wäre im Prinzip einfach, wenn diese verquere Eregnissteuerung nicht wäre. Denn nun hat der Aktorstatus auf einmal die Führung.
In meiner bisherigen HS-Programmiererei hatte ich schon einiege Male ähnliche Probleme, konnte es aber bisher immer lösen, häufig durch den Einsatz der Sperre. Nun stehe ich auf dem Schlauch.
Mein Problem ist allgemeiner so umschrieben: Ich möchte gerne (Status-)Werte am Eingang von Logikbausteinen verwenden, ohne dass die Bausteine durch den Statuswert selbst getriggert werden. D.h. der Baustein soll nicht feuern, wenn eben diese (Status-)Werte neu gesetzt werden, seien sie geändert worden oder nicht. Sie sollen einfach nur genutzt werden.
Gibt es für solch ein Vorhaben einen Stereotyp, also eine Vorlage, wie sich das generell und immer gleichartig lösen lässt, ohne jedesmal neu darüber nachzudenken, wie man das in der konkreten Schaltung in den Griff bekommt?
Wie oft habe ich mir schon gewünscht, es gäbe einen echten If-Block, in dem alle Ereignisse innerhalb des Blocks nur dann einen Logikbaustein triggern, wenn eine bestimmte Bedingung erfüllt ist...
die Ereignissteuerung im HS bringt mich um. Für einen alten Entwickler aus Turbo Pascal-Tagen ist es schon ein hartes Stück Brot, kein echtes if...then...else zu haben.
Mein Szenario: Ich berechne den Zielstatus eines Schaltaktors in Abhängigkeit diverser Eingabeparameter. Am Ende vergleiche ich den Zielstatus mit dem aktuellen Aktorstatus. Bei Nicht-Übereinstimmung wird der Aktorkanal neu gesetzt. Nach Statusmeldung des Aktors stimmen Ziel- und Kanalstatus wieder überein. Fertsch. Ist einfach und klappt einwandfrei, weil der Zielstatus die Führung übernimmt, d.h. dieser immer zuerst geändert wird.
Nun ist allerdings neu hinzugekommen, dass sich der Kanalstatus auch aufgrund eines anderen Ereignisses ändern kann. Die bisherige Schaltung sorgte dann natürlich dafür, dass wieder der Zielstatus eingerichtet wurde, d.h. wurde der Kanal ausgeschaltet, sorgte die Programmierung über den Zielstatus dafür, dass er wieder eingeschaltet wird - was aber nicht passieren darf.
Vielmehr muss ein Eingangsparameter zur Berechnung des Zielstatus geändert werden, der dann dafür sorgt, dass der Zielstatus dem Aktorstatus entspricht. Auf diesen Weg kann ich schwer verzichten, da während der Berechnung einige andere Aktionen gestartet werden.
Das alles wäre im Prinzip einfach, wenn diese verquere Eregnissteuerung nicht wäre. Denn nun hat der Aktorstatus auf einmal die Führung.
In meiner bisherigen HS-Programmiererei hatte ich schon einiege Male ähnliche Probleme, konnte es aber bisher immer lösen, häufig durch den Einsatz der Sperre. Nun stehe ich auf dem Schlauch.
Mein Problem ist allgemeiner so umschrieben: Ich möchte gerne (Status-)Werte am Eingang von Logikbausteinen verwenden, ohne dass die Bausteine durch den Statuswert selbst getriggert werden. D.h. der Baustein soll nicht feuern, wenn eben diese (Status-)Werte neu gesetzt werden, seien sie geändert worden oder nicht. Sie sollen einfach nur genutzt werden.
Gibt es für solch ein Vorhaben einen Stereotyp, also eine Vorlage, wie sich das generell und immer gleichartig lösen lässt, ohne jedesmal neu darüber nachzudenken, wie man das in der konkreten Schaltung in den Griff bekommt?
Wie oft habe ich mir schon gewünscht, es gäbe einen echten If-Block, in dem alle Ereignisse innerhalb des Blocks nur dann einen Logikbaustein triggern, wenn eine bestimmte Bedingung erfüllt ist...
Kommentar