"Schieberegister" ist auch für mich ein erklärbarer Grund ...
Vielleicht habe ich ja Gelegenheit mit dem "Chef" in einem stillen arabischen Cafe etwas zu fachsimpeln.
Genügend Gesprächsstoff hat mir diese Diskussion jedenfalls gegeben.
Grüße, Uwe - der die Arbeitsweise eines Schieberegisters immer noch nicht als Bug bezeichnen möchte, auch wenn der Ablauf nicht atomar ist (was sicherlich besser wäre)
BTW: ich könnte mir in meiner laienhaften Vorstellung einfach denken, das ein VM anders schiebt als der Prozessor im Modul (etwas Lerntext bitte, Niko )
Willkommen auf unserer neuen Forenplattform für das Bus-Profi Forum
Neue Felder für die persönlichen Daten
Man kann jetzt seine öffentlich einsehbare Daten genau bestimmen. Details findet ihr in in diesem Beitrag.
Durch die neue Forensoftware und die Portierung der Daten konnten die Passwörter aus dem alten Forum nicht übernommen werden, bitte lassen Sie sich ein neues Passwort über die Passwort vergessen Funktion zusenden. Sollte es zu Problemen kommen kontaktieren Sie das Bus-Profi Team per E-Mail.
Neue Felder für die persönlichen Daten
Man kann jetzt seine öffentlich einsehbare Daten genau bestimmen. Details findet ihr in in diesem Beitrag.
Durch die neue Forensoftware und die Portierung der Daten konnten die Passwörter aus dem alten Forum nicht übernommen werden, bitte lassen Sie sich ein neues Passwort über die Passwort vergessen Funktion zusenden. Sollte es zu Problemen kommen kontaktieren Sie das Bus-Profi Team per E-Mail.
Motorsteuerung mit zwei Taster
-
- Lord Forum
- Beiträge: 1511
- Registriert: Di 11. Mai 2004, 16:39
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
#42 RE: Motorsteuerung mit zwei Taster
[zitat]Original von Uwe ein VM anders schiebt als der Prozessor im Modul (etwas Lerntext bitte, Niko )[/zitat]
Ich vermute mal, ein vM hat eine lokale Variable, die zu Beginn nur einmal mit dem Tastensperrzustand gesetzt wird.
Bzw. dass zu Beginn die Menge aller Zieltasten aus dem "Sende Taste" Befehl entnommen wird und dann werden alle gesperrten Tasten aus dieser Menge entfernt. Für die Restmenge von Zieltasten wird der Reihe nach jedes "Sende Taste" ausgeführt. Perfekt(!)
Gruß, Martin - der vermutet, dass reale Module keine "lokale Variable / Menge" für diese Buchhaltung spendieren
Ich vermute mal, ein vM hat eine lokale Variable, die zu Beginn nur einmal mit dem Tastensperrzustand gesetzt wird.
Bzw. dass zu Beginn die Menge aller Zieltasten aus dem "Sende Taste" Befehl entnommen wird und dann werden alle gesperrten Tasten aus dieser Menge entfernt. Für die Restmenge von Zieltasten wird der Reihe nach jedes "Sende Taste" ausgeführt. Perfekt(!)
Gruß, Martin - der vermutet, dass reale Module keine "lokale Variable / Menge" für diese Buchhaltung spendieren
#43 RE: Motorsteuerung mit zwei Taster
Uwe möchte Lesestoff haben: na dann...
Also, Ihr habt alle recht. Irgendwie.
Und was in den Modulen abläuft (egal ob real oder virtuell) ist für sich genommen auch völlig logisch und in sich stimmig.
Nur die Interpretationen und Schlussfolgerungen passen nicht so ganz zusammen, das möchte ich im folgenden nochmal genauer zusammenschreiben, auch wenn manche manche Details wohl als Haarspalterei abtun würden.
Ach so: Es ist keiner gezwungen, mein Geschreibsel zu lesen Wer es nicht tut, möge aber bitte das folgende quasi als Faustregel beherzigen, denn es führt zu robusteren Parametrierungen:
[zitat]Original von Beleuchtfix
Es ist schon sehr wichtig, welcher Befehl an welcher Stelle kommt. Und ob eine Reaktion nun vor oder nach dem nächsten Befehl kommt, ist nicht unbedingt vorherzusehen. Bei richtig zeitkritischen Anwendungen muss man noch eine Zeitverzögerung einbauen.[/zitat]
[hr]
Fangen wir nun an:
[zitat]Original von Beleuchtfix
Nach allem, was ich bis jetzt weiß, werden die Befehle der Reihe nach A1-A8, jeweils zuerst kurz - lang -los und dabei zunächst Erstbelegung-Zweitbelegung ausgeführt.[/zitat]
Das kenne ich im Prinzip genauso, und es passt auch zu allen Bus-Mitschnitten in diesem Thread, ich würde anstelle des Wortes "Befehle" jedoch lieber "gedrückte LCN-Taste" verwenden wollen (autsch, das war das erste Haar).
[zitat]Original von MartinH
Wenn dies so wäre, dann würden die LCN-Module ein Sende Taste Kommando wie "TASTEN 1234---- C=kurz" nicht atomar (unteilbar) abarbeiten (!) (?)[/zitat]
Der Sende-Taste-Befehl selbst ist atomar, er "drückt" hier gewissermaßen die Tasten C1 bis C4 kurz gleichzeitig. Und damit ist dieser Befehl auch schon komplett erledigt und das Modul kann sich der nächsten Aufgabe widmen, in diesem Fall nämlich nachzusehen, ob eine Taste gedrückt wurde.
Auf dem nächsten Haar steht daher: Es muss zwischen dem Tastendruck und der Abarbeitung desselben unterschieden werden.
Die Abarbeitung kann nicht atomar sein, das folgt aus der folgenden Aussage, die letztlich auch irgendwo in der PRO-Hilfe steht:
[zitat]Original von Uwe
Und immer daran denken: die Module senden maximal 5 Kommandos pro Sekunde (!) [/zitat]
Mit einem einzigen Sende-Taste-Kommando lassen sich 4*8=32 Tasten gleichzeitig drücken. Zusammen mit den Schattentasten könntest Du also 64 Kommandos in den Bus senden. Bei maximal 5 pro Sekunde ist das Modul also schon einige Zeit damit beschäftigt. Soll es bei einer angenommenen "atomaren Abarbeitung" in diesen über 10 Sekunden also auf nichts mehr reagieren? Natürlich arbeitet das Modul währenddessen weiter und arbeitet laufende Timer ab und "drückt" ggf. die B-Tasten, falls ein BMI auslöst.
Wer sich übrigens schon mal gewundert hat, warum ein BMI "verzögert schaltet": Obige Unterscheidung liefert die Erklärung: Der BMI "drückt" erst die Taste, aufgrund vorübergehender "Arbeitsüberlastung" im Modul wird diese Taste jedoch erst etwas später abgearbeitet.
Sehen wir uns Heinrichs Bus-Mitschnitt mit diesem Wissen noch einmal genauer an:
13:12:40:606 - M007 an M050 TASTEN 1234---- C=kurz
Hier werden die vier Modul-Tasten gleichzeitig gedrückt. Das Modul hat gerade nichts weiter zu tun, beginnt also mit der Abarbeitung der Tasten. Es wird C1 kurz abgearbeitet, und da diese Taste nicht gesperrt ist, folgende Kommandos in den Bus gesendet:
13:12:40:646 - M050 an M050 Relais 100- ----
13:12:40:666 - M050 an M050 TastenSperre C: 1011 ----
Das Modul 50 liest vom Bus auch eben diese beiden Kommandos und arbeitet sie ab. Es klappern also die Relais und die Tastensperre Tabelle C wird geändert.
Danach langweilt sich das Modul wieder und arbeitet wieder die Tasten ab. C2 muss als nächstes abgearbeitet werden. C2 ist inzwischen nicht mehr gesperrt, es landen also die folgenden Kommandos auf der Datenader:
13:12:40:726 - M050 an M050 Relais 110- ----
13:12:40:746 - M050 an M050 TastenSperre C: 1101 ----
Ich denke, ich kann hier abbrechen, es sollte klar sein, warum es in einem realen Modul nicht funktioniert hat.
[zitat]Original von Uwe
[zitat]Original von MartinH
(!) Ein Firmware-Bug (?)[/zitat]
Definitiv nein, Martin. Das ist schon immer so - und das wird wohl auch so bleiben. Eben "Timing" der Kommandos ...[/zitat]
Es ist sicher kein Bug, sondern es ist eher so gewollt. Dahinter steckt letztlich ein geniales Konzept im Umgang mit knappen Ressourcen. Und da in der Realität andere Ressourcen knapp sind als in der virtuellen Welt, verhalten sich die vMs in diesem Punkt halt anders als reale Module.
[zitat]Original von MartinH
Frage an LinHK ist dann noch, warum die vM Firmware es anders (besser!) macht?[/zitat]
Ob das besser ist, weiß ich nicht. Anders in jedem Fall: Das vM arbeitet erst einmal C1 bis C4 ab, bevor es neue Kommandos vom Bus auswertet. Die Prioritäten bei der Abarbeitung sind halt anders gesetzt.
[zitat]Und braucht LinHK dann eine vM Option damit Befehle "nicht atomar" ausgeführt werden, um kompatibel mit dem Vorbild zu bleiben?[/zitat]
In diesem konkreten Fall müsstest sich das vM genauso wie das reale Modul verhalten, wenn Du das vM auf "Interne Koimmandos nicht in den Bus senden" stellst. Habe ich aber nicht selbst ausprobiert.
[zitat]Bitte liebe Freunde des Tastensperrens meldet euch![/zitat]
Auch ich nutze erfolgreich die Tastensperre. Aber warum klappte Dein Ansatz hier nicht? Weil die Tasten sich selbst sperren und entsperren. Da ist dann wirklich die interne Abarbeitungsreihenfolge im Modul entscheidend (hier: gedrückte Tasten vs. neue Kommandos auf der Datenader) und darüber sollte man besser keine Annahmen machen, sondern sich besser an Florians goldene Faustregel halten. Bei mir werden die Tasten üblicherweise durch Sensoren (z.B. Dämmerungsschalter) gesperrt und entsperrt. Eine davon unbahängige Quelle ruft dann die betroffenen Tasten auf und nur eine wird wie gewünscht ausgeführt.
Bei Ueli hat eine weitere Taste das Sperren übernommen und dadurch die Situation entschärft. Und wenn man bei vier Tasten bleiben möchte, könnte man die derzeitigen LANG-Kommandos auf LOS legen und die derzeitigen KURZ-Kommandos auf LANG. Dann wären die kurzen Tasten frei für ein STV-Ziel, das die Tasten dann mit Verzögerung neu sperrt.
Schöne Grüße
Niko, der die ausgerauften Haare und das scharfe Messer jetzt wieder beiseite legt
Also, Ihr habt alle recht. Irgendwie.
Und was in den Modulen abläuft (egal ob real oder virtuell) ist für sich genommen auch völlig logisch und in sich stimmig.
Nur die Interpretationen und Schlussfolgerungen passen nicht so ganz zusammen, das möchte ich im folgenden nochmal genauer zusammenschreiben, auch wenn manche manche Details wohl als Haarspalterei abtun würden.
Ach so: Es ist keiner gezwungen, mein Geschreibsel zu lesen Wer es nicht tut, möge aber bitte das folgende quasi als Faustregel beherzigen, denn es führt zu robusteren Parametrierungen:
[zitat]Original von Beleuchtfix
Es ist schon sehr wichtig, welcher Befehl an welcher Stelle kommt. Und ob eine Reaktion nun vor oder nach dem nächsten Befehl kommt, ist nicht unbedingt vorherzusehen. Bei richtig zeitkritischen Anwendungen muss man noch eine Zeitverzögerung einbauen.[/zitat]
[hr]
Fangen wir nun an:
[zitat]Original von Beleuchtfix
Nach allem, was ich bis jetzt weiß, werden die Befehle der Reihe nach A1-A8, jeweils zuerst kurz - lang -los und dabei zunächst Erstbelegung-Zweitbelegung ausgeführt.[/zitat]
Das kenne ich im Prinzip genauso, und es passt auch zu allen Bus-Mitschnitten in diesem Thread, ich würde anstelle des Wortes "Befehle" jedoch lieber "gedrückte LCN-Taste" verwenden wollen (autsch, das war das erste Haar).
[zitat]Original von MartinH
Wenn dies so wäre, dann würden die LCN-Module ein Sende Taste Kommando wie "TASTEN 1234---- C=kurz" nicht atomar (unteilbar) abarbeiten (!) (?)[/zitat]
Der Sende-Taste-Befehl selbst ist atomar, er "drückt" hier gewissermaßen die Tasten C1 bis C4 kurz gleichzeitig. Und damit ist dieser Befehl auch schon komplett erledigt und das Modul kann sich der nächsten Aufgabe widmen, in diesem Fall nämlich nachzusehen, ob eine Taste gedrückt wurde.
Auf dem nächsten Haar steht daher: Es muss zwischen dem Tastendruck und der Abarbeitung desselben unterschieden werden.
Die Abarbeitung kann nicht atomar sein, das folgt aus der folgenden Aussage, die letztlich auch irgendwo in der PRO-Hilfe steht:
[zitat]Original von Uwe
Und immer daran denken: die Module senden maximal 5 Kommandos pro Sekunde (!) [/zitat]
Mit einem einzigen Sende-Taste-Kommando lassen sich 4*8=32 Tasten gleichzeitig drücken. Zusammen mit den Schattentasten könntest Du also 64 Kommandos in den Bus senden. Bei maximal 5 pro Sekunde ist das Modul also schon einige Zeit damit beschäftigt. Soll es bei einer angenommenen "atomaren Abarbeitung" in diesen über 10 Sekunden also auf nichts mehr reagieren? Natürlich arbeitet das Modul währenddessen weiter und arbeitet laufende Timer ab und "drückt" ggf. die B-Tasten, falls ein BMI auslöst.
Wer sich übrigens schon mal gewundert hat, warum ein BMI "verzögert schaltet": Obige Unterscheidung liefert die Erklärung: Der BMI "drückt" erst die Taste, aufgrund vorübergehender "Arbeitsüberlastung" im Modul wird diese Taste jedoch erst etwas später abgearbeitet.
Sehen wir uns Heinrichs Bus-Mitschnitt mit diesem Wissen noch einmal genauer an:
13:12:40:606 - M007 an M050 TASTEN 1234---- C=kurz
Hier werden die vier Modul-Tasten gleichzeitig gedrückt. Das Modul hat gerade nichts weiter zu tun, beginnt also mit der Abarbeitung der Tasten. Es wird C1 kurz abgearbeitet, und da diese Taste nicht gesperrt ist, folgende Kommandos in den Bus gesendet:
13:12:40:646 - M050 an M050 Relais 100- ----
13:12:40:666 - M050 an M050 TastenSperre C: 1011 ----
Das Modul 50 liest vom Bus auch eben diese beiden Kommandos und arbeitet sie ab. Es klappern also die Relais und die Tastensperre Tabelle C wird geändert.
Danach langweilt sich das Modul wieder und arbeitet wieder die Tasten ab. C2 muss als nächstes abgearbeitet werden. C2 ist inzwischen nicht mehr gesperrt, es landen also die folgenden Kommandos auf der Datenader:
13:12:40:726 - M050 an M050 Relais 110- ----
13:12:40:746 - M050 an M050 TastenSperre C: 1101 ----
Ich denke, ich kann hier abbrechen, es sollte klar sein, warum es in einem realen Modul nicht funktioniert hat.
[zitat]Original von Uwe
[zitat]Original von MartinH
(!) Ein Firmware-Bug (?)[/zitat]
Definitiv nein, Martin. Das ist schon immer so - und das wird wohl auch so bleiben. Eben "Timing" der Kommandos ...[/zitat]
Es ist sicher kein Bug, sondern es ist eher so gewollt. Dahinter steckt letztlich ein geniales Konzept im Umgang mit knappen Ressourcen. Und da in der Realität andere Ressourcen knapp sind als in der virtuellen Welt, verhalten sich die vMs in diesem Punkt halt anders als reale Module.
[zitat]Original von MartinH
Frage an LinHK ist dann noch, warum die vM Firmware es anders (besser!) macht?[/zitat]
Ob das besser ist, weiß ich nicht. Anders in jedem Fall: Das vM arbeitet erst einmal C1 bis C4 ab, bevor es neue Kommandos vom Bus auswertet. Die Prioritäten bei der Abarbeitung sind halt anders gesetzt.
[zitat]Und braucht LinHK dann eine vM Option damit Befehle "nicht atomar" ausgeführt werden, um kompatibel mit dem Vorbild zu bleiben?[/zitat]
In diesem konkreten Fall müsstest sich das vM genauso wie das reale Modul verhalten, wenn Du das vM auf "Interne Koimmandos nicht in den Bus senden" stellst. Habe ich aber nicht selbst ausprobiert.
[zitat]Bitte liebe Freunde des Tastensperrens meldet euch![/zitat]
Auch ich nutze erfolgreich die Tastensperre. Aber warum klappte Dein Ansatz hier nicht? Weil die Tasten sich selbst sperren und entsperren. Da ist dann wirklich die interne Abarbeitungsreihenfolge im Modul entscheidend (hier: gedrückte Tasten vs. neue Kommandos auf der Datenader) und darüber sollte man besser keine Annahmen machen, sondern sich besser an Florians goldene Faustregel halten. Bei mir werden die Tasten üblicherweise durch Sensoren (z.B. Dämmerungsschalter) gesperrt und entsperrt. Eine davon unbahängige Quelle ruft dann die betroffenen Tasten auf und nur eine wird wie gewünscht ausgeführt.
Bei Ueli hat eine weitere Taste das Sperren übernommen und dadurch die Situation entschärft. Und wenn man bei vier Tasten bleiben möchte, könnte man die derzeitigen LANG-Kommandos auf LOS legen und die derzeitigen KURZ-Kommandos auf LANG. Dann wären die kurzen Tasten frei für ein STV-Ziel, das die Tasten dann mit Verzögerung neu sperrt.
Schöne Grüße
Niko, der die ausgerauften Haare und das scharfe Messer jetzt wieder beiseite legt
#44 RE: Motorsteuerung mit zwei Taster
Darf ich nochmal?
Wer es bis hierhin durchgehalten hat, ist reif für den Fortgeschrittenenkurs: Tauscht in Uelis erstem Vorschlag die Taste C5 gegen die Taste B5. Wer weiß, warum es jetzt nicht mehr klappt? :-O
Schöne Grüße
Niko, der für dieses Problem Uelis Schwellwertvariante nehmen würde: robuster geht es wohl kaum
Wer es bis hierhin durchgehalten hat, ist reif für den Fortgeschrittenenkurs: Tauscht in Uelis erstem Vorschlag die Taste C5 gegen die Taste B5. Wer weiß, warum es jetzt nicht mehr klappt? :-O
Schöne Grüße
Niko, der für dieses Problem Uelis Schwellwertvariante nehmen würde: robuster geht es wohl kaum
-
- Lord Forum
- Beiträge: 1511
- Registriert: Di 11. Mai 2004, 16:39
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
#45 RE: Motorsteuerung mit zwei Taster
[zitat]Original von Niko
Uwe möchte Lesestoff haben: na dann...
Also, Ihr habt alle recht. Irgendwie.
[/zitat]
Vielen Dank Niko für die detailierte Analyse, Prognose und "Haarspalterei" !
[zitat]Original von Niko
[zitat]Original von MartinH
Wenn dies so wäre, dann würden die LCN-Module ein Sende Taste Kommando wie "TASTEN 1234---- C=kurz" nicht atomar (unteilbar) abarbeiten (!) (?)[/zitat]
Der Sende-Taste-Befehl selbst ist atomar, er "drückt" hier gewissermaßen die Tasten C1 bis C4 kurz gleichzeitig. Und damit ist dieser Befehl auch schon komplett erledigt und das Modul kann sich der nächsten Aufgabe widmen, in diesem Fall nämlich nachzusehen, ob eine Taste gedrückt wurde.
Auf dem nächsten Haar steht daher: Es muss zwischen dem Tastendruck und der Abarbeitung desselben unterschieden werden.
Die Abarbeitung kann nicht atomar sein, das folgt aus der folgenden Aussage, die letztlich auch irgendwo in der PRO-Hilfe steht:
[/zitat]
Ich habe kein Problem damit, dass die "Abarbeitung" der "Sende Taste" Zielkommandos nicht atomar passieren kann.
Ich habe aber nach wie vor ein "Problem" damit, dass der 1.Teil ("der Tastendruck") nicht wirklich atomar behandelt wird.
Niko schreibt zwar > ABER bei diesem Drücken achtet das Modul nicht darauf, ob die jeweilige Taste überhaupt "drückbar" (nicht gesperrt) ist oder nicht. Diese Gesperrt/Nicht-Gesperrt-Auswertung fehlt mir in dem atomaren 1. Teil.
Die Module verhalten sich anscheinend so, dass sie erstmal einfach die "Taste drücken" und später irgendwann darf die Taste noch selber entscheiden, ob sie (dann) überhaupt gedrückt werden durfte oder nicht.
Mein "Vorwurf" an die Module ist also eher, dass sie diese "lazy evaluation" implementieren und die Gesperrt/Nicht-Gesperrt-Auswertung einem unbestimmten späteren Zeitpunkt überlassen.
Ein "Sende-Taste-Befehl" an mehrere Module (Gruppe) kann natürlich nicht atomar sein. Aber für jedes empfangende Modul habe ich erwartet, dass für alle Zieltasten die Gesperrt/Nicht-Gesperrt-Auswertung einmalig und gleichzeitig erfolgt.
Das Gegenteil habe die Tests bewiesen(!) Dieses Modul-Verhalten muss also bekannt und beachtet werden !
Meiner Meinung nach macht es den Umgang mit gegenseitigem Sperren schwieriger.
Die Zeitverzögerungstricks (mit Folgetasten und STV) machen die Programmierung aufwendiger und sind unter Umständen auch nicht sicher !?
[zitat]Original von Niko
[zitat]Und braucht LinHK dann eine vM Option damit Befehle "nicht atomar" ausgeführt werden, um kompatibel mit dem Vorbild zu bleiben?[/zitat]
In diesem konkreten Fall müsstest sich das vM genauso wie das reale Modul verhalten, wenn Du das vM auf "Interne Koimmandos nicht in den Bus senden" stellst. Habe ich aber nicht selbst ausprobiert.
[/zitat]
Ich habe es jetzt probiert! 100% Volltreffer.
So ist es:
Niko"s Prognose war richtig!
Allerdings ist es auch nicht schön zu sehen, dass die Funktion einer Programmierung von davon abhängt, ob "Interne Koimmandos nicht in den Bus senden" gesetzt ist.
Ich denke, dass aktuelle vM Verhalten sollten wir dann im internen LinHK Bereich fortsetzen.
Vielleicht werden zukünftige vM ihr Verhalten ja noch mehr der Realität anpassen.
[zitat]Original von Niko
Bei Ueli hat eine weitere Taste das Sperren übernommen und dadurch die Situation entschärft. Und wenn man bei vier Tasten bleiben möchte, könnte man die derzeitigen LANG-Kommandos auf LOS legen und die derzeitigen KURZ-Kommandos auf LANG. Dann wären die kurzen Tasten frei für ein STV-Ziel, das die Tasten dann mit Verzögerung neu sperrt.[/zitat]
Ja, in der Art sollten wir die Musterlösung vielleicht ins Wiki aufnehmen.
Ein STV für die C-Tabelle sollte ja reichen - da kann es aber vorkommen, dass es 1-2 Sekunden dauert bis die nächste Stufe freigegeben wird. Motor ganz einschalten bzw. ganz ausschalten kann so mindestens zwischen 3-6 Sekunden dauern.
Gruß, Martin - dessen Haare sich jetzt wieder legen müssen
PS: wie geschrieben ist Tastensperren vielleicht nicht die eleganteste (sicherste) Methode für diesen Anwendungsfall
- Editiert von MartinH am 21.03.2009, 15:56 -
Uwe möchte Lesestoff haben: na dann...
Also, Ihr habt alle recht. Irgendwie.
[/zitat]
Vielen Dank Niko für die detailierte Analyse, Prognose und "Haarspalterei" !
[zitat]Original von Niko
[zitat]Original von MartinH
Wenn dies so wäre, dann würden die LCN-Module ein Sende Taste Kommando wie "TASTEN 1234---- C=kurz" nicht atomar (unteilbar) abarbeiten (!) (?)[/zitat]
Der Sende-Taste-Befehl selbst ist atomar, er "drückt" hier gewissermaßen die Tasten C1 bis C4 kurz gleichzeitig. Und damit ist dieser Befehl auch schon komplett erledigt und das Modul kann sich der nächsten Aufgabe widmen, in diesem Fall nämlich nachzusehen, ob eine Taste gedrückt wurde.
Auf dem nächsten Haar steht daher: Es muss zwischen dem Tastendruck und der Abarbeitung desselben unterschieden werden.
Die Abarbeitung kann nicht atomar sein, das folgt aus der folgenden Aussage, die letztlich auch irgendwo in der PRO-Hilfe steht:
[/zitat]
Ich habe kein Problem damit, dass die "Abarbeitung" der "Sende Taste" Zielkommandos nicht atomar passieren kann.
Ich habe aber nach wie vor ein "Problem" damit, dass der 1.Teil ("der Tastendruck") nicht wirklich atomar behandelt wird.
Niko schreibt zwar > ABER bei diesem Drücken achtet das Modul nicht darauf, ob die jeweilige Taste überhaupt "drückbar" (nicht gesperrt) ist oder nicht. Diese Gesperrt/Nicht-Gesperrt-Auswertung fehlt mir in dem atomaren 1. Teil.
Die Module verhalten sich anscheinend so, dass sie erstmal einfach die "Taste drücken" und später irgendwann darf die Taste noch selber entscheiden, ob sie (dann) überhaupt gedrückt werden durfte oder nicht.
Mein "Vorwurf" an die Module ist also eher, dass sie diese "lazy evaluation" implementieren und die Gesperrt/Nicht-Gesperrt-Auswertung einem unbestimmten späteren Zeitpunkt überlassen.
Ein "Sende-Taste-Befehl" an mehrere Module (Gruppe) kann natürlich nicht atomar sein. Aber für jedes empfangende Modul habe ich erwartet, dass für alle Zieltasten die Gesperrt/Nicht-Gesperrt-Auswertung einmalig und gleichzeitig erfolgt.
Das Gegenteil habe die Tests bewiesen(!) Dieses Modul-Verhalten muss also bekannt und beachtet werden !
Meiner Meinung nach macht es den Umgang mit gegenseitigem Sperren schwieriger.
Die Zeitverzögerungstricks (mit Folgetasten und STV) machen die Programmierung aufwendiger und sind unter Umständen auch nicht sicher !?
[zitat]Original von Niko
[zitat]Und braucht LinHK dann eine vM Option damit Befehle "nicht atomar" ausgeführt werden, um kompatibel mit dem Vorbild zu bleiben?[/zitat]
In diesem konkreten Fall müsstest sich das vM genauso wie das reale Modul verhalten, wenn Du das vM auf "Interne Koimmandos nicht in den Bus senden" stellst. Habe ich aber nicht selbst ausprobiert.
[/zitat]
Ich habe es jetzt probiert! 100% Volltreffer.
So ist es:
Code: Alles auswählen
14:44:01:890 - LPRO an M010 Sende Tasten: 1 - - - - - - - A=kurz
14:44:02:062 - M010 StatusL Relais: 1 0 0 0 0 0 0 0
14:44:02:218 - M010 StatusL Relais: 1 1 0 0 0 0 0 0
14:44:02:421 - M010 StatusL Relais: 1 1 1 0 0 0 0 0
14:44:02:421 - M010 StatusL Relais: 1 1 1 0 0 0 0 0
14:44:03:343 - LPRO an M010 Sende Tasten: 1 - - - - - - - A=kurz
14:44:03:531 - M010 StatusL Relais: 1 1 1 0 0 0 0 0
14:44:16:343 - LPRO an M010 Sende Tasten: - 2 - - - - - - A=kurz
14:44:16:500 - M010 StatusL Relais: 1 1 0 0 0 0 0 0
14:44:17:609 - LPRO an M010 Sende Tasten: - 2 - - - - - - A=kurz
14:44:17:812 - M010 StatusL Relais: 1 0 0 0 0 0 0 0
14:44:18:687 - LPRO an M010 Sende Tasten: - 2 - - - - - - A=kurz
14:44:18:812 - M010 StatusL Relais: 0 0 0 0 0 0 0 0
14:44:22:093 - LPRO an M010 Sende Tasten: - 2 - - - - - - A=kurz
14:44:22:234 - M010 StatusL Relais: 0 0 0 0 0 0 0 0
Niko"s Prognose war richtig!
Allerdings ist es auch nicht schön zu sehen, dass die Funktion einer Programmierung von davon abhängt, ob "Interne Koimmandos nicht in den Bus senden" gesetzt ist.
Ich denke, dass aktuelle vM Verhalten sollten wir dann im internen LinHK Bereich fortsetzen.
Vielleicht werden zukünftige vM ihr Verhalten ja noch mehr der Realität anpassen.
[zitat]Original von Niko
Bei Ueli hat eine weitere Taste das Sperren übernommen und dadurch die Situation entschärft. Und wenn man bei vier Tasten bleiben möchte, könnte man die derzeitigen LANG-Kommandos auf LOS legen und die derzeitigen KURZ-Kommandos auf LANG. Dann wären die kurzen Tasten frei für ein STV-Ziel, das die Tasten dann mit Verzögerung neu sperrt.[/zitat]
Ja, in der Art sollten wir die Musterlösung vielleicht ins Wiki aufnehmen.
Ein STV für die C-Tabelle sollte ja reichen - da kann es aber vorkommen, dass es 1-2 Sekunden dauert bis die nächste Stufe freigegeben wird. Motor ganz einschalten bzw. ganz ausschalten kann so mindestens zwischen 3-6 Sekunden dauern.
Gruß, Martin - dessen Haare sich jetzt wieder legen müssen
PS: wie geschrieben ist Tastensperren vielleicht nicht die eleganteste (sicherste) Methode für diesen Anwendungsfall
- Editiert von MartinH am 21.03.2009, 15:56 -
-
- Lord Forum
- Beiträge: 1511
- Registriert: Di 11. Mai 2004, 16:39
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
#46 RE: Motorsteuerung mit zwei Taster
[zitat]Original von Niko
Tauscht in Uelis erstem Vorschlag die Taste C5 gegen die Taste B5. Wer weiß, warum es jetzt nicht mehr klappt? [/zitat]
Darf ich nochmal?
Willst Du damit sagen "B<C" ?
Also B-Tasten kommen vor C-Tasten dran - selbst wenn in der Befehlschlange C-Tastenbefehle schon lange auf ihre Abarbeitung warten ??
Gruß, Martin - der gerade im Wiki nach entsprechende Doku gesucht hat und sieht, dass Florian schon dazu mal was angefangen hat: http://www.b-forum.de/wiki/index.php?title=Befehle
Tauscht in Uelis erstem Vorschlag die Taste C5 gegen die Taste B5. Wer weiß, warum es jetzt nicht mehr klappt? [/zitat]
Darf ich nochmal?
Willst Du damit sagen "B<C" ?
Also B-Tasten kommen vor C-Tasten dran - selbst wenn in der Befehlschlange C-Tastenbefehle schon lange auf ihre Abarbeitung warten ??
Gruß, Martin - der gerade im Wiki nach entsprechende Doku gesucht hat und sieht, dass Florian schon dazu mal was angefangen hat: http://www.b-forum.de/wiki/index.php?title=Befehle
#47 RE: Motorsteuerung mit zwei Taster
[zitat]Original von MartinH
Willst Du damit sagen "B<C" ?
Also B-Tasten kommen vor C-Tasten dran - selbst wenn in der Befehlschlange C-Tastenbefehle schon lange auf ihre Abarbeitung warten ??[/zitat]
Ja, genau so ist es. Dadurch, dass die Module anscheinend eingehende Kommandos auf der Datenader höher priorisieren, als bereits intern vermerkte abzuarbeitende Tastendrücke, kann sich da schon mal was dazwischenmogeln. Ist aber auch nachvollziehbar, denn sonst müsste ein Modul ggf. ja Bustelegramme für eine spätere Verarbeitung zwischenspeichern. So wird das Telegramm gleich verarbeitet und eine ggf. auszulösende Taste erst mal einfach nur vermerkt und später abgearbeitet, wenn wieder etwas mehr Zeit ist.
Ich hatte mir das zunächst nur theoretisch überlegt, es vor dem Posten aber vorsorglich nochmal an einem realen Modul überprüft, es ist wirklich so.
Schöne Grüße
Niko, der solche Abhängigkeiten in der Parametrierung lieber ganz vermeidet
Willst Du damit sagen "B<C" ?
Also B-Tasten kommen vor C-Tasten dran - selbst wenn in der Befehlschlange C-Tastenbefehle schon lange auf ihre Abarbeitung warten ??[/zitat]
Ja, genau so ist es. Dadurch, dass die Module anscheinend eingehende Kommandos auf der Datenader höher priorisieren, als bereits intern vermerkte abzuarbeitende Tastendrücke, kann sich da schon mal was dazwischenmogeln. Ist aber auch nachvollziehbar, denn sonst müsste ein Modul ggf. ja Bustelegramme für eine spätere Verarbeitung zwischenspeichern. So wird das Telegramm gleich verarbeitet und eine ggf. auszulösende Taste erst mal einfach nur vermerkt und später abgearbeitet, wenn wieder etwas mehr Zeit ist.
Ich hatte mir das zunächst nur theoretisch überlegt, es vor dem Posten aber vorsorglich nochmal an einem realen Modul überprüft, es ist wirklich so.
Schöne Grüße
Niko, der solche Abhängigkeiten in der Parametrierung lieber ganz vermeidet
-
- Administrator
- Beiträge: 5293
- Registriert: Mi 10. Jan 2007, 18:49
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 15 Mal
- Kontaktdaten:
#48 RE: Motorsteuerung mit zwei Taster
Hallo Martin,
Das ist schon über zwei Jahre alt
Ich denke, das wir momentan sehr philosophisch diskutieren. Die Praxis zeigt, EI ist kein Philosoph und wir sollten uns mehr an die Gegebenheiten halten als zu überlegen, ob er das nicht hätte besser programmieren können.
Niko hat schon gesagt, es ist eine andere Logik dahinter als bei den VMs, ohne eine Bewertung.
Eine Erweiterung des Wikis auf die inzwischen herausgefundenen Details wäre toll. Der Rest gehört in die Wunschliste.
Gruß
Florian
Das ist schon über zwei Jahre alt
Ich denke, das wir momentan sehr philosophisch diskutieren. Die Praxis zeigt, EI ist kein Philosoph und wir sollten uns mehr an die Gegebenheiten halten als zu überlegen, ob er das nicht hätte besser programmieren können.
Niko hat schon gesagt, es ist eine andere Logik dahinter als bei den VMs, ohne eine Bewertung.
Eine Erweiterung des Wikis auf die inzwischen herausgefundenen Details wäre toll. Der Rest gehört in die Wunschliste.
Gruß
Florian
-
- Lord Forum
- Beiträge: 1511
- Registriert: Di 11. Mai 2004, 16:39
- Hat sich bedankt: 4 Mal
- Kontaktdaten:
#49 RE: Motorsteuerung mit zwei Taster
[zitat]Original von Beleuchtfix
Ich denke, das wir momentan sehr philosophisch diskutieren. Die Praxis zeigt, EI ist kein Philosoph und wir sollten uns mehr an die Gegebenheiten halten als zu überlegen, ob er das nicht hätte besser programmieren können.
[/zitat]
Diese "philosophische" Diskussion hat ja schon einen sehr handfesten Bezug zur Wirklichkeit, der darüber entscheidet, ob eine Implementierung sicher funktioniert oder nicht.
In diesem Fall muß man lernen (für mich war es jedenfalls neu), dass ein "einzelner Sende-Taste-Befehl" an mehrere Tasten ~gleichzeitig~ so zu betrachten ist, wie eine lockere "Sequenz von Sende-Taste-Befehlen", die jeweils eine der Zieltasten aufruft.
Das hat starke Konsequenzen insbesondere im Zusammenspiel mit Tastensperrungen (wie das Beispiel hier zeigte).
EI hat sich nicht Philosophie sondern Perfektion auf die Fahnen geschrieben und dazu gehört auch, dass solche Details geklärt (dokumentiert) sind.
[zitat]Original von Beleuchtfix
Der Rest gehört in die Wunschliste.
[/zitat]
Welcher Rest bleibt denn noch ?
Ich möchte ja nicht, dass mit einer neuen Modulserie plötzlich ein anderes Verhalten implementiert wird.
Gruß, Martin - der überlegt, wie man dies spezielle Sende Tasten Verhalten besonders positiv nutzen kann
Ich denke, das wir momentan sehr philosophisch diskutieren. Die Praxis zeigt, EI ist kein Philosoph und wir sollten uns mehr an die Gegebenheiten halten als zu überlegen, ob er das nicht hätte besser programmieren können.
[/zitat]
Diese "philosophische" Diskussion hat ja schon einen sehr handfesten Bezug zur Wirklichkeit, der darüber entscheidet, ob eine Implementierung sicher funktioniert oder nicht.
In diesem Fall muß man lernen (für mich war es jedenfalls neu), dass ein "einzelner Sende-Taste-Befehl" an mehrere Tasten ~gleichzeitig~ so zu betrachten ist, wie eine lockere "Sequenz von Sende-Taste-Befehlen", die jeweils eine der Zieltasten aufruft.
Das hat starke Konsequenzen insbesondere im Zusammenspiel mit Tastensperrungen (wie das Beispiel hier zeigte).
EI hat sich nicht Philosophie sondern Perfektion auf die Fahnen geschrieben und dazu gehört auch, dass solche Details geklärt (dokumentiert) sind.
[zitat]Original von Beleuchtfix
Der Rest gehört in die Wunschliste.
[/zitat]
Welcher Rest bleibt denn noch ?
Ich möchte ja nicht, dass mit einer neuen Modulserie plötzlich ein anderes Verhalten implementiert wird.
Gruß, Martin - der überlegt, wie man dies spezielle Sende Tasten Verhalten besonders positiv nutzen kann
-
- (†)
- Beiträge: 14250
- Registriert: So 26. Mai 2002, 23:10
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 56 Mal
#50 RE: Motorsteuerung mit zwei Taster
Haarem-aleikum ... :-O
Ich hab"s gelesen (danke Niko) - und ich denke das kann ich hier auch gleich so weitergeben.
Für mich macht das Sinn
Bitte keine Änderungen (außer im Wiki).
Grüße, Uwe
Ich hab"s gelesen (danke Niko) - und ich denke das kann ich hier auch gleich so weitergeben.
Für mich macht das Sinn
Bitte keine Änderungen (außer im Wiki).
Grüße, Uwe
----------------o00o----'(_)'----o00o---------------------
Zurück zu „Hardware Eigenproduktionen“
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste