mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mehrere RS232 abfragen und einen String erzeugen


Autor: Cheffs_Assi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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?

Autor: Münchner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Münchner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn er die Mehrfach-Serialkarte schon hat, wieso sollte man da noch 
weitere Hardware bauen? Ich kann dem nicht folgen.

Autor: Curiosum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mike J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Superberti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß,

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.