Hallo Spezialisten, könnte mir einer eine Frage beantworten, ob man unter Windows CE 6.0 eine Interrupt-Routine implementieren kann, so dass bei Eintreffen eines Ethernet Paketes diese Interrupt-Routine aufgerufen wird. Im normalen XP geht es leider nicht. Ich will nämlich ein eigenes Kommunikationsprotokoll auf Ethernet Basis entwickeln. Vielen Dank
Das kann man natürlich auch unter "normalem Windows XP", sieh Dir mal an, wie wireshark (http://www.wireshark.org) funktioniert.
Danke aber dies ist nicht das was ich mir vorgestellt habe. Es muss in "Real Time" funktionieren. Ich will keinesfalls die Kommunikation über TCP/IP aufbauen. Wie gesagt sobald ein Ethernet Paket ankommt, wird Interrupt ausgelöst, der seinerseits via DMA die Daten ausliest.
Das Betriebsystem ist mir nicht wichtig. Es muss nämlich Real Time OS sein. Ich könnte mir auch mir der Keil OS anfreunden.
Dann kannst Du den Kram nach wie vor unter XP machen - Du wirst Dich nur mit der Devicetreiberprogrammierung anfreunden müssen. Was hast Du großartiges vor?
Ich muss ziemlich schnell die Soll-Werte an Motor-Controller senden. Würde es gehen, wenn ich eine Isa Bus Karte mit entsprechendem Ethernet-Kontroller nehme und per Registeradressierung die Kommunikation gestallte?
Russe schrieb: > Ich muss ziemlich schnell.. wie schnell denn? geht es im µs, ms oder sekunden? Und mal schnell ebend in die Treiber-Programmierung einsteigen und ein neuen Protokoll entwerfen was dan auch sofort stabiel läuft ist schon sportlich. Ich glaube was das du mit den normales Windows CE und UDP Programmierung besser dran bist.
Russe schrieb: > Ich muss ziemlich schnell die Soll-Werte an Motor-Controller senden. Dafür gibt es Industrial Ethernet mit dafür optimierten Ethernet-Karten (die haben dann einen eigenen Rechner onboard, der sich um die timingkritischen Dinge kümmert) > Würde es gehen, wenn ich eine Isa Bus Karte mit entsprechendem > Ethernet-Kontroller nehme und per Registeradressierung die Kommunikation > gestallte? Einerseits wirst Du eine ISA-Karte kaum noch irgendwo hineinstecken können, andererseits kannst Du aus Usermode-Programmen nicht auf irgendwelche Hardware-I/O-Register zugreifen (außer mit Tricks à la giveio.sys) und obendrein kann ein Usermode-Programm nicht auf Interrupts reagieren oder gar irgendwelche DMA-gesteuerten Dinge machen. Hinzu kommt noch, daß gerade der ISA-Bus so extrem langsam ist, daß der Ansatz Deine Geschwindigkeits-Idee konterkarieren würde. Allerdings: Definiere "schnell". Vielleicht ist Dein Problem ja auch einfach nur ein Designfehler oder ein Missverständnis.
Ich soll auf 8 Antriebe in 300 µs mit Daten versorgen. Das System wird so aufgebaut, dass es keine Kollisionen entstehen können. Somit entfällt der Overhead wie bei SERCOS oder ähnlichen Systemen. Deswegen habe ich mir gedacht ich nehme Ethernet als Kommunikationsmittel. 100 Mbit, Paketlänge 46 Byte.
Es existiert doch Möglichkeit unter Keil OS Ethernet Interrupt zu implementieren. Kann mir jemand sagen, ob unter WinCE oder einem anderen Betriebssystem ähnlich Vorgehensweise erlaubt ist. http://www.keil.com/support/man/docs/rlarm/rlarm_interrupt_ethernet.htm
Russe schrieb: > Kann mir jemand sagen, ob unter WinCE oder einem anderen Betriebssystem > ähnlich Vorgehensweise erlaubt ist. Spätestens wenn Du einen eigenen Devicetreiber für die Netzwerkkarte schreibst, ja. Bei Windows gibt es das Konzept der "layered" Treiber, d.h. Du kannst einen Treiber entwickeln, der wiederum mit dem eigentlichen Netzwerkkartentreiber kommuniziert. Für Reaktionsgeschwindigkeiten im Bereich unter 1 msec ist bei Windows sowieso nur noch auf Devicetreiberebene etwas zu erreichen.
Hmm, Du überlegst ein nicht echtzeitfähiges Betriebssystem zu nehmen, um auf einem nicht echtzeitfähigen Bussystem zuverlässig im 300µs Raster 8 Teilnehmer mit Daten zu versorgen? Das nenn ich sportlich :-)
Laut Beschreibung soll CE echtzeitfähig sein. Ich erwarte kein Kollisionen, da ich nur einen Master habe, der die Daten sequenziell (mit Quittierung) an die Antriebe sendet.
Nunja, "Echtzeitfähig" ist ein weiter Begriff. Er sagt eigentlich nur aus daß ein System innerhalb einer Zeitspanne X reagiert. Wie Rufus schon schrieb, liegt diese Zeitspanne X bei WinCE üblicherweise bei 1ms. Die allerdings auch nur wenn du alles richtig einstellst. Um auf 300µs zu kommen musst du schon viel weiter unten schrauben. An deiner Stelle würde ich für den Echtzeittask ein "echtes" embedded OS nehmen, z.B. das von dir erwähnte von Keil. Wenn Du wegen Bedienoberfläche oder was auch immer WinCE benötigst, dann mach zwei Systeme draus: Eines mit dem embedded OS für die Echtzeitaufgaben, und eines mit WinCE, daß dein RT-System mit Daten versorgt. Das mit dem Ethernet passt schon, wenn du sicherstellen kannst daß keiner Zwischenfunkt und du zwischen den Paketen genug Reserven einplanst für den Fall daß ein Paket nochmal gesendet werden muss. Damit musst du im Industriellen Umfeld aufgrund der möglichen Störungen rechnen.
>> SportlichSportlich Danke. Ungefähr so habe ich mir vorgestellt. Wenn die Zeitvorgeben hier unten stimmen, dann kann ich in der Zeit locker schaffen. http://www.keil.com/support/man/docs/rlarm/rlarm_ar_technical_data.htm Gibt es Alternativen zum Keil OS? Vor allem bin ich nicht darüber nicht besonders glücklich, dass OS nur auf ARM basierten MCU läuft. Aber andere Hersteller geben leider keine definitiven zeitlichen Abgaben.
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.