1 Einführung
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.
1.1 Formelle Aufgabenstellung für die Gruppe
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.
1.2 Organisatorisches Umfeld
1.3 Aufgabenstellung Programmausarbeitung
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.
2 Grundlagen
2.1 Das Bytebus Protokoll
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
2.1.1 Die UART - Schicht (Bitübertragungsschicht)
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.
2.1.2 Frame-Schicht (Sicherungsschicht)
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.
2.1.3 Link-Schicht (Festlegung der Rahmenarten)
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).
2.1.3.1 unnummerierte Schicht (Steuerrahmen - U-Block):
Aufgabe: Transport von Steuerzeichen
93 - Kommando - ( Setze normalen Anwortmodus)
53 - Kommando - ( Unterbreche Verbindung)
73 - Antwort - ( Bestätigung)
97 - Antwort - ( Fehlerhafter Rahmen)
2.1.3.2 Supervisor Schicht - (Steuerrahmen - S-Block):
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.
2.1.3.3 Informationsschicht - (Steuerrahmen - I-Block):
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.
2.1.4 User- Schicht
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 1 Userschicht
Befehl Beschreibung Senden Empfangen
0 generelle Konfiguration lesen 285 1
1 generelle Konfiguration schreiben 1 285
4 erste Netzwerkstruktur schreiben 2842 1
5 erste Netzwerkstruktur lesen 1 2842
6 setze Zeit und Datum 8 1
11 [B] schreibe Alarm Konfiguration 141 1
12 [C] lese Alarm Konfiguration 1 141
13 [D] schreibe Alarm Gruppen Konfiguration 41 1
14 [E] lese Alarm Gruppen Konfiguration 1 41
15 [F] lösche den Meldespeicher 1 1
16 [10] Zeitpunkt für Tagestest festlegen 2,3,6 1
17 [11] schreibe Benutzerdefinierter Alarm 729 1
18 [12] lese Benutzerdefinierter Alarm 1 729
19 [13] lese Tageseinstellungen 1 1029
20 [14] starte Tagestest 1 oder 3 1
21 [15] lese Anzahl der Einträge im Meldespeicher 1 3
22 [16] lese Einträge vom Meldespeicher 5 1+14(X+1)
23 [17] lese Software Version aus 1 9
25 [19] lese Meßwerte 1 46
28 [1C] lese Alarme ein 1 112
29 [1D] lese Anlageneigenschaften 1 17
34 [22] lese Stromkreiswerte 1 33
36 [24] lese GEK-Stromkreis-Test-Daten 1 1025
37 [25] schreibe Leuchtentexte 44001 1
38 [26] lese Leuchtentexte 1 44001
39 [27] schreibe zweite Netzwerkstruktur 6241 1
40 [28] lese zweite Netzwerkstruktur 1 6241
41 [29] schalte System ein/aus 2 1
43 [2B] lösche Alarme 1 1
44 [2C] schreibe 3. Netzwerkstruktur 1
45 [2D] lese 3.Netzwerkstrukur 1
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 2 Bytebusprotokoll
Master (Kommando) Slave (Antwort)
Anfang Nr. Befehl Daten CRC Ende Anfang Nr. Antwort Daten CRC Ende Bedeutung
10 02 01 93 8D B0 10 03 10 02 01 73 83 57 10 03 Antwortmodus
10 02 01 10 10 82 C8 00 AC BA 10 03 10 02 01 30 80 C8 00 47 80 10 03 Fragmentlänge
10 02 01 32 81 17 59 22 10 03 10 02 01 55 B7 13 10 03 Versionsnummer
10 02 01 31 95 36 10 03 10 02 01 55 B7 13 10 03 Sender nicht bereit
10 02 01 31 95 36 10 03 10 02 01 52 81 17 02 02 02 04 01 02 01 02 15 E0 10 03 Versionsnummer wird gesendet
10 02 01 31 95 36 10 03 10 02 01 51 93 55 10 03 zum Empfang bereit
Frame Linkschicht Usersch. Frameschicht
2.2 Programmierung der seriellen Schnittstelle mit Hilfe der API-Funktionen
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.
3 Realisierung / Implementierung
3.1 Entwicklungsumgebung
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.
3.2 Befehlsbibliotheken
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 2 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.
3.3 Ereignisse (Events)
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.
Abbildung 3 Eventbehandlung
3.4 Methoden und Daten der Klasse TKonfiguration
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
3.5 Methoden und Daten der Klasse TAnlage:
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
3.6 Methoden und Daten der Klasse TFenster
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
4 Abschließende Beurteilung des Projektes
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.
|