Forum: PC-Programmierung Pseudocode - UML-Parser


von Andreas (Gast)


Lesenswert?

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!

von physiker (Gast)


Lesenswert?

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.

von physiker (Gast)


Lesenswert?

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.ä.).

von Andreas (Gast)


Lesenswert?

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

von physiker (Gast)


Lesenswert?

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.

von Andreas (Gast)


Lesenswert?

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ß

von physiker (Gast)


Lesenswert?

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

von H. K. (spearfish)


Lesenswert?

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.

von Andreas R. (daybyter)


Lesenswert?

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.

von Eric B. (beric)


Lesenswert?

Lua oder TclTk sind genau für solchen Fällen gedacht.

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
Noch kein Account? Hier anmelden.