Ankündigung
Einklappen
Keine Ankündigung bisher.
In der Tiefe: Validierungskonzept
Einklappen
X
-
Wenn man Probleme hat, kann man sich auch Variablen für Zwischenergebnisse definieren und anzeigen lassen. Damit kann man sehr wohl die einzelnen Schritte in einer IF then else Anweisung anzeigen lassen.
Ich finde die Diskussion hier etwas unsinnig, der EibPC ist keine grosse Siemens-Steuerung. Bei einer SPS wie der Siemens werden nur zu jeder Zeit alle vorhandenen Ein- und Ausgänge ausgewertet, was verhältnismäßig einfach und trivial ist, trotzdem benötigt man einige Wochen der Schulung um selbst die kleinsten Ansätze zu programmieren.
Der KNX-Bus hat eine andere Aufbau und versendet Informationen nur gelegendlich bzw. bei Änderungen. Eine Auswertung ist deshalb bedeutend komplizierter.
Wenn Enertex jetzt eine Krücke gefunden hat, damit wir einfachen Häuslebauer damit einfach umgehen können und der EibPC alles das macht, was wir wollen, so ist dies eine große Leistung. Es ist generell einfach, auf mehrfache If Verzweigungen zu verzichten und Verschachtelungen wegzulassen, wenn man mit dem Ergebnis nicht zurechtkommt.
Vielleicht sollte Enertex einfach die Verschaltelung blockieren, damit ihr mit eurer SPS-Erfahrung auch mit dem EibPC umgehen könnt.
Unterm Strich seit ihr 2 die einzigen, die sich Seitenweise darüber aufregen, alle anderen haben offensichtlich keine Probleme damit, darüber solltet ihr mal nachdenken.
Einen Kommentar schreiben:
-
Fassung des Einblickes vom 17.09.10:
"Ändert man das Beispiel wie folgt:
[highlight=epc]
a=AUS
b=1
c='1/2/3'b01
if change(a) then {
if b==2 then write('1/2/3'b01,EIN) endif
if b==1 then write('1/2/3'b01,AUS);b=2 endif
} endif
[/highlight]
so wird nun bei der ersten Änderung von a die erste innere if-Anweisung ungültig, aber die Abfragebedingung steht
auf 0b01, da ja die Variable b noch auf 1 steht. Die zweite innere if-Anweisung wird aber ausgeführt. Beim nächsten
(und allen weiteren) wird diese ausgeführt."
"Diese" bezieht sich hier auf die "zweite innere if-Anweisung". Das ist sicherlich nicht gemeint, oder?
Einen Kommentar schreiben:
-
Den Debugger sollte man erweitern, denn die Werte der Variablen werden ohne Zeitbezug angezeigt. Bei kurzen Timings oder bei Zählern oder Toggel-Flags ändert sich der Wert schneller als man klicken kann. Eine Liste mit automatisch updatenden Variablen vermisse ich daher auch.
Zum Thema Debugger hätte ich auch noch 3:
- Anzeige aller aktuell laufender Timer (sehe ich als sehr wichtig an)
- Historie der Variablenwerte (Debugcode und nur augewählter Variablen?)
- Breakpoints (im laufenden Code) auch mit Trigger auf bestimmte Variablenwerte
Einen Kommentar schreiben:
-
Du kannst auch nach markierten Variablen sortieren lassen. Dann stehen die ausgewählten immer oben oder ganz unten (je nach Sortierung)Zitat von IBFS Beitrag anzeigenWie gesagt, bei einer sehr großen Anzahl von GAs ist die Sortierfunktion des Debuggern nicht ausreichend
Bin halt ein Weichei...Im Übrigen brich nicht immer gleich in Tränen aus.
Einen Kommentar schreiben:
-
Ich dachte da eher an ein selbst vervorständigbare Tabelle:Zitat von enertegus Beitrag anzeigenDas ist doch gerade der Debugger. Der zeigt sowohl das Abbild der GAs im EibPC als auch die Variablen. Man die Verändern und sieht die Reaktion (http://www.youtube.com/watch?v=jVaGNypxbao).
GA ----------------- WERT ----------------- DATENTYP
wo ich ohne UPDATEN-TASTE nur die Varablen in der Liste sehe,
die ich sehen will. Am besten wäre,man könnte die GAs mit der
Hand eintragen und je nach Zweck oder Etage, verschiedene
Variablenlisten anlegen. So kenne ich das von "meiner" SIEMENS-SPS
und ich finde das sehr angenehm und auf des Wesentliche reduziert.
Dieses in Listen Rumgesuche und rumgescrolle kenne ich z.B. von
Codesys und das geht mir echt auf den Keks. Das sieht bei Demos mit
10 Variablen imer ganz hübsch aus, aber wenn man, wie z.B. in manchen
SPS-Programmen 2000 Variablen hat, na dann gute Nacht Scrollrad.
Es ist nunmal besser, wenn ich jede Änderung dieser Vaiablen in der
Userliste direkt sehen kann ohne immer erst KLICK-KLICK-KLICK zu
machen. In der Statuszeile muss ich ja auch nicht "UPDATE"
drücken.
Wie gesagt, bei einer sehr großen Anzahl von GAs ist die Sortierfunktion
des Debuggern nicht ausreichend, für GAs von zwei Zimmer mag
der Debugger ausreichend sein, aber das ist ja nicht der Reglefall.
Im Übrigen, an meinen SPS-Programmen wird auch ständig rumgemault
brich nicht immer gleich in Tränen aus. Wenn ich das jedesmal machen
würde, soviel Taschentücher hätte ich garnicht.
Frank
Einen Kommentar schreiben:
-
Das ist doch gerade der Debugger. Der zeigt sowohl das Abbild der GAs im EibPC als auch die Variablen. Man die Verändern und sieht die Reaktion (http://www.youtube.com/watch?v=jVaGNypxbao).Zitat von IBFS Beitrag anzeigenWenn ich als eine Art Variablentabelle unabhängig vom Programmcode das GEMERKTE Prozessabblid im EibPC sehen könnte, wäre sofort klar, warum Befehl nicht ausgeführt wird.
Einen Kommentar schreiben:
-
Zitat von IBFS Beitrag anzeigen@enertegus
Der EibPC im Zusammenhang mit dem KNX-Bus ist da so ein MitteldingUnguldig bin ich doch nicht, das schmerzt mich, dieser Vorwurf.Da mußt du schon Geduld haben. schließlich müssen WIR Enduser deine Ideen erst einmal verstehen.








Ich gib mir doch alle Mühe. NochmalNur die Leute die wirklich verstehen was passiert, könnten die EibPC-Kiste richtig ausnutzen.
Einen Kommentar schreiben:
-
1. Ich habe da bereits was ergänzt zum Thema zeitgesteuerte Variablen. After wird z.B. gar nicht erst erlaubt im then Zweig. Grundsätzlich werden die Zeitfunktionen behandelt wie der Rest.Zitat von saft6luck Beitrag anzeigenE
Offene Fragen sind:
- wie werden zeitgesteuerte Befehle behandelt, im then und im else Zweig.
- wie funktioniert die Invalidierung im else Zweig
- im Text steht, das das if alle Befehle im then Zweig invalidiert, später im Text wird aber jedes Kommando für sich (noch einmal?) invalidiert.
[highlight=epc]
if Taste then {
if htime(12,00,00) then {
machwas()
} endif
}endif
[/highlight]
machwas() würde nur ausgeführt, wenn Taste exakt um 12:00:00 auf EIN geht. Besser daher chtime, dann würde machwas() aufgerufen, wenn Taste nach 12:00 und vor Mitternacht auf EiN geht.
Ich werde das ergänzen. Irgendwann wird das schon noch klar, hoffe ich.
2. zum Else zweig siehe letztes Beispiel, ist quasi eine negierte if-Anweisung mit then Zweig.
habe ich auch nie angezweifelt.Ich habe über 20 Jahre Programmiererfahrung
Deswegen ist das ja (wie man sicher bemekrt hat) ein Teil des nächsten Handbuchs.Zu einem Produkt gehört eine Anleitung.
Nun, das waren10%, von denen aber 98% mit der bereits erhaltenen Erklärung zufrieden sind bzw. geht es dann höchstens noch um einen Unklarheit und weniger um eine Grundsatzdiskussion. Es ist wohl jedem klar, dass wir grundsätzlich von diesem Konzept nicht abweichen werden, auch nicht einen C-Compiler oder ähnliches bereitstellen.Wenn du die 10% der Anwender
Diejenigen, die das so im intensiv einsetzen, kaufen nur einen EibPC. Die, die mehr als einen kaufen, finden es eher schön einfach, weil die essentiellen Dinge einfach zu erledigen sind. Das macht auch den wirtschaftlichen Erfolg aus.viel GuK-Kosten sparen. Sieh es einmal von der Seite.
Ich selbst sehe aber ein, dass der Kunde schon fragen darf, wenn es in die Tiefe geht und deswegen hier diese Erklärungen. Und wenn es sich nicht mit seinen Programmiererfahrungen deckt und er was neues lernen will, soll das hier auch möglich sein. Enertex lässt sich da auf die Kunden ein und eine "kontinuierlicher Verbesserungsprozess" ist durchaus im Sinne von Enertex. Immerhin habe ich ja auch die eval-Funktion eingebaut. Ist quasi dein Kind.
EDIT
Unter http://www.youtube.com/results?search_query=eibpc&aq=f gibt es Instruktionen für den Anfang. Das bewegt eigentlich die meisten Anwender. Oder man schau sich die Makrolib 1.008 an.Dort sind auch nahezu triviale Makros drinne, aber diese sind gewünscht und gebraucht.
Einen Kommentar schreiben:
-
JEDE Religion braucht ihre Anleitung und die Bibel hat auch nicht nur 150 Seiten.Zitat von saft6luck Beitrag anzeigenZu einem Produkt gehört eine Anleitung. Wenn du die 10% der Anwender, die offensichtlich auf die Problematik gestoßen sind, mit einer Anleitung bedienen könntest, könntest du bestimmt viel GuK-Kosten sparen. Sieh es einmal von der Seite.
Und wier ich schon schrieb - der EibPC ist eine eigene Steuerungklasse.
Das habt ihr nun davon :-)
Frank
Einen Kommentar schreiben:
-
@enertegus
Ich denke die Irritationen haben folgende Ursachen:
1.
Wie eine SPS arbeitet, wissen doch eine ganze Menge Leute - Einlesen Prozessabbild - Verabeiten - Ausgeben an das Prozessabbild
2.
Wie bestimmte PC-Applikationen arbeiten wissen auch schon ein ganz paar Leute.
3.
Der EibPC im Zusammenhang mit dem KNX-Bus ist da so ein Mittelding
Der KNX-BUS ist nicht wie bei einem PROFIBUS oder CAN-BUS, der an eine
SPS-angeschlossen ist ein ständig pollender BUS sondern überträgt nur
wenn etwas passiert (Sensor), wenn was geschaltet werden soll oder STATUS-Abragen ausgeführt werden.
Dadurch ist der Zustand des Prozessabbildes im EibPC nach dem Einschalten desselben UNGLEICH des realen Zustandes.
Auch kann man anderes als bei eine SPS den AUSGANG :=1 nicht in
ständig herunterschreiben sondern nur nach Anlauf des EibPC oder
wenn DAS ERSTE MAL ein IF-THEN-KONSTRUT zuschlägt.
DAHER MUSS MANN SICH MERKEN DAS MAN SCHON GESENDET HATTE.
Sonst wird ja der BUS zugemüllt.
Das ist einer der wichtigesten Unterschiede.
Der EibPC ist eine Sonderkonstrukt mit einem Sonder-Validierungsschema, was ihr dafür
erfunden habt. Das könnt in voller Perfektion nur ihr verstehen.
Das ist so als würde jemand noch nie was von einer SPS gehört haben und muss sich erst
das Verständnis erarbeiten. Da mußt du schon Geduld haben. schließlich müssen WIR
Enduser deine Ideen erst einmal verstehen. Der EibPC ist nun mal was eigenes mit eigenen
Regeln und eigenen Konzept. Da mußt du durch enertegus, ob du willst oder nicht.
Nur die Leute die wirklich verstehen was passiert, könnten die EibPC-Kiste richtig ausnutzen.
Code:SPS: IF Bedingung THEN SETZE Ausgang ELSE RESET Ausgang ENDIF;Code:EibPC-Variante 1 IF "erste erkannte Zustandsänderung (quasi Flanke)" THEN SENDE Ausgang ELSE mache nix ENDIF;Ich habe bewußt nicht die echte EibPC-Notationen verwendet.Code:EibPC-Variante 2 IF "Zustandsabfrage permanent" THEN SENDE EINMALIG Ausgang ELSE mache nix ENDIF;
Leider empfinden aber viele den EibPC als eine Art SPS und wundern sich,
wenn ich IF-THEN Konstrukten sich nicht einfach so verhalten wie in einer
SPS (was sehr einfach zu verstehen wäre) sondern wenn dann vom
Validierungskonzept die Rede ist usw.
Egal woher man kommt. Von der SPS-Welt oder der PC-Welt.
Er EibPC im Zusammenhang mit den KNX-Bus ist so ein Mittelding,
was man eben mit normalen gewohnten Denkweisen nicht weiterkommt.
Diese Umdenken bei gleichzeitig fast identische Funktionsnamen führt aber
letztendlich zu den andauernden Verwirrungen.
Komplizierte Erklärtungen helfen da nicht weiter, wenn man nicht die gleiche
Sprache spricht.
Was hilft sind eine Vielzahl von geprüften Codefragmenten, die man am
Ende einfach nur verwendet und wo man sich dann über grundsätzlich
Sachen keinen Kopf mehr zu machen braucht.
Aber für mich als SPS-Programmierer viel wichtiger!!!!
Wenn ich als eine Art Variablentabelle unabhängig vom Programmcode
das GEMERKTE Prozessabblid im EibPC sehen könnte, wäre sofort
klar, warum Befehl nicht ausgeführt wird.
ABER
man sieht nicht und weiß nicht den internen gemerkten Zustand im EibPC!
Das ist m.E. das wichtigste "I WANT TO HAVE" für mich.
Es macht keinen Sinn in Logfiles zu suchen, wenn man eine Aktualdaten-Liste, sortiert nach GA im EibPC hätte.
Das wäre das absolute FEATURE was es meines Wissen noch nirgens gibt.
Frank
Einen Kommentar schreiben:
-
Ehrlich gesagt kann ich dir nicht folgen. Multitasking im weitesten Sinne, parallele Ausführung und Multithreading im speziellen haben etwas mit Laufzeit zu tun. Wenn ich Jobs parallel verarbeite, werde ich mir u.a. Gedanken über die Verfügbarkeit der Ergebnisse machen müssen. Wenn der eibPC also parallel verarbeitet, (z.B. ein write() ausführt während er 2 weitere write() ein if und eine Zuweisung bearbeitet), dann muss ich mir als Programmierer Gedanken über die Mechanismen zur Ablaufsteuerung machen müssen, damit nicht das if ausgeführt wird, bevor die Zuweisung abgearbeitet ist. Das ist aber beim eibPC nicht der Fall, oder? Hier wird alles schön sequentiell ausgeführt, jedenfalls sagen das die Beispiele. Eine parallele Ausführung bedeutet bei einem 1CPU Rechner auch nur, dass die einzelnen Berechnungen nicht 'am Stück' sondern auf 'Stückchen verteilt' ausgeführt werden und somit die Ergebnisse abhängig von der Laufzeit der einzelnen Threads verfügbar sind.Zitat von enertegus Beitrag anzeigenSicher (zumindest so wie formuliert).
Werden z.B. alle write()-Ausgaben in eine Schlange gestellt und diese 'im Hintergrund' auf den Bus geschrieben, könnte man von paralleler Verarbeitung sprechen, nur betrifft das nicht die Abarbeitung der Befehle. Oder meinst du das?
Die Sache mit der Verschachtelung habe ich immer noch nicht verstanden, d.h. ich kann mir keine Regel bilden, nach der ich bei der Programmierung die gewünschte Ausführung leicht verifizieren kann.Für die Verschachtelung ist es dann wie erklärt relavant. Aber ich pass das gerne auch nochmal an.
Offene Fragen sind:
- wie werden zeitgesteuerte Befehle behandelt, im then und im else Zweig.
- wie funktioniert die Invalidierung im else Zweig
- im Text steht, das das if alle Befehle im then Zweig invalidiert, später im Text wird aber jedes Kommando für sich (noch einmal?) invalidiert.
Ich empfinde es als sachlich und direkt mit einem Schuss Sarkasmus. Herablassend sollte es nicht sein. Wenn ich mir die Anzahl deiner Antworten auf konkrete Fragen, Hinweise, Wünsche und Probleme von mir ansehe, sehe ich den Schwarzen Peter aber nicht nur auf meiner Seite. Ich schätze deine Arbeit, auch wenn ich vom Validierungsschema nichts halte, dazu stehe ich. Ich habe über 20 Jahre Programmiererfahrung, u.a. im embedded Bereich mit Assembler, C, LabView, Matlab-Simulink-Stateflow-Targetlink, dSpace Autoboxen, vielen Debuggern, automatisierten Testtools, schon fast vergessenes VHDL und FPGAs, VisualC++ auch auf PDAs, Xcode und iPhone Programmierung und ... und ... und kein SPS, ja! Und noch nie sah etwas so trivial aus und hat solche Probleme bereitet, wie das Validierungschema. Da fand ich etwas Sarkasmus schon angebracht. Aber ich werde mich wohl noch mehr zurückhalten (müssen)!Ich finde, es stünde einem gut zu Gesichte, in einem User-Forum wie diesem hier weniger herablassend seine Äußerungen posten.
Zu einem Produkt gehört eine Anleitung. Wenn du die 10% der Anwender, die offensichtlich auf die Problematik gestoßen sind, mit einer Anleitung bedienen könntest, könntest du bestimmt viel GuK-Kosten sparen. Sieh es einmal von der Seite.Am Ende des Tages versuch ich wohl hier die Sache für 10% der Anwender zu erklären (das seh ich aus unseren Supportanfragen). Mir ist dabei jeder Anwender wichtig, ich hoffe das kommt zumindest rüber.
Einen Kommentar schreiben:
-
Sicher (zumindest so wie formuliert).Zitat von saft6luck Beitrag anzeigenBist du der Meinung, wenn ich das Zeitfenster nur weit genug aufmache, wird jeder Ausführung des Codes zum Multithreading?
Für die Verschachtelung ist es dann wie erklärt relavant. Aber ich pass das gerne auch nochmal an.Da frag ich mich, warum nun das Verhalten von if anders sein soll, wenn am Ende doch wieder nur die Änderung des Wertes der Abfragebedingung relevant ist.
Ich finde, es stünde einem gut zu Gesichte, in einem User-Forum wie diesem hier weniger herablassend seine Äußerungen posten.Was kannst du dann besser beschreiben?
Am Ende des Tages versuch ich wohl hier die Sache für 10% der Anwender zu erklären (das seh ich aus unseren Supportanfragen). Mir ist dabei jeder Anwender wichtig, ich hoffe das kommt zumindest rüber.
Einen Kommentar schreiben:
-
Was willst du denn mit der Aussage: "alle Anweisungen parallel in einem Zyklus abgearbeitet werden" sagen?Zitat von enertegus Beitrag anzeigenDas trifft aber auch für multithreading Systeme zu, welche nur 1 CPU haben. Innerhalb einer Zeitunschärfe eben nicht.
Bist du der Meinung, wenn ich das Zeitfenster nur weit genug aufmache, wird jede Ausführung des Codes zum Multithreading?
Sag ich ja, nur warum "parallele Verarbeitung" wenn dann doch nicht?Was ja auch geschehen ist.
z.B.Für die Anregungen bin ich ja grundsätzlich dankbar - und habe ja schon nachgelegt. Was ist da nun noch unklar?
"Die If-Anweisung verhält sich wie eine Funktion, deren Argument die Abfragebedingung darstellt. Wenn die Abfragebedingung ungültig wird, so wird if neu ausgewertet und zwar unabhängig davon, ob sich die Abfragebedingung vom Wert her ändert. Da die Abfragebedingung aber nur invalid werden kann, wenn sich deren Wert ändert, ist de facto eine ungültige Abfragebedingung auch eine veränderte Abfragebedingung."
Da frag ich mich, warum nun das Verhalten von if anders sein soll, wenn am Ende doch wieder nur die Änderung des Wertes der Abfragebedingung relevant ist. Steht evtl. im Zusammenhang mit dem Beispiel über systemstart() und der Aussage, dass der then-Zweig grundsätzlich invalidiert wird, aber Antworten auf meine Fragen gibst du ja nicht und so ist das halt nicht zu verstehen.
Mein Tip ist: Nimm dir mein Posting vor, Zeile für Zeile, vergleich es mit dem Redigierten Text und versuch den Text als Anwender mit gefährlichem Halbwissen zu sein. Was kannst du dann besser beschreiben?
Einen Kommentar schreiben:

Einen Kommentar schreiben: