Hallo zusammen, eine vorhandene Schaltung benötigt ein Konfigurationsfile (Upload via USB, tut aber hier nichts zur Sache), in dem relativ "hardwarenah", sprich der Reihenfolge von Speicherzellen folgend einige Paramter und Regeln stehen, z.B. 'Testparameter ff000001 ffff0001 ff000002 ffff0002 ff000003 ffff0003 ff000004 ffff0004 ff000005 ffff0005 ff000006 ffff0006 'Multiplikatoren 00000001 00ff0001 (... usw.) Das ist jetzt hier eine reichlich vereinfachte Darstellung, und die einzelnen Werte setzen sich teils aus durchaus komplexeren Regeln zusammen (z.B. in Abhängigkeit von digitalen und analogen Eingängen, ... aber ich will auch hier nicht zu sehr ins Detail gehen). Ich habe daher vor, eine eigene einfache Progammiersprache (oder ist es eher eine Beschreibungssprache???) der Form // Inputs deklarieren DIGITAL INPUT CHANNEL 0 NAME mein_sprechender_Name_für_di_0; DIGITAL INPUT CHANNEL 1 NAME mein_sprechender_Name_für_di_1; ANALOG INPUT CHANNEL 0 NAME mein_sprechender_Name_für_ai_0; // Outputs deklarieren DIGITAL OUTPUT CHANNEL 0 NAME mein_sprechender_Name_für_do_0; // "Regeln" und "Berechnungen" ON CHANGE mein_sprechender_Name_für_di_0 SET VALUE_XY = mein_sprechender_Name_für_ai_0 * 0.01; FORWARD VALUE OF mein_sprechender_Name_für_di_0 TO mein_sprechender_Name_für_do_0 // ENDE Das ist jetzt erstmal sehr exemplarisch gehalten und noch nicht sehr ausgegoren wie ihr seht. Ich hoffe trotzdem, dass der Sinn meiner Fragestellung klar wird: Aus eigener Syntax möchte ich mir möglichst innerhalb einer IDE eingangs gezeigte Konfig-Datei "kompilieren" lassen. Ähnliches habe ich für eine andere Hardware mit einer an Eclipse angelehnten von Eclipse abgespeckten ??? IDE gesehen. Fürs googeln fehlen mir hier in erster Linie mal die richtigen Stichpunkte, kann hier jemand helfen? Danke schonmal, ttime
hier ein paar Suchworte: Interpreterbau, Parser, Tokenizer
Wenns unbedingt eclipse sein muss, dann suchst du vielleicht Xtext: http://www.eclipse.org/Xtext/ oder EMF (Eclipse Modeling Framework): http://www.eclipse.org/modeling/emf/ Oder ganz allgemein als Stichwort: http://en.wikipedia.org/wiki/Model-driven_engineering Ich hab aber den Verdacht, der Aufwand da was ans Laufen zu bringen ist relativ hoch- musst du selbst wissen, ob sich das lohnt. Einfacher könnte eine EDSL (Embedded Domain Specific Language) sein. Buzzword für eine ganz normale Bibliothek, wo das programmieren in deiner "Sprache" darin besteht, ein paar Funktionen aufzurufen. Beispiel für deinen Anwendungsfall, mit python (alles andere tuts auch):
1 | # Inputs deklarieren |
2 | DIGITAL_INPUT(CHANNEL=0, NAME="mein_sprechender_Name_für_di_0") |
3 | DIGITAL_INPUT(CHANNEL=1, NAME="mein_sprechender_Name_für_di_1") |
4 | ANALOG_INPUT(CHANNEL=0, NAME="mein_sprechender_Name_für_ai_0") |
5 | |
6 | # Outputs deklarieren |
7 | DIGITAL_OUTPUT(CHANNEL=0, NAME="mein_sprechender_Name_für_do_0") |
8 | |
9 | # "Regeln" und "Berechnungen" |
10 | ON_CHANGE("mein_sprechender_Name_für_di_0", |
11 | SET("VALUE_XY", "mein_sprechender_Name_für_ai_0 * 0.01") |
12 | |
13 | FORWARD_VALUE( |
14 | OF="mein_sprechender_Name_für_di_0", |
15 | TO="mein_sprechender_Name_für_do_0") |
16 | |
17 | # ENDE |
Damit sparst du dir den Parser und hast noch den Vorteil, dass du bei Bedarf auf die dahinterliegende "richtige" Programmiersprache zurückgreifen kannst (z.B. um mehrere gleichförmige Regeln zu generieren).
Riecht nach python, oder auch excel + ein bissl VBA.
Sebastian schrieb: > Hier ist noch eine Übersichtsseite zum Thema eclise und modeling: > > http://www.eclipse.org/modeling/ Ähnliche Probleme habe ich mit Macros in Assembler gelöst - ohne Prozessorbefehle zu benutzen. Ist nicht jedermanns Sache, dazu muss man die Macrosprache beherrschen und das Wort Assembler löst sowieso meistens reine Panik aus. Aber nur mal so als Beispiel:
1 | ; |
2 | ; ***************** |
3 | ; * reverse table * |
4 | ; ***************** |
5 | ; |
6 | ; ! important ! all hexadecimal values must be written |
7 | ; with 2 digits, e.g. 0f for 15; however, "db","dd" and |
8 | ; "df" are reserved words and must be enclosed as <db> ! |
9 | ; |
10 | ; define characters to be exchanged for reverse table |
11 | ; in the form RExch 4e,4f to replace "N" by "O" |
12 | ; |
13 | ; RExch 4e,4f ;N -> O |
14 | ; |
15 | RExch dc,fc ;Ü -> ü |
16 | ; |
17 | ; define characters to be removed for reverse table |
18 | ; in the form RRemv 4e for the char "N" |
19 | ; |
20 | ; RRemv 4e ; rem N |
21 | ; |
22 | RRemv 5e ; rem ^ |
23 | ; |
Die "Befehle" RExch und RRemv legen eine Tabelle (ASCII-Zeichen) an und machen die gewünschten Einträge für zu ändernde und zu entfernende Zeichen, in die anderen Positionen wird ein NOP eingetragen. In Wirklichkeit sind RExch und RRemv MASM-Macros. Eine IDE gibts nicht, ist aber auch nicht nötig. Die Definition wird mit Notepad geschrieben und mit MASM übersetzt. Macros gibts übrigens auch anderswo. Georg
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.