Semesterbericht
Thema: Entwicklung einer Software zur Fernüberwachung und Fernsteuerung des Sicherheitsstromversorgungssystem
multi 0108 der Firma Saft Nife.
Anlagen
Begriffserklärung
Quellennachweis
Diskette mit Programmcode und Resourcen
Um eine gesicherte Stromversorgung auch bei Netzausfällen zu gewährleisten, bietet die Wirtschaft Lösungen für fast alle Problemstellungen an. Im Bereich der EDV, der Gebäudeautomatisierung und der Prozeßleittechnik kommen vor allem unterbrechungsfreie Stromversorgungssysteme zum Einsatz. Die DIN VDE 108 schreibt den Einbau einer Sicherheitsstromversorgung in Gebäuden für Menschenansammlungen, wie z.B. Beherbergungsbetrieben, Großgaragen, Schulen und Arbeitsstätten, vor. Diese Systeme müssen eine Nennbetriebsdauer von 1 oder 3 Stunden gewährleisten. Sicherheitsstromversorgungssysteme nach DIN VDE 0108 versorgen Sicherheitssysteme wie z. B.: Personenaufzüge (Evakuierungsfahrt), Rauch- und Wärmeabzugseinrichtungen, Lüftungsanlagen, Sicherheitsbeleuchtung, Überwachungs- und Warnanlagen. Das multi 0108 der Firma Saft Nife ist eine Sicherheitsstromversorgung für die Sicherheitsbeleuchtung mit Zentralbatterie zur Versorgung von Sicherheits- und Rettungszeichenleuchten und anderen ausgesuchten Verbrauchern.
Aufgabe: Software zur Fernüberwachung und Fernsteuerung des Sicherheitsstromversorgungssystem
multi 0108 der Firma Saft Nife
Teilnehmer: Jan Hohndorf, Matthias Buchhorn
Zeitraum: 5 Wochen
Ein Programm zur Fernüberwachung und Fernsteuerung des Sicherheitsversorgungssystems multi 0108 soll geplant und entwickelt werden. Dabei liegt der Schwerpunkt auf die Wartbarkeit des Programmes, da das System ständig von den Technikern der Firma Saft Nife weiterentwickelt wird. Voraussetzung ist ein gut geplanter System- u. Programmentwurf . Der Systementwurf besteht aus dem Lasten- und Pflichtenheft. Der Programmierer orientiert sich an den Vorgaben des Systemanalytikers. Aufgabe ist es, ein Programm zur Visualisierung der Vorgänge im Sicherheitsversorgungssystem für den Endanwender zu erstellen. Durch eine graphische Benutzeroberfläche werden Systemzustände übersichtlich präsentiert und aufgetretene Störungen schneller erkannt. Der Monteur bzw. Servicetechniker benutzt ein anderes Programm mit dem Namen multipro zur Neukonfiguration der Anlage.
Der Computer ist über eine serielle Schnittstelle mit der Anlage verbunden. Das multi 0108 nutzt das Bytebusprotokoll zur sicheren Übertragung der Informationen. Es ist vorgesehen über ein Modem oder einer RS 244 Schnittstelle bis zu 16 Endgeräte anzusteuern, wenn die Software der Anlage diese Funktion unterstützt. Die Datenstruktur des Programmes soll auf dieses Kriterium ausgelegt werden. Da eine Anlage mehrere tausend Leuchtmittel besitzen kann, werden die Leuchtmittel in mehreren Untergruppen geteilt. Der Benutzer bewegt sich hierarchisch zwischen 4 Ebenen. Der Hauptschirm zeigt alle angeschlossene Hauptgeräte an. Mit dem Betätigen der linken Maustaste auf einen solchen Zeichen-Objekt werden alle Unterstationen dieser Anlage angezeigt. Mit dem Betätigen der rechten Maustaste erscheint ein neuer Dialog mit den Sytemeigenschaften der Anlage. Die 3. Ebene zeigt die Gruppeneingänge der ausgewälten Unterstation an. Die letzte Ebene zeigt die zugehörigen geschalteten Endstromkreise und deren Leuchtmittel. Das Programm überprüft ständig den Status der Anlage. Sendet die Anlage einen Alarm, ordnet die Software diese Fehlermeldung einer Zeichenkomponente zu. Durch Vergabe von Paßwörtern wird die Auswahl bestimmter Personenkreise vorgenommen. Die Entwicklungsumgebung für diese Projektaufgabe ist Delphi 1.0 unter Windows 3.11. Die Entscheidung fiel auf Delphi, da es die unkomplizierte graphische Anwendungsentwicklung mit der Programmiersprache Pascal verbindet.
Die Strukturen der Sicherheitsbeleuchtungsanlage werden auf einem PC entworfen und über eine serielle Schnittstelle zur Anlage gesendet. Es war eine erhöhte Datensicherheit nötig. Weiterhin sollte das verwendete Protokoll "point-to-multipoint" fähig sein und unabhängig von der Hardware funktionieren. Die Softwarefirma HEDON entwarf auf Grundlage diese Anforderungen das Bytebus-Protokoll. Das Bytebus Protokoll wurde für Systeme mit einem Master und mehreren Slaves konstruiert. Die Informationen werden über ein 4-Schichten-modell ausgetauscht. Schicht 2 und 3 sind äquivalent zur HDLC Familie ( hide data link control) die in der DIN ISO 3309 Norm beschrieben ist . Dieses Protokoll wird auch in der 2. Schicht des OSI-Referenzmodells verwendet. Der aktive Teil ist immer der Master. Er schickt ein Kommando an ein bestimmtes multi 0108 und es reagiert auf einem Kommando des Computers immer mit einer Antwort.
Abbildung 1 2. bis 4. Schicht des Bytebusprotokolls
Die Aufgabe der untersten Schicht wird vom UART-Chip übernommen. Der UART-Chip wird mit bestimmten Eigenschaften, wie Baudrate, Stopbits, Datenbits, Parität, etc. programmiert. Diese Schicht ist für den Programmierer transparent und muß nur einmal, mit dem Windows API-Befehl setCommState initialisiert werden.
Frameschicht markiert den Blockanfang, das Blockende und beinhaltet zwei Prüfbytes. Der Rahmen wird durch die Bytes DLE STX geöffnet und mit den Bytes DLE ETX geschlossen. Der Inhalt des Rahmens sind Daten des BBLINK Layer. Falls im Datenblock des BBLINK-Layer DLE vorkommt, kann es zu falscher Interpretation des Rahmenendes kommen, deshalb ist der Einsatz von 'Byte stuffing' erforderlich. Für jedes DLE welches in BBLINK-Data vorkommt, wird ein weiteres DLE gesendet. Falls der Empfänger ein DLE empfängt, wartet er auf das nächstes Zeichen. Ist dieses dann ETX oder STX, so erkennt der Empfänger den Rahmenanfang oder das Rahmenende. Andernfalls wird erkannt, das ein DLE-Data-Character empfangen wurde. Die Länge des Feldes 'CRC' beträgt 2 Byte. Das erste Byte enthält die errechneten Werte der Bits 0 bis 7 und das zweite Byte der Bits 8 bis 15 der gesamten Daten im BBLINK-Layer. Die Gesamtlänge des Frames ist nur durch den Buffer-Speicher begrenzt und ist ein Konfigurationsparameter des BBFRAM-Layer. Längere Frames werden nicht beachtet.
Für eine "point-to-multipoint" Verbindung wird die Adressatennummer benötigt. So kann mit einem Adreßbyte eine beliebige Sicherheitsbeleuchtungsanlage angesprochen werden. Das zweite Byte der Link-Schicht ist ein Kontrollbyte. Es läßt sich in 3 Gruppen teilen: unnummerierte Schicht (U-Block), Supervisor Schicht(S-Block) und Informationsschicht (I-Block)
Aufgabe: Transport von Steuerzeichen
93 - Kommando - ( Setze normalen Anwortmodus)
53 - Kommando - ( Unterbreche Verbindung)
73 - Antwort - ( Bestätigung)
97 - Antwort - ( Fehlerhafter Rahmen)
Aufgabe: Übermittelt den Status des Master oder Slavegerätes
sss1 0001 - Kommando (zum Empfang bereit)
sss1 0101 - Kommando (nicht bereit für Empfang)
sss1 0001 - Antwort (zum Empfang bereit)
sss1 0101 - Antwort (nicht bereit für Empfang)
Die Empfangsfolgenummer ist in den Bits 7,6,5 verschlüsselt. Schickt das multi 0108 die Antwort "nicht bereit für Empfang" , muß der Master solange das Kommando "zum Empfang bereit" schicken, bis die Anlage die angeforderten Daten schickt. Die Empfangsfolgenummer des Kommandos hat den gleichen Wert wie die Empfangsfolgenummer des zuletzt abgeschickten Informationsblockes.
Die Aufgabe der Informationsschicht ist die gesicherte Übermittlung von Daten. Dieses Datenbyte enthält die Sendefolgenummer (Bits 1,2,3), die Empfangsfolgenummer(Bits 5,6,7) und die Information das eine User-Schicht übermittelt wird.Eine Informationsschicht ist an Bit 0 und Bit 4 erkennbar, denn Bit 0 ist immer auf null gesetzt und Bit 4 hat den Wert 1.
In der Userschicht sind die Daten gekapselt. Es ist möglich mit Hilfe des Framekommandos die Daten in kleine gleich große Stücke zu fragmentieren. Das Kommando "next frame" (080h) öffnet eine Fragmentkette. Mit dem Kommando "last frame" (081h) wird die Fragmentkette geschlossen. Welche Länge ein Fragment hat, wird mit dem Kommando "configuration frame" (082h) festgelegt. Das zweite Byte in der Userschicht gibt die Befehlsnummer an. Wenn die Daten nicht vollständig in einen Fragment eingelesen wurden, muß der Master mit einem leeren Userframe und dem Framekommando "next frame" das nächste Fragment anfordern. Die Nummer der wichtigsten Kommandos ist aus Tabelle1 ersichtlich. Eine nähere Beschreibung befindet sich in der Dokumentation "bytebus message specification" der Firma Hedon.
Tabelle Userschicht
Befehl |
Beschreibung |
Senden |
Empfangen |
|
generelle Konfiguration lesen |
|
|
|
generelle Konfiguration schreiben |
|
|
|
erste Netzwerkstruktur schreiben |
|
|
|
erste Netzwerkstruktur lesen |
|
|
|
setze Zeit und Datum |
|
|
11 [B] |
schreibe Alarm Konfiguration |
|
|
12 [C] |
lese Alarm Konfiguration |
|
|
13 [D] |
schreibe Alarm Gruppen Konfiguration |
|
|
14 [E] |
lese Alarm Gruppen Konfiguration |
|
|
15 [F] |
lösche den Meldespeicher |
|
|
|
Zeitpunkt für Tagestest festlegen |
2,3,6 |
|
|
schreibe Benutzerdefinierter Alarm |
|
|
|
lese Benutzerdefinierter Alarm |
|
|
|
lese Tageseinstellungen |
|
|
|
starte Tagestest |
1 oder 3 |
|
|
lese Anzahl der Einträge im Meldespeicher |
|
|
|
lese Einträge vom Meldespeicher |
|
1+14(X+1) |
|
lese Software Version aus |
|
|
|
lese Meßwerte |
|
|
28 [1C] |
lese Alarme ein |
|
|
29 [1D] |
lese Anlageneigenschaften |
|
|
|
lese Stromkreiswerte |
|
|
|
lese GEK-Stromkreis-Test-Daten |
|
|
|
schreibe Leuchtentexte |
|
|
|
lese Leuchtentexte |
|
|
|
schreibe zweite Netzwerkstruktur |
|
|
|
lese zweite Netzwerkstruktur |
|
|
|
schalte System ein/aus |
|
|
43 [2B] |
lösche Alarme |
|
|
44 [2C] |
schreibe 3. Netzwerkstruktur |
|
|
45 [2D] |
lese 3.Netzwerkstrukur |
|
|
Tabelle 2 verdeutlicht dieses Bytebusprotokoll anhand eines Beispiels. Multirem sendet 6 Fragmente zur Anlage mit der Nummer 01. Jedes Fragment wird durch die DLE STX und DLE ETX Bytes gekapselt. Der zweite gesendete Befehl hat den Wert 10, also muß nach der Bytestuffing-Methode eine weitere 10 übertragen werden. Jeder U- und I-Block enthält die Empfangsfolgenummer. Wenn Daten verschickt werden, erhöht sich die Sendefolgenummer im I-Block. Das erste Byte in der Datenschicht gibt das Fragmentbyte an. Die zwei Bytes des CR-Checks wird aus der Link- und der darunterliegenden Userschicht berechnet.
Tabelle Bytebusprotokoll
Master (Kommando) |
Slave (Antwort) |
|
||||||||||
Anfang |
Nr. |
Befehl |
Daten |
CRC |
Ende |
Anfang |
Nr. |
Antwort |
Daten |
CRC |
Ende |
Bedeutung |
|
|
|
|
8D B0 |
|
|
|
|
|
|
|
Antwortmodus |
|
|
|
82 C8 00 |
AC BA |
|
|
|
|
80 C8 00 |
|
|
Fragmentlänge |
|
|
|
|
|
|
|
|
|
|
B7 13 |
|
Versionsnummer |
|
|
|
|
|
|
|
|
|
|
B7 13 |
|
Sender nicht bereit |
|
|
|
|
|
|
|
|
|
|
15 E0 |
|
Versionsnummer wird gesendet |
|
|
|
|
|
|
|
|
|
|
|
|
zum Empfang bereit |
Frame |
Linkschicht |
Usersch. |
Frameschicht |
|
Die Programmierung der seriellen Schnittstelle unter Windows unterscheidet sich grundsätzlich von MS-DOS.
Windows erlaubt keinen direkten Zugriff auf die Hardware. An die Stelle der eigenen Routine tritt ein Gerätetreiber mit dem Namen COMM.DRV. Dieser Treiber ist das einzige Modul , dem es erlaubt wird, direkt über die Interuptvektoren mit den seriellen Schnittstellen zu arbeiten. Eine serielle Schnittstelle kann mit dem Windowsbefehl OpenComm geöffnet werden. Der Befehl OpenComm legt zusätzlich die Größe des Empfangs- und Sendebuffers fest. Die Funktion gibt den Wert null zurück, wenn die Schnittstelle erfolgreich geöffnet wurde. Damit eine serielle Schnittstelle initialisiert werden kann, bedarf es eines sogenannten Gerätekontrollblockes (DCB). Mit dem Befehl BuildCommDCB wird dieser Kontrollblock initialisiert. Mit allen diesen Einstellungen wird nun die jeweilige serielle Schnittstelle über den Befehl SetCommState initialisiert. Um vom Empfangsspeicher Daten auszulesen, wird die API-Funktion ReadComm verwendet. Die Funktion WriteComm schreibt Daten in den Sendebuffer. Eine unangenehme Eigenschaft des WriteComm Befehls ist es Daten im Sendebuffer zu überschreiben, wenn nicht genügend Speicherplatz im FIFO-Buffer vorhanden ist. Darum muß mit der Funktion GetCommError die Größe des Freien Sendespeichers überprüft werden. Zu einem sauberen Beenden eines Programmes gehört auch, die serielle Schnittstelle mit dem Befehl CloseComm zu schließen.
Die Wahl der Programmiersprache und Laufzeitumgebung wurde vom Auftraggeber freigestellt. Als Entwicklungsumgebung wurde Delphi 1.0 ausgewählt. Die Vorteile sind kurze Entwicklungszeiten für graphische Oberflächen, einfache Ereignisbehandlung, objektorientierte Programmierung und leichte Einbindung der Windows API - Funktionen. Der Nachteil ist, das Delphi sich mit seiner Struktur Pascal ähnelt und große Differenzen zur weitverbreiteten C++ Syntax aufweist. Die Laufzeitumgebung ist Windows 3.1x und Windows 95. Nach einer Neucompilierung des Quellcodes mit Delphi 2.0 nutzt das Programm auch die weiterentwickelten API-32-Funktionen. Es wurde uns von der Firma Saft Nife eine Sicherheitsstrom-versorgungsanlage mit der aktuellsten Firmware-Version 2.04 zur Verfügung gestellt. Die ersten Wochen wurde der Kommunikationverkehr zwischen dem Programm multipro und der Anlage untersucht. Ein speziell für diese Anforderung geschaffenes serielles Kabel ermöglichte eine Überprüfung des Datenstromes durch einen zweiten Rechner. In der dritten Woche erhielt das Projektteam die Dokumentation des Bytebusprotokolls der Firma Hedon.
Befehlsbibliotheken werden in Delphi UNIT genannt. Jedes graphische Formular besitzt eine eigene Unit. Die Module Anlage_.pas, Fenster_.pas, Konfig_.pas beinhalten die Hauptklassen und besitzen keine Formulare. Die Unit STRUKTUR besitzt die Datenstruktur der Klassen TAnlage und TKonfig, da Records und Konstanten außerhalb von Klassen vereinbart werden müssen. Alle wichtigen Datenstrukturen sind in einer Klasse gebündelt, somit erhöht sich Übersichtlichkeit des Programmes.
Abbildung Befehlsbibliotheken
Das Modul main.pas steuert alle Ereignisse und ordnet diese den entsprechenden Prozeduren zu. Im Hauptdialog kann der Benutzer folgende Ereignisse auslösen:
Des Programm beginnt mit dem Einlesen der Konfigurationsdaten aus der multirem.ini. Der Timer wird gestartet und ließt Fragmentweise die Anlagedaten in die interne Datenstruktur des Programmes ein. Die Schaltflächen in der Werkzeugleiste lösen bei Betätigung Ereignisse aus. Folgende Schaltflächen stehen dem Benutzer zur Verfügung. Anlagedaten sichern bzw. wiederherstellen, Tagestest auslösen, Jahrestest auslösen, Konfiguration ändern, neues Paßwort eingeben, Hilfedokument und Beenden. Mit Betätigen der linken Maustaste auf dem vorher ausgewählten Zeichenobjekt wird die nächste Unterstruktur angezeigt. Mit Betätigen der rechten Maustaste auf ein zuvor ausgewähltes Hauptverteiler-Zeichenobjekt wird ein neuer Dialog geöffnet, welcher die Eigenschaften des Hauptgerätes anzeigt und in dem der benutzerdefinierte Name geändert werden kann. Alle anderen Zeichenobjekte haben keine Eigenschaften, es kann jedoch der benutzerdefinierte Name geändert werden. Mit der Betätigung der Schaltfläche "Zurück" werden die Zeichenobjekte eine Ebene höher angezeigt. Wird das Hauptfenster durch den Benutzer vergrößert, verkleinert, aus den Hintergrund geholt oder verschoben, wird der Inhalt des Hauptfensters nochmals gezeichnet. Die Klasse Anlage steuert die gesamte Kommunikation mit der Anlage. Jeder Anlage wird ein instanziertes Objekt zugewiesen. Zu einer späteren Firmware-Version werden mehrere Anlagen auf den seriellen Bus senden können. Jedes Anlagenobjekt erhält alle Daten und Methoden einer reellen Anlage. Bevor es zu einer Kommunikation kommt, müssen mehrere Vorbereitungen getroffen werden. Eine entsprechende serielle Schnittstelle wird konfiguriert und geöffnet. Dann wird der Timer gestartet und im Abstand von 250 ms werden Kommandos zur Anlage geschickt und auf eine Antwort des multi 0108 gewartet. Das erste Kommando schaltet die Anlage in den normalen Antwortmodus. Das zweite Kommando übermittelt die Fragmentlänge. Die Fragmentierung der Daten erhöht die Übertragungssicherheit. Das dritte Kommando ließt die Firmware-Version ein. Das Programm Multirem soll die Firmware-Version 2.x unterstützen. Wird eine niedrigere Versionnummer ausgelesen, wird das Programm mit einem Hinweisdialog beendet. Mit allen weiteren Kommandos wird die gesamte Konfiguration der Anlage eingelesen. Die Konfigurationsdaten werden über Zeigeroperationen direkt in die interne Datenstruktur geschrieben und auf dem Bildschirm angezeigt. Die Klasse Fenster besitzt Methoden und Daten um diese Daten zu visualisieren. Das Programm Multirem teilt die Struktur der Anlage in vier Ebenen auf: Anzeige aller angeschlossenen multi 0108, der Haupt- und Unterstationen (US), der Gruppeneingänge (GE) und der geschalteten Endstromkreise (GEK) mit zugehörigen Leuchtmitteln. Weiterhin können alle Eigenschaften des multi 0108 angezeigt werden. Um die serielle Schnittstelle und die Passwörter zu konfigurieren ließt bzw. schreibt die Klasse Konfig die entsprechenden Daten in die Konfigurationsdatei Multirem.ini. Das multi 0108 sendet mit 9600 Baud und jeder Datenblock besteht aus 8 Datenbits, 1 Stopbit und besitzt kein Paritätsbit.
Windows ist ein dynamisches System, das bedeutet, daß die Methode des linearen sequentiellen Programmablaufes transformiert und wesentlich verbessert wurde . Es wird auf ein bestimmtes Ereignis gewartet und dieses wird von einem Programm ausgewertet. Diese Programmiermethode mindert die Rechnerauslastung und ermöglicht das Multitasking. Multitasking heißt, daß mehrere Programme parallel ablaufen können.
EVENTHANDLER Starte Programm Öffne serielle Schnittstelle neues Passwort Passwort 2x eingeben neu Passwort-Dialog Worte Überprüfen Felder freischalten starte Timer lade Konfiguration |
Die Klasse TKonfiguration arbeitet mit der Konfiguration des Programmes, Passwörtern und der seriellen Schnittstelle.
Daten dieser Klasse:
KonfigIO |
TKonfigIO; |
Konfigurationsstruktur |
PasswortRichtig |
Byte |
Status des Benutzers; 0-Beobachter; 1 - User; 2- Master; 3- Servicetechniker |
comport |
integer; |
Nummer der geöffneten COM-Schnittstelle |
Konstruktor dieser Klasse:
Create |
Konfiguration:
lade |
Lade die letzten Einstellung aus multirem.ini |
speicher; |
speichere die aktuelle Einstellung |
setzeKonfiguration |
Setze die aktuelle Einstellung |
Die Arbeit mit Passwörtern:
PasswortTesten (passwort:String) |
eingegebenes Passwort überprüfen und Variable PasswortRichtig setzen |
PasswortErstellung |
neues Passwort eingeben |
serielle Schnittstelle öffnen:
VerbindungAufnehmen:integer |
serielle Schnittstelle öffnen, gibt den Fehlerstatus zum Hauptprogramm zurück |
Die Klasse TAnlage kapselt die Methoden und Daten für die Kommunikation mit einer Anlage. So können mehrere Anlagen sinnvoll verwaltet werden. Jeder multi 0108 wird ein instanziertes Objekt zugewiesen. Ein Timer ruft alle 250 ms die Methode "Kommunikation" auf, um die Initialisierung der Datenstruktur und die Überwachung der Sicherheitsbeleuchtungsanlage durchzuführen.
Status der Kommunikationfortschrittes: (boolean)
Verbunden |
besteht eine Verbindung ? |
send_framesize |
Wurde Fragmentgröße Bestätigt |
send_version |
Wurde die Versionsnummer bestätigt ? |
send_generalKonfig |
Wurde Konfiguration zurückgeschickt ? |
send_NetzWS1 |
Wurde die 1. Netzwerkstruktur eingelesen |
send_NetzWS2 |
Wurde die 2. Netzwerkstruktur eingelesen |
send_NetzWS3 |
Wurde die 3. Netzwerkstruktur eingelesen |
abgeschickt |
Wurde der jeweilige Befehl abgeschickt |
warteAufAntwort |
Befehl wurde abgeschickt, warte nun auf Antwort |
Variablen für die Übertragung
HVT |
byte |
Nummer des Hauptverteilers |
Infobyte |
byte |
Sende und Empfangsfolgenummer; Infobyte = rrr1sss0 |
SBlockbyte |
byte |
Supervisor-layer beinhaltet Empfangsfolgenummer |
RR |
boolean |
Anlage bereit oder nicht bereit |
count |
Integer |
empfangene Daten ohne Start und Endblock |
Fragmentfeld |
TFragmentfeld |
ein Fragment; Länge 200 bytes |
nextFragment |
byte |
Nummer des Fragments |
Daten von multi 0108:
AnzahlHVT |
byte |
aktuelle Anzahl der Hauptverteiler |
general |
Tgeneral |
generelle Konfigurationsdaten |
MeldespeicherGroesse |
word |
die Größe des Meldespeichers |
versionsnummer |
word |
aktuelle Firmware-Versionsnummer |
Konstruktor dieser Klasse:
Create(HVT:byte) |
initialisiere Daten für einen bestimmten HVT |
Hier ist das Herzstück der Kommunikation:
Kommunikation |
Strukturen einlesen u. Anlage überprüfen |
Überprüft den Empfangsbuffer nach eingegangenen Nachrichten:
Rueckantwort:byte |
kontrolliert den Empfangsbuffer |
Kommandos die zur Anlage geschickt werden:
sendePing |
schaltet Anlage in den normalen Antwortmodus |
sendDisconnect |
beendet die Verbindung mit der Anlage |
ReseiveReady |
sendet der Anlage : zum Empfang bereit |
ReseiveNotReady |
sendet der Anlage: zum Empfang nicht bereit |
sendeFragmentlen |
sendet Fragmentlänge zur Anlage |
Softwareversion_auslesen |
fordert die Softwareversion an |
generalKonfig_auslesen |
fordert die Konfiguartion der Anlage an |
sendeNetzWS1 |
Fordert die 1. Netzwerkstruktur an |
starteTagestest |
startet den Tagestest |
zurückgesendete Antworten:
lese_generalKonfig |
ließt die Konfiguration ein und setzt Variable general |
lese_1Netzwerkstruktur |
ließt 1. Netzwerkstruktur ein und setzt Variable NetzWS1 |
lese_2Netzwerkstruktur |
ließt 2. Netzwerkstruktur ein und setzt Variable NetzWS2 |
lese_3Netzwerkstruktur |
ließt 3. Netzwerkstruktur ein und setzt Variable NetzWS3 |
lese_alarmKonfig |
ließt Alarmkonfiguration ein |
lese_alarmGruppenKonfig |
ließt Alarmgruppen Konfiguration ein |
lese_BenutzerdefiniertenAlarm |
ließt den benutzerdefinierten Alarm ein |
lese_TagestestWerte |
ließt die Tagestestwerte ein |
lese_Meldespeicher |
ließt den die Texte aus dem Meldespeicher |
lese_Version |
lese Firmware-Version aus |
lese_messwerte |
lese Messwete der Anlage aus |
lese_GEKStromKreisTest |
lese Werte der GEK's aus |
lese_Leuchtentexte |
lese Leuchtentexte aus |
lese_2Netzwerkstruktur |
lese 2. Netzwerkstruktur aus |
lese_Betriebsstatus |
lese Betriebsstatus aus |
lese_3Netzwerkstruktur |
lese 3. Netzwerkstruktur |
Prozeduren für das Bytebus-Protokoll:
LeseDaten (len:word) |
Lese komplettes Frame von der serielle Schnittstelle |
DatenAuswertung |
auswertung des User-frames |
schreibeDaten (P: Pointer; len:longint; Kontrollbyte:byte; Fragment:byte) |
schreibt komplettes Frame zur seriellen Schnittstelle |
FragmentiereDaten (P:Pointer;len:longint) |
bei einem Userframe müssen die Daten vorher fragmentiert werden |
Infoframe (zugriff:boolean) : byte |
erhöht die Sende- (zugriff=true) oder Empfangsfolgenummer (zugriff=false) |
crcheck (p:pointer;len:longint; var crc1,crc2:byte) |
berechnet die Kontrollbytes aus Daten |
Bytestuffing (P:pointer;len:word;var newp:pointer;var newlen:word) |
Nach einen Daten DLE wird noch ein DLE angehangen = "bytestuffing" |
Befehlsbestaetigung (zeichenkette:string) |
Status der der Übertragung |
Lade und speichere Konfiguration der Anlage:
LadeEinstellung (Name:String) |
stelle Konfiguartion einer Anlage wieder her |
SpeicherEinstellung (Name:String) |
rette Konfiguration einer Anlage |
Die Klasse Fenster stellt die interne Datenstruktur graphisch dar. Vier Ebenen ermöglichen eine Übersichtliche Darstellung aller HVT's, US, GE's und GEK's mit allen Leuchtmitteln. Darüber hinaus werden die Systemeigenschaften eines Hauptgerätes angezeigt.
Daten dieser Klasse:
aktuelle_Ebene |
Byte |
Nummer der aktuellen Ebene |
aktHVT, aktUS, aktGE, aktGEK |
Integer |
ausgewählter HVT, US, GE, GEK |
mausX, mausY, MausTaste |
Integer |
Mausstatus |
Konstruktor dieser Klasse:
Create |
Zeige die Eigenschaften eines Hauptverteilers an:
EigenschaftHVT(NummerHVT :Byte) |
Eigenschaftsdialog eines Hauptverteilers anzeigen |
Zeichne und ermittle Komponenten in der aktuellen Ebene:
zeichneEbene |
zeichne die aktuelle Ebene mit allen Komponenten |
KomponenteErmitteln:Integer |
Ermittle die angewählte Komponente |
Zeichne jeweilige Komponente
zeichneHVT (nummer:integer; name:string; bezeichner1, bezeichner2:string; status:boolean; fehler:boolean) |
zeichnet ein Hauptverteiler-Zeichenobjekt |
zeichneUS (nummer:integer; name:string; bezeichner1, bezeichner2:string; status:boolean; fehler:boolean) |
zeichnet ein Unterstation - Zeichenobjekt |
zeichneGE (nummer:integer; name:string; bezeichner1, bezeichner2:string; status:boolean; fehler:boolean) |
zeichnet ein Gruppeneingang - Zeichenobjekt |
zeichneGEK (nummer:integer; name:string; bezeichner:string; feld:T_Leuchten; kreis1,kreis2:byte) |
zeichnet ein Geschalteter-Endstromkreis-Zeichenobjekt |
zeichneKomponente (x,y,nummer:integer; name:string; bezeichner1, bezeichner2:string; status:boolean; fehler:boolean) |
Zeichnet eine Komponente für einen HVT, US oder GE |
mitte (s:String;max:integer):integer |
zentriert einen Schriftzug |
Die Arbeit am Projekt teilte sich in den Teil Lasten- und Pflichtenheft-Erstellung und in den Teil der Programmerstellung. Nach zwei Wochen kristallisierten sich die Ansprüche der Auftraggebers heraus. In der dritten Woche erhielt die Gruppe die Dokumentation über das Bytebusprotokoll. So stand nur ein effektiver Zeitraum von 3 Wochen zur Programmierung des Programmes zur Verfügung. Das Projekt kann in diesem Umfang nicht von einem Programmierer allein bewältigt werden. In dem Zeitraum von 5 Wochen konnten alle wichtigen Bibliotheken für die Kommunikation mit der Anlage, zur Darstellung der Zeichenkomponenten und der Konfiguration des Programmes erstellt werden. Aufgabe für das nächste Programmiererteam ist unter anderem die Anpassung des Programms an die nachfolgenden Firmware-Versionen. Diese Versionen werden der Anlage ermöglichen, die Daten über ein Modem oder einer RS 422- Schnittstelle zu senden. Weiterhin konnte aus den oben genannten Zeitgründen das Pflichtenheft nicht vollständig erfüllt werden. Alle Masken und Dialoge konnten jedoch fertiggestellt werden. Zur Weiterführung dieses Softwareprojektes werden zwei erfahrene Delphi-Programmierer und ein Zeitraum von 2 bis 3 Monaten empfohlen. In vier Wochen Projektarbeit, abzüglich Einarbeitungszeit, müssen die Dialoge den vollständigen Funktionsumfang des Pflichtenheftes enthalten. Die Unterstützung der neuen Firmware wird voraussichtlich etwa einen Monat in Anspruch nehmen. Das Produkt überwacht multi 0108 Geräte, die in sensiblen Bereichen eingesetzt werden. Deshalb ist es sehr wichtig das Programm multirem unter Praxisbedingungen ausgiebig zu testen. Diese Testphase kann einen Zeitumfang von bis zu einen Monat annehmen.
Begriffserklärung
API Das "Applikation Interface" ist eine Schnittstelle zwischen Anwendungsprogramm und Windowsfunktionen.
Bytestuffing Prinzip: Enthält die Linkschicht ein DLE wird nochmals ein DLE versendet, um Verwechslungen mit der Frameschicht zu vermeiden.
Bytebusprotokoll Vier-Schichten-Kommunikations-Modell der Firma Hedon.
CRC Der "Cyclic Redundancy Check" berechnet nach einem vorgegebenen Algorithmus zwei Prüfbytes aus den Daten der Linkschicht.
Delphi Objektorientierte graphische Entwicklungsumgebung
DLE Zusammen mit dem nächsten Zeichen kennzeichnet DLE den Blockanfang (STX), das Blockende (ETX) oder Daten (DLE)
ETX Im Zusammenhang mit dem Zeichen DLE markiert ETX das Ende eines Übertragungsblockes.
Event Anwendung wartet auf ein vorher definiertes Ereignis.
Firmware Die Versionsnummer der Software in der Notbeleuchtungsanlage.
Fragment Große Datenmengen werden in kleinere Datenblöcke geteilt.
GE In einem Gruppeneingang sind mehrere GEK's zusammengeschlossen.
GEK Der geschaltete Endstromkreis beschreibt die zwei elektrisch unabhängige Stromkreise an dem mehrere Leuchtmittel angeschlossen sind.
I-Block Der Informationsblock besteht aus einem Byte, welches die Sende-, Empfangsfolgenummer und den Anfang der Userschicht kennzeichnen.
HDLC "Hide Data Link Control" ist ein bitorientiertes Steuerungsverfahren zur Datenübermittlung nach DIN ISO 3309. Es wird in Schicht 2 und 3 des Bytebusprotokolls und Schicht 2 des OSI-Referenzmodells benutzt.
Hedon Niederländische Softwarefirma, welche multipro entwickelt.
HVT Der Hauptverteiler ist das Hauptmodul in der Notbeleuchtungsanlage.
Master Steuert die Kommunikation zu anderen Geräten (Slaves).
multi 0108 Sicherheitsstromversorgungssystem nach DIN VLE Norm 0108.
Multirem Programmname dieses Projektes - "Multi Remote".
Multipro Programm der Firma Hedon - "Multi programing".
OSI-Referenzmodell Gedankenmodell, welches die Kommunikation in aufgabenbezogene (funktionale) Schichten teilt. (Wird beim ISDN-Datenprotokoll verwendet)
RS-232 Serielle Schnittstellennorm, die zwei Teilnehmer miteinander verbindet.
RS-422 Serielle Schnittstellennorm, die beliebig viele Teilnehmer miteinander verbindet.
Saft Nife alter Name des Auftraggebers, neuer Firmenname ist SiLiBat.
SiLiBat Name des Auftraggebers, alter Firmenname ist Saft Nife
S-Block Der Supervisory Block besteht aus einen Byte, welches den Status des Senders bzw. Empfängers darstellt.
SE Schalteingänge sind meist extern angebrachter Schalter.
Slave Antwortet auf Kommandos des Masters.
STX Im Zusammenhang mit dem Zeichen DLE markiert das ETX den Anfang eines Übertragungsblocks.
Timer Das Hauptprogramm wird in Intervallen unterbrochen und ein Unterprogramm gestartet.
U-Block Der unnumerierte Block transportiert Steuerzeichen, welche den Empfangsstatus und die Empfangsfolgenummer beinhalten
UART Steuert den I/O Kontroller, der die Kommunikation mit anderen Geräten über die serielle Schnittstelle ermöglicht.
US Jede Unterstation ist einem Knoten zugeordnet. Jeder Knoten hat festgelegte Gruppeneingänge.
Quellennachweis:
Borland Delphi 2 Doberenz/ Kowalski Hanser Verlag ISBN 3-446-18670-0
Delphi 2 in 21 Tagen Dan Osier SAMS ISBN 3-87791-869-7
Delphi 2 Dirk Louis Markt & Technik ISBN 3-8272-5107-9
Windows intern Honekamp, Wilken Data Becker ISBN 3-89011-284-6
Delphi, die Referenz Michael Starke TEWI Verlag ISBN 3-89011-284-6
HEDON electronic developments documention:
Bytebus message specification (1998)
Bytebus protocol specification (1991)
Functional specification (1998)
Fragmented frame specification (1996)
Configuration file (1997)
Borland C++ Quellcode des Programmes multipro version 2.04.