|
4 KnotensoftwareUm die gewünschte Funktionalität des jeweiligen Busteilnehmers (Busteilnehmer = Kombination von Buskoppler-Hardware und spezifischer Applikations-Hardware) zu erreichen, war es notwendig eine teilnehmerspezifische Software für den auf dem Buskoppler verwendeten Atmel Microcontroller zu schreiben. Ohne eine geeignete Software kann die Funktionalität des jeweiligen Busteilnehmers nicht erfüllt werden. Um eine möglichst kostengünstige Software-Realisierung zu erreichen, wurde die Software in Assembler geschrieben, später wurde die Software, dank des freien AVRGCC nach C portiert (Kapitel 4.2). Der verwendete Compiler, sowie ein Softwarepaket zur Simulation der erstellten Assemblerprogramme können von der Firma Atmel kostenlos bezogen und verwendet werden. Mit Hilfe dieser zur Verfügung gestellten Entwicklungs-Software, welche eine sehr gute Resourcenkontrolle des verwendeten µC erlaubt, war es möglich die Software für die Busteilnehmer schnell und kostengünstig zu realisieren. Um die benötigte Software für die einzelnen Typen von Busteilnehmern zu erhalten, wurde als erstes ein Rumpfprogramm (Hauptprogrammrahmen) geschrieben. Von diesem Hauptprogrammrahmen kann nun durch Ergänzung von Programm-Modulen, Konstanten, Include-Dateien , usw. die Software für einen ganz speziellen Typ Busteilnehmer abgeleitet werden. Ein solches Vorgehen ist in diesem Fall günstig um eine möglichst hohe Skalierbarkeit des Bussystems und dessen Teilnehmer zu erreichen. Im folgenden wird nun der Assembler-Programmcode
der Basissoftware und die davon abgeleitete Software für die I/O-Applikation
bzw. für die RS232-Applikation beschrieben. In den Programmcode sind die
im vorangegangenen Abschnitt aufgestellten Konventionen und Konzeptionen
eingeflossen. 4.1 Beschreibung Knotensoftware (Assembler-Implementation)4.1.1 Hauptprogrammrahmen ("vorlage.asm")Der Hauptprogrammrahmen (Datei: "vorlage.asm") dient als Ausgangssoftware, um die von der Knotenhardware abhängigen Funktionalität zu realisieren. Der Hauptprogrammrahmen wird durch Ergänzungen zu einer funktionsfähigen Knotensoftware geformt. Er beinhaltet Grundfunktionen (Grundkommunikation, Knotenbefehle, usw.) um die sich der Programmierer nicht mehr kümmern muss. Die folgende Abbildung 4.1 zeigt welche Include-Dateien für eine sinnvolle Verwendung des Hauptprogrammrahmens benötigt werden. Abbildung 4.1: Von "vorlage.asm" benötigte Include-Dateien Die Include-Datei "8515def.inc" beinhaltet Konstantendefinitionen, die Register und Bits bzw. Bausteinparameter des Atmel µC AT90S8515 repräsentieren. Ihr Programmcode wurde vom µC Hersteller erstellt und in den Knotensoftwarecode integriert. Auf diese Datei soll nun auch nicht näher eingegangen werden. Der Quellcode dieser Include-Datei ist im Anhang zu finden. Die Include-Datei "canbus.inc" beinhaltet Konstantendefinitionen, die sich auf den CAN-Controller SAE81C90 beziehen und allgemeine Unterprogramme, die Basisfunktionalitäten der Busteilnehmer, bzw. des Buskopplers realisieren. Auf diese Include-Datei wird weiter unten noch näher eingegangen. 4.1.1.1 Programmablaufpläne von "vorlage.asm"
Abbildung 4.2: Programmablaufplan des Hauptprogramms ("vorlage.asm"). Im Programmcode "RESET:". Abbildung 4.3: Programmablaufplan für Interrupt 1 Routine ("vorlage.asm"). Im Programmcode "INTERRUPT1:". Abbildung 4.4: Programmablaufplan der MO 0 bis MO 14 Empfangs-Interrupt Routinen ("vorlage.asm"). Im Programmcode "MO0soft:" bis "MO14soft:". Abbildung 4.5: Programmablaufplan der MO 15 Empfangs-Interrupt Routinen ("vorlage.asm"). Im Programmcode "MO15soft:". Abbildung 4.6: Programmablaufplan der Warning-Level-Interrupt Routine ("vorlage.asm"). Im Programmcode "WLI:". Abbildung 4.7: Programmablaufplan der Bus-Off-Interrupt Routine ("vorlage.asm"). Im Programmcode "BOI:". Abbildung 4.8: In "vorlage.asm" enthaltene Programmroutinen und Programm-Subroutinen Programmcode von "vorlage.asm" ;**************************************************************************** ;** Allg. Initialisierungen
************************************************************ RESET:
ldi temp, LOW(RAMEND) ;******************************************************************************** begin: cli ;Atmel Interrupts sperren
;** Hier kann eigene Applikationssoftware eingefügt werden ;***************************************************************************** INTERRUPT1: ;************************************************************************ ;******* ;******* ;******* ;******* ;******* ;******* ;******* ;******* ;******* ;******* ;******* ;******* ;******* ;******* ;****************************************************************************** ;****************************************************************************** ;***** Include-Dateien *********************************************************** ;****************************** Ende ******************************************* 4.1.1.2 CAN-Bus-Softwaremodul (Datei: "canbus.inc")Die Include-Datei "canbus.inc" wird in den Hauptprogrammrahmen eingebunden und beinhaltet Konstantendefinitionen, die sich auf den CAN-Controller SAE81C90 beziehen und allgemeine Unterprogramme, die Basisfunktionalitäten der Busteilnehmer, bzw. des Buskopplers realisieren. Die Include-Datei "canbus.inc" stellt Unterprogramme zur Verfügung, die den Steuer- und Datenbus des Buskopplers bzw. den CAN-Controller initialisieren, Schreib- und Lese-Routinen um auf die Register des CAN-Controllers Zugriff zu erhalten, Subroutinen, die für die Interrupt-Anforderung des CAN-Controllers benötigt werden und Unterprogramme, die für die Ausführung der Busteilnehmerinternen Knotenbefehle notwendig sind.
Abbildung 4.10: Programmablaufplan der CAN-Controller Initialisierungs-Routine ("canbus.inc"). Im Programmcode "caninit:". Abbildung 4.11: Programmablaufplan der CAN-Register-Lese-Routine ("canbus.inc"). Im Programmcode "canlesen:". Abbildung 4.12: Programmablaufplan der CAN-Register-Schreib-Routine ("canbus.inc"). Im Programmcode "canschreiben:". Abbildung 4.13 - 1: Programmablaufplan der Empfangs-Interrupt-Routine ("canbus.inc"). Im Programmcode "EMPFANG:". Abbildung 4.13 - 2: Programmablaufplan der Empfangs-Interrupt-Routine ("canbus.inc"). Im Programmcode "EMPFANG:". Abbildung 4.13 - 3: Programmablaufplan der Empfangs-Interrupt-Routine ("canbus.inc"). Im Programmcode "EMPFANG:". Abbildung 4.13 - 4: Programmablaufplan der Empfangs-Interrupt-Routine ("canbus.inc"). Im Programmcode "EMPFANG:". Abbildung 4.14: Programmablaufplan der Knotenbefehl-Dekodier-Routine ("canbus.inc"). Im Programmcode "knotenbefehl:". Abbildung 4.15: Programmablaufplan der Knotenbefehl-1-Routine ("canbus.inc"). Im Programmcode "starte_kbefehl1:". Abbildung 4.16: Programmablaufplan der Knotenbefehl-2-Routine ("canbus.inc"). Im Programmcode "starte_kbefehl2:". Abbildung 4.17: Programmablaufplan der Knotenbefehl-3-Routine ("canbus.inc"). Im Programmcode "starte_kbefehl3:". Abbildung 4.18: Programmablaufplan der Knotenbefehl-4-Routine ("canbus.inc"). Im Programmcode "starte_kbefehl4:". Abbildung 4.19: Programmablaufplan der Knotenbefehl-5-Routine ("canbus.inc"). Im Programmcode "starte_kbefehl5:". Abbildung 4.20: Programmablaufplan der Knotenbefehl-6-Routine ("canbus.inc"). Im Programmcode "starte_kbefehl6:". Abbildung 4.21: In "canbus.inc" enthaltene Programm-Subroutinen Abbildung 4.22: Programmaufrufhierarchie des Hauptprogrammrahmens ("vorlage.asm" + "8515def.inc" + "canbus.inc") 4.1.2 Vom Basisprogramm abgeleitete Applikationssoftware4.1.2.1 Relaissoftware (Datei: "rel_soft.asm")Um die gewünschte Funktionalität eines Busteilnehmers mit I/O-Applikations-Modul zu erhalten wurde auf Basis der Software des Hauptprogrammrahmens durch Ergänzung von Programmteilen und Programm-Modulen die für diese Art Busteilnehmer benötigte Software abgeleitet. Durch die Modifikationen entstand die Assembler-Software-Datei "rel_soft.asm". Für die I/O-Applikation wurde der Hauptprogrammrahmen durch diese Softwareteile ergänzt:
Ein Grossteil der für die I/O-Applikations-Software gemachten Ergänzungen wurde in die Include-Dateien "relais.inc" und "sendtele.inc" ausgelagert. Diese werden für eine erfolgreiche Kompilation der I/O-Applikations-Software noch zusätzlich zu den Include-Dateien "canbus.inc" und "8515def.inc" benötigt. Abbildung 4.23: Von "rel_soft.asm" benötigte Include-Dateien. Unveränderte Softwaremodule sind grau hinterlegt Im folgenden sind die Programmablaufpläne von "rel_soft.asm" sowie den ergänzten Include-Dateien "relais.inc" und "sendtele.inc" dargestellt. Veränderte bzw. ergänzte Programmschritte sind für "rel_soft.asm" grau hinterlegt. Programmablaufpläne von "rel_soft.asm"Abbildung 4.24: Programmablaufplan des Hauptprogramms ("rel_soft.asm"). Im Programmcode "RESET:". Abbildung 4.25: Programmablaufplan für Interrupt 1 Routine ("rel_soft.asm"). Im Programmcode "INTERRUPT1:". Abbildung 4.26: Programmablaufplan der MO 1 bis MO 4 Empfangs-Interrupt Routinen ("rel_soft.asm"). Im Programmcode "MO1soft:" bis "MO4soft:". Abbildung 4.27: Programmablaufplan der MO 0 und MO 5 bis MO 14 Empfangs-Interrupt Routinen ("rel_soft.asm"). Im Programmcode "MO0soft:" bzw. "MO5soft:" bis "MO14soft:". Abbildung 4.28: Programmablaufplan der MO 15 Empfangs-Interrupt Routinen ("rel_soft.asm"). Im Programmcode "MO15soft:". Abbildung 4.29: Programmablaufplan der Warning-Level-Interrupt Routine ("rel_soft.asm"). Im Programmcode "WLI:". Abbildung 4.30: Programmablaufplan der Bus-Off-Interrupt Routine ("rel_soft.asm"). Im Programmcode "BOI:". Abbildung 4.31: In "rel_soft.asm" enthaltene Programmroutinen und Programm-Subroutinen Anmerkung: In den Include-Dateien "8515def.inc" und "canbus.inc" wurden keine Veränderungen für die Ableitung der I/O-Applikations-Software aus der Basissoftware vorgenommen. Relaissoftware-Module (Dateien: "relais.inc" und "sendtele.inc")Software-Modul "relais.inc"Die Include-Datei "relais.inc" enthält ein Unterprogramm zur Initialisierung der µC Ports A und C, Unterprogramme zur Auswertung der für die lokalen Relais bestimmten Nachrichten-Telegramme, das Unterprogramm zur Verarbeitung der Tasterzustände und ein Unterprogramm zur Auslösung lokaler, durch Tasterdruck initierter, Relaisschaltvorgänge (CAN-Controller kann nicht ein Telegramm auf den Bus senden und dieses gleichzeitig selbst empfangen). Programmablaufpläne von "relais.inc" Abbildung 4.32: Programmablaufplan der µC Port A/C-Initialisierungs Routine ("relais.inc"). Im Programmcode "atmelrelaisinit:". Abbildung 4.33: Programmablaufplan der Routine für lokale Relaisschaltvorgänge ("relais.inc"). Im Programmcode "tastlokal:". Abbildung 4.34: Programmablaufplan der Tasterabfrage-Routine ("relais.inc"). Im Programmcode "taster_abfrage:". Abbildung 4.35: Programmablaufplan der Relais x Telegramm-Empfangs-Interrupt-Subroutine ("relais.inc"). Im Programmcode "telegramm_fuer_relais1:" bis "telegramm_fuer_relais4:". Abbildung 4.36: In "relais.inc" enthaltene Programm-Subroutinen Software-Modul "sendtele.inc"Programmablaufpläne von "sendtele.inc" Abbildung 4.37: Programmablaufplan der Relais-Telegramm-Sende-Subroutine ("sendtele.inc"). Im Programmcode "telegramm:". Abbildung 4.38: In "sendtele.inc" enthaltene Programm-Subroutinen Abbildung 4.39 - 1: Programmaufrufhierarchie der I/O-Applikations-Software ("rel_soft.asm" + "8515def.inc" + "canbus.inc" + "relais.inc" + "sendtele.inc") Abbildung 4.39 - 2: Programmaufrufhierarchie der I/O-Applikations-Software ("rel_soft.asm" + "8515def.inc" + "canbus.inc" + "relais.inc" + "sendtele.inc")
4.1.2.2 RS232software (Datei: "232_soft.asm")Um die gewünschte Funktionalität eines Busteilnehmers mit RS232-Applikations-Modul zu erhalten wurde auf Basis der Software des Hauptprogrammrahmens durch Ergänzung von Programmteilen und Programm-Modulen die für diese Art Busteilnehmer benötigte Software abgeleitet. Durch die Modifikationen entstand die Assembler-Software-Datei "232_soft.asm". Für die RS232-Applikation wurde der Hauptprogrammrahmen durch diese Softwareteile ergänzt:
Ein Teil der für die RS232-Applikations-Software gemachten Ergänzungen wurde in die Include-Datei "rs232.inc" ausgelagert. Diese wird für eine erfolgreiche Kompilation der RS232-Applikations-Software noch zusätzlich zu den Include-Dateien "canbus.inc" und "8515def.inc" benötigt. Abbildung 4.40: Von "232_soft.asm" benötigte Include-Dateien. Unveränderte Softwaremodule sind grau hinterlegt Im folgenden sind die Programmablaufpläne von "232_soft.asm" sowie der ergänzten Include-Datei "rs232.inc" dargestellt. Veränderte bzw. ergänzte Programmschritte sind für "232_soft.asm" grau hinterlegt. Programmablaufpläne von "232_soft.asm"Abbildung 4.41: Programmablaufplan des Hauptprogramms ("232_soft.asm"). Im Programmcode "RESET:". Abbildung 4.42: Programmablaufplan für Interrupt 1 Routine ("232_soft.asm"). Im Programmcode "INTERRUPT1:". Abbildung 4.43: Programmablaufplan der MO 0 bis MO 13 Empfangs-Interrupt Routinen ("232_soft.asm"). Im Programmcode "MO0soft:" bis "MO13soft:". Abbildung 4.44: Programmablaufplan der MO 14 Empfangs-Interrupt Routinen ("232_soft.asm"). Im Programmcode "MO14soft:". Abbildung 4.45: Programmablaufplan der MO 15 Empfangs-Interrupt Routinen ("232_soft.asm"). Im Programmcode "MO15soft:". Abbildung 4.46: Programmablaufplan der Warning-Level-Interrupt Routine ("232_soft.asm"). Im Programmcode "WLI:". Abbildung 4.47: Programmablaufplan der Bus-Off-Interrupt Routine ("rel_soft.asm"). Im Programmcode "BOI:". Abbildung 4.48: In "232_soft.asm" enthaltene Programmroutinen und Programm-Subroutinen
RS232software-Modul (Datei: "rs232.inc")Die Include-Datei "rs232.inc" enthält ein Unterprogramm zur Initialisierung der µC Ports A, bzw. C inklusive der µC UART (2 Pins von Port D), Unterprogramme zur Weiterleitung (Busteilnehmer -> PC) der auf MO0 bis MO13 eingetroffenen Bus-Telegramme und eine Interrupt-Routine zur Verarbeitung der über die RS232-Schnittstelle des µC eingetroffenen Zeichen (PC -> Busteilnehmer) + Implementierung lokal ausführbarer RS232-Applikations-Steuerbefehle. Programmablaufpläne von "rs232.inc"
|