Forum: PC-Programmierung 24 serielle Schnittstellen am PC


von Baku M. (baku)


Lesenswert?

Moin zusammen!
Ich habe da im Moment eine 'etwas delikate' Aufgabe, für deren Lösung 
ich zwar schon einige Ideen&Ansätze habe, zu der ich aber gerne noch ein 
paar unabhängige Meinungen und vielleicht Ideen hätte, auf die ich vor 
lauter Betriebsblindheit nicht komme...
Kurze Beschreibung:
Über 24 serielle Schnittstellen laufen mit max. 9600bps Datentelegramme 
ein, die jeweils aus 3 Byte bestehen.
Die Telegramme kommen Byte an Byte, ohne Pause, das Protokoll ist aber 
so strukturiert, daß die Telegramme eindeutig zu synchronisieren sind. 
(Die Datenquellen stammen aus den 80ern, da wusste man noch, wie sowas 
geht...)

Diese Daten müssen !Zeitrichtig! zusammengefasst werden, mit einem 
Zeitstempel (Da ist die über GPS synchronisierte Systemuhr genau genug) 
versehen über LAN ins System gespeist werden. Erschwerend kommt hinzu, 
daß die Datenquellen seeeeehr weit entfernt sein können, oder 
schlimmstenfalls über Satellitenstrecken angebunden, so daß Laufzeiten 
von ca. 50ms bis 800ms zu berücksichtigen sind. Diese können aber für 
die einzelne Strecke als konstant angesehen und berücksichtigt werden.
Es gibt sogar einen Mechanismus an den Datenquellen, der es erlaubt, die 
Laufzeit zu messen, indem man bestimmte, mit einem Zeitstempel versehene 
Telegramme hinschickt und die (fast) ohne Verzögerung geechot werden.
Wenn die Laufzeit erstmal bekannt ist, ist es kein Problem, diese beim 
zusammensortieren der Daten zu berücksichtigen. Dazu muß man die Daten 
aber erstmal zeitgenau senden können...

Problem ist also:
Erstmal 24 serielle Schnittstellen an einen heutigen PC anzuschliessen, 
und diese unter Windows7 (alternativ ginge auch Linux, aber eher ungern) 
so zu betreiben, daß die Software die Daten mit einer 
Zeit(un)genauigkeit von ca. 10ms bearbeiten kann. Das langt.
Zur Verfügung stehen: 1 bis N (Ja, ich kann soviele verwenden, wie ich 
will...) moderne Rechner und ein paar k€ für zusätzliche 
(Interface)Hardware nebst einigen Entwicklerstunden in Java oder C++ 
(VS2010).
Jede Idee ist mir willkommen!

Meine bisherigen Lösungsansätze verrate ich mit Absicht nicht, um den 
freien Fluß der Ideen&Meinungen nicht vorzeitig in eine Richtung zu 
lenken. Soviel sei aber verraten: GENAU dieses Problem haben wir 1994 
mit einem 68040 auf VMEBus und drei ISIO-Karten unter pSOS+ in K&R C 
spielend gelöst bekommen. Nur leider bekommt man dafür keine Ersatzteile 
mehr.
Das ist der Fluch der Nachhaltigkeit...

Für jeden Denkanstoß dankbar:
Baku

P.S.:
Oder sollte ich einfach die Amper hochskillen??? ;-)

P.P.S.: Die Option, selber etwas mit einem (oder 24) ausreichend 
leistungsfähigem Controller (ATMega...) hinzubraten und zu programmieren 
besteht NICHT. Das wäre zu einfach und würde 'den Prozessen' 
zuwiederlaufen. Wo käme man denn hin, wenn die Probleme einfach so 
gelöst würden ohne 'die Prozesse' einzuhalten???

P.P.P.S.: Immerhin, immerhin, wurde von der Managementebene bereits 
signalisiert, daß man für diese hochspeziell diffizile Aufgabe auch von 
dem Dogma, alles nur noch in Java zu machen, mal eine Ausnahme machen 
würde.

von Sauger (Gast)


Lesenswert?

Moin,

multiplexer

MfG

von user (Gast)


Lesenswert?


von Fuenf Tassen (Gast)


Lesenswert?

Ich wuerd 8 Mega 64 so baumfoermig zusammrnschalten, dass 24 
Schnittstellen brauchbar sind. Dann mit einer einzigen zum PC.

von Dominik S. (dasd)


Lesenswert?

Fuenf Tassen schrieb:
> Ich wuerd 8 Mega 64 so baumfoermig zusammrnschalten, dass 24
> Schnittstellen brauchbar sind. Dann mit einer einzigen zum PC.

Lern lesen :D

von 900ss (900ss)


Lesenswert?

Die Fa. Sorcus www.sorcus.com bietet PC Einsteckkarten auf denen versch. 
Peripheriekarten aufgesteckt werden können, unter anderem mehrere 8-fach 
RS-232.
Es gab die PC-Karte mit eigener CPU zur Datenvorverarbeitung mit viel 
Ram.Wie das aktuell ist, weiß ich nicht.

Dieses System ist sehr gut für dein Vorhaben geeignet.

www.sorcus.com

900ss

von Martin H. (marrtn)


Lesenswert?

Wenn Du wiklich auf Windows setzen willst, musst Du Deine Zeitstempel 
unbedingt "in Hardware" generieren. Mit Hardware meine ich irgendetwas 
echtzeitfähiges (also z.B. einen µC mit brauchbarer Programmierung).

Windows nimmt sich gerne mal etwas "Zeit für sich" - also egal wie 
hochprior Du deine Anwendung setzt, es kommt immer wieder mal vor, dass 
sie einige Zeit (10ms bis 300ms) einfach nicht "dran kommt". Die von der 
Anwendung generierten Zeitstempel sind dann für die Katz'. Auch mehrere 
Prozessor-Cores schaffen da keine Abhilfe.

von tt2t (Gast)


Lesenswert?

Gerade der Zeitversatz macht die Sache interessant. Mit Windows oder 
Linux bekommst Du das nicht in Echtzeit hin. Ich würde auch erst mal µCs 
als Puffer nehmen, die den Zeitversatz ausgleichen und dann erst auf den 
PC gehen.

von 900ss (900ss)


Lesenswert?

Martin H. schrieb:
> Wenn Du wiklich auf Windows setzen willst, musst Du Deine Zeitstempel
> unbedingt "in Hardware" generieren. Mit Hardware meine ich irgendetwas
> echtzeitfähiges (also z.B. einen µC mit brauchbarer Programmierung).
>
> Windows nimmt sich gerne mal etwas "Zeit für sich" - also egal wie
> hochprior Du deine Anwendung setzt, es kommt immer wieder mal vor, dass
> sie einige Zeit (10ms bis 300ms) einfach nicht "dran kommt". Die von der
> Anwendung generierten Zeitstempel sind dann für die Katz'. Auch mehrere
> Prozessor-Cores schaffen da keine Abhilfe.

Du kannst für das genaue Zeit messen ein Produkt namens Kithara nutzen. 
Funktioniert sehr gut. Must mal ne Suchmaschine bemühen.
Kithara bietet verschiedene Echtzeit Treiber an, die auf Kernelebene 
arbeiten und damit echtzeitfähig sind.  Aber die oben erwähnte Sorcus 
Karte ist am besten geeignet.
900ss

von Peter II (Gast)


Lesenswert?

Ich würde das über ebenddet system lösen.

z.b. http://sphinxcomputer.de/MOXA/MOXA-NPort-5150/p1396.html

oder mit einen/vielen Rasberry(s).

Die systeme lesen die Daten ein und senden es mit der empfangsuhrzeit an 
einen PC. Am PC spielt dann die Verarbeitungszeit keine rolle mehr. Die 
einzelnen System können die Uhrzeit per NTP abgleichen, das sollte genau 
genug sein.

von Daniel F. (df311)


Lesenswert?

ich versuche das nochmal zusammen zu fassen:
du hast 24 serielle schnittstellen (also auch 24 quellen?), über die 
jeweils 3 byte große telegramme ankommen, die durch das protokoll 
synchronisiert werden können.
z.b.
port1 3 byte lesen, alle anderen haben inzwischen sendepause
port4 3 byte lesen, alle anderen haben inzwischen sendepause
port12 3 byte lesen, alle anderen haben inzwischen sendepause

und die byte sollen dann in der richtige reihenfolge (mit zeitstempel) 
über die netzwerkkarte raus (nicht mehr so zeitkritisch)
p1.12345 p4.12346 p12.12347...

habe ich das soweit richtig?

in dem fall würde ich versuchen über steckkarten die 24 schnittstellen 
in einen pc zu bekommen, jede der schnittstellen hat einen fifo-buffer. 
bei einer datenrate von 9600bps braucht ein byte ca. 1 ms, 3 byte daher 
ca. 3 ms.

als betriebssystem verwendest du z.b. rtlinux und schreibst dir ein 
rt-modul, das z.b. alle 5ms die 24 schnittstellen abfragt und falls 
daten empfangen wurden diese in einen ringbuffer überträgt (daten + 
zeitstempel). dieser ringbuffer wird dann aus dem userspace abgerufen 
und über das netzwerk verschickt...
falls der netzwerk-teil auch zeitkritisch ist, müsste man den auch in 
ein rt-modul auslagern.

p.s. ich weiß, dass oben steht "linux aber eher ungern" nur fällt mir 
absolut keine möglichkeit ein, das ganze unter windows mit 
rt-anforderungen umzusetzen.

von Daniel F. (df311)


Lesenswert?

alternativ zu 24 schnittstellen einbauen und erfüllt (teilw.) auch "Die 
Option, selber etwas mit einem (oder 24) ausreichend leistungsfähigem 
Controller (ATMega...) hinzubraten und zu programmieren besteht NICHT."

http://www.enterpoint.co.uk/moelbryn/raggedstone1.html und die 24 
schnittstellen in vhdl umsetzen ;-)

von Peter II (Gast)


Lesenswert?


von Reinhard Kern (Gast)


Lesenswert?

Hallo,

ich würde eine Einsteckkarte designen mit einem leistungsfähigen µP und 
24 seriellen Interfaces (so wie beschrieben wird ja wohl nur RxD 
gebraucht), die das Zeitstempeln und Zwischenspeichern erledigt und das 
Ganze als eine einzige serielle Schnittstelle an Windows weitergibt.

Auf so einem Embedded System bekommt man alle Probleme in den Griff, die 
mit Windows nicht wirklich lösbar sind. Allerdings nicht unbedingt in 
Java.

Gruss Reinhard

von oszi40 (Gast)


Lesenswert?

Reinhard Kern schrieb:
> einem leistungsfähigen µP und 24 seriellen Interfaces

Mag programmtechnisch möglich sein, aber ein kluger Bauer legt nie alle 
Eier in einen Korb. Elektrisch gesehen, sind Interfaces öfter eine 
Schwachstelle, wo schnell mal eine höhere oder verschleppte Spannung was 
zerräuchert. Daher ist austauschfreundlicher Aufbau günstig.

von Reinhard Kern (Gast)


Lesenswert?

oszi40 schrieb:
> Daher ist austauschfreundlicher Aufbau günstig.

Ja, bei einem industriellen System mache ich das auch so. Die 
handelsübliche PC-Technik gibt das aber nicht mehr her, da muss man 
schon froh sein, wenn man mehr als 2 Platinen einstecken kann. Und ein 
Baum aus USB-Hubs und chinesischen USB-V24-Adaptern ist auch nicht das 
was ich mir unter industrieller Technik vorstelle, wenn auch unschlagbar 
billig.

Ich würde, richtig altmodisch, je 4 RxDs auf einen MC1488 oder ähnlichen 
Empfänger führen und den in DIL-Fassung austauschbar machen - muss ja 
nicht alles SMD sein.

Gruss Reinhard

von Baku M. (baku)


Lesenswert?

Hallo zusammen!
Erstmal vielen Dank für die große Resonanz und die vielen Vorschläge! 
Hatte leider bis jetzt kein Internet (vielleicht sollte ich mir doch mal 
ein Schmartphon zulegen...).

Daniel F. schrieb:
> ich versuche das nochmal zusammen zu fassen:
> du hast 24 serielle schnittstellen (also auch 24 quellen?), über die
> jeweils 3 byte große telegramme ankommen, die durch das protokoll
> synchronisiert werden können.
> z.b.
> port1 3 byte lesen, alle anderen haben inzwischen sendepause
> port4 3 byte lesen, alle anderen haben inzwischen sendepause
> port12 3 byte lesen, alle anderen haben inzwischen sendepause
>
> und die byte sollen dann in der richtige reihenfolge (mit zeitstempel)
> über die netzwerkkarte raus (nicht mehr so zeitkritisch)
> p1.12345 p4.12346 p12.12347...
> habe ich das soweit richtig?

Nope. Die Sensoren liefern jeweils einen ununterbrochenen Datenstrom, 
und es soll sicher gestellt werden, daß trotz unterschiedlicher 
Verzögerungen (10..800ms) bei der Übertragung die Meßdaten am Ende 
zeitlich zusammengehörig wieder heraus kommen, so daß sie das gleiche 
'Ereignis' beschreiben. Am Ende soll also rauskommen: p1,p2..p24.12345 
p1,p2..p24.12346 etc.
Eine Ungenauigkeit von ~10ms wäre durchaus tolerierbar.

>[...]
> p.s. ich weiß, dass oben steht "linux aber eher ungern" nur fällt mir
> absolut keine möglichkeit ein, das ganze unter windows mit
> rt-anforderungen umzusetzen.

Wat mutt, dat mutt :-)
Sehr interessant ist auch der Tip von Peter II

>Ich würde das über ebenddet system lösen.
>z.b. http://sphinxcomputer.de/MOXA/MOXA-NPort-5150/p1396.html

Eine fertige Schachtel, die man 'nur noch' programmieren müsste.
Wäre dann auch mit embedded Linux, ich habe da keine Berührungsängste.

>oder mit einen/vielen Rasberry(s).
Scheidet ebenso wie die Lösung mit dem FPGA-Board aus, weil zwar keine 
Platinen gemacht werden müssten, aber ein Gehäuse, Verdrahtung etc.

Einstweilen allen vielen Dank, falls es interessiert, werde ich über den 
Fortgang der Forschungen berichten!

IdS
Baku

von Peter II (Gast)


Lesenswert?

Baku M. schrieb:
>>Ich würde das über ebenddet system lösen.
>>z.b. http://sphinxcomputer.de/MOXA/MOXA-NPort-5150/p1396.html
>
> Eine fertige Schachtel, die man 'nur noch' programmieren müsste.
> Wäre dann auch mit embedded Linux, ich habe da keine Berührungsängste.

bei dem link hatte ich mich vertan, die box hat den nachteil das sie die 
schnittstelle nur 1:1 an den PC weitereicht, der PC muss sie dann auch 
noch aktiv abfrage. Damit hast du wieder ein Timingproblem.

Besser ist diese

http://sphinxcomputer.de/MOXA/MOXA-UC-7101/p2011.html

oder diese:
http://sphinxcomputer.de/MOXA/MOXA-UC-7420-7410/p281.html

diese haben ein eigenes Betriessystem und können damit die daten selber 
mit einem Zeitstempel versehen und dann in ruhe zu einem PC senden.

Hier findest du noch mehr von diesen dingen, das ist auf jeden Fall das 
passende dabei:
http://sphinxcomputer.de/produkte.php?id=49

von MiWi (Gast)


Lesenswert?

Wenn k€ keine Rolle spielen und Du eine hohe Redundanz haben willst - 
ich würds mit der entsprechenden Anzahl von Xports von Lantronix machen. 
Das paßt ganz wunderbar auf eine kleine Platine, die in einem Rack 
steckt. Daten werden über LAN mit Zeitstempel ausgegeben und wenn ein 
Kistl defekt ist - einfach tauschen und SW neu einspielen.

Du mußt das nicht selber machen sondern kannst das Auftrag vergeben und 
dann ist diese "Scharte" des "Bastelns" auch gelöst....

PS: das ganze funktioniert als Konzept mit 4 Stk bei einem Kunden ganz 
wunderbar und ist defakto fast beliebig skalierbar.

Grüße

MiWi

von Peter II (Gast)


Lesenswert?

MiWi schrieb:
> Wenn k€ keine Rolle spielen und Du eine hohe Redundanz haben willst -
> ich würds mit der entsprechenden Anzahl von Xports von Lantronix machen.
> Das paßt ganz wunderbar auf eine kleine Platine, die in einem Rack
> steckt. Daten werden über LAN mit Zeitstempel ausgegeben und wenn ein
> Kistl defekt ist - einfach tauschen und SW neu einspielen.

wenn € wirklich keine Rolle spielen, warum denn selber entwicklen und 
bauen lassen? Gibt es schon fix und fertig -> moxa (siehe post darüber).

von Christian B. (casandro)


Lesenswert?

Also wenn ein externer selbst gebauter Multiplexer/Zeitstempeleinfüger 
nicht geht, dann wirst Du wohl oder übel ein paar serielle Karten (gibts 
glaub ich bis 32 Ports) an einen Linuxrechner anschließen müssen.

Da Du ja "nur" 24 Schnittstellen hast, kannst Du im ersten Schritt 
einfach ein Programm schreiben, welches vom Port ließt und die Eingabe 
als Text mit Zeitstempel ausgibt. Mit dem kannst Du dann weiter 
arbeiten. 10ms sollten noch möglich sein, einige Ports unterstützen 
spezielle "Disziplinen" mit denen Du das toggeln von Steuerleitungen 
(und evtl. auch Datenleitungen) mit einer realistischen Unsicherheit von 
wenigen Mikrosekunden messen kannst.

Von Lösungen mit USB würde ich abraten, das wirst Du nicht stabil genug 
hinbekommen, von den Problemen der Echtzeitfähigkeit möchte ich gar 
nicht sprechen.

von Baku M. (baku)


Lesenswert?

Peter II schrieb:
>[...]
> bei dem link hatte ich mich vertan, die box hat den nachteil das sie die
> schnittstelle nur 1:1 an den PC weitereicht, der PC muss sie dann auch
> noch aktiv abfrage. Damit hast du wieder ein Timingproblem.
>[...]

Ich hatte mich bei dem Link auch vertan... Ich meinte natürlich die 
Schachtel mit den 8 Ports und embedded Linux drauf. Das Thema mit Moxa 
N-PortServern (16*RS232 auf LAN) haben wir schon durch, da ist mit 
'zeitnah' prinzipbedingt überhaupt nichts hinzubekommen.

von Baku M. (baku)


Lesenswert?

MiWi schrieb:
> [...]
> Du mußt das nicht selber machen sondern kannst das Auftrag vergeben und
> dann ist diese "Scharte" des "Bastelns" auch gelöst....
> [...]

Tscha, wenn das so einfach wäre... Dank wohldefinierter Prozesse, 
Qualitätsmanagement und einer großbehördengleichen Organisationsstruktur 
zöge die Fremdvergabe einer Entwicklung einen bürokratischen Aufwand 
nach sich, für den man für jede Schnittstelle einen eigenen Rechner samt 
Racks und allem kaufen könnte, noch bevor der erste Handschlag beim 
Zulieferer getan ist...
Wenn das nicht so wäre, hätte ich es schon längst selber lösen können 
:-(

IdS,
Baku
-jetzt wieder deprimiert-

von Falk B. (falk)


Lesenswert?

JAVA und Echtzeit. ;-) Nur, wenn man echt Zeit hat!

Wie man Probleme mit High Tec löst, die man ohne sie nie hätte.

Gute Lösungen wurde ja schon zuhauf genannt. Aber man WILL sich ja ins 
Knie schiessen . . .

von Sven P. (Gast)


Lesenswert?

Windows würde ich ganz schnell wieder vergessen. Ich erinnere mich an 
ein recht aktuelles Projekt, wo 'nur' 8 serielle Schnittstellen verbaut 
waren und selbst das war schon ein Krampf. Teils wegen Treiberwahn 
(Windows-Treiber sind effektiv nicht nachhaltig, dank der Signierung), 
teil weil die Schnittstellen sporadisch irgendwo auftauchten, also die 
Zuordnung zu den 'COM'-Nummern eher willkürlich passierte.

Den Jitter von 10ms kannst du im Userspace schon alleine wegen des 
Multitasking vergessen. Da müssstest du schon in den Kernelspace bzw. 
ein echtzeitfähiges Windows beschaffen.
Gerade das geht aber mit Linux deutlich einfacher.

Was wäre denn mit einem FPGA? So ein mittelgroßes Spartan dürfte genug 
Platz bieten, um die seriellen Schnittstellen abzubilden.

von Pic T. (pic)


Lesenswert?

Wenn du keine Lösung basteln kannst, dann kauf dir einen Data 
Concentrator
für 32 Leitungen, oder eben ein 24 port + 4 port. Ist für 
Satelliten/Funkbridges sehr gängig, kostet aber 2-3k€ und lass auf einem
Port ein GPS timing modul laufen. Jedoch sollte das Timing Modul auch
uC unterstützt sein, ansonsten wenn beim nächsten Terroranschlag das
GPS abgeschaltet wird, gibt es keine Daten. Ev. findet sich ein DCF77
Modul mit uC was dafür geeignet ist.

von Robert L. (lrlr)


Lesenswert?

>oder
>schlimmstenfalls über Satellitenstrecken angebunden, so daß Laufzeiten
>von ca. 50ms bis 800ms zu berücksichtigen sind. Diese können aber für
>die einzelne Strecke als konstant angesehen und berücksichtigt werden.


ist das nicht eher unrealistisch?



Meiner Meinung nach müssen die Daten direkt bei der Quelle mit einem 
Zeitstempel versehen werden (per GPS)

sonst wird das nicht gehen?!?

von Pic T. (pic)


Lesenswert?

Nicht wirklich. Solche Strecken sind über Mikrowellen oder Glasfaser
recht üblich. Dabei werden die zwischen den Nutzdaten übertragen in 
normalerweise padding flags, sodaß man da durchaus eine konstante 
Zeitverzögerung hat. Teilweise wird darauf sogar TCP/IP gefahren, um
damit die Anlagen remote zu steuern.

von Dani (Gast)


Lesenswert?

Die 24 Schnittstellen kriegt man am Schnellsten und Einfachstem mit 
einem MOXA rein. Ich habe sowas vor Jahren mal mit 64 Kanälen gemacht 
und dazu 2 Geräte benutzt. Damals waren es allerdings andere Geräte von 
www.COMTROL.com, die ECOS laufen.

Draufgekommen bin ich durch eine Suche nach einer Library. Hier findest 
Du eine serielle Lib mit der das geht.

https://iftools.com/download/ctb/spmdwx.pdf

Nach Angaben des Autors funktioniert es bis zu 460BAUD je Kanal.

Leider wird die Tool-Lib wxWindows nicht mehr weiterentwickelt, seit es 
QT frei gibt. Sicher gibt es aber auch dort eine Möglichkeit, diese 
Geräte anzubinden. Programmiert werden ja nur die seriellen Ports.

Mit heutigen Prozessoren sollte es kein Problem sein, die schnell in den 
Rechner zu bekommen.

von OLD BOY (Gast)


Lesenswert?

Vielleicht sollte der ein oder andere erst einmal grundlegende PC 
Hardware Kenntnisse auffrischen.

Die X86 Hardware stellt für serielle Schnittstellen erst einmal nur 2 
Interrupts zur Verfügung.
Durch IO/Mapping konnte/kann man jedoch auch die Interrupts sharen, so 
dass maximal 4 serielle Schnittstellen möglich waren und sind.
Selbst das hat früher schon oft nicht funktioniert.

Hier wären spezielle IO Karten mit Software und Vorverarbeitung nötig.

Eigenbau wäre über den Ansatz mehrere Microkontroller einzusetzen um 
hier eine Vorverarbeitung zu realisieren möglich.

Dann wäre auch eine Kopplung in den PC über USB oder auch RS232 möglich.
Hier steht jetzt Eigenentwickelung gegen kaufen im wirtschaftlichen 
Kontext gegeneinander.

Jörg Schieb kann sich noch gut erinnern....

von Christof Ermer (Gast)


Lesenswert?

Lösung USB HUB 8fach, das drei mal
24 USB Seriell Wandler von z.B. Pollin
schon hast du Schnittstelen zum Säue füttern

von OLD BOY (Gast)


Lesenswert?

Dummkopf ...

von Christof Ermer (Gast)


Lesenswert?

OLD BOY schrieb:
> Dummkopf ...
Selber Dummkopf.
Feige anonyme Beleidiger haben hier nichts zu suchen.

von Pic T. (pic)


Lesenswert?

Die Moxa Karten mit ihren 128byte in und out buffern eignen sich nicht 
wirklich für das Timing was benötigt wird, da können schon mal 400 ms
Zeitdifferenz zustandekommen im worst case.

Ich würde da je serielle Schnittstelle einen uC nehmen von HW RS232 auf
spi und einen Master welcher dann den Zeitslot vorgibt sowie auch die 
Daten
ausgibt mit 250Kbps sowie einen uC welcher mittels GPS/DCF77 einen 
Timestamp
ausgibt. Da aber dann die Datenübertragung ca 29mS dauern würde, müsste
wirklich jeder uC einen Timestamp dazugeben (Timer value seit pps mit 
32khz)
und dann mit 500kpbs übertragen, sowie einen Datenstrom mit Zeitwerten.

von Peter II (Gast)


Lesenswert?

OLD BOY schrieb:
> Vielleicht sollte der ein oder andere erst einmal grundlegende PC
> Hardware Kenntnisse auffrischen.
>
> Die X86 Hardware stellt für serielle Schnittstellen erst einmal nur 2
> Interrupts zur Verfügung.

eine aktuelle karten muss sich aber nicht an diese alten Vorgaben 
halten. Sie kann es über andere IO-Adressen lösen. Es muss nur einen 
Treiber passend zum Betriebssystem mitgleiefert werden.

von Christof Ermer (Gast)


Lesenswert?

Wegen dem Zeitstempel..
Serielle Schnittstellen sind naturgemäß asynchron. Das heisst es 
passiert irgendwas, irgendwann!! , in einem Zeitfenster. Also sind Daten 
mit der Windowstypischen "Nichtechtzeit!" genauso aktuell wie RealTime 
Operating Systeme..also ~200..300mS Präzision.
Das ganze könnte mit z.B einfach mit einem "LabView" Programm 
abgefangen, Präpariert und mit dem Systemzeitstempel verarbeitet werden. 
Genaueres ist meiner Meinung nach mit Seriellen Schnittstellen nicht 
drin.
Und praktikabel sind tatsächlich jede Menge USB HUBs und USB COM 
Wandler. (5€/Stk bei Pollin) Billig und austauschbar. Die MOXA Box tut 
nichts anderes und ist nur teuerer.
Gruß
Christof

von Peter II (Gast)


Lesenswert?

Christof Ermer schrieb:
> Die MOXA Box tut
> nichts anderes und ist nur teuerer.

doch tut sie, sie hat einen eigen Prozessor und kann die Daten aktiv mit 
einem zeitstempel versehen. Dann können die daten später zu einem PC 
gesendet werden.

Die Box läuft auch ohne PC - usb wandler nicht.

von Christof Ermer (Gast)


Lesenswert?

möglich.. aber ein PC läuft ja sowieso. Sonst macht das ganze keine 
Sinn.

von Falk B. (falk)


Lesenswert?

@  OLD BOY (Gast)

>Die X86 Hardware stellt für serielle Schnittstellen erst einmal nur 2
>Interrupts zur Verfügung.
>Durch IO/Mapping konnte/kann man jedoch auch die Interrupts sharen, so
>dass maximal 4 serielle Schnittstellen möglich waren und sind.
>Selbst das hat früher schon oft nicht funktioniert.

Wozu Interrupts? Da man WEIß, dass die Daten IMMER mit 9k6 ankommen, 
pollt man einfach reihum. Wir reden über 24x 1kByte/s, mit etwas 
sinnvoller Programmierung packt das ein 8 Bit Controller mit 20 MHz. Ein 
1ms Timer und die passende State Machine, ausreichend RAM sollte aber 
sein, 32-64kB würde ich mal ansetzen. Möglicherweise ist es sinnvoll, 
das Ganze auf einem der neuen ARMs zu packen, dann hat man gleich 
Ethernet an board und genug Resourcen.

>Eigenbau wäre über den Ansatz mehrere Microkontroller einzusetzen um
>hier eine Vorverarbeitung zu realisieren möglich.

Viel zu komplex und speziell.

@  pic tech (pic)

>Die Moxa Karten mit ihren 128byte in und out buffern eignen sich nicht
>wirklich für das Timing was benötigt wird, da können schon mal 400 ms
>Zeitdifferenz zustandekommen im worst case.

Wer sagt denn, dass die UARTS/Karten die riesigen Verzögerungen 
ausgleichen sollen? Das macht ein Software-FIFO. Dieses Verfahren 
wird in diversen Telekomübertragungsstandards genutzt (IMA, Inverse 
Multiplexing over ATM; SDH-Ethernet Mapping).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dani schrieb:
> Leider wird die Tool-Lib wxWindows nicht mehr weiterentwickelt, seit es
> QT frei gibt.

Sie heißt seit einigen Jahren wxWidgets, und wird durchaus 
weiterentwickelt; die letzte Version ist 2.9.3 vom Dezember letzten 
Jahres.

http://www.wxwidgets.org/

von Hans (Gast)


Lesenswert?

Wie wärs mit 2x EPIA-M900 
(http://semiaccurate.com/2012/02/23/via-puts-out-a-very-odd-quad-core-mini-itx-board/)

Sind dann zwar 2 systeme und auch nicht billig aber naja... einfach :)

73

von M_ (Gast)


Lesenswert?

Ich würde das mit einer Soft-SPS wie Beckhoff TwinCAT machen. IO kannst 
du reichlich anschließen, die RS232 sind einzeln austauschbar, EMV fest, 
keine Treiberprobleme, Echtzeituhr in der RT-Laufzeit, Industrie-PC mit 
Windows, SPS-Programm und dazu ein kleines .NET Programm welches die 
Daten aus der SPS abholt und dann per LAN verschickt.
Das Programm kannst du dann auch in Java schreiben.

von eugler (Gast)


Lesenswert?

Hmmmm. IMHO ist das bei weitem nicht trivial. Man braucht ja eine 
"Instanz", die sowohl die Telegramme als auch die Zeitinformation 
parallel abfragen bzw. annehmen kann. Das bedeutet, diese Instanz muss 
den "internen" Zeitstempel halten, und der muss genau sein.

IMHO geht das nur über eine FPGA Lösung in Verbindung mit einer sehr 
genauen Zeitquelle. Also die Annahme auf 24 SIO, und bei jedem Telegramm 
wird die Zeit gespeichert. Das kann ein z.B. 256b Counter sein, der dann 
mit den Zeitsignalen verrechnet wird.

Ales andere wird schwierig zu begründen bzw. zu beweisen sein, das es 
"echt" parallel ist.

von Peter II (Gast)


Lesenswert?

eugler schrieb:
> IMHO geht das nur über eine FPGA Lösung in Verbindung mit einer sehr
> genauen Zeitquelle.

warum soll das mit 24 embeddet computer nicht gehen? Es geht hier nicht 
im µs sondern im ms!

Über NTP kann man die PC auf weniger als 1ms abgleichen, die hardware 
ist immer gleich es läuft nur software die gebraucht wird.

Damit sollte man es auch weniger als 10ms hinbekommen, dafür braucht man 
nicht etra ein FPGA board zu entwickeln.

von Falk B. (falk)


Lesenswert?

Quantencomputer!

von eugler (Gast)


Lesenswert?

Peter II schrieb:
> eugler schrieb:
>> IMHO geht das nur über eine FPGA Lösung in Verbindung mit einer sehr
>> genauen Zeitquelle.
>
> warum soll das mit 24 embeddet computer nicht gehen? Es geht hier nicht
> im µs sondern im ms!

Jup, natürlich. Ich dachte nur über eine günstige, kleinskalige Lösung 
nach. Da ist ein "Wald und Wiesen" FPGA Board wahrscheinlich günstiger 
als n "Industrial RS2322" Lösungen.

> Über NTP kann man die PC auf weniger als 1ms abgleichen, die hardware
> ist immer gleich es läuft nur software die gebraucht wird.

Die Aussage halte ich für sehr gewagt. Das mag die Erfahrung zeigen ... 
. Ein WIN ohne RT wird dir das nicht garantieren können. Und da ist es 
egal, ob us, ms oder s. Im Blöden Fall kann es sogar h sein ;-).

> Damit sollte man es auch weniger als 10ms hinbekommen, dafür braucht man
> nicht etra ein FPGA board zu entwickeln.

Wie gesagt, es geht hier nicht darum, ein 14 lagiges FPGA Board zu 
entwickeln. Aber eventuell macht es ein Sparten 3 Dev Kit mit USB auch 
... .

von Peter II (Gast)


Lesenswert?

eugler schrieb:
> Jup, natürlich. Ich dachte nur über eine günstige, kleinskalige Lösung
> nach. Da ist ein "Wald und Wiesen" FPGA Board wahrscheinlich günstiger
> als n "Industrial RS2322" Lösungen.

nur das er etwas fertig will und nicht selber "basteln" Auch lernt man 
nicht in ein paar min wie man so ein FPGA Board programmiert.  Und Zeit 
ist nun mal auch Geld.

von Baku M. (baku)


Lesenswert?

Peter II schrieb im Beitrag #2733173:
> sorry post gehört hier nicht rein.
Höhö, ganz so falsch war er nicht, wenn ich mir manche Antworten hier so 
ansehe ;-)))

Es geht hier auch nicht um irgendwelche Glaubensfragen, wer denn nun das 
realtimigere Betrübssystem hat, sondern es geht, wie einer schon sehr 
treffend bemerkte, um einige MILLIsekunden. Nicht Mikro, Nano, Femto 
oder Atto...

Ich habe inzwischen ein paar Versuche gemacht, über deren Ergebnisse ich 
mal kurz berichten will, da sich das Thema doch offenbar eines gewissen 
Interesses erfreut: (Versuch macht kluch!)
Einfach mal auf meinem Arbeitsplatzrechner 'so ähnliche' Telegramme 
rausgehauen, die statt der Nutzdaten einen Zeitstempel vom 'high 
performance counter' (oder wie das Ding noch heisst..) tragen, mit 100us 
Auflösung. Es gelingt (unter Win7 64Bit) schon mal, diese mit +-100us 
Ungenauigkeit zu senden.
Damit ist der Zeitpunkt gemeint, an dem mein Testprogramm die Daten 
erzeugt und über das Win-API auf die Reise ins Ungewisse schickt. Und 
das gelingt immer (Ich habe extra etwaige Ausreisser protokolliert) über 
Stunden, selbst wenn ich nebenbei in Outlook Mails lese oder 
Word-Dokumente mit Visio-Grafiken bastle.
Die Daten schleife ich mit einem Kurzschlußstecker auf das gleiche 
Interface zurück. Beim Empfang wird dann der 'high-performance-counter' 
(oder wie das Ding noch heisst) gelesen und die Differenz gebildet. Dann 
weiss ich genau, wie lange das Päckchen von der Sendeseite meines 
Testprogrammes bis zur Empfangsseite unterwegs war.

Ich will euch jetzt nicht mit ALLEN Ergebnissen in epischer Breite 
langweilen, deswegen kurz zusammengefasst:
COM1 auf dem Mainboard (ich musste extra noch in die EDV-Abteilung, um 
mir das Slotblech mit dem Stecker zu holen, weil die normalerweise 
garnicht mehr eingebaut werden... Und die waren echt froh, daß ich das 
selber reinschrauben wollte...): 4-10ms Laufzeit (wenn man die 
FIFO-Parameter in der Systemsteuerung richtig hindreht)

Moxa NPort-Server (über LAN): 50-800ms. Wenn man die Paketgröße auf 3 
stellt, steigt die Laufzeit stetig an, weil all die kleinen Paketchen 
garnicht mehr übers LAN passen. Indiskutabel.

USB-RS232-Wandler mit FTDI-Chip: 4-6ms Laufzeit.
Und nein, ich habe bewusst keinen billigen Sching-Ping-Billig Adapter 
von Reichelt für 3,95 verwendet, weil da Prolific oder SciLabs oder 
irgendwas noch viel grauslicheres samt unsäglich behindertem Treiber 
hintersteckt...
(Prolific erkennt z.B. gerne mal eine Maus anstatt eines GPS-Empfängers. 
Windows kann man das ja abgewöhnen, aber bei Prolific erledigt das schon 
der Treiber, was für eine Kacke!)
Hier zuhause mache ich 1Mbps full duplex mit Windows und FTDI.
Und: Es gibt USB-seriell-Konverter mit FTDI-Chipsatz 8-fach für 
Rackmontage. Habe ich schon mal bestellt.
Morgen werde ich eine 8fach-seriell-PCI-Karte in meinen Rechner 
schrauben (wo war hier nochmal der Kasper mit den Interrupts? Es gibt 
nur zwei Interrupts für serielle Schnittstellen und so??? Willkommen im 
Jahre 2000+ als PCI und Interruptsharing schon erfunden waren... selbst 
1992 habe ich schon ISA-Karten mit 4 seriellen Schnittstellen (und 
shared Interrupt)  benutzt. Erfolgreich.)

OK. Ich gebe zu: Ich benutze magisches Geheimwissen! Z.B. wie eine 
serielle Schnittstelle funktioniert. Und das Windows API. Ja wie 
altmodisch ist das denn??? Ich habe das alles untenrum selber 
programmiert und keine fertige (Java)Klassenbibliothek benutzt! Das ist 
ja fast schon unfair gegenüber den heutigen Hochschulabsolventen!

Auf der anderen Seite sehe ich das auch als Herausforderung an. Wir 
haben das Problem ja bereits 1994 mit einer VME-Bus Kiste hinlänglich 
gelöst. Die Herausforderung ist nicht, das Problem zu lösen, sondern es 
unter Win7 mit COTS-Hardare zu lösen.
Für mich sieht es aber lösbar aus :-)

IdS!
Vielen Dank für die Anteilnahme (Und die Einsichten in die diversen 
menschlichen Verhaltensweisen, z.B. eine Antwort parat zu haben, noch 
bevor man die Frage gelesen, geschweige denn verstanden, hat)

Baku

von defekt (Gast)


Lesenswert?

Das schafft ein einzelner AVR mit genügend Pins, und zwar locker. Wenn 
er nur empfangen muss, kann man sich sogar die Pegelwandler sparen.

: Wiederhergestellt durch Moderator
von Baku M. (baku)


Lesenswert?

defekt schrieb:
> Das schafft ein einzelner AVR mit genügend Pins, und zwar locker. Wenn
> er nur empfangen muss, kann man sich sogar die Pegelwandler sparen.

JA, und ich kann mir auch eine Schnarbelhültze um den Schmurkel binden, 
oder die Garpatzten verhöhnen.
MENNO!!!
Liest hier eigentlich irgendein Spacko die Posts, auf die er 
antwortet???

: Wiederhergestellt durch Moderator
von Tom (Gast)


Lesenswert?

M_ schrieb:
> Ich würde das mit einer Soft-SPS wie Beckhoff TwinCAT machen. IO kannst
> du reichlich anschließen, die RS232 sind einzeln austauschbar, EMV fest,
> keine Treiberprobleme, Echtzeituhr in der RT-Laufzeit, Industrie-PC mit
> Windows, SPS-Programm und dazu ein kleines .NET Programm welches die
> Daten aus der SPS abholt und dann per LAN verschickt.
> Das Programm kannst du dann auch in Java schreiben.

genau das würde ich dir auch vorschlagen.

An jede Datenquelle einen EtherCat-Koppler oder einen CX, via Netzwerk 
an den Master( ein normaler Windows-PC mit Twincat).
Geht auch über VPN durch die ganze Welt.

Am Besten, du ruftst einfach mal beim Beckhoff-Support an und schilderst 
dein Vorhaben. Die werden dir sicherlich sagen können, ob das machbar 
ist.

Gruß
Tom

von Martin H. (marrtn)


Lesenswert?

@Baku M.
Nachdem Du ja ohnehin klüger als alle anderen bist, warum frägst Du 
eigentlich hier? So ein überhebliches Getue habe ich ja ganz besonders 
gerne...
Nimm Dein Windows und werde glücklich (oder eben auch nicht).

OK, ich muss zugeben, unsere Versuche waren damals mit Windows XP, aber 
dass Windows 7 so viel besser ist in diesem Punkt glaube ich einfach mal 
nicht. Vermutlich wird Dein High-Performance-Counter nicht in Hardware 
vorhanden sein und per Software emuliert, was Dein Messkonzept ein wenig 
sinnfrei macht.

Aber wie gesagt: Versuch's mit Windows - vielleicht klappt's ja.
Und falls es schief geht, hast Du ja ein paar brauchbare Tipps bekommen.

von Oliver L. (ollil)


Lesenswert?

Nunja - man kann ihn verstehen. Er schreibt ja ausdrücklich er 
kann/darf/will es nicht mit selbstgestrickter Hardware lösen (es soll 
Firmen geben wo es einzuhaltende Regeln gibt.....) und jeder dritte 
schreibt was von ATMega, ARM, MIPS, blah blah... was soll man da noch 
als Fragender von halten? ;)

von Baku M. (baku)


Lesenswert?

Oliver Lehmann schrieb:
> Nunja - man kann ihn verstehen. Er schreibt ja ausdrücklich er
> kann/darf/will es nicht mit selbstgestrickter Hardware lösen (es soll
> Firmen geben wo es einzuhaltende Regeln gibt.....) und jeder dritte
> schreibt was von ATMega, ARM, MIPS, blah blah... was soll man da noch
> als Fragender von halten? ;)

Ach, ich danke dir für dein Verständnis! Damit hat sich die Beantwortung 
obigen Postings auch erübrigt ;-)

Nichtsdestotrotz werde ich hier die weiteren Ergebnisse posten, nur für 
den Fall, daß mal wieder jemand in eine ähnlich mißliche Lage kommt wie 
ich gerade...

IdS, besten Dank an alle und Oliver insbesondere!
Baku

von Robert L. (lrlr)


Lesenswert?

nur so interessehalber:

wie ist eure/deine Erfahrung mit des USB-Serial Adaptern
und windows 7


ich hab bisher keinen gehabt (egal ob FDTI oder Profilic, mehr gibt es 
eh nicht??), der länger als ein paar tage "durchgehend" funktioniert 
hätte... (standby usw. natürlich ausgeschaltet)


ich hab es aber auch immer nur mit einem Acer REvo getestet, u.U: ist 
der schuld?

von Paul B. (paul_baumann)


Lesenswert?

@Baku
Ich kann Dir zwar bei Deinem Problem nicht helfen, aber dennoch hat es 
sich
gelohnt, den Thread zu lesen -vor Allem wegen diesem Satz:

Zitat:>A, und ich kann mir auch eine Schnarbelhültze um den Schmurkel 
>binden, oder die Garpatzten verhöhnen.

Das ist von so irrsinniger sprachlicher Schönheit...
;-)
MfG Paul

von atmeltierchen (Gast)


Lesenswert?

Mein Vorschlag:

Hardware:

- 1x Exsys EX-44032 RS232 Controller. Das Teil hat jeweils 32x RS232 
Ports
- 1x serielles GPS/DCF77-Device für die Zeit
- Einen normalen Intel Industrie-PC mit 1x PCI-E auf dem Mainboard

Software:
- Scientific Linux mit einem RT_PREEMPT Kernel


Begruendung:

Linux nimmt dir das komplette Management für die serielle Karte ab und 
lässt die interne Zeit mittels GPS/DCF77/NTP synchronisieren. Damit wäre 
die HAL-Schicht schonmal im Eimer. Dadurch das Scientific Linux ein 
Redhat-Klon ist, wird dir API-Stabilität für grob 10 Jahre garantiert - 
aktuelle Sicherheitslücken werden aber zeitnah korrigiert. Das macht, 
wenn die Laube einmal läuft, das Leben ziemlich leicht.

Mit der Linux-Echtzeiterweiterung kriegst du verdammt kleine 
Jitterzeiten im ~100-300uS Bereich für periodische Tasks hin, d.h. deine 
Geschichte mit vielen Milisekunden ist damit auch erledigt.

Dadurch das Linux dir bestehende APIs für die serielle Konsolen als auch 
die Zeit und das Netzwerk anbietet, muss sich dein bezahlter Entwickler 
nur noch um die eigentliche Sychronization und die Erstellung der 
Datenpakete kümmern.

von atmeltierchen (Gast)


Lesenswert?

Weiterer Vorteil von meinem Vorschlag:

Für alles gibt es Second-Source Lieferanten:

 - Die serielle Schnittstelle ist ist austauschbar, höchstens die 
Device-Namen müssen vielleicht verändert werden
 - Mainboard allesamt Peripherie ist austauschbar


D.h. wenn es einmal läuft, freut sich der Praktikant wenn er es auf 
neuere Hardware upgraden darf. Alles ziemlich schmerzfrei. Zudem gibt es 
freie Compiler als auch ausgiebigste Tools, die die Entwicklung 
unterstützen.

von Pic T. (pic)


Lesenswert?

Um fair zu bleiben, der Multimedia Timer unter Windows erfüllt auch die
Anforderungen, ist zwar nicht in Java programmierbar, dafür kann es auf
den so von BWL heissgeliebten Windows PC laufen.
Wenn dann die RS232 Karten die Addressen in den Ram bereich verschoben
werden greift dann auch nicht mehr der legacy 1ms timeout bei 
HW-zugriffen,
und damit sind dann die hw-rs232 Schnittstellen mit 1ms Auflösung 
registrierbar. Wenn man das mit dem Adressraum nicht hinbekommt, dann 
braucht
der Zugriff schon 25mS und man ist außer Spezifikation.

von Baku M. (baku)


Lesenswert?

pic tech schrieb:
> Um fair zu bleiben, der Multimedia Timer unter Windows erfüllt auch die
> Anforderungen, ist zwar nicht in Java programmierbar, dafür kann es auf
> den so von BWL heissgeliebten Windows PC laufen.

Yepp, so isses. Mit dem 1ms MM-Timer kann man dann ein Event setzen, 
das, ausreichende Priorisierung des Threads vorausgesetzt, in unter 
100us abgefrühstückt wird.

> Wenn dann die RS232 Karten die Addressen in den Ram bereich verschoben
> werden greift dann auch nicht mehr der legacy 1ms timeout bei
> HW-zugriffen,
> und damit sind dann die hw-rs232 Schnittstellen mit 1ms Auflösung
> registrierbar. Wenn man das mit dem Adressraum nicht hinbekommt, dann
> braucht
> der Zugriff schon 25mS und man ist außer Spezifikation.

Neenee, auf die Hardware sollten schon die Treiber zugreifen, dafür gibt 
es sie ja. Die dürfen dann auch deutlich schneller... Außerdem muß man 
das ganze direkte Handling ausserhalb der Windows-Messagepumpe 
erledigen, sonst haut das natürlich niemals hin.
Ich bin jetzt bei max. 3ms Verzögerung, im Mittel 1ms. Es laufen 6 
Instanzen auf 6 Ports, die Anzahl hat aber keine merklichen Auswirkungen 
auf die Reaktionszeit. Und die CPU-Auslastung liegt bei 0%...
Übernächste Woche bekomme ich eine 32-fach PCIx-Karte, dann wird es 
richtig spannend!!!

IdS,
Baku

von Baku M. (baku)


Lesenswert?

Robert L. schrieb:
> nur so interessehalber:
>
> wie ist eure/deine Erfahrung mit des USB-Serial Adaptern
> und windows 7
[...]
> ich hab es aber auch immer nur mit einem Acer REvo getestet, u.U: ist
> der schuld?

Keine Ahnung. Wir haben aber FDTI mit Win7 am laufen, und die laufen 
durchgehend (wochenlang...) und haben noch nie Probleme gemacht. Sind 
aber auch fest installiert und werden nicht bewegt, ebnso werden keine 
anderen USB-Geräte an- oder abgesteckt. Ich habe aber von vornherein auf 
FTDI bestanden, alles andere ist Käse...

von ING-O (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Dani schrieb:
>
>> Leider wird die Tool-Lib wxWindows nicht mehr weiterentwickelt, seit es
>> QT frei gibt.
> Sie heißt seit einigen Jahren wxWidgets, und wird durchaus
> weiterentwickelt; die letzte Version ist 2.9.3 vom Dezember letzten
> Jahres.
> http://www.wxwidgets.org/

nun ja, die 3.0 ist seit 2009 angekündigt!

eugler schrieb:
> Hmmmm. IMHO ist das bei weitem nicht trivial. Man braucht ja eine
> "Instanz", die sowohl die Telegramme als auch die Zeitinformation
> parallel abfragen bzw. annehmen kann. Das bedeutet, diese Instanz muss
> den "internen" Zeitstempel halten, und der muss genau sein.
>
> IMHO geht das nur über eine FPGA Lösung in Verbindung mit einer sehr
> genauen Zeitquelle.

oder mit einem Stempel in den Daten selber, die die Quellen einprägen. 
So sollte man sowas nämlich lösen, wenn es ordentlich sein soll.

Das Ganze Kartengedöhns über Treiber und womöglich noch Konverter mit 
unbekannter Latenz taugt leider nicht viel. Niemand weiss, wie der 
8:1-Konverter abpollt und wann er die Daten wo einsortiert.

von Peter (Gast)


Lesenswert?

..
und wenn die Seriellen Daten mit Arduino direkt ann der Schnittstelle 
ausgelesen werden?
Arduino verpasst einen "Zeitstempel" und schickt diese dann über das 
Ethernet-Shield an eine SQL Datenbank im Interet per GET.
lala.php?schnittstelle=1&Zeit=11.07.2012-08.55&daten=irgendwas

Kosten Hardware ca 60 Euro -  Programmierung 20min.

Gruß

Peter

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Baku M. schrieb:
> Über 24 serielle Schnittstellen laufen mit max. 9600bps Datentelegramme
> ein, die jeweils aus 3 Byte bestehen.

Ich schlage einen einfachen seriellen Terminal-Server vor:

24 x RS232, 1 x ETH, zum Beispiel:

  http://www.perlesystems.de/products/Terminal-Server.shtml

Dann schreibst Du Dein Windows-Programm, welches sich über IP mit den 24 
Ports verbindet und sammelst die Daten ein. Das schöne an der Lösung: 
Die Schnittstelle ist betriebssystem-unabhängig.

Gruß,

Frank

von oszi40 (Gast)


Lesenswert?

Baku M. schrieb im Beitrag ganz oben #2730653:
> Diese Daten müssen !Zeitrichtig! zusammengefasst werden, mit einem
> Zeitstempel (Da ist die über GPS synchronisierte Systemuhr genau genug)

Frank M. schrieb:
> Dann schreibst Du Dein Windows-Programm, welches sich über IP mit den 24
> Ports verbindet und sammelst die Daten ein. Das schöne an der Lösung:

Zeitrichtig?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

oszi40 schrieb:
> Frank M. schrieb:
>> Dann schreibst Du Dein Windows-Programm, welches sich über IP mit den 24
>> Ports verbindet und sammelst die Daten ein. Das schöne an der Lösung:
>
> Zeitrichtig?

Ja, natürlich. Wo ist das Problem, 24 IP-Verbindungen gleichzeitig 
aufzumachen und dann per select() das Zeug so einzusammeln, wie es 
gerade kommt?

von Robert L. (lrlr)


Lesenswert?

>Ja, natürlich. Wo ist das Problem, 24 IP-Verbindungen gleichzeitig
>aufzumachen und dann per select() das Zeug so einzusammeln, wie es
>gerade kommt?

du siehst da keine probleme?


das Hauptproblem ist mal, das:

>Datentelegramme
>ein, die jeweils aus 3 Byte bestehen.

es gibt also genau 2 Möglichkeiten

jedes der 3 Byte Pakete wird EINZELN verschickt (was nicht geht, dazu 
ist TCP/IP zu langsam, ..)
und IMHO ist (bei 24 Verbindungen) die Reihenfolge dann trotzdem nicht 
garantiert..


oder die Pakete werden in TCP/IP pakete gesammelt, dann hast du aber 
keine Chance die Reihenfolge zu ermitteln..

welche der 2 Methoden verwendet jetzt dein "terminal-server"???

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Robert L. schrieb:
> du siehst da keine probleme?

Nö.

> jedes der 3 Byte Pakete wird EINZELN verschickt (was nicht geht, dazu
> ist TCP/IP zu langsam, ..)

Wieso das? Die kommen mit 9600Bd an, das entspricht 960 Byte/sec, wenn 
man 8BN1 rechnet. Bei 24 Datenleitungen sind das läppische 23040 
Byte/sec = 23 kB/sec, diese verpacke ich in zig 3-Byte-TCP/IP-Päckchen 
mit bunten Schleifchen drumherum :-)

EDIT: Außerdem glaube ich nicht, dass jeweils 3 Bytes in ein 
TCP-IP-Paket gestopft werden. Es sind zwar logisch gesehen 3 Bytes, aber 
der TO schreibt, dass diese fortwährend geschickt werden - ohne Pause. 
Der Terminalserver wird daher soviele Bytes in ein Paket stopfen, wie er 
gerade in der Input-Queue hat.

> und IMHO ist (bei 24 Verbindungen) die Reihenfolge dann trotzdem nicht
> garantiert..

Du musst sowieso lt. TO Laufzeiten messen und selbst die Zeitstempel 
korrigieren. So what? Meinst Du, das bekommst Du mit 
24COM-Schnittstellen am PC besser hin? So oder so ist es eine 
anspruchsvolle Ausgabe, die Bytes in die richtige Reihenfolge zu 
bekommen. Aber das hat nichts mit der Hardware-Frage zu tun, sondern ist 
eine reine Frage der Software.

EDIT:
Ausserdem hat der TO überhaupt nichts dazu gesagt, wie genau das System 
die "Zeitstempel" auflösen soll.

von Robert L. (lrlr)


Lesenswert?

>23040  Byte/sec

also 7680 3Byte Pakte / Sekunde

dass geht nicht mit TCP/IP über LAN

>elbst die Zeitstempel
>korrigieren.

welche Zeitstempel?

>Es sind zwar logisch gesehen 3 Bytes, aber
>der TO schreibt, dass diese fortwährend geschickt werden - ohne Pause.
>Der Terminalserver wird daher soviele Bytes in ein Paket stopfen, wie er
>gerade in der Input-Queue hat.

sag ich ja,
genau das ist ja das Problem, du hast dann 24 Pakete (pro COM Port) mit 
jeweils z.b. 50 "3 Byte paketen"

wie willst du die sortieren..

>Außerdem glaube ich nicht,

keine Hardware frage, sondern eine Frage des Glaubens.. ok..

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Robert L. schrieb:

> welche Zeitstempel?

Der TO muss die unterschiedlichen Laufzeiten berücksichtigen - z.B. bei 
Satellitenübertragung vs. Kabel. Er bekommt also sowieso die Daten in 
der falschen Reihenfolge rein - dagegen kann er nichts anderes machen, 
als die "Zeitstempel" ("wann wurde das 3-Byte-Paket losgeschickt") 
selbst auszurechnen.

> sag ich ja,
> genau das ist ja das Problem, du hast dann 24 Pakete (pro COM Port) mit
> jeweils z.b. 50 "3 Byte paketen"
>
> wie willst du die sortieren..

Komisch, eben hast Du noch erzählt, dass TCP/IP zu langsam wäre...

Okay, ich erklärs Dir:

Ich weiß, wann ich das letzte Mal Daten von dem jeweiligen 
Terminal-Port gelesen habe. Diese Zeit X merke ich mir für jeden 
Terminal-Port. Hole ich dann beim nächsten Mal z.B. 240 Zeichen an 
diesem Port ab, kann ich für jedes empfangene Byte in der Queue die Zeit 
des Eintreffens errechnen:

  1. Byte: X + 1/960 sec
  2. Byte: X + 2/960 sec
240. Byte: X + 240/960 sec

Ist doch nicht sooo schwierig, oder?

>>Außerdem glaube ich nicht,
> keine Hardware frage, sondern eine Frage des Glaubens.. ok..

So ein Terminalserver ist spezialisiert auf seine Aufgabe. Er wird 
seinen Job allemal besser machen als ein zusammengestöpseltes PC-System. 
Ich habe jahrelang mit solchen Dingern gearbeitet und war damit immer 
sehr zufrieden.

von oszi40 (Gast)


Lesenswert?

Frank M. schrieb:
> Der TO muss die unterschiedlichen Laufzeiten berücksichtigen - z.B. bei
> Satellitenübertragung vs. Kabel.

1.Die Laufzeiten können auch schwanken? Dann müßte jedes Gerät "seine 
Atomzeit" relativ genau mitliefern und die Differenz ähnlich dem 
NTP-Server nachberechnet werden?

2.Nach meiner bisherigen Erkenntnis kann man aber maximal 50% der 
verfügbaren Zeitfenster ausnutzen wenn es "ein wenig" funktionieren 
soll.

von Robert L. (lrlr)


Lesenswert?

>Komisch, eben hast Du noch erzählt, dass TCP/IP zu langsam wäre...

ja, wenn man 3 byte einzeln senden würde (aber egal) im beispiel sprach 
ich dann ja von 50 3-byte auf einmal...


ok, das könnte gehen, WENN zwischen den 3byte paketen  keine Pausen sind

(ich bin immer davon ausgegangen, dass zwischen den Paketen auch
 mal Pausen sind, hab ich wohl überlesen/missverstanden)



wenn man nämlich immer exakt genau 320 3-Byte  Pakete pro Sekunde und 
Kanal bekommt, ist die Aufgabe ja extrem einfach (wie du ja selber 
schreibst) (egal wie man sie löst, solange man alle Daten erhält)

für so was einfaches: da wäre mir jetzt die Erstellung des Thread hier 
nicht ganz klar..

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

oszi40 schrieb:

> 1.Die Laufzeiten können auch schwanken?

Der TO schrieb in seinem Eröffnungsposting:

"so daß Laufzeiten von ca. 50ms bis 800ms zu berücksichtigen sind. Diese 
können aber für die einzelne Strecke als konstant angesehen und 
berücksichtigt werden."

Also: für jede Strecke konstant. Außerdem hat er geschrieben, dass das 
Protokoll es vorsieht, Laufzeitmessungen jederzeit durchzuführen. Diese 
könnte man ja in regelmäßigen Abständen vorsehen, um sich selbst wieder 
neu zu kalibrieren.

> Dann müßte jedes Gerät "seine
> Atomzeit" relativ genau mitliefern und die Differenz ähnlich dem
> NTP-Server nachberechnet werden?

Dann ja, ist aber hier - so wie ich es verstanden habe - nicht 
notwendig.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Robert L. schrieb:
>>Komisch, eben hast Du noch erzählt, dass TCP/IP zu langsam wäre...
>
> ja, wenn man 3 byte einzeln senden würde (aber egal) im beispiel sprach
> ich dann ja von 50 3-byte auf einmal...

Wie groß wird ein TCP/IP-Paket auf Ethernet-Ebene mit einer 
Nutzdatenlänge von 3 Byte? Ich glaube schon, dass ich davon ca. 7000 
Stück in der Sekunde über ein Ethernet geschickt bekomme. Aber das 
Berechnen ist theoretischer Natur: Du bekommst in einem TCP/IP-Paket 
soviele Bytes, wie seit der letzten Abfrage angekommen sind - und nicht 
nur 3 Bytes.

> ok, das könnte gehen, WENN zwischen den 3byte paketen  keine Pausen sind

Das schrieb der TO: es wird permanent gesendet, ohne Pausen.

> wenn man nämlich immer exakt genau 320 3-Byte  Pakete pro Sekunde und
> Kanal bekommt, ist die Aufgabe ja extrem einfach (wie du ja selber
> schreibst) (egal wie man sie löst, solange man alle Daten erhält)

Ja, sie ist relativ einfach. Ich anstelle des TO würde mich auf die 
Software konzentrieren - und als Hardware einfach so ein serielles 
Terminalservergerät nehmen... ein Problem weniger.

von Chris (Gast)


Lesenswert?

Frank M. schrieb:
> Wie groß wird ein TCP/IP-Paket auf Ethernet-Ebene mit einer
> Nutzdatenlänge von 3 Byte?

In einem Ethernet-Frame müssen minimal 50 Byte an Nutzdaten enthalten 
sein.

von Peter II (Gast)


Lesenswert?

Chris schrieb:
> In einem Ethernet-Frame müssen minimal 50 Byte an Nutzdaten enthalten
> sein.

nicht ganz, ein Frame muss minimal 64byte lag sein, darin kann aber nur 
1 byte nutzdaten enthalten sein. Der rest wird im PAD als Dummy 
gesendet.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Peter II schrieb:
> nicht ganz, ein Frame muss minimal 64byte lag sein, darin kann aber nur
> 1 byte nutzdaten enthalten sein. Der rest wird im PAD als Dummy
> gesendet.

Okay, damit ergibt sich:

   7680 pakete/sec * 64 Byte/Paket = 491520 Byte/sec = ~3,9 MBit/sec

Das sollte schon mit 100Mbit Ethernet überhaupt kein Problem sein. Aber 
wie gesagt: Diese Berechnung ist rein theoretisch.

von Vlad T. (vlad_tepesch)


Lesenswert?

Frank M. schrieb:
> Okay, damit ergibt sich:
>
>    7680 pakete/sec * 64 Byte/Paket = 491520 Byte/sec = ~3,9 MBit/sec

dazu kommt der Paketoverhead und das ganze mal 24.

von Peter II (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> dazu kommt der Paketoverhead und das ganze mal 24.

ist schon alles mit drin.

von Baku M. (baku)


Lesenswert?

Hallo alle zusammen!
Erstmal vielen Dank für das Interesse, es scheint ja kein triviales 
Problem zu sein...
@Frank:
Du hast natürlich Recht, über einen Terminal-Server / TCP/IP lässt sich 
die Datenmenge spielend einlesen. Ist bei uns auch die bevorzugte Lösung 
(Wir haben noch andere Systeme mit VIELEN seriellen Schnittstellen, Erbe 
der grauen Vorzeit), weil man keine Schnittstellenkarten in den Rechner 
würgen muß und die Verarbeitungssoftware räumlich völlig von den 
Hardwareanschlüssen entkoppelt ist.
In genau diesem Fall geht das aber nicht, weil die Zeit, die ein 
empfangenes Byte (oder 3Byte-Telegramm) von der Schnittstellenbuchse bis 
es in der Software auftaucht, irgendwo zwischen 50ms und über 800ms 
(gemessen) liegt und völlig unvorhersehbar ist. (in TCP-Pakete packen, 2 
mal über einen TCP/IP-Stack, über LAN und evtl.Switche...)
Kein Problem, die Daten kommen ja 'Byte an Byte', da brauch ich also nur 
die Telegramme zählen, und weiß, wo ich bin. Eine Pufferung aller Daten 
mit anschließendem zeitrichtigem Zusammenfügen muß die Software sowieso 
machen, das ist ja die eigentliche Hauptaufgabe.

Dabei gibt es dann 2 Probleme:
- Die Datenraten werden von den Sendern vorgegeben, werden also 
geringfügige Abweichungen untereinander haben. Und schon laufen sie nach 
einiger Zeit auseinander, weil ein absoluter Zeitbezug fehlt. Der Fehler 
wird also mit der Zeit immer größer.
- Viel Schlimmer: Es muß ja einmal ein gemeinsamer Startzeitpunkt für 
alle Daten festgelegt werden, ab dem mit der Zählung begonnen werden 
kann. Das ginge evtl. über die Laufzeitmessung, die allerdings nur über 
eben diese seriellen Schnittstellen durchgeführt werden kann. Damit 
bekommt man also, völlig unabhängig von der Laufzeit, einen Fehler von 
2*(20...500ms) rein, der sich auch nicht mehr auflösen lässt.
- Kurzzeitge Unterbrechungen des Datenstroms sind jederzeit möglich, 
auch sollte das Aus- und Wiedereinschalten eines Sensors keine 
Neukalibration erforderlich machen. Der Fall 'Keine Daten von Sensor X' 
ist in der weiteren Verarbeitung durchaus vorgesehen.
-> Ergebnis: Das geht so nicht, und mir ist bislang kein Softwaretrick 
eingefallen, mit dem sich diese fehlende Information beschaffen liesse.

Ich bin natürlich für jeden Geistesblitz dankbar, wenn ich der Meinung 
wäre, ich wüsste schon alles, würde ich ja hier nicht fragen ;-)

Falls ich vergessen hatte, es zu erwähnen: Die maximal tolerable 
Abweichung liegt so bei ca. 10-15ms, und die Laufzeitmessung kann max. 
einaml am Tag ausgeführt werden, weil dann das System natürlich keine 
Nutzdaten liefert.

Nächste Woche bekomme ich eine 32-fach PCIe-Karte und werde mal messen, 
wie schnell (und vor allem wie reproduzierbar) ich die Daten damit von 
der Buchse in die Software bekomme.
Sollte das nicht hinzukriegen sein, dann werde ich den Moxa mit dem 
Embedded Linux nehmen. Der kann dann schön die Telegramme zu Paketen 
zusammenfassen und Zeitstempel dranmachen...

Ich werde berichten!
Einstweilen schönes Wochenende
Baku

P.S.: Und in ca.3 Jahren will der Kunde das Geld für neue Sensoren 
zusammen haben, die machen dann gleich an Ort und Stelle GPS-Zeitstempel 
an die Daten und verschicken sie über TCP/IP... Das wird schön :-)

von oszi40 (Gast)


Lesenswert?

Baku M. schrieb:
> -> Ergebnis: Das geht so nicht, und mir ist bislang kein Softwaretrick
> eingefallen, mit dem sich diese fehlende Information beschaffen liesse.

Evtl. Tabelle mit letztem oder voreingestellten Wert füllen damit kein 
Loch entsteht?

Kritisch wird die ganze Sache wenn die Zeitfenster zu knapp werden. Habt 
Ihr ein Echtzeitsystem laufen oder ein normales Betriebssystem? Beim 
normalen Windows wird die Auswertung wohl nicht so genau werden, weil 
das System andere Prioritäten hat. 
http://de.wikipedia.org/wiki/Echtzeitbetriebssystem

von Atmeltierchen (Gast)


Lesenswert?

Baku M. schrieb:
> Kunde

Ich bin ja echt nicht kleinlich bei Non-Profit-Projekten und gebe dort 
auch gerne ehrenamtlich Support, aber wir sollen dir kostenlos bei einem 
kommerziellen Projekt helfen und eine nahezu fertige Problemlösung 
vorkauen und du streichst die Prämie dann ein?!

von Baku M. (baku)


Lesenswert?

oszi40 schrieb:
> Baku M. schrieb:
>> -> Ergebnis: Das geht so nicht, und mir ist bislang kein Softwaretrick
>> eingefallen, mit dem sich diese fehlende Information beschaffen liesse.
> Evtl. Tabelle mit letztem oder voreingestellten Wert füllen damit kein
> Loch entsteht?

Dazu müsste man dann wissen, wie lang die Lücke ist, und da beisst sich 
die Katze wieder in den Schwanz...

> Kritisch wird die ganze Sache wenn die Zeitfenster zu knapp werden. Habt
> Ihr ein Echtzeitsystem laufen oder ein normales Betriebssystem? Beim
> normalen Windows wird die Auswertung wohl nicht so genau werden, weil
> das System andere Prioritäten hat.
> http://de.wikipedia.org/wiki/Echtzeitbetriebssystem

Nönö. Ist schon ein stinknormales Windows, vulgo kein 
'Echtzeitbetriebssystem'. Da aber die Reaktionszeiten (bei richtiger 
Programmierung) ausreichen, um Audio- und sogar Videowiedergabe knacks- 
und ruckelfrei hinzukriegen, sollte diese eher harmlose Aufgabe auch 
damit lösbar sein.
Wie bereits oben erwähnt: Das Senden über einen ComPort am PCI-Bus 
bekommt man auf unter 100us genau hin, auch wenn aller möglicher Kram 
nebenbei läuft.

von Baku M. (baku)


Lesenswert?

Atmeltierchen schrieb:
> Baku M. schrieb:
>> Kunde
>
> Ich bin ja echt nicht kleinlich bei Non-Profit-Projekten und gebe dort
> auch gerne ehrenamtlich Support, aber wir sollen dir kostenlos bei einem
> kommerziellen Projekt helfen und eine nahezu fertige Problemlösung
> vorkauen und du streichst die Prämie dann ein?!

Wo war von 'fertiger Lösung vorkauen' die Rede und 'Prämie 
einstreichen'?
Hier werden häufig genug Themen aus dem professionellem Bereich 
diskutiert, wenn du daran nicht teilnehmen willst, ist das deine Sache. 
Ansonsten:

http://fotos.mtb-news.de/p1/911406

IdS,
Baku

von Baku M. (baku)


Angehängte Dateien:

Lesenswert?

So höret denn, all ihr Verzagten, Zweifler und Ungläubigen:

Das große Rätsel ist gelöst!
Es geht!
Mit Windows.
Man muß das nur können.

Und Threads ohne irgendeine durch eine virtuelle Maschine aus dem 
Internet heruntergeladene Klassenbibliothek einfach nur durch 
Betriebssystemaufrufe erzeugen. Das geht! Events werden in unter 100us 
gemeldet, wenn der wartende Thread ausreichend priorisiert ist. Außerdem 
muß man noch Glück mit der Interfacekarte haben, viel mehr noch mit den 
Treibern. Und alle 64 FIFOs per Hand auf 3 Byte stellen.

@atmeltierchen:
Ich streich jetzt meine Prämie ein, und wer wissen will, wie ich das 
gemacht habe, dem verrate ich es gerne.

:-)

von Noname (Gast)


Lesenswert?

Baku M. schrieb:
> Ich streich jetzt meine Prämie ein, und wer wissen will, wie ich das
> gemacht habe, dem verrate ich es gerne.

Ja, erzähl doch mal!

von Atmeltierchen (Gast)


Lesenswert?

Baku M. schrieb:
> Ich streich jetzt meine Prämie ein, und wer wissen will, wie ich das
> gemacht habe, dem verrate ich es gerne.

Glückwunsch - trotz meines Gepampfes ;-)

von Baku M. (baku)


Lesenswert?

Atmeltierchen schrieb:
> Glückwunsch - trotz meines Gepampfes ;-)

Nix für ungut, immerhin hattest du ja auch schon die EX-44032 
vorgeschlagen. Wer konstruktiv ist, darf auch nörgeln ;-)

Ach ja: Ich benutze jetzt die Exsys EX-44023 in meinem relativ-standard 
Windows7/64 Arbeitplatzrechner. Programmiert wird in VC++/VS2010 als 
32Bit-Applikation, damit man auch rückwärtskompatibel ist.

Die COM-Ports werden mit CreateFile(..) und overlapped IO geöffnet. Dazu 
gibt es bei Microsoft einen Beispielcode, der auch die Initialisierung 
des Ports und die Behandlung der CommEvents beschreibt, als Einstieg. 
Müsste ich ggfs. raussuchen. Dabei sind einige Feinheiten zu optimieren, 
aber das geht jetzt sehr ins Detail.

Dann werden pro Port 2 Threads erzeugt, von denen einer für den Empfang 
(und die anderen CommEvents) zuständig ist, der andere fürs zeitgenaue 
Senden. Die Threads werden auf THREAD_PRIORITY_ABOVE_NORMAL gesetzt. 
Eine weitere Erhöhung der Priorität bringt keinen messbaren Vorteil.
Der Empfangsthread wartet mit WaitCommEvent(..) auf ein Ereignis 
(vorzugsweise das Eintrudeln von Daten), holt die Daten ab und 
verarbeitet sie.
-Das WaitCommEvent(..) wurde übrigens im M$-Beispielcode vergessen, 
weswegen das nichts als eine Pollingschleife in einem separaten Thread 
ist, unheimlich effizient...
Da die FIFOs der Karte auf 3 Byte gestellt sind, kommen die Daten immer 
3-Byte-Weise, genau die Telegrammlänge.
Die Reaktion auf das EV_RXDATA, d.h. wenn 3 Bytes da sind, dauert im 
Mittel unter 1ms, maximal 4ms (Wenn alle 32 Ports laufen).

Der Sendethread wartet auf ein Event, welches von einem Multimedia-Timer 
gesetzt wird. CreateWaitableTimer(...) würde zwar das gleiche tun, 
nämlich nach Ablauf der Zeit ein Event setzen, ist aber eine 
Katastrophe, weil die Timerauflösung recht unvorhersehbar ist, und statt 
4ms auch mal 15ms gewartet wird. Ist für solche Zeiten völlig 
unbrauchbar!
Mit einem Multimedia-Timer und einem eigenem Thread kommt man auf >100us 
wiederholgenauigkeit beim Senden. Oszilloskopisch geprüft, sehr zur 
Verwunderung der Informatiker unter den Kollegen...

Was noch? Die Zugriffe auf das File (oder besser den Port) aus den 
beiden Threads sollte man mit einer CriticalSection gegeneinander 
abschotten.
Und so läuft das denn.
Eine große Unbekannte bei der ganzen Geschichte sind natürlich die 
Treiber und deren Integration ins OS, aber ExSys scheint da garnicht 
schlecht zu sein.
Hoffe, daß irgendwem diese Hinweise irgendwann mal helfen mögen!

IdS,
Baku

von Peter II (Gast)


Lesenswert?

Baku M. schrieb:
> Was noch? Die Zugriffe auf das File (oder besser den Port) aus den
> beiden Threads sollte man mit einer CriticalSection gegeneinander
> abschotten.

ich hätte gedacht es es ebend bei overlapped IO nicht notwendig ist.

von Baku M. (baku)


Lesenswert?

Peter II schrieb:
> ich hätte gedacht es es ebend bei overlapped IO nicht notwendig ist.

Hm... Da bringst du mich ins grübeln... Ich habe auf die schnelle nichts 
gefunden, ob lesen und schreiben auf das gleiche File bei overlapped IO 
thread-safe ist. Generell ist es aber eine gute Idee, bei Zugriffen auf 
die gleiche Ressource aus verschiedenen Threads diese gegeneinander zu 
verriegeln. Da die Zugriffe bei overlapped IO nicht blockierend sind, 
geht da auch kaum Zeit verloren, und es kann -im Falle daß sie nicht 
thread-safe sind- langwierige, lästige Suche nach sporadisch 
auftretenden Fehlern ersparen.

Hat vielleicht jemand definitive Informationen dazu?

fragt
Baku

von womisa (Gast)


Lesenswert?

Hi

ich habe nicht Alles gelesen (!). Ich hab mal sowas vor 25 Jahren 
gemacht. Warum nimmst du nicht einfach einen Terminalserver zB.: 
http://www.perlesystems.de/products/Terminal-Server.shtml

oder ähnliches, mache ich derzeit im Heimbereich mit rs232 to 
Ethernetconverter.....

Ich hatte damals einen 16fachen und das hat super funktioniert....

von Robert L. (lrlr)


Lesenswert?

@ womisa

du brauchst ja nicht alles lesen, aber suche zumindest den link den du 
gepostet hat in dem thread...

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
Noch kein Account? Hier anmelden.