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!
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.