Home

News

Schnelleinstieg

Hintergrund

Doku

Bilder

Download

Forum

Kontakt

4 Knotensoftware

Um 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"

;****************************************************************************
;* Hauptprogrammrahmen -Vorlage-
;****************************************************************************
;* Software-Vorlage für Buskopplerhardware
;****************************************************************************
;***** Konstanten
       ;* Hier können eigene Konstanten ergänzt werden
;***** Variablen-Deklarationen **********************************************
       ;* Hier können Variablen deklariert werden
.org $0
;***** Interrupt vector table (speziell für AT90S8515) ********************************
       rjmp   RESET        ; Reset Handler
       reti               ; IRQ0 Handler
       rjmp   INTERRUPT1   ; IRQ1 Handler
       reti               ; Timer1 Capture Handler
       reti                ; Timer1 CompareA Handler
       reti                ; Timer1 CompareB Handler
       reti               ; Timer1 Overflow Handler
       reti                ; Timer0 Overflow Handler
       reti                ; SPI Transfer Complete Handler
       reti                ; UART RX Complete Handler
       reti                ; UDR Empty Handler
       reti                ; UART TX Complete Handler
       reti                ; Analog Comparator Handler

;** Allg. Initialisierungen ************************************************************

RESET:       ldi    temp, LOW(RAMEND)  
       out    SPL, temp                  ;Initialize SPL
       ldi    temp, HIGH(RAMEND)
       out    SPH, temp                  ;Initialize SPH
       rcall  SDBusInit                  ;Steuer- und Datenbus zwischen µC und CAN
                                        ;initialisieren
       ;** Hier kann eigene Initialisierungssoftware eingefügt werden
       rcall  caninit                    ;Allg. Initialisierungen des CAN-Controllers

;********************************************************************************
;* Hauptprogramm (zyklische Abarbeitung)
;********************************************************************************

begin: cli                        ;Atmel Interrupts sperren

       ;** Hier kann eigene Applikationssoftware eingefügt werden
       nop
       sei                        ;Atmel Interrupts freigeben
       rjmp   begin

;*****************************************************************************
;* Interruptroutinen
;*****************************************************************************

INTERRUPT1:
       cli                        ;Atmel Interrupts sperren
       ldi    adresse,INT
       rcall  canlesen            ;Interruptregister lesen
       sbrc   daten,0             ;auf ReceiveInterrupt reagieren  
       rcall  EMPFANG             ; -> CANBUS.INC
       ldi    adresse,INT
       rcall  canlesen            ;Interruptregister lesen
       sbrc   daten,2             ;auf WarningLevelInterrupt reagieren
       rcall  WLI
       ldi    adresse,INT
       rcall  canlesen            ;Interruptregister lesen
       sbrc   daten,5             ;auf BusOffInterrupt reagieren
       rcall  BOI
       sei                        ;Atmel Interrupts freigeben
       reti

;************************************************************************
;** Folgende Unterprogramme werden noch im Interrupt ausgeführt        **
;** Sie werden aufgerufen, wenn ein Telegramm für das entsprechende    **
;**  MO eingetroffen ist                                               **
;************************************************************************

;*******
MO0soft:     ;** Dieses MO ist zum Senden reserviert und darf daher nicht zum ;Empfang benutzt werden
       ret
;*******
MO1soft:     ;** Ab hier können eigene Unterprogramme für die Reaktion auf ;Empfangs-Interrupt eingefügt werden
       ret
;*******
MO2soft:     ret

;*******
MO3soft:     ret

;*******
MO4soft:     ret

;*******
MO5soft:     ret

;*******
MO6soft:     ret

;*******
MO7soft:     ret

;*******
MO8soft:     ret

;*******
MO9soft:     ret

;*******
MO10soft:    ret

;*******
MO11soft:    ret

;*******
MO12soft:    ret

;*******
MO13soft:    ;** Bis hier können eigene Unterprogramme für die Reaktion auf ;Empfangs-Interrupt eingefügt werden
       ret

;*******
MO14soft:    ;** Broadcast MO, hier treffen Nachrichten ein, die für alle Knoten
             ;** relevant sind, ID=1 (darf nicht verändert werden)
       ret

;*******
MO15soft:    ;** Telegramm für Knotenadresse eingetroffen
       rcall  knotenbefehl
       ret

;******************************************************************************
WLI:   ;** Hier kann ein eigenes Unterprogramme für die Reaktion auf einen Warning-
;      Level-Interrupt eingefügt werden
       ret

;******************************************************************************
BOI:   ;** Hier kann ein eigenes Unterprogramme für die Reaktion auf einen Bus-Off-
       ;      Interrupt eingefügt werden
       ret

;***** Include-Dateien ***********************************************************
.include "8515def.inc"            ;Allg. Atmel Konstantendefinitionen
.include "canbus.inc"             ;Allg. CAN-Bus Def. und Unterprogramme, die für
                                  ; alle Knoten benötigt werden

;****************************** 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.9: Programmablaufplan der Steuer- und Datenbus Initialisierungs-Routine ("canbus.inc"). Im Programmcode "SDBusInit:".

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 Applikationssoftware

4.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:

  • Konstanten-Definitionen (EEProm-Startadressen)
  • Variablen-Deklarationen (µC Arbeitsregister)
  • zusätzliche µC Initialisierungs-Routine
  • Hauptprogrammteil zur Tasterauswertung
  • Empfangs-Interrupt-Subroutinen für die lokalen Relais zugeordneten MOs

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"

Die Include-Datei "sendtele.inc" enthält ein Unterprogramm zur Versendung eines vorgefertigten, im µC EEProm abgelegten, Stapels Nachrichten-Telegramme auf den CAN-Bus.


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:

  • Konstanten-Definitionen (Zeichendefinitionen)
  • Variablen-Deklarationen (µC Arbeitsregister)
  • zusätzliche Interrupt-Routine für die Verarbeitung von über die RS232-Schnittstelle des µC (2 Pins von Port D) eingetroffenen Zeichen (Inklusive Implementierung lokal ausführbarer RS232-Applikations-Steuerbefehle)
  • zusätzliche µC Initialisierungs-Routine (µC RS232-Schnittstelle)
  • Empfangs-Interrupt-Subroutinen zur Weiterleitung von auf MO0 bis MO13 eingetroffenen Bus-Telegrammen

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"

Abbildung 4.49: Programmablaufplan des µC-Port-Initialisierungs-Unterprogramms ("rs232.inc"). Im Programmcode "atmel232init:".

Abbildung 4.50: Programmablaufplan der UART-Empfangs-Interrupt-Routine ("rs232.inc"). Im Programmcode "UART_RX:".

Abbildung 4.51: Programmablaufplan der UART-Parametrierungs-Subroutine ("rs232.inc"). Im Programmcode "uartinit:".

Abbildung 4.52: Programmablaufplan der Befehlsquittierungs-Subroutine ("rs232.inc"). Im Programmcode "quittung:".

Abbildung 4.53: Programmablaufplan der Telegrammüberwachungs-Subroutine ("rs232.inc"). Im Programmcode "telegrammueberwachung:".

Abbildung 4.54: Programmablaufplan des Datenpaketsauswertungs-Unterprogramms ("rs232.inc"). Im Programmcode "datenpaket:".

Abbildung 4.55: Programmablaufplan des RS232-Befehls 1 ("rs232.inc"). Im Programmcode "startebefehl1:".

Abbildung 4.56: Programmablaufplan des RS232-Befehls 2 ("rs232.inc"). Im Programmcode "startebefehl2:".

Abbildung 4.57: Programmablaufplan des RS232-Befehls 3 ("rs232.inc"). Im Programmcode "startebefehl3:".

Abbildung 4.58: Programmablaufplan des RS232-Befehls 4 ("rs232.inc"). Im Programmcode "startebefehl4:".

Abbildung 4.59: Programmablaufplan des RS232-Befehls 5 ("rs232.inc"). Im Programmcode "startebefehl5:".

Abbildung 4.60: In "rs232.inc" enthaltene Programmroutinen und Programm-Subroutinen

Abbildung 4.61 - 1: Programmaufrufhierarchie der RS232-Applikations-Software ("232_soft.asm" + "8515def.inc" + "canbus.inc" + "rs232.inc")

Abbildung 4.61 - 2: Programmaufrufhierarchie der RS232-Applikations-Software ("232_soft.asm" + "8515def.inc" + "canbus.inc" + "rs232.inc")

 

weiter bei Kapitel 4.2