Moin zusammen, ich habe hier fünf Messgeräte, die den Messwert über die RS232-Schnttstelle ausgeben. Dieses tun sie von alleine und machen dies alle 9-10 Sekunden. Ausgegeben wird ein String, der mit führenden Leerstellen die aktuelle Spannung ausgibt: 9.9crlf 10.0crlf 10.1crlf ... Also immer sechs Zeichen lang. Ich habe nun diese fünf Geräte mittels PCI-6-Fach RS232-Karte angeschlossen und die Daten werden in fünf Terminalfenstern dargestellt. Mir steht nur ein P3-PC mit Win2000 und 800MHz zur Verfügung. Aber, diese Messaufgabe macht den PC fertig. Einen anderen PC gibt mir mein Cheffe nicht. Ich soll optimieren und zwar günstigst! Daher dachte ich mir, dass ich doch die RS232-Daten erst einmal mit einem Atmel einlese und dann diese wiederum an einem weiteren Atmel schicke, der daraus einen gemeinsamen String macht und den dann absendet. Also nur eine RS232 und ein Terminalfenster wird noch gebraucht. Aber sowas hat doch bestimmt schon mal jemand gebaut - oder? Oder gibt es sowas kommerziell? Cheffs_Assi
>Mir steht nur ein P3-PC mit Win2000 und 800MHz zur Verfügung. Aber, >diese Messaufgabe macht den PC fertig. Was soll das heißen? Das 800MHz nicht reichen, umd das auszuwerten? >Daher dachte ich mir, dass ich doch die RS232-Daten erst einmal mit >einem Atmel einlese und dann diese wiederum an einem weiteren Atmel >schicke, der daraus einen gemeinsamen String macht und den dann >absendet. Also nur eine RS232 und ein Terminalfenster wird noch >gebraucht. Koppelst du immer drei Autos per Anhängerkupplung zusammen, nur damit du allein zu deinem Nachbarn kommst?
Nein, Du schreibst Dir ein Programm, das diese 5 Schnittstellen bedient. Das ist unglaublich einfach. Es stellt sich noch die Frage, wie die Daten weiterverarbeitet werden sollen. Einfach in eine Datei schreiben?
Wieso so umständlich? Nimm einen ATxmega64A3 oder sowas, der hat genug Schnittstellen, dann brauchst Du nur einen Controller. Die Software ist nahezu trivial, das solltest Du in einem Tag fertig haben, samt Löten. Mit wieviel Bps wird denn gesendet?
Hm also ich würde ggf einfach mal das Abfrageintervall reduzieren in der Software. Ansonsten kannst du natürlich auch einfach einen Multiplexer nutzen, ob mit oder ohne MC mußt du entscheiden. Ohne MC köönntest du einen Binärzähler verwenden und den Reset und Clock and zwei der RS232 Steuerleitungen legen, den AUsgang des Zählers an einen Multiplexer welcher dir dann immer nur ein RS232 Signal an die Schnittstelle legt.
Wenn er die Mehrfach-Serialkarte schon hat, wieso sollte man da noch weitere Hardware bauen? Ich kann dem nicht folgen.
Ich denke das was deinen PC auslastet sind die 5 parallelen Terminalfenster. Wie schon geschrieben musst du dir ein Programm schreiben, welches immer einen Port öffnet und dann von diesem liest. So, dass immer nur eine Schnittstelle geöffnet ist. Das Problem was ich hier aber sehe ist, dass die Geräte die Daten einfach zyklischen aussenden. Das ist Abfragetechnisch natürlich etwas schwieriger, da du immer warten musst bis auf dem geöffneten Port tatsächlich eine Botschaft eingetroffen ist. Ich bin mir gerade nicht sicher wie das bei Windows Programmierung und Interrupts für die serielle Schnittstelle ist. Eventuell ist es auch möglich alle Ports gleichzeitig zu öffnen und nur dann auf einen Port zu reagieren, wenn eine Botschaft eintrifft. Musst du alle Ports zyklische abfragen, also Pollen, wird das dein System auslasten. Und nochmal kurz zu deiner Hardware Idee, wobei die ja eigentlich überflüssig ist, da du diese Hardware ja eigentlich schon in PCI Form hast. Und ein P3 ist in jedem Fall leistungsstärker als ein Atmega oder sonstiges. Da ich keinen Controller mit 5 SCI Schnittstellen kenne musst du entweder, die fehlenden Schnittstellen in Software nachbilden, oder du baust dir irgendeine Multiplexerschaltung, die deine Schnittstellen umschaltet. So eine Schaltung könnte dann die Vorverarbeitung übernehmen und dir einen String evtl. mit schon vorverechneten Daten an den PC senden. Dieser hätte dann nur noch minimale Arbeit. Es gibt also mehrer Möglichkeiten, die günstigste und schnellste wäre aber bestimmt eine Software für den PC zu schreiben. Beste Grüße
Alle 10 Sekunden kommen 6 Zeichen an ... und das gleich 5 mal. Meine güte, das sind 6*5/10 = 3 Byte pro einer Sekunde! Am besten wir versuchen mal mit den Leuten von SETI@home zu sprechen, ein weltweiter Multicluster wird das Problem schon lösen. Mal im Ernst, dein Computer schläft wahrscheinlich immer ein und fährt sich jedes mal runter weil da ewig nichts an Daten kommt. Wie hoch hast du die Baudrate eingestellt?
Hi, also mal ehrlich: Diese fünf popeligen Ports schaffen auch uralt-Rechner spielend. Wir verwenden in unserem Laden schon seit langem serielle Datenraten von 1.25 Mbps, die auch die ältesten Gurken nahezu ohne Last empfangen und auch noch darstellen (in einer Grafik). Du schreibst ja nicht, womit Du programmierst. Wäre es C/C++, würde ich folgendes empfehlen: WIN-API-Funktionen für serielle Kommunikation, blockierende Reads, pro Port einen Thread (also 5). Falls Daten eintreffen, Lesen bis CRLF und dann mit asynchroner Nachricht (PostMessage) Hauptthread benachrichten. Alternativ ist Overlapped-IO hierfür auch sehr gut geeignet. Das ist etwas komplizierter, aber das OS nimmt einem schon viel Arbeit ab. All diese schönen Sachen sind im MSDN erläutert (auch online!), dazu kommen noch einige Spezialfunktionen für den seriellen IO. Neue Hardware brauchst Du für all das ganz sicher nicht, nur ein wenig Einarbeitung ins API. Windows ist bei der seriellen Kommunikation viel besser als sein Ruf, man muss nur das API verstehen und auch nutzen können! Gruß,
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.