8x serielle RS485 Bus-Verbindung
-
Hallo zusammen
Ich muss in einem Projekt eine Diagnose-SW schreiben. Das System ist in etwa folgendermassen aufgebaut: 5 Geräte sind an ein RS485-Bus angeschlossen und in einem Gehäuse zusammengebaut. Mehrere solcher Gehäuse mit einer RS485 Bus-Verbindung werden mit einem RS485<->USB Adapter an den PC angeschlossen.
Meine Software muss jetzt all diese Daten von mehreren RS485-Bus-Verbindungen verarbeiten können.
Dazu habe ich jetzt 2 Fragen:1. Ist es eurer Meinung nach überhaupt möglich, bis zu 8 RS485 Verbindungen mit einer Übertragungsrate von 50kBit/s in einem normal PC zu verarbeiten (CRC check, unwichtige Daten herausfiltern) und diese Daten abzuspeichern (in Dateien)? Ist der PC dadurch voll ausgelastet?
2. Welche Implementierungsart würdet ihr für diese Datenerfassung vorziehen?
Gibt es da gute/schnelle Systemfunktionen oder muss man vieles selber schreiben?Vielen Dank für eure Antworten im Voraus.
mfg
wazzzup
-
Verwende eine fertige serielle Klasse und mach das lesen in einem eigenen Thread:
http://www.codeproject.com/system/serial.asp
-
Vielen Dank für den Link. Ich es mir durchgelesen und weiss nun einiges mehr.
was mir nicht ganz klar ist:Ich muss ja bis zu 8 Com-Ports gleichzeitig verarbeiten. Soll ich besser ein Thread machen, in dem alle 8 Com-Ports verarbeitet werden oder soll ich bis zu 8 Threads machen und jedem Com-Port ein eigener Thread geben?
-
Du hast ja nur eine Schnittstelle... also brauchst Du auch nur einen Thread, welcher die Daten einliesst.
Für das Verarbeiten würde ich Threads aus einem Thread-Pool nehmen, welcher eine niedrigere Prio hat wie der Empfangsthread...
-
@Jochen Kalmbach
Nein ich habe nicht nur eine Schnittstelle sondern bis zu 8-Com-Ports gleichzeitig. Darum stellt sich mir die Frage, ob ich für jeden Com-Port einen eigenen Thread benutzen soll oder ob es bessere möglichkeiten gibt.
-
Wenn Du 8-COM-Ports hast, hast Du aber *keinen* RS485-Bus.
"Besser" wäre vermutlich ein "Thread-Pool".
-
und denk' dran, dass man, wenn man COM-ports und multithreading benutzt, meistens overlapped I/O einsetzen muss. unter windoze kann kommunikation über RS232/485 sehr zickig sein...

-
@pale dog
und denk' dran, dass man, wenn man COM-ports und multithreading benutzt, meistens overlapped I/O einsetzen muss. unter windoze kann kommunikation über RS232/485 sehr zickig sein...
ist es denn unter Linux / embedded Linux resp. Windows CE 5.0 besser?
@Jochen Kalmbach
Wenn Du 8-COM-Ports hast, hast Du aber *keinen* RS485-Bus.
"Besser" wäre vermutlich ein "Thread-Pool".Es ist ein bisschen kompliziert. Ich habe bis zu 8-RS485-Busse die mit einem PC kommunizieren müssen. An jedem Bus sind 5 Geräte angeschlossen. Es ist aber von dem her kein richtiger Bus, weil die 5 Geräte in unterschiedlichen Zeitschlitzen senden. Somit muss ich kein Richtungswechsel implentieren. Es ist von der Implemntierung her wie eine RS232-Verbindung aber entspricht einem HW-Layer von RS422/485. Also eigentliche eine RS422 Verbindung

-
bau dir doch eine Com Port Klasse, die eiene serielle Verbindung öffnet einen Thread hat der Daten mit dem Overlapmodus empfängt diese mittels Handler nach oben gibt und eine Funktion mit der man senden kann.
Wenn du die hast kannst du dann einfach 8 Instanzen deiner Klasse erzeugen.MfG