Guten Morgen! Mir fiel leider keine bessere Überschrift ein, da man das Thema schlecht in wenige Worte packen kann. Es geht um eine Software, die ich in Java (GUI: Swing) programmiert habe. Diese Software soll nun erweitert werden, um einem nicht-fachkundigen User die Möglichkeit zu geben, gewisse Programmabläufe zu erstellen. Die besagte PC-Software dient zur Steuerung eines an den PC angeschlossenen Geräts. Um das Gerät als fachkundiger User anzusteuern, kann man per Terminal kryptische Befehle ans Gerät schicken, welches es dann ausführt. Dies möchte ich aber dem Endkunden ersparen und ihm die Möglichkeit geben, einen "Pseudocode" erstellen zu können, der aus kryptischen Befehlen verständliche und für ihn lesbare macht. Desweiteren soll der User damit auch eine Aneinanderreihung von Befehlen an das Programm übermitteln können. Sprich eine Art Programm, welche dann vom Gerät abgearbeitet wird. Z.B. SET_TEMP 100 WAIT_MIN 10 SET_TEMP 80 WAIT_MIN 2 SWITCH_OFF Diese Programmabläufe können dann in einem Textfile (oder was auch immer) gespeichert und wieder geladen/ausgeführt werden. Was natürlich der Overkill wäre, wäre die Möglichkeit einer solchen Befehlsanordnung mittels GUI, dass man sich in eine freie Fläche der GUI sämtliche Steuerelemente reinzieht und diese dann nach Belieben verkettet. (So wie beim GUI-Erstellen in Visual Studio..) Wisst ihr, ob dies mit Java/Swing möglich ist? Wie könnte man das Ganze am besten angehen? Zum Thema Befehle an das Gerät: Ist es besser, die Befehle nacheinander von der PC-Software an das Gerät zu schicken oder sollte man nach Abschluss eines geschriebenen Programmablaufs das Ganze an den Mikrocontroller im Gerät schicken, der diese Befehle dann nacheinander abarbeitet? Fragen über Fragen... Ich hoffe, ihr könnt mir helfen. Vielen Dank!
Hier mal gegoogelt (hier grafisch, nach Art OpenSource LabView): https://github.com/tumcms/TUM.CMS.VPLControl https://en.wikipedia.org/wiki/Visual_programming_language#Visual_languages http://stackoverflow.com/questions/2302240/platform-for-creating-a-visual-programming-language Ansonsten python Interpreter einbauen und unbedarftem User entsprechende einfache Codeschnipsel an die Hand geben.
Andreas schrieb: > Zum Thema Befehle an das Gerät: > Ist es besser, die Befehle nacheinander von der PC-Software an das Gerät > zu schicken oder sollte man nach Abschluss eines geschriebenen > Programmablaufs das Ganze an den Mikrocontroller im Gerät schicken, der > diese Befehle dann nacheinander abarbeitet? Hängt davon ab ob Timing relevant ist, sich der Programmablauf noch zwischendurch ändern kann oder irgendeinen Input vom PC bekommt und wenn sich der PC plötzlich verschluckt irgendetwas schlimmes pasieren kann (Heizung schaltet nicht ab o.ä.).
Hallo! Danke für die Links und Infos, aber ich glaube ich habe vergessen zu sagen, dass ich das Ganze in mein Programm integrieren möchte. Das heißt, dass der Endkunde das alles über meine Software machen soll und nicht über eine andere Software, die entsprechende "visuelle Programmierverfahren" zur Verfügung stellt. Deshalb nochmal die Frage: Gibt es für Java die Möglichkeit, Swing-Komponenten während der Laufzeit zu positionieren und zu verknüpfen/verschieben?!
Das habe ich mir auch gedacht. Der erste Link ist auch eine Komponente die man in sein eigenes Programm einbauen kann, leider aber .net und nicht Java.
Letzten Endes wäre es wohl auch möglich, einfach eine zweispaltige ListView mit Befehlen zu erzeugen, welche mittels beschrifteten Buttons (welche die Aktionen beherbergen, z.B. "WAIT", "CHANGE_TEMP", "SWITCH_DEVICE_ON"...) und deren Wert nacheinander in der ListView angeordnet werden. Über "Pfeil-hoch" und "Pfeil-runter"-Buttons kann man dann die jeweilige markierte Position des Befehls nach "oben" oder "unten" verschieben, es abspeichern (als xyz exportieren) und laufen lassen. So kann es schon zu keinen Syntaxfehlern kommen, die man zusätzlich parsen müsste, wenn der Kunde die Befehle in Klartext eingäbe. Gruß
Klar, wenn Du keine Schleifen, Verzweigungen oder andere Konstrollstrukturen anbieten willst, kannst Du das einfach so machen. Habe ich bereits so implementiert gesehen (leider keine öffentlich zugängliche Software, aber nicht wirklich aufwendig umzusetzen).
Andreas schrieb: > Desweiteren soll der User damit auch eine Aneinanderreihung von Befehlen > an das Programm übermitteln können. Sprich eine Art Programm, welche > dann vom Gerät abgearbeitet wird. Z.B. > SET_TEMP 100 > WAIT_MIN 10 > SET_TEMP 80 > WAIT_MIN 2 > SWITCH_OFF > Diese Programmabläufe können dann in einem Textfile (oder was auch > immer) gespeichert und wieder geladen/ausgeführt werden. Solche Programme zu parsen ist, mit den richtigen Hilfsmitteln, nicht schwer. Ich habe so eine "Programmiersprache" für ein sehr ähnliches Problem bereits einmal implementiert mit Python. Da gibt es verschiedene Parsergeneratoren, welche aus einem Definitionsfile (meistens sind es EBNF-Formate bzw RegExs) einen Parser generieren. Im Grund bekommst du dann in deinem Programmcode quasi pro Befehl eine Liste a la [SET_TEMP, 100, ...] und kannst das dann entsprechend auswerten und in Maschinenbefehle übersetzen. Mein Pythonprogramm hat genau das gemacht und dieses File konnte der Anwender dann direkt zur Maschine laden... Wenn Verzweigungen und Schleifen ins Spiel kommen, wird das ganze vom Programmieraufwand natürlich komplexer aber ist auch noch möglich. Für Java gibt es glaube ich ANTLR, aber damit ich keine Erfahrung. Kann kein Java.
Mit Antlr kenn ich mich leidlich aus, aber da ist es halt noch ein weiter Weg bis zu was benutzbarem. Meine erste Idee waren UML Actions und dann fiel mir das ArgoUML Projekt ein, aber ich glaub, die sind noch nicht soweit, als das es Dir grossartig helfen würde.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.