News Profil Themen Bücher Magazine Links Kontakt English

Projekt 2002.10 - Steuerung einer Messeinheit über TCP/IP

Mal wieder einen Ausflug in den Embedded-Bereich. Eine Meßstation ist über die serielle Schnittstelle an einen PC angeschlossen. Dieser hängt über einer normalen DSL-Verbindung am Internet. Gesteuert wird die Meßstation über ein Java-Applet von jedem beliebigen Rechner mit Zugriff auf die Meßstation.

3 Softwaremodule waren neu zu entwickeln, obwohl die Teile bereits aus einem vorherigen Anlauf bestanden: Die Software für die Station selber, den PC mit der DSL-Anbindung und das Java-Applet.

Die Station im wesentlichen besteht aus einer Standardplatine mit dem C167 als Prozessor, der mir schon aus vorherigen Projekten bekannt war. Für die Entwicklungsumgebung wurde vom Kunden die Software von Keil gestellt. Über einfache Funktionen werden die Daten gesammelt, komprimiert und im Speicher abgelegt. Besteht Verbindung zum Steuer-PC werden diese Pakete dann an den Steuer-PC übertragen.

Verschiedene Schwierigkeiten traten auf. So ist ja unter anderem kein Multitasking möglich. Wir haben uns deshalb entschieden die Daten in eine Art Ringpuffer abzulegen aus denen der Steuer-PC einzelne Pakete abrufen kann, die wir dann in einem Burst zwischen den Messvorgängen senden. Außerdem verzichten wir auf ein Acknowledge-Paket, sondern übertragen mit jedem Paket die Indexnummern der noch vorhandenen Pakete und erwarten mit jedem Abruf eine Liste von Paketen, die wir löschen können. Der Steuer-PC überpüft die von ihm empfangenen Pakete und teilt bei fehlerfreiem Empfang solange den Wunsch auf Löschung mit, bis das Paket wirklich nicht mehr in der Antwort auftaucht.

Damit sind wir auch bei einen Ausfall des Steuer-PC auf der sicheren Seite da nur dieser Pakete löschen kann. Sollte der Steuer-PC die Daten nicht abrufen, dann werden die Pakete in drei Stufen nachbehandelt um Speicher zu sparen. Dabei gehen dann aber Daten verloren.

Für den Steuer-PC musste (leider) Windows eingesetzt werden, da sich der Kunde für eine DSL-Modem auf Basis einer PCI-Karte entschieden hatte für die es nur Windows-Treiber gibt.

Unter Linux hätte man eine einfachere und billigere Lösung mit Dial-on-Demand finden können, die auch sicherer gewesen wäre, weil dort der Rechner nicht andauernd am Internet gehangen hätte. Aber als ich zu dem Projekt hinzukam, waren bereits die Entscheidungen für die Hardware getroffen.

Das Steuerprogramm habe ich in Python geschrieben. Alle notwendigen Teile zur Kommunikation mit der seriellen Schnittstelle und über TCP/IP sind bereits in den Standard-Libraries enthalten und die Entwicklung gestaltete sich deshalb sehr unkompliziert.

Für eine Variante der Hardware ohne DSL-Anschluss habe ich ein Verfahren entwickelt, die gespeicherten Daten automatisch alle 24h auf einem eingebauten CD-Brenner festhält. Dann ist ein Besuch nur jeden Monat notwendig.

Zur Fernsteuerung des Steuer-PC wird ein Java-Applet mit Swing-Oberfläche eingesetzt. Der Start des Applets verfolgt von einem beliebigen PC mit Internetanbindung über Webstart. Die aktuelle Konfiguration wird dann vom Steuer-PC geladen. Die IP-Nummer für den Zugriff wird über einen zentralen Server bei meinem Kunden ermittelt. Sie wird dort vom Steuer-PC nach jeder Neueinwahl abgelegt.

Für die Entwicklung des Python-Codes habe ich EMACS eingesetzt. Der Java-Teil wurde mit Borland JBuilder entwickelt. Zur Versionskontrolle habe ich CVS benutzt.