|
5 PC-Software5.1 Beschreibung der VisualBasic Software und deren RealisierungUm sämtliche für die Programmierung und Visualisierung relevanten Daten zu sammeln und zu organisieren, mußte eine Datenstruktur gefunden werden, die die Daten in der vorhandenen Hardware möglichst gut abbildet. Diese Aufgabe läßt sich am Besten mit einer eigenen Klasse lösen. Hierfür wurde ein realer Knoten durch seine Eigenschaften und Methoden beschrieben und in einer eigenen Klasse definiert. Eine ausführliche Beschreibung folgt in Kapitel 5.1.1. Weiterhin war ein Konzept zu erstellen, wie die Anfragen an das Bussystem und die Antworten darauf in einen Zusammenhang gebracht werden können. Die vom Bussystem gelieferten Antworten sollen dabei ausgewertet werden. Kapitel 5.1.2 beschäftigt sich mit den Ausführungen genauer. Am Ende war die „Programmierung“/Belegung der Taster möglichst einfach für den Benutzer zu realisieren. Dies wurde grafisch mit Hilfe der Windows eigenen OLEDrag&Drop-Operation gelöst. Kapitel 5.1.3 bietet hierzu einen kurzen Überblick. Kapitel 5.1.4 schließlich erläutert die Funktionsweise der beiden Umwandlungsfunktionen, die den EEPromInhalt in eine Strukturansicht abbilden sollen und umgekehrt.
5.1.1 KnotenobjektDas Knotenobjekt beschreibt einen vorhandenen Hardwareknoten mit seinen Eigenschaften und Methoden, die in der Klasse clsKnoten festgelegt sind. Er ist nicht zu verwechseln mit dem Node-Objekt einer Strukturansicht. Die einzelnen Eigenschaften eines Knotenobjekts lassen sich nach der Instanzierung des Knotens durch einfache Zuweisungen festlegen: Private Sub Form_Load() Public bKnoten As New clsKnoten ‘bKnoten = betrachteter Knoten bKnoten.Knotennr = 0 End Sub Eine Abfrage kann mittels knr = bKnoten.Knotennr erfolgen. Sämtliche Eigenschaften eines Knotenobjekts zeigt Tabelle 5.1:
Tabelle 5.1:: Eigenschaften des Knoten-Objekts Daneben kennt das Knotenobjekt 2 Methoden, die den Zugriff auf das KnotenEEProm (µC-EEProm) erlauben. Die Methode EEPromLesen versendet dazu über den RS232-Knoten Pakete, die den Zielknoten dazu bewegen, die Inhalte der geforderten EEProm-Adressen zurückzusenden. Die EEPromSchreiben-Methode verschickt Pakete, die den Zielknoten Änderungen an seinen EEPromInhalten durchführen lassen. bKnoten.EEPromLesen(EEStart As Integer, EEStop As Integer), wobei EEStart und EEStop einen Adressraum begrenzen, dessen Inhalt der Zielknoten (an den RS232-Knoten) in mehreren Telegrammen verschicken soll. bKnoten.EEPromSchreiben(AdresseHigh As Integer, AdresseLow As Integer, Daten As Integer) hingegen beschreibt nur eine einzelne Speicherstelle (AdresseHigh, AdresseLow) im EEProm des Zielknotens mit den übermittelten Daten. Mit diesen beiden Methoden und den oben genannten Eigenschaften läßt sich ein realer Knoten bereits im Rechner zum Zwecke der Visualisierung und Konfiguration beschreiben. Bei der Bildschirmausgabe oder Verarbeitung der Knotendaten muß deshalb nicht jedesmal auf die Hardware zugegriffen werden, sondern die benötigten Daten können dem Knotenobjekt entnommen werden (sofern sie einmal eingelesen wurden und somit vorliegen). 5.1.2 Kommunikation mit dem BussystemZur Kommunikation mit dem Bus wird ein RS232-Knoten eingesetzt, der die Anweisungen und Pakete des steuernden PCs in CAN-Bus Nachrichtentelegramme umsetzt. Bis ein so vom PC abgeschicktes Telegramm den Zielknoten am Bus erreicht, vergeht eine gewisse Zeit, in der andere Telegramme die an den PC adressiert sind, den PC erreichen können. Deshalb kann nicht sichergestellt werden, daß ein Telegramm, das unmittelbar auf den Versand eines Telegrammes durch den PC an diesem eintrifft, auch die Antwort auf das soeben verschickte Telegramm ist. Es ist durchaus möglich, daß dieses eintreffende Telegramm die Antwort einer früheren Anfrage zurückgibt. Die Hardware unterstützt den Transport von eindeutigen Kennungen zum Zwecke einer Frage/Antwort-Identifizierung nicht. Deshalb muß anhand der Antwort auf die gestellte Frage geschlossen werden. Dies ist möglich, da die Hardware die gestellte Frage in der Antwort nocheinmal zurückschickt. Trifft also z.B. ein Telegramm mit dem Inhalt einer EEProm-Adresse ein, so kann davon ausgegangen werden, daß vorher eine EEProm-Anfrage an den Zielknoten gestellt wurde. Die so eingehenden Antwortbytes werden im MSComm1_OnComm-Ereignis zu Paketen zusammengesetzt, die dann in der Auswerteroutine paketauswerten analysiert und deren Inhalte den entsprechenden Eigenschaften im betrachteten Knotenobjekt zugewiesen werden. Diese stehen damit sofort für die weitere Verarbeitung im Knotenobjekt zur Verfügung. Zu versendende Pakete werden in der Feldvariable paket(0 to 12) Byte für Byte vorbereitet und dann durch Aufruf von abschicken(paket) per MSComm1.Output an den RS232-Knoten gesendet. Dabei muß dem angesprochenen RS232-Knoten eine kurze Pause eingeräumt werden, damit dessen Empfangsregister nicht überschrieben wird, bevor der alte Inhalt noch nicht verarbeitet ist. Durch die DoEvents-Anweisung in der Routine abschicken wird Windows mitgeteilt, daß andere Ereignisse bearbeitet werden dürfen. Andernfalls würde die abschicken-Routine den Rechner für die gesamte Abarbeitungsdauer blockieren. 5.1.3 Verwendung der OLE-Drag&Drop-OperationWie bereits beschrieben wird die grafische Darstellung der Taster/Relaiszuordnung mit Hilfe von 2 Strukturansichten (tvwKnotenTaster, oben & tvwKnotenRelais, unten) und einem Bildfeld (picMülleimer) erzeugt. Die Node-Objekte der obersten Ebene (root-Ebene) der Strukturansicht (TextBezeichnung: Knoten<nn>) sind unter folgenden Schlüssel eindeutig im Baum identifizierbar und ansprechbar: bKnoten.key = "Knoten" & Format(i, "00"), gleichzeitig bildet dieser Ausdruck auch die Eigenschaft bKnoten.Text (bKnoten.Text = bKnoten.key). Die (Lauf)variable i nummeriert die Knoten von 0 bis 99 durch. Für die untergeordneten Node-Objekte (child-Objekte) gilt folgender Schlüssel: bKnoten.key = "Knoten" & Format(i, "00") & "\Relais" & j Die (Lauf)variable j nimmt Werte zwischen 1 und 4 an. Hier gilt dieser Ausdruck auch für die bKnoten.Text-Eigenschaft. Wird ein Node-Objekt der unteren Strukturansicht in die obere gezogen, so wird vom Programm zuerst das angeklickte Node-Objekt zum Selektierten erklärt (MouseDown-Ereignis: Set tempKnoten = tvwKnotenTaster.HitTest(x, y)), und mit dem SetData-Ereignis (Data.SetData tempKnoten.Key, vbCFText) von der Quelle (unten) ans Ziel (oben) übergeben. Würde dieser Vorgang nicht durchgeführt, dann würde nicht das angeklickte Node-Objekt aufgenommen, sondern das vor dem Anklicken aktive/selektierte Objekt. Bild 5.2: Taster-Relais-Zuordnung Im OLEDragOver-Ereignis des Ziels wird der Knoten optisch hervorgehoben, der momentan unter der Maus steht. Dies macht die Zuordnung für den Anwender einfacher. Das OLEDragDrop-Ereignis, das am logischen Ende der Ereigniskette steht, übernimmt den Schlüssel und erstellt in der eigenen Strukturansicht an der Ablegestelle ein Node-Objekt mit eben diesem Schlüssel. Wird ausgehend von der Strukturansicht tvwKnotenTaster ein Node-Objekt über dem Bildfeld picMülleimer abgelegt, spielt sich im Prinzip der gleiche Vorgang ab. Das OLEDragDrop-Ereignis löscht allerdings hier den per Data.GetData-Methode übermittelten Knoten aus der Strukturansicht tvwKnotenTaster. Die Eingaben des Benutzers werden auf Plausibilität überprüft, und bei Scheitern durch ein aussagekräftiges Hinweisfenster abgewiesen. So macht es zum Beispiel keinen Sinn, ein und dasselbe Relais mehrfach dem gleichen Taster zuzuordnen. Ebensowenig können Knoten selbst auf die Taster gezogen oder gar gelöscht werden. So werden grobe Fehlbedienungen ausgeschlossen. Auch Hardwarebeschränkungen werden geprüft, so können pro Taster - durch die vorgegebene Hardware - maximal 12 Telegramme versendet bzw. Relais geschaltet werden. 5.1.4 Graph2EEProm-, EEProm2Graph-UmwandlungDie graphisch programmierten Zuordnungen müssen vor dem eigentlichen Programmieren des Knotens, in eine für den Knoten verwertbare Form gebracht werden. Dies geschieht durch die Funktion Graph2EEProm. Umgekehrt müssen die ausgelesenen EEPromInhalte in die graphische Strukturansicht umgewandelt werden. Hierfür ist EEProm2Graph zuständig. Die ersten vier Node-Objekte (tvwKnotenTaster.Nodes.Item(1 bis 4)) in der Strukturansicht tvwKnotenTaster repräsentieren die vier Taster, so daß diese bei der Umwandlung in die EEProm-Tabelle nicht berücksichtigt werden müssen. Alle anderen Node-Objekte dagegen sind an diese vier Objekte angehängt (child-Objekte). Eine For-Next-Schleife bildet den Rahmen, der die einzelnen Unterknoten jedes Tasters der Reihe nach abarbeitet und in die EEProm-Tabelle einträgt. Dazu wird die .Text-Eigenschaft der Node-Objekte zur Auswertung herangezogen, da hier das gewünschte Schaltziel und dessen Schaltfunktion verzeichnet sind. Das Schaltziel wird mit Hilfe von Stringbearbeitungsfunktionen extrahiert und durch Umrechnungsfunktionen in das geforderte Format für das EEProm gebracht. Die dafür erstellte Bibliothek modFunktionen bietet hierfür umfangreiche Umrechnungsfunktionen an (Tabelle 5.3). Aus den Befehlen/Zeichenketten <um>, <ein> und <aus> wird an der zugeordneten Speicherstelle im EEProm das korrespondierende Befehlsbyte gesetzt. Am Ende jeder Telegrammtabelle eines Tasters im EEProm wird ein „LeerTelegramm“ angefügt.
Tabelle 5.3: Umrechnungsfunktionen aus der Bibliothek modFunktionen Für den umgekehrten Fall, also die Umwandlung der EEProm Inhalte in die Strukturansicht, ist das Vorgehen ähnlich. Auch hier wird eine Schleife über jede Telegrammtabelle gebildet, die dann wieder mit Hilfe der Umrechnungsfunktionen aus modFunktionen die geforderten Knoten und daraus dann die Ansicht erstellt. Die Schleife wird abgebrochen und es wird bei der nächsten Telegrammtabelle fortgefahren, sobald ein „Leertelegramm“ erkannt wird.
5.2 Beschreibung der Borland C++ Software und deren Realisierung(noch im Aufbau) Vorab ein paar Screenshots, die den Umfang/Möglichkeiten/Komfort/Stand der PC-Software dokumentieren sollen:
|