Software

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






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 muss 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ässt 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", muss 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, muss 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 muss 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 muss 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.

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, dass 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, dass 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.







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.


4133 Worte in "deutsch"  als "hilfreich"  bewertet