Laden...

(Anwendungsübergreifender) Datenaustausch zwischen Hostanwendung und "Miniprogrammen"

Erstellt von PoWl vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.338 Views
Thema geschlossen
P
PoWl Themenstarter:in
219 Beiträge seit 2008
vor 13 Jahren
(Anwendungsübergreifender) Datenaustausch zwischen Hostanwendung und "Miniprogrammen"

Hi,

da ich selbst hobbymäßig und wohl in Zukunft auch Berufsmäßig Entwickler von Elektronik mit Mikroprozessortechnik bin, die ich an den PC anschließen kann benötige ich Programme, die mit dieser Elektronik kommunizieren. Das Funktioniert im einfachsten Fall einfach per RS232, relativ unkritisch.

Das Ziel ist nun, ein Programm zu schreiben, das die ganze Zeit im Hintergrund läuft und die Kommunikation mit der Elektronik übernimmt (d.h. bestimmte Steuerbefehle entgegennimmt und sendet). Es übernimmt quasi eine Server-Funktion. Dann soll es noch bestimmte Miniprogramme geben, die für die Funktionen zuständig sind. Alle Miniprogramme sollen über das Server-Programm mit der Elektronik kommunizieren können, d.h. diese Miniprogramme müssen dem Server-Programm Daten übermitteln und von diesem welche entgegennehmen können.

Ist das einigermaßen zu realisieren ohne sich die Hirnwindungen oder die Finger zu verknoten? Wäre es wesentlich geschickter alle Minianwendungen direkt ins Serverprogramm zu integrieren und dann komplett mit diesem zu starten und dann eben über ein Menü einzeln aufrufbar zu machen?

lg PoWl

F
240 Beiträge seit 2006
vor 13 Jahren

Ich würde einen Mittelweg vorschlagen - du schreibst die Miniprogramme als Plugin für den server. Du hast dann ein Interface ala:


public interface IPlugin
{
  void Initialize();
  void ReceiveData(object sender, ReceiveDataEventArgs e); //Handler for receiving data
  event EventHandler<SendDataEventArgs> SendData; // event for sending data
  void Destroy();
}

Wenn nun die Serverapplikation startet, scannt sie das Programmverzeichnis nach dlls und lädt diese in eigene Appdomains, instanziert die plugins über Reflection und verknüpft die Events und ruft dann Initialize auf.

Wenn nun der Server Daten bekommt, verteilt er diese an die plugins weiter (über ein Event), die plugins reagieren drauf und sollten sie Daten zurückschicken wollen, machen sie das über das Event. Der Server steckt diese dann in eine Queue und schickt die Nachrichten dann raus and den Microcontroller. Hierbei ist aber zu bedenken, dass es dauern kann, bis alle Plugins die Reaktion auf eine Nachricht zurückgeschickt haben.

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

für die Miniprogramme hast du mehrere Möglichkeiten:1.Du integrierst sie fest in dein "Hauptprogramm" -> Strategy-Pattern 1.Du fügst die "Miniprogramme" zur Laufzeit zum "Hauptprogramm" hinzu -> Plug-In (wie Femaref auch geschrieben hat) 1.Du integrierst sie außerhalb des "Hauptprogramms" -> Interprocess-Kommunikation wie zB WCF

Bzgl. Plug-In siehe auch [FAQ] Eigene Anwendung pluginfähig machen

Was am geschicktesten ist musst du selbst entscheiden denn nur du kennst die genaue Anforderung 😉
Wenn du allerdings das "Ganze" richtig entwirfst ist ein späterer Wechsel zwischen den einzelnen Möglichkeiten nicht allzu aufwändig.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

P
PoWl Themenstarter:in
219 Beiträge seit 2008
vor 13 Jahren

Danke für eure Tipps, die sind ja wirklich mal informativ. Die Plugin-Geschichte gefällt mir tatsächlich am besten, ich werde damit mal ein wenig experimentieren.

Ach und für Interessenten: Gedacht ist das ganze für ein kleines Bus-System in dem der Mikrocontroller als Master die Kommunikation zwischen den Bus-Teilnehmern verwaltet und der PC die intelligenz übernimmt, da sich somit die Sensoren und Aktoren am leichtesten intelligent miteinander verschalten lassen und der PC zugleich noch die nötige grafische Oberfläche bereitstellt.

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

beachte aber dass Windows und erst recht nicht .net ein Echzeitsystem ist - sofern relevant.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

P
PoWl Themenstarter:in
219 Beiträge seit 2008
vor 13 Jahren

Das macht nichts. Bei der Bearbeitung der vom Bus-System eingehenden Daten kommt es nicht so sehr auf Echtzeit an. Notfalls kann ich in die Elektronik bereits einen echtzeitfähigen Puffer einbauen. Werden eingehende RS-232 Daten eigentlich gepuffert oder ist das auch ein Glücksspiel, ob die Daten nun empfangen oder verpasst werden, wenn das System ausgelastet ist? Wie verhält es sich dann bei USB-zu-RS232, die ja einen virtuellen COM-Port bereitstellen bei dem der PC aber prinzipiell durch einen Treiber erstmal über USB kommuniziert.

Hinweis von gfoidl vor 13 Jahren

Bitte beachte auch [Hinweis] Wie poste ich richtig? Punkt 1.2

Thema geschlossen