Laden...

Design/Architektur für viele Schnittstellen/Programm

Erstellt von hauptmann vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.952 Views
H
hauptmann Themenstarter:in
704 Beiträge seit 2003
vor 16 Jahren
Design/Architektur für viele Schnittstellen/Programm

Guten Tag!

Ich schreibe derzeit gerade an einer Software, die pro angeschlossenem Gerät 5 serielle Schnittstellen bedienen muss (nach oben hin offen, pro Gerät immer 5 Schnittstellen) und dort Daten verarbeiten muss.
Nun stellt sich mir die Frage, wie ich meine Anwendung hierfür am Besten aufbaue. Auf der einen Seite sollte die Rechnerbelastung möglichst gering sein und auf der anderen Seite sollten die Responsezeiten möglichst schnell sein. Dazu natürlich Ausfallssicherheit und gute Skalibarkeit.
Gibt es design patterns die für solche Anwendungen gut geeignet sind?

[last.fm](http://www.last.fm/user/hauptmanAlpha/)
C
1.214 Beiträge seit 2006
vor 16 Jahren

Ich versteh ehrlich gesagt nicht so ganz, was du meinst. Was für Geräte? Was für eine Software? Meinst du mit serieller Schnittstelle RS232? Die kann doch eh nur etwa 115 KB/s übertragen, ich glaub da kannst du locker die hundertfache oder tausendfache Datenmenge in Echtzeit verarbeiten. Aber kann gut sein, dass ich dich komplett falsch verstanden habe.

H
hauptmann Themenstarter:in
704 Beiträge seit 2003
vor 16 Jahren

Also: Das Gerät, dass ich an den PC anschließe, benötigt 5 serielle Schnittstellen über die es kommuniziert. Also muss ich pro angeschlossenem Gerät auch 5 serielle Schnittstellen verwalten und über diese kommunizieren.
Und ja, die serielle Schnittstelle ist einfach eine RS232 Schnittstelle am PC.
Also du musst dir das so vorstellen, dass ich an dem PC 5 serielle Anschlüsse habe. Aber ich hab auch PCs mit mehr als 5 Anschlüssen dh. an denen können mehr als ein solches Gerät hängen (maximum ist bei 10)

Jetzt ist für mich die Frage: Wie mache ich das am Besten? Wie halte ich den Verwaltungsoverhead möglichst gering aber schaffe trotzdem noch eine annehmbare Lösung, die auch wartbar ist.

[last.fm](http://www.last.fm/user/hauptmanAlpha/)
309 Beiträge seit 2007
vor 16 Jahren

Polling ... Macht SpecialiX auch mit seinen (alten) Schnittstellen-Boards. Die konnten sogar bis 128/256 serielle Schnittstellen unterstützen.

Neu: RS232 über Ethernet

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

H
hauptmann Themenstarter:in
704 Beiträge seit 2003
vor 16 Jahren

Die Hardware ist kein Problem und bereits vorhanden. Es geht mir jetzt erstmal rein um die Architektur der Software ...

[last.fm](http://www.last.fm/user/hauptmanAlpha/)
309 Beiträge seit 2007
vor 16 Jahren

Na, beim polling eine Schleife, die regelmäßig bei allen Schnitstellen nachguckt. Wenn etwas da ist, dann agieren (event/Thread)

Mfg Hajoseb

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

2.187 Beiträge seit 2005
vor 16 Jahren

Tag,
Das ist ne interesante Aufgab. Ich geb mal meinen Senf dazu.

Für Ausfallsicherheit könntest du sorgen, in dem jedes angeschlossene Gerät mit einer eigenen Anwendung zu verwalten (Dann stürzt immer nur diese eine Anwendung ab 🙂 ). Oder wenn du unbedingt EINE Anwendung willst, kannst du auch für jedes Gerät eine eigene AppDomain nutzen.

Zum Design:
Ich würde für die Geräte eine Proxy-Klasse schreiben (z.B.: Seriel.Geraet). Die Proxy-Klasse wiederum enthält 5 Instanzen einer Listener-Klasse für die Seriellenpots (z.B.: Seriel.Listener). Die Listener-Klasse lässen Intern (pro Instanz) einen Thread laufen, der den jeweiligen Port überwacht.
Die Erzeugung der Proxy-Objekte sollte wiederum eine Factory machen, da das zusammen fassen von 5 verschiedenen Ports zu einem Gerät sicherlich kompliziert ist (Für den Anfang kann man ja die Zusammenfassung aus einer Config lesen und später die Factory so ändern, dass sie die Geräte automatisch findet 🙂 )

Ablauf:
Kommen jetzt Informationen über einen überwachten Port herrein, liest der Listener die Information aus. Der Listener löst ein Event aus (z.B.: Seriel.DataReciefed). Das Proxy-Reagiert auf das Event und interpretiert die Daten (z.B. Knopf-A gedrückt) und löst seinerseits ein Passendes Event aus (z.B.: Seriel.KnopAPressed ). Die eigentliche Verarbeitung der eingegangenen Informationen kann dann auf dieses Event reagieren.