Hallo
DP,
mir schwirrt seit geraumer Zeit das Bedürfnis im Kopf, unsere Software grundlegend umzustrukturieren. Es handelt sich dabei um ein loses Rahmenwerk von visuellen Komponenten gemischt mit einer Hand voll Standardcontrols und ein paar Database-Helferlein, woraus wir maßgeschneiderte Programme zur Anlagenvisualisierung und -steuerung in der Industrie stricken. Das aktuelle System funktioniert auch hervorragend, jedoch ist es mir ein Dorn im Auge, bei jeder kleinen Änderung oder Korrektur das Programm auf allen Arbeitsstationen austauschen zu müssen. (Da dies per Fernwartung, teils auch über alte ISDN Leitungen geht, ist das ein merkbarer Zeitfaktor. Zudem unterbrechen so auch kleine Dinge den laufenden Betrieb, oder man muss es dann tun, wenn gerade keine Schicht arbeitet. Bei 24h Betrieben auch schwer.)
Diese Software ist grunstäzlich immer so aufgebaut, dass die jeweilige Anlage auf mehrere einzelne Fenster in sinnvollen Gruppierungen von Maschinen verteilt dargestellt ist. Dort sind Zustände (eingeschaltete Motoren, geöffnete Ventile etc.) grafisch dargestellt, und oftmals sind Bedienungen in Form von Button-Clicks oder auch Werteingaben in Editfelder möglich. Am unteren Bildrand befindet sich eine Knopfleiste, über die die einzelnen Bilder aufgerufen werden können.
Ein Bild besteht bei mir aus je einem eigenen Formular, dass ich bisher "klassisch" im Delphi Formdesigner zusammenstelle und mit den Eventhandlern verknurpsel. (Diese machen meist auch nur 1-2 Aufrufe von Funktionen unserer Utility-Lib.)
Ich würde aber gerne dort hin kommen, dass das eigentliche Programm an sich weitgehend leer ist. Es soll sich zur Laufzeit seine vorhandenen Bilder mitsamt aller darauf befindlichen Komponenten aus einer zentralen Datenbank abholen, alles instanziieren, und dann weiter machen wie bisher. Was die visuellen Dinge angeht ist das so weit auch kein unlösbares Problem: Ich denke dabei daran die *.dfm in ein BLOB zu werfen, pro Bild/Formular ein Datensatz, und dann (hoffentlich) mittels TParser entsprechend zerpflücken zu können.
Interessanter werden die Funktionen, da die dann ja nicht mehr einkompiliert werden können! Also muss ein Script auf den Tisch. Dieses sollte idealerweise ermöglichen, dass ich wie in Delphi auch auf alle Funktionen diverser Units im Programm Zugriff habe, und vor allem auch die Komponenten, die aus der Datenbank dynamisch erzeugt wurden. Ich kann also nicht schon zur Compile-Time ein fertiges Interface zum Script liefern, da dies sich teilweise auch erst zur Runtime ergibt.
Die Scripts würde ich dann ebenfalls gerne in eine Tabelle gießen, so dass ich für Änderungen letztlich nur meine entsprechenden Datensätze ändern muss, und schon sind alle Clients auf der Anlage versorgt.
Frommer Wunsch 1: Neuladen aller Formulare und Funktionen zur Runtime, so dass im laufenden Programm ein Click reicht, um geänderte Dinge sofort parat zu haben. Ohne Programmneustart (damit sind ein paar Bediener leider schon überfordert, trotz eines prominenten "ENDE" Buttons und nur einem Icon auf dem Desktop).
Frommer Wunsch 2: Integration des Script-Editors in Delphi zwecks Code-Vervollständigung - aber das ist vermutlich wirklich eher Wunschdenken.
Bevor ich jetzt alle in Frage kommenden Scripting Engines abklapper, wollte ich hier zunächst fragen, ob ihr bereits welche anhand der Anforderungen empfehlen oder gerne auch ausschließen könnt.
Vielen Dank im Voraus!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)