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.
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ß,