interbus-s - Onlinecomponents.com

Transcription

interbus-s - Onlinecomponents.com
INTERBUS-S
m
Anwenderhandbuch
po
ne
nt
s.
co
Treibersoftware zu Anschaltbaugruppen für IBM-kompatible PCs
IBS PC CB SWD UM
Revision:
A
in
ec
27 53 94 4
on
l
Artikel-Nr.:
om
Typ:
Dieses Handbuch ist gültig für die Treibersoftware-Version 0.9 zu den Anschaltbaugruppen:
IBS PC CB/I-T
IBS PC CB/COP/I-T
IBS PC CB/RTX486/I-T
Artikel-Nr. 27 80 84 9
Artikel-Nr. 27 54 51 6
Artikel-Nr. 27 61 47 0
Copyright by Phoenix Contact 05/1995
5086A
5086A
s.
nt
ne
po
om
in
ec
on
l
co
m
InterBus-S
Bitte beachten Sie folgende Hinweise:
Um Ihnen einen möglichst unproblematischen Gebrauch dieses Handbuchs
und einen sicheren Geräteeinsatz in den Phasen der Installation, des Betriebs
und der Wartung zu gewährleisten, sollen Sie folgende Hinweise aufmerksam
lesen und beachten:
Erklärungen zu den verwendeten Symbolen
m
Das Symbol Achtung bezieht sich auf fehlerhafte Handlungen, die einen Schaden der Hard- oder Software oder, in indirektem Zusammenhang mit gefährlicher Prozeßperipherie (z.B. ungeschützt laufende Wellen von Motoren mit
Aktorfunktion), leichten bis schweren Personenschaden zur Folge haben können. Das Symbol steht immer links vom zu kennzeichnenden Text.
nt
s.
co
Die Symbol Hand gibt Ihnen Tips und Ratschläge für den effizienten Geräteeinsatz und die Softwareoptimierung, um Ihnen zum Beispiel eine mögliche Mehrarbeit zu ersparen. Außerdem vermittelt Ihnen der so gekennzeichnete Text
systembedingte Randbedingungen, die unbedingt beachtet werden müssen,
um einen fehlerfreien Betrieb zu ermöglichen. Die Hand steht aber auch für begriffliche Klarstellungen.
po
ne
Das Symbol Text verweist Sie auf weiterführende Informationsquellen (Handbücher, Datenblätter, Literatur, etc.) zu dem angesprochenen Thema, Produkt,
o.ä. Ebenso gibt dieser Text hilfreiche Hinweise zur Orientierung, Lesereihenfolge etc. im Handbuch.
om
Ihre Meinung interessiert uns
in
ec
Wir sind ständig bemüht, die Qualität unserer Handbücher zu verbessern. Sollten Sie Anregungen und Verbesserungsvorschläge zu Inhalt und Gestaltung
dieses Handbuchs haben, würden wir uns freuen, wenn Sie uns Ihre Vorschläge
zusenden. Verwenden Sie dazu bitte den universellen Telefax-Vordruck am
Ende des Handbuchs.
on
l
Erklärungen zu den rechtlichen Grundlagen
Dieses Handbuch, einschließlich aller darin enthaltenen Abbildungen, ist urheberrechtlich geschützt. Jede Drittverwendung dieses Handbuchs, die von den
urheberrechtlichten Bestimmungen abweicht, ist verboten. Die Reproduktion,
Übersetzung sowie die elektronische und photographische Archivierung und
Veränderung bedarf der schriftlichen Genehmigung der Firma Phoenix Contact.
Zuwiderhandlungen verpflichten zu Schadensersatz.
Phoenix Contact behält sich jegliche Änderungen, die dem technischen Fortschritt dienen, vor.
Alle Rechte für den Fall der Patenterteilung oder Gebrauchsmustereintragung
sind Phoenix Contact vorbehalten. Fremdprodukte werden stets ohne Vermerk
auf Patentrechte genannt. Die Existenz solcher Rechte ist daher nicht auszuschließen.
Der in diesem Handbuch beschriebene Produktgebrauch richtet sich ausschließlich an qualifizierte Anwendungsprogrammierer und Software-Ingenieu-
InterBus-S
on
l
in
ec
om
po
ne
nt
s.
co
m
re, die mit den Sicherheitskonzepten der Automatisierungstechnik und den
geltenden nationalen Normen vertraut sind. Für Fehlhandlungen und Schäden,
die durch Mißachtung der Informationen dieses Handbuchs an Produkten von
Phoenix Contact oder Produkten anderer Hersteller entstehen, übernimmt Phoenix Contact keine Haftung.
InterBus-S
Inhaltsverzeichnis
1
Überblick über die Treibersoftware . . . . . . . . . . . . . . . . . . . . 1-3
2
Treibersoftware für C unter DOS . . . . . . . . . . . . . . . . . . . . . 2-3
m
co
nt
po
ne
Struktur der Treibersoftware auf dem Host (PC)
Struktur der Treibersoftware auf dem COP . .
Units . . . . . . . . . . . . . . . . .
Funktionen für DOS . . . . . . . . . . .
Funktionen des Device-Driver-Interfaces . . .
Funktionen zur Verwaltung von Datenkanälen .
Funktionen des Mailbox-Interfaces. . . . . .
Funktionen des Data-Interfaces . . . . . . .
Funktionen zur Kontrolle der Hardware . . . .
Abfrage der DIP-Schalter . . . . . . . . .
Überwachung des SysFail-Registers . . . . .
Funktionen zur Ansprache des SRAMs . . . .
Funktionen zur Kontrolle der Watchdogs . . .
IBS-Diagnosefunktion. . . . . . . . . . .
on
l
in
ec
3.1
3.2
3.3
3.4
3.4.1
3.4.1.1
3.4.1.2
3.4.1.3
3.4.2
3.4.2.1
3.4.2.2
3.4.2.3
3.4.2.4
3.4.3
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2-3
2-3
2-4
2-5
2-6
2-6
2-8
2-10
2-13
2-13
2-14
2-14
2-16
2-18
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3-3
3-3
3-4
3-5
3-6
3-6
3-8
3-10
3-13
3-13
3-14
3-14
3-16
3-18
Ergänzungen zur Treibersoftware für Windows . . . . . . . . . . . . . . . 4-3
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.7.1
4.7.2
4.7.3
4.8
5086A
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Treibersoftware für Pascal unter DOS. . . . . . . . . . . . . . . . . . . 3-3
om
3
Struktur der Treibersoftware auf dem Host (PC)
Struktur der Treibersoftware auf dem COP . .
Libraries und Include-Dateien. . . . . . . .
Funktionen für DOS . . . . . . . . . . .
Funktionen des Device-Driver-Interfaces . . .
Funktionen zur Verwaltung von Datenkanälen .
Funktionen des Mailbox-Interfaces. . . . . .
Funktionen des Data-Interfaces . . . . . . .
Funktionen zur Kontrolle der Hardware . . . .
Abfrage der DIP-Schalter . . . . . . . . .
Überwachung des SysFail-Registers . . . . .
Funktionen zur Ansprache des SRAMs . . . .
Funktionen zur Kontrolle der Watchdogs . . .
IBS-Diagnosefunktion. . . . . . . . . . .
s.
2.1
2.2
2.3
2.4
2.4.1
2.4.1.1
2.4.1.2
2.4.1.3
2.4.2
2.4.2.1
2.4.2.2
2.4.2.3
2.4.2.4
2.4.3
Struktur der Treibersoftware auf dem Host (PC) .
Notification-Mode . . . . . . . . . . . . .
Library unter Windows . . . . . . . . . . .
Include-Dateien für „C“ . . . . . . . . . . .
Units für Pascal . . . . . . . . . . . . . .
Initialisierungs-Datei unter Windows . . . . . .
Funktionen für Windows . . . . . . . . . . .
Funktionen des Device-Driver-Interfaces . . . .
Funktionen zur Verwaltung des Notification-Modes
Funktionen zur Kontrolle der Hardware . . . . .
Nutzung der Treibersoftware mit C++ . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-3
4-3
4-5
4-5
4-6
4-6
4-7
4-8
4-9
4-13
4-14
i
InterBus-S
Inhaltsverzeichnis
Ergänzungen zur Treibersoftware für OS/2
5.1
5.2
5.3
5.4
5.5
5.6
5.6.1
5.6.2
5.6.3
5.7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5-3
5-3
5-5
5-6
5-7
5-8
5-8
5-10
5-13
5-14
m
Makros zur Programmierunterstützung . . . . . . . . . . . . . . . . . . 6-3
s.
co
Makros zur Datenkonvertierung . . . . . . . . . . . . .
Makros zur Konvertierung des Datenblocks eines Kommandos
Makros zur Konvertierung des Datenblocks einer Meldung . .
Makros zur Konvertierung von Eingangsdaten . . . . . . .
Makros zur Konvertierung von Ausgabedaten . . . . . . .
6-3
6-5
6-7
6-8
6-10
nt
6.1
6.1.1
6.1.2
6.1.3
6.1.4
Diagnose zur Treibersoftware . . . . . . . . . . . . . . . . . . . . . . 7-3
Meldungen des DDI . . . . . . . . . . . . . . . . . 7-4
Fehlermeldungen des DDI . . . . . . . . . . . . . . . 7-4
Fehlermeldungen zur Initialisierung der Anschaltbaugruppe . . 7-4
Allgemeine Fehlermeldungen. . . . . . . . . . . . . . 7-6
Fehlermeldungen beim Öffnen eines Datenkanals . . . . . 7-7
Fehlermeldungen zur Übertragung von Meldungen/Kommandos7-8
Fehlermeldungen zur Übertragung von Prozessdaten . . . . 7-10
Fehlermeldungen unter DOS . . . . . . . . . . . . . . 7-10
Fehlermeldungen unter Microsoft Windows . . . . . . . . 7-11
Fehlermeldungen unter OS/2 . . . . . . . . . . . . . . 7-12
A
on
l
in
ec
7.1
7.2
7.2.1
7.2.2
7.2.3
7.2.4
7.2.5
7.2.6
7.2.7
7.2.8
ne
7
Struktur der Treibersoftware auf dem Host (PC)
Notification-Mode unter OS/2 . . . . . . . .
Library und Include-Dateien für OS/2 . . . . .
CONFIG.SYS unter OS/2 . . . . . . . . .
Compileroptionen . . . . . . . . . . . .
Funktionen für OS/2 . . . . . . . . . . .
Funktionen des Device-Driver-Interfaces . . .
Funktionen zur Verwaltung des Blocked-Modes
Funktionen zur Kontrolle der Hardware . . . .
Nutzung der Treibersoftware mit C++ . . . .
po
6
. . . . . . . . . . . . . . . . 5-3
om
5
Anhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-3
A.1
A.2
A.3
ii
Abbildungsverzeichnis . . . . . . . . . . . . . . . . A-3
Tabellenverzeichnis . . . . . . . . . . . . . . . . . A-4
Stichwortverzeichnnis. . . . . . . . . . . . . . . . . A-5
5086A
Kapitel
1
Überblick über die Treibersoftware
Dieses Kapitel informiert Sie über die zur Verfügung stehende Treibersoftware
für verschiedene
Überblick über die Treibersoftware . . . . . . . . . . . . . . . . . . . . 1-3
on
l
in
ec
om
po
ne
nt
s.
co
1
m
- Betriebssysteme
- Programmiersprachen
- Compiler
5086A
1-1
1-2
5086A
s.
nt
ne
po
om
in
ec
on
l
co
m
InterBus-S
Überblick über die Treibersoftware
1 Überblick über die Treibersoftware
Für die Anschaltbaugruppen steht Ihnen Treibersoftware für verschiedene Betriebssysteme zur Verfügung. Sie können außerdem unter mehreren Compilern
für die Programmiersprachen C und Pascal auswählen. Dieses Kapitel zeigt Ihnen die möglichen Kombinationen von Betriebssystemen und Compilern auf
dem PC und den Coprozessorboards der IBS PC CB/COP/I-T und
IBS PC CB/RTX486/I-T.
Tabelle 1-1:
Betriebssysteme
Version
Rechner
Microsoft® DOS
5.0, 6.2
PC (Host)
m
Betriebssystem
Technosoft RTXDOS-16®
COP386
6.1
COP486
3.1
Host
2.1
Host
s.
Microsoft Windows®
3.5a
co
SMA TDOS®
Compiler
Compiler
po
Tabelle 1-2:
ne
nt
IBM OS/2®
Version
3.0 / 3.1
Microsoft C/C++®
7.0
Microsoft Visual C++®
1.0
IBM C Set/2®
2.0
Borland Turbo Pascal®
6.0 / 7.0
Microsoft Visual Basic®
3.0
on
l
in
ec
om
Borland C/Turbo C®
Eine detaillierte Beschreibung entnehmen Sie bitte den in Tabellen 1-3 und 1-4
angegebenen Kapiteln.
5086A
1-3
InterBus-S
Überblick über die Treibersoftware
Tabelle 1-3:
Kombinationen von Compiler und Betriebssystem auf dem Host
Betriebssysteme
Microsoft DOS®
Microsoft Windows®
IBM OS/2®
Kapitel 2
Kapitel 2 und 4
—
—
—
Kapitel 2 und 5
Kapitel 3
Kapitel 3 und 4
—
Borland C/Turbo C®
Compiler
Microsoft C/C++®
Microsoft Visual C++®
IBM C Set/2®
Borland Turbo Pascal®
Microsoft Visual Basic®
Kombinationen von Compiler und Betriebssystem auf dem COP
s.
Tabelle 1-4:
co
m
in Vorbereitung
ne
Borland C/Turbo C®
po
Microsoft C/C++®
Borland Turbo Pascal®
RTXDOS-16®
Kapitel 2
Kapitel 3
om
Compiler
TDOS®
nt
Betriebssysteme
on
l
in
ec
Die Programmierung des Coprozessorboards unterscheidet sich nicht von der
Programmierung auf dem Host unter DOS. Ein auf dem Host unter DOS erstelltes Programm kann somit auch auf dem Coprozessorboard ablaufen.
1-4
5086A
Kapitel
2
Treibersoftware für C unter DOS
Dieses Kapitel informiert Sie über
po
ne
nt
s.
Struktur der Treibersoftware auf dem Host (PC)
Struktur der Treibersoftware auf dem COP . .
Libraries und Include-Dateien. . . . . . . .
Funktionen für DOS . . . . . . . . . . .
Funktionen des Device-Driver-Interfaces . . .
Funktionen zur Verwaltung von Datenkanälen .
Funktionen des Mailbox-Interfaces. . . . . .
Funktionen des Data-Interfaces . . . . . . .
Funktionen zur Kontrolle der Hardware . . . .
Abfrage der DIP-Schalter . . . . . . . . .
Überwachung des SysFail-Registers . . . . .
Funktionen zur Ansprache des SRAMs . . . .
Funktionen zur Kontrolle der Watchdogs . . .
IBS-Diagnosefunktion. . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2-3
2-3
2-4
2-5
2-6
2-6
2-8
2-10
2-13
2-13
2-14
2-14
2-16
2-18
on
l
in
ec
2.1
2.2
2.3
2.4
2.4.1
2.4.1.1
2.4.1.2
2.4.1.3
2.4.2
2.4.2.1
2.4.2.2
2.4.2.3
2.4.2.4
2.4.3
co
Treibersoftware für C unter DOS . . . . . . . . . . . . . . . . . . . . . 2-3
om
2
m
- Die Realisierung und die Funktionen des Device-Driver-Interfaces.
- Die benötigten Include-Dateien und Libraries.
- Device-Driver für DOS.
5086A
2-1
2-2
5086A
s.
nt
ne
po
om
in
ec
on
l
co
m
InterBus-S
Treibersoftware für C unter DOS
2 Treibersoftware für C unter DOS
2.1 Struktur der Treibersoftware auf dem Host (PC)
Das Device-Driver-Interface linken Sie in Form einer Library zu Ihrem Anwenderprogramm hinzu. Die Device-Driver für DOS sind als TSR-Programme realisiert (ähnlich wie die Treiber von Netzwerkkarten).
PC
m
Anwenderprogramm
TSR-Programm
TSR-Programm
MPM
MPM
MPM
TSR-Programm
COP
MA
ne
MA
COP
MA
MPM
COP
MA
5086A201
po
COP
nt
s.
TSR-Programm
co
Library
Realisierung der Treibersoftware unter Microsoft-DOS für C
om
Bild 2-1:
in
ec
Für jedes Anschaltbaugruppe muß ein Device-Driver, also ein TSR-Programm,
installiert werden! Die Installation der Device-Driver ist im Kapitel 4 Inbetriebnahme des Handbuchs IBS PC CB UM beschrieben.
on
l
2.2 Struktur der Treibersoftware auf dem COP
Anwenderprogramm
COP
Library
TSR-Programm
MPM
IBS
Host
Masterboard
5086A202
Bild 2-2:
5086A
Realisierung der Treibersoftware für C auf dem COP
2-3
InterBus-S
Treibersoftware für C unter DOS
Die Programmierung des Coprozessorboards (COP) unterscheidet sich nicht
von der Programmierung auf dem Host unter DOS. Ab Treibersoftware Version
0.9 ist auch das Linken mit speziellen Libraries für das Coprozessorboard nicht
mehr erforderlich, weil zum Betrieb auf dem Host und dem COP die gleichen Libraries verwendet werden. Ein auf dem Host unter DOS erstelltes Programm
kann somit auch auf dem Coprozessorboard ablaufen.
Nutzen Sie zum Betrieb auf dem COP anstelle von IBSPCCB.EXE das TSRProgamm IBSCOP.EXE als Device-Driver.
2.3 Libraries und Include-Dateien
Libraries
nt
s.
co
m
Um dem Anwender die Arbeit mit dem Treibersoftware zu erleichtern, sind ab
Version 0.9 alle benötigten DDI- und Hilfsfunktionen in einer Library zusammengefaßt, die sowohl auf dem Host (PC) als auch dem Coprozessorboard Verwendung findet. Es ist damit möglich, ein Anwenderprogramm wahlweise auf dem
Host (PC) oder Coprozessorboard zu betreiben, ohne daß ein erneutes Übersetzen oder Linken notwendig ist. Voraussetzung hierfür ist, daß auf beiden Systemen die entsprechenden Treiber (TSR-Programme) geladen sind.
Um auch die Handhabung der Include-Dateien zu vereinfachen, ist es ab Treibersoftware-Version 0.9 nur noch notwendig, die Include-Datei IBS_DOS.H einzubinden. Aus dieser Include-Datei werden alle weiteren benötigten Include-Dateien aufgerufen. Sie können aber auch weiterhin die benötigten IncludeDateien einzeln aufrufen.
in
ec
om
Include-Dateien
po
ne
Lediglich die Funktionen zum Lesen und Schreiben des SRAM des Coprozessorboards sind auf dem Host (PC) nicht verfügbar und werden dort mit der Fehlermeldung ERR_INVLD_CMD (008Chex) quittiert. Die Library steht wie zuvor
im Large- und Medium-Model (Microsoft C ab Version 7.0 und Borland C++ ab
Version 3.0) zur Verfügung.
on
l
Bei Verwendung der Include-Datei IBS_DOS.H ist es außerdem nicht mehr notwendig, von Hand Compiler-Switches im Programm bzw. in der Kommandozeile
des Compilers einzutragen. Die notwendige Konstanten-Deklaration
(IBS_DOS_DRV) erfolgt dann innerhalb von IBS_DOS.H.
Tabelle 2-1:
Libraries und Include-Dateien
Speichermodell:
Library:
Include-Datei
medium
MDDI_TSR.LIB
large
LDDI_TSR.LIB
IBS_DOS.H (ruft STDTYPES.H, COMPILER.H,
IBS_CM.H, DDI_USR.H, DDI_ERR.H, DDI_LIB.H,
PC_UTIL.H und DDI_MACR.H auf)
Die Include-Datei DDI_MACR.H ermöglicht die Nutzung der im Kapitel 4.2.4 beschriebenen Makrofunktionen. Die Makros sind in dieser Datei definiert.
Falls Sie IBS_DOS.H nicht verwenden möchten und die benötigten Include-Dateien einzeln im Programm aufrufen, müssen Sie vor dem Einbinden der Include
Dateien die Anweisung #define IBS_DOS_DRV einfügen. Dies kann entweder
im Programmtext oder als Compileroption erfolgen.
2-4
5086A
InterBus-S
Funktionen für DOS
#define IBS_DOS_DRV
#include "stdtypes.h"
#include "ddi_usr.h"
...
Beispiele:
oder
cl /C+
/O /DIBS_DOS_DRV ...
2.4 Funktionen für DOS
m
Übersicht über die DDI-Funktionen für DOS
Aufgabe
DDI_DevOpenNode
Öffnet einen Datenkanal zu einem Node
DDI_DevCloseNode
Schließt einen Datenkanal zu einem Node
2-7
DDI_MXI_SndMessage
Schreibt eine Meldung in das MPM
2-8
DDI_MXI_RcvMessage
Liest eine Meldung aus dem MPM
2-9
DDI_DTI_ReadData
Liest Daten aus dem MPM
2-10
DDI_DTI_WriteData
Schreibt Daten in das MPM
2-11
Seite
2-6
om
po
ne
nt
co
Funktion
s.
Tabelle 2-2:
Tabelle 2-3:
Aufgabe
in
ec
Funktion
Übersicht über die Funktionen zur Kontrolle der Hardware
Seite
Schreibt eine Anzahl von Bytes in das SRAM des COPs
2-14
COP_ReadStaticRAM
Liest eine Anzahl von Bytes aus dem SRAM des COPs
2-15
GetDIPSwitch
Liest die Stellungen des DIP-Schalters zum Einstellen der
Boot-Konfiguration aus
2-13
GetSysFailRegister
Liest den Inhalt des SysFail-Registers aus
2-14
EnableWatchDog
Schaltet einen Watchdog ein
2-16
TriggerWatchDog
Triggert einen Watchdog
2-16
GetWatchDogState
Liest den Status eines Watchdogs aus
2-17
ClearWatchDog
Setzt den Status eines Watchdogs zurück
2-17
GetIBSDiagnostic
Wertet den Betriebszustand des IBS-Masterboards aus
2-18
on
l
COP_WriteStaticRAM
5086A
2-5
InterBus-S
Treibersoftware für C unter DOS
2.4.1 Funktionen des Device-Driver-Interfaces
2.4.1.1 Funktionen zur Verwaltung von Datenkanälen
DDI_DevOpenNode
Aufgabe:
Mit dieser Funktion wird ein Datenkanal zu einem Node geöffnet.
Synopsis:
INT16 DDI_DevOpenNode(CHAR *devName,INT16 perm,INT16 *nodeHd);
Parameter:
*devName
m
Der Device-Name ist der Name des anzusprechenden
Gerätes. Er legt die Anschaltbaugruppe (Boardnumber)
und den dortigen MPM-Teilnehmer fest (siehe Kapitel
5.2.3.1 Verwaltung von Datenkanälen im Handbuch
IBS PC CB UM).
Die Access-Permission gibt an, mit welchen Zugriffsrechten auf den Datenkanal zugegriffen werden darf.
Es kann zwischen lesend, schreibend und lesend/
schreibend unterschieden werden.
Der Node-Handle ist ein vom DDI vergebener Wert,
über den in allen weiteren Funktionen eine Zuordnung
zum geöffneten Node gefunden wird.
s.
co
perm
Node-Handle
in
ec
Ursache
om
negative Quittung: DDI-Error-Code
po
positive Quittung:
ne
nt
*nodeHd
on
l
Aufrufsyntax:
INT16 DDI_DevOpenNode(
CHAR *devName,
INT16 perm,
INT16 *nodeHd);
Konstanten für die Zugriffsrechte:
DDI_READ
DDI_WRITE
DDI_RW
Spezifiziert den beim Öffnen des Datenkanals zu einem
Node gefundenen Fehler näher (siehe Kapitel 7 Fehlermeldungen des DDI).
- unbekannter Device-Name
- Node nicht vorhanden
/* IN: device name
*/
/* IN: access permission
*/
/* OUT: address of node-handle */
nur lesender Zugriff
nur schreibender Zugriff
lesender und schreibender Zugriff
In der aktuellen Version (V 0.9) der Treibersoftware darf zwischen zwei MPMTeilnehmern (z.B. Host und COP) der gleiche Datenkanal (gleicher DeviceName) nur einmal geöffnet sein. Wenn zwischen zwei MPM-Teilnehmern der
gleiche Datenkanal gleichzeitig mehrmals geöffnet ist, überschreiben die Daten
eines Datenkanals die Daten eines anderen, da sie denselben MPM-Speicherbereich verwenden. Es erfolgt in diesem Fall keine Fehlermeldung.
2-6
5086A
InterBus-S
Funktionen zur Verwaltung von Datenkanälen
Beispiele:
Falsch:
DDI_DevOpenNode("IBB1N1_D“, ... , nodeHandle1)
DDI_DevOpenNode("IBB1N1_D“, ... , nodeHandle2)
Richtig:
DDI_DevOpenNode("IBB1N1_D“, ... , nodeHandle1)
DDI_DevOpenNode("IBB1N2_D“, ... , nodeHandle2)
(siehe Kapitel 5.2.3.1 Verwaltung von Datenkanälen im Handbuch
IBS PC CB UM)
DDI_DevCloseNode
Diese Funktion schließt einen zuvor mit DDI_DevOpenNode() geöffneten Datenkanal zu einem Node. Nach dem erfolgreichem Aufruf dieser Funktion ist das
Gerät nicht mehr mit dem aufrufenden Programm "verbunden", und der NodeHandle ist nicht mehr gültig.
Synopsis:
INT16 DDI_DevCloseNode(INT16 nodeHd);
Parameter:
nodeHd
positive Quittung:
ERR_OK (0000hex)
Bedeutung
s.
co
m
Aufgabe:
ne
po
Spezifiziert den beim Aufruf der Funktion aufgetretenen
Fehler näher (siehe Kapitel 7 Fehlermeldungen des
DDI).
- unbekannter Device-Name
- ungültiger Node-Handle
- Node nicht vorhanden
on
l
in
ec
Ursache
Die Funktion wurde erfolgreich ausgeführt.
om
negative Quittung: DDI-Error-Code
nt
Der Node-Handle spezifiziert den zu schließenden
Node.
5086A
2-7
InterBus-S
Treibersoftware für C unter DOS
2.4.1.2 Funktionen des Mailbox-Interfaces
DDI_MXI_SndMessage
Aufgabe:
Diese Funktion stellt eine Meldung oder ein Kommando in eine Mailbox.
Synopsis:
INT16 DDI_MXI_SndMessage
(INT16 nodeHd,T_DDI_MXI_ACCESS *ddi_mxi_acc);
Parameter:
nodeHd
Der Node-Handle ist die logische Nummer (Handle) eines zuvor an der DDI-Schnittstelle geöffneten Kanals.
Zeiger auf eine Datenstruktur vom Typ
T_DDI_MXI_ACCESS (siehe unten).
*ddi_mxi_acc
msgType
s.
msgLength
om
ERR_OK (0000hex)
Bedeutung
po
DDIUserID
ne
nt
*msgBlk
positive Quittung:
in
ec
negative Quittung: DDI-Error-Code
on
l
Ursache
Die Firmware 3.x unterstützt das Strukturelement Message-Type noch nicht. Setzen Sie es auf 0.
Das Strukturelement Message-Length enthält die Gesamtlänge der zu sendenden Meldung in Bytes. Die maximal zulässige Gesamtlänge (siehe unten) ist 1024.
Das Strukturelement *msgBlk ist ein Zeiger auf einen
Message-Block, der die zu sendende Meldung in Mailbox-Syntax enthält. Das Handbuch IBS PC CB UM beschreibt den Aufbau der Mailbox-Syntax.
Das Strukturelement DDIUserID wird von der Firmware
3.x noch nicht unterstützt. Setzen Sie DDIUserID auf 0.
co
Strukturelemente:
m
T_DDI_MXI_ACCESS: Datenstruktur mit den zum Senden eines Kommandos notwendigen Elementen.
Die Funktion wurde erfolgreich ausgeführt.
Gibt an, warum die Funktion nicht ausgeführt werden
konnte (siehe Kapitel 7 Fehlermeldungen des DDI)
ungültiger Node-Handle;
keine passende Mailbox gefunden;
Die Meldung überschreitet die maximal nutzbare Mailbox-Länge (1020 Bytes = 1024 Bytes minus 2 Bytes
Kommando-Code minus 2 Bytes Parameter-Zähler).
Aufrufsyntax:
INT16 DDI_MXI_SndMessage(
INT16 nodeHd,
/* IN : node-handle
*/
T_DDI_MXI_ACCESS * ddi_mxi_acc);/* IN : pointer to
mailbox-accessstructure
*/
Aufbau der Struktur T_DDI_MXI_ACCESS:
typedef struct {
INT16 msgType
USIGN16 msgLength;
USIGN16 DDIUserID;
USIGN8 *msgBlk;
} T_DDI_MXI_ACCESS;
2-8
/*
/*
/*
/*
Message-Type
Message-Length
DDI_User_ID
Pointer to array for the Message
*/
*/
*/
*/
5086A
InterBus-S
Funktionen des Mailbox-Interfaces
DDI_MXI_RcvMessage
Diese Funktion holt eine Meldung aus einer Mailbox. Sie wird z.B. verwendet,
um die auf ein IBS-Kommando erfolgende Rückmeldung abzuholen. Es wird
nicht auf die Rückmeldung gewartet! Ist keine Rückmeldung vorhanden, erfolgt
eine entsprechende Meldung im Parameter DDI-Error-Code.
Voraussetzung:
In die Komponente msgLength der Struktur T_DDI_MXI_ACCESS muß die
Länge des zur Verfügung gestellten Empfangspuffers eingetragen werden. Der
Treiber prüft die Größe des Empfangspuffers vor dem Einlesen und generiert
die Fehlermeldung ERR_MSG_TO_Long (009Ahex), falls die empfangene
Nachricht größer ist als der zur Verfügung stehende Speicherplatz.
Synopsis:
USIGN16 DDI_MXI_RcvMessage
(USIGN16 nodeHd,T_DDI_MXI_ACCESS *ddi_ mxi_acc);
Parameter:
nodeHd
m
Aufgabe:
co
Der Node-Handle ist die logische Nummer eines zuvor
an der DDI-Schnittstelle geöffneten Kanals.
Zeiger auf eine Datenstruktur vom Typ
T_DDI_MXI_ACCESS (siehe unten).
s.
*ddi_mxi_acc
in
ec
om
msgLength
on
l
*msgBlk
DDIUserID
positive Quittung:
ERR_OK (0000hex)
Bedeutung
negative Quittung: DDI-Error-Code
Ursache
5086A
Die Firmware 3.x unterstützt das Strukturelement Message-Type noch nicht. Setzen Sie es auf 0.
Geben Sie vor dem Aufruf der Funktion
DDI_MXI_RcvMessage mit dem Strukturelement
Message-Length die Größe des zur Verfügung stehen
den Eingangspuffers in Bytes an. Nach dem erfolgreichen Empfang einer Meldung enthält das Strukturelement Message-Length die tatsächliche Länge der
Meldung in Bytes.
Das Strukturelement *msgBlk ist ein Zeiger auf einen
Message-Block, der die empfangene Meldung in Mailbox-Syntax enthält. Das Handbuch IBS PC CB UM beschreibt den Aufbau der Mailbox-Syntax.
Das Strukturelement DDIUserID wird von der Firmware
3.x noch nicht unterstützt. Setzen Sie DDIUserID auf 0.
ne
msgType
po
Strukturelemente:
nt
T_DDI_MXI_ACCESS: Datenstruktur mit den zum Empfangen einer Meldung notwendigen Elementen.
Die Funktion wurde erfolgreich ausgeführt.
Gibt an, warum die Funktion nicht ausgeführt werden
konnte (siehe Kapitel 7 Fehlermeldungen des DDI).
- ungültiger Node-Handle;
- zu kleiner Empfangspuffer;
- keine Meldung vorhanden
2-9
InterBus-S
Treibersoftware für C unter DOS
Aufrufsyntax:
USIGN16 DDI_MXI_RcvMessage(
USIGN16 nodeHd,
/* IN : node-handle
*/
T_DDI_MXI_ACCESS *ddi_ mxi_acc);/* OUT: pointer to
mailboxaccess-structure*/
/*
/*
/*
/*
Message-Type
*/
Message-Length
*/
DDI_User_ID
*/
Pointer to array for the Message*/
m
Aufbau der Struktur T_DDI_MXI_ACCESS:
typedef struct {
INT16 msgType;
USIGN16 msgLength;
USIGN16 DDIUserID;
USIGN8 *msgBlk;
} T_DDI_MXI_ACCESS;
co
2.4.1.3 Funktionen des Data-Interfaces
DDI_DTI_ReadData
Diese Funktion liest Daten über das Data-Interface aus dem MPM. Sie stellt diese Daten im Motorola-Format in den angegebenen Buffer.
Bemerkung:
Verwenden Sie vor der weiteren Verarbeitung der Daten die Makros zur Konvertierung von Eingangsdaten. Diese Makros konvertieren die Eingangsdaten vom
Motorola- in das Intel-Format (siehe Kapitel 6).
Synopsis:
INT16 DDI_DTI_ReadData
(INT16 node_Hd,T_DDI_DTI_ACCESS *ddi_dti_acc);
Parameter:
nodeHd
*ddi_dti_acc
in
ec
om
po
ne
nt
s.
Aufgabe:
Der Node-Handle spezifiziert den Node.
Zeiger auf eine Datenstruktur vom Typ
T_DDI_DTI_ACCESS (siehe unten).
T_DDI_DTI_ACCESS: Datenstruktur mit den zum Lesen von Prozeßdaten notwendigen Elementen.
length
on
l
Strukturelemente:
address
dataCons
*data
Das Strukturelement Length enthält die Anzahl der zu
lesenden Daten in Bytes. Die maximale Anzahl ist 1024
Bytes.
Das Strukturelement Address gibt die DTI-Adresse eines Prozeßdatenwortes im MPM in Byte an (siehe Kapitel Aufteilung des MPMs im Handbuch IBS PC CB UM).
Das Strukturelement Data-Consistency gibt an, welche
Datenkonsistenz beim Zugriff verwendet werden soll.
Dieses Strukturelement ist ein Zeiger auf den Buffer, in
dem die gelesenen Daten abgelegt werden sollen.
Konstanten für die möglichen Datenkonsistenzbereiche:
DTI_DATA_BYTE
: Byte-Datenkonsistenz (1 Byte)
DTI_DATA_WORD
: Word-Datenkonsistenz (2 Byte)
DTI_DATA_LWORD : Longword-Datenkonsistenz (4 Byte)
DTI_DATA_48BIT
: 48 Bit-Datenkonsistenz (6 Byte)
Die Datenkonsistenzbereiche DTI_DATA_LWORD und DTI_DATA_48BIT sind
für Zugriffe auf das IBS-Masterboard erst ab Verwendung von Firmware 3.72
möglich.
2-10
5086A
InterBus-S
Funktionen des Data-Interfaces
positive Quittung:
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
negative Quittung: DDI-Error-Code
Spezifiziert den beim Lesen der Prozessdaten aufgetretenen Fehler näher (siehe Kapitel 7 Fehlermeldungen
des DDI).
- ungültiger Node-Handle
- ungültige Parameter
- Grenzen des Datenbereichs werden überschritten
Ursache
co
s.
number of bytes to read/write
*/
address to read/write process data*/
data consistency of the access
*/
pointer to data to read/write
*/
nt
/*
/*
/*
/*
po
DDI_DTI_WriteData
*/
ne
Aufbau der Struktur T_DDI_DTI_ACCESS:
typedef struct {
USIGN16 length;
USIGN16 address;
INT16 dataCons;
USIGN8 *data;
} T_DDI_DTI_ACCESS;
*/
m
Aufrufsyntax:
INT16 DDI_DTI_ReadData(
INT16 node_Hd,
/* IN : node-handle
T_DDI_DTI_ACCESS *ddi_dti_acc); /* IN : dti access
structure
Diese Funktion schreibt Daten über das Data-Interface in das MPM. Die Funktion benötigt hierzu Daten im Motorola-Format.
Bemerkung:
Verwenden Sie vor dem Schreiben von Daten in das MPM die Makros zur Konvertierung von Ausgabedaten. Diese Makros konvertieren die Ausgabedaten
vom Intel- in das Motorola-Format (siehe Kapitel 6).
in
ec
om
Aufgabe:
INT16 DDI_DTI_WriteData
(INT16 nodeHd,T_DDI_DTI_ACCESS *ddi_dti_acc);
on
l
Synopsis:
Parameter:
nodeHd
*ddi_dti_acc
Der Node-Handle spezifiziert den Node.
Zeiger auf eine Datenstruktur vom Typ
T_DDI_DTI_ACCESS (siehe unten).
T_DDI_DTI_ACCESS: Datenstruktur mit den zum Schreiben von Prozeßdaten notwendigen Elementen.
Strukturelemente:
length
address
dataCons
*data
5086A
Das Strukturelement Length enthält die Anzahl der zu
schreibenden Daten in Bytes. Die maximale Anzahl ist
1024 Bytes (1 KByte).
Das Strukturelement Address gibt die DTI-Adresse eines Prozeßdatenwortes im MPM in Byte an (siehe Kapitel Aufteilung des MPMs im Handbuch IBS PC CB UM).
Das Strukturelement Data-Consistency gibt an, welche
Datenkonsistenz beim Zugriff verwendet werden soll.
Dieses Strukturelement ist ein Zeiger auf den Buffer,
aus dem die zu schreibenden Daten entnommen werden sollen.
2-11
InterBus-S
Treibersoftware für C unter DOS
Konstanten für die möglichen Datenkonsistenzbereiche:
DTI_DATA_BYTE
: Byte-Datenkonsistenz (1 Byte)
DTI_DATA_WORD
: Word-Datenkonsistenz (2 Byte)
DTI_DATA_LWORD : Longword-Datenkonsistenz (4 Byte)
DTI_DATA_48BIT
: 48 Bit-Datenkonsistenz (6 Byte)
Die Datenkonsistenzbereiche DTI_DATA_LWORD und DTI_DATA_48BIT sind
für Zugriffe auf das IBS-Masterboard erst ab Verwendung von Firmware 3.72
möglich.
positive Quittung:
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
Spezifiziert einen beim Schreiben von Prozeßdaten aufgetretenen Fehler näher (siehe Kapitel 7 Fehlermeldungen des DDI).
- ungültiger Node-Handle
- ungültige Parameter
- Grenzen des Datenbereichs werden überschritten
m
negative Quittung: DDI-Error-Code
s.
co
Ursache
po
ne
nt
Aufrufsyntax:
INT16 DDI_DTI_WriteData(
INT16 nodeHd,
/* IN : node-handle
*/
T_DDI_DTI_ACCESS *ddi_dti_acc); /* IN : dti access
structure*/
/*
/*
/*
/*
number of bytes to read/write
*/
address to read/write process data*/
data consistency of the access
*/
pointer to data to read/write
*/
on
l
in
ec
om
Aufbau der Struktur T_DDI_DTI_ACCESS:
typedef struct {
USIGN16 length;
USIGN16 address;
INT16 dataCons;
USIGN8 *data;
} T_DDI_DTI_ACCESS;
2-12
5086A
InterBus-S
Funktionen zur Kontrolle der Hardware
2.4.2 Funktionen zur Kontrolle der Hardware
2.4.2.1 Abfrage der DIP-Schalter
GetDIPSwitch
Die Funktion GetDIPSwitch schreibt in die durch dataPtr referenzierte Variable
die Schalterstellungen des DIP-Schalters zum Einstellen der Boot-Konfiguration. Der Anwender kann somit zur Programmlaufzeit die Boot-Konfiguration ermitteln, um z.B. festzustellen, welches Board (PC oder COP) den InterBus-S
steuert. Die acht Schalter werden auf die Bits 0 bis 7 des Worts abgebildet, d.h.
der DIP-Schalter 1 ist dem Bit 0, der DIP-Schalter 2 dem Bit 1, usw. des Wortes
zugeordnet. Befindet sich ein Schalter in der Schaltstellung ON, ist das jeweilige
Bit gleich Null. Die nicht verwendeten Bits 8 bis 15 des Worts sind in jedem Fall
auf Eins gesetzt.
Synopsis:
INT16 FAR GetDIPSwitch(USIGN16 boardNumber, USIGN16 FAR *dataPtr)
Parameter:
boardNumber
*dataPtr
positive Quittung:
ERR_OK (0000hex)
Bedeutung
co
m
Aufgabe:
ne
nt
s.
Boardnummer (PC: 1 bis 4, COP: 1)
Zeiger auf die Variable, in welche die ermittelten Schalterstellungen eingetragen werden.
po
Die Funktion wurde erfolgreich ausgeführt.
on
l
in
ec
om
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
ERR_TSR_NOT_LOADED (008Bhex)
Bedeutung
Das angegebene Board ist nicht vorhanden, bzw. der
Treiber hierfür ist nicht geladen.
5086A
2-13
InterBus-S
Treibersoftware für C unter DOS
2.4.2.2 Überwachung des SysFail-Registers
GetSysFailRegister
Die Funktion GetSysFailRegister schreibt in die durch sysFailRegPtr referenzierte Variable den Inhalt des SysFail-Registers. Die Bits 0, 4, 8, und 12 des Registers zeigen an, ob das SysFail-Signal des entsprechenden Boards (PC, IBSMaster und COP) aktiviert ist oder nicht. Tritt bei einem MPM-Teilnehmer eine
Funktionsstörung auf (z.B. Watchdog hat ausgelöst), wird das zugehörige Bit im
SysFail-Register aktiviert, d.h auf Eins gesetzt. Dieses Bit bleibt dann bis zur
Beendigung der Störung gesetzt. Die einzelnen Bits des Register sind folgendermaßen den MPM-Teilnehmern zugeordnet:
Bit 0:
Host (PC)
Bit 4:
IBS-Masterboard (MA)
Bit 8:
Coprozessorboard (COP)
Bit 12:
wird nicht verwendet, da nur drei MPM-Teilnehmer vorhanden sind.
Synopsis:
INT16 FAR GetSysFailRegister
(USIGN16 boardNumber,USIGN16 FAR *sysFailRegPtr)
Parameter:
boardNumber
*sysFailRegPtr
positive Quittung:
ERR_OK (0000hex)
Bedeutung
s.
co
m
Aufgabe:
ne
nt
Boardnummer (PC: 1 bis 4, COP: 1)
Zeiger auf eine Variable, in welche der Inhalt des
SysFail-Registers eingetragen wird.
po
Die Funktion wurde erfolgreich ausgeführt.
in
ec
om
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
ERR_TSR_NOT_LOADED (008Bhex)
Bedeutung
Das angegebene Board ist nicht vorhanden, bzw. der
Treiber hierfür ist nicht geladen.
on
l
2.4.2.3 Funktionen zur Ansprache des SRAMs
(nur für IBS PC CB/COP/I-T und IBS PC CB/486RTX/I-T)
COP_WriteStaticRAM
Aufgabe:
Schreibt die angegebene Anzahl von Bytes ab der vorgegebenen Adresse in
das statische RAM (SRAM) des COPs. Die niedrigste mögliche Adresse ist 0.
Synopsis:
INT16 FAR COP_WriteStaticRAM
(USIGN32 address, USIGN16 length, USIGN8 FAR *data)
Parameter:
address
length
*data
positive Quittung:
ERR_OK (0000hex)
Bedeutung
2-14
Startadresse im statischen RAM
Datensatzlänge (Anzahl der zu schreibenden Bytes)
Zeiger auf den Buffer, aus dem die Funktion die zu
schreibenden Daten entnehmen soll.
Die Funktion wurde erfolgreich ausgeführt.
5086A
InterBus-S
Funktionen zur Ansprache des SRAMs
negative Quittung: ERR_AREA_EXCDED (0096hex)
Bedeutung
Der zu lesenden Datensatz ist zu groß. Die Funktion
kann maximal 64 KByte in einem Aufruf lesen.
Abhilfe
Rufen Sie die Funktion zweimal auf, um größere Datenmengen blockweise zu übertragen. Erhöhen Sie beim
zweiten Aufruf die Startadresse um 64 KByte.
Bedeutung
Die obere Bereichsgrenze ist überschritten. Das statische RAM ist 128 KByte groß.
Abhilfe
Beachten Sie, daß die Summe aus Startadresse und
Datensatzlänge die Bereichsgrenze nicht überschreitet.
COP_ReadStaticRAM
Liest die angegebene Anzahl von Bytes ab der vorgegebenen Adresse aus dem
statischen RAM des COP.
Synopsis:
INT16 FAR COP_ReadStaticRAM(USIGN32 address, USIGN16 length, USIGN8 FAR *data)
Parameter:
address
length
*data
positive Quittung:
ERR_OK (0000hex)
Bedeutung
co
m
Aufgabe:
ne
nt
s.
Startadresse im statischen RAM
Datensatzlänge (Anzahl der zu lesenden Bytes)
Zeiger auf den Buffer, in den die Funktion die zu lesenden Daten ablegen soll.
po
Die Funktion wurde erfolgreich ausgeführt.
on
l
in
ec
om
negative Quittung: ERR_AREA_EXCDED (0096hex)
Bedeutung
Der zu schreibende Datensatz ist zu groß. Die Funktion
kann maximal 64 KByte in einem Aufruf lesen.
Abhilfe
Rufen Sie die Funktion zweimal auf, um größere Datenmengen blockweise zu übertragen. Erhöhen Sie beim
zweiten Aufruf die Startadresse um 64 KByte.
Bedeutung
Die obere Bereichsgrenze ist überschritten. Das statische RAM ist 128 KByte groß.
Abhilfe
Beachten Sie, daß die Summe aus Startadresse und
Datensatzlänge die Bereichsgrenze nicht überschreitet.
5086A
2-15
InterBus-S
Treibersoftware für C unter DOS
2.4.2.4 Funktionen zur Kontrolle der Watchdogs
EnableWatchDog()
Aufgabe:
Die Funktion schaltet den Watchdog ein.
Synopsis:
INT16 FAR EnableWatchDog(USIGN16 boardNumber)
Parameter:
boardNumber
Boardnummer (PC: 1 bis 4, COP: 1)
positive Quittung:
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
Nach dem Aufruf der Funktion muß der Watchdog in regelmäßigen Abständen
getriggert werden.
PC:
Triggerabstand kleiner 146 ms, sonst wird im SysFail-Register ein
Bit gesetzt.
COP:
Triggerabstand kleiner 125 ms, sonst wird im SysFail-Register ein
Bit gesetzt, das den Reset des COPs auslöst.
po
TriggerWatchDog()
ne
nt
s.
Bemerkung:
co
m
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
Abhilfe
Geben Sie eine gültige Boardnummer an.
Die Funktion triggert den Watchdog.
Synopsis:
INT16 FAR TriggerWatchDog(USIGN16 boardNumber)
Parameter:
boardNumber
in
ec
positive Quittung:
om
Aufgabe:
ERR_OK (0000hex)
Bedeutung
Boardnummer (PC: 1 bis 4, COP: 1)
Die Funktion wurde erfolgreich ausgeführt.
on
l
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
Abhilfe
Geben Sie eine gültige Boardnummer an.
Bemerkung:
2-16
Dieser Aufruf muß in regelmäßigen Abständen wiederholt werden, damit der
Watchdog keinen Reset auslöst.
PC:
Triggerabstand kleiner 146 ms, sonst wird im SysFail-Register ein
Bit gesetzt.
COP:
Triggerabstand kleiner 125 ms, sonst wird im SysFail-Register ein
Bit gesetzt, das den Reset des COPs auslöst.
5086A
InterBus-S
Funktionen zur Kontrolle der Watchdogs
GetWatchDogState()
Aufgabe:
Mit dieser Funktion können Sie aus ihrem Anwenderprogramm heraus abfragen, ob der entsprechende Watchdog einen Reset ausgelöst hat. Falls das Anwenderprogramm auf dem Host läuft, fragt die Funktion automatisch nach dem
Watchdog des Hosts. Falls das Anwenderprogramm auf dem COP läuft, fragt
die Funktion automatisch nach dem Watchdog des COPs.
Synopsis:
INT16 FAR GetWatchDogState(USIGN16 boardNumber)
Parameter:
boardNumber
positive Quittung:
-
Boardnummer (PC: 1 bis 4, COP: 1)
m
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Es wurde eine ungültige Boardnummer angegeben.
Abhilfe:
Geben Sie eine gültige Boardnummer an.
Rückgabewert:
Watchdogstatus des Coprozessorboards:
1 Der Watchdog hat den letzten Warmstart (Software-Reset) des COPs ausgelöst.
0 Der Watchdog hat den letzten Warmstart (Software-Reset) des COPs nicht
ausgelöst.
Watchdogstatus des Hosts:
1 Der Watchdog des Hosts hat einen Reset ausgelöst.
0 Der Watchdog des Hosts hat keinen Reset ausgelöst.
om
po
ne
nt
s.
co
Bedeutung:
in
ec
Die Rückgabewerte sind nach einem Hardware-Reset von Anschaltbaugruppe
oder Host nicht mehr verfügbar.
ClearWatchDog()
Synopsis:
Die Funktion setzt den Watchdog-Status zurück.
on
l
Aufgabe:
INT16 FAR ClearWatchDog (USIGN16 boardNumber)
Parameter:
boardNumber
Boardnummer (PC: 1 bis 4, COP: 1)
positive Quittung:
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
Abhilfe
Geben Sie eine gültige Boardnummer an.
5086A
2-17
InterBus-S
Treibersoftware für C unter DOS
2.4.3 IBS-Diagnosefunktion
GetIBSDiagnostic();
Aufgabe:
Mit der Funktion GetIBSDiagnostic() können Sie den Betriebszustand des IBSMasterboards und somit den Betriebszustand des IBS-Systems auswerten.
Synopsis:
INT16 GetIBSDiagnostic(USIGN16 boardNumber,T_IBS_DIAG FAR *diagInfo);
Parameter:
boardNumber
*diagInfo
T_IBS_DIAG
Struktur mit Diagnosedetails
Strukturelemente:
state
Boardnummer (PC: 1 bis 4, COP: 1)
Zeiger auf Struktur mit Fehlerdetails
po
ne
nt
s.
co
m
Die Bits des Strukturelements state beschreiben den
Zustand des Busses. Durch Maskieren (UND-Verknüpfung) des Strukturelements state mit folgenden Konstanten können Sie den Zustand des IBS-Systems
auswerten:
DIAG_IBS_READY
IBS ist bereit
DIAG_IBS_RUN
IBS ist gestartet und läuft
DIAG_IBS_SYS_FAIL Im SysFail-Register wurde (z.B. von
einem Watchdog) ein Bit gesetzt
DIAG_IBS_BSA
ein Bussegment ist abgeschaltet
DIAG_IBS_ERROR
IBS-Masterboard hat Fehler gemeldet
Die Bits des Strukturelements errType beschreiben aufgetretene Fehler genauer. Durch Maskieren (UND-Verknüpfung) des Strukturelements errType mit folgenden
Konstanten können Sie die Fehlerart auswerten:
DIAG_CNTRL_ERR
Controller-Fehler (Anschaltbaugruppe)
DIAG_RMT_BUS_ERR Fernbusfehler (Remotebus Error)
(z.B. Fernbuskabel defekt)
DIAG_LCL_BUS_ERR Peripheriebusfehler (Local Bus Error)
(z.B. Peripheriebuskabel defekt)
DIAG_MDL_ERR
IBS-Teilnehmerfehler (Module Error)
z.B. unterbrochene Peripherie-Versorgungsspannung, Ausgang überlastet)
on
l
in
ec
om
errType
Werten Sie den Inhalt des Strukturelements diagPara in
Abhängigkeit seines Wertes und des Strukturelements
errType verschieden aus:
- Wenn das Strukturelement errType einen Fernbus-, Peripheriebus- oder
IBS-Teilnehmerfehler anzeigt und der Wert des Strukturelements diagPara
im Bereich 0 bis 255 liegt, dann gibt diagPara die Nummer des fehlerbehafteten Bussegments an. Geben Sie das Bussegment dezimal aus.
- Wenn das Strukturelement errType einen Fernbus-, Peripheriebus- oder
IBS-Teilnehmerfehler anzeigt und der Wert des Strukturelements diagPara
über 255 liegt, dann gibt diagPara eine Fehlernummer (E01, E02, E04, E05
oder E06) an. Siehe Beschreibung der Meldung Bus_Error_Information_Indication (80C4hex) im Handbuch zur Anschaltbaugruppe (IBS PC CB UM).
- Wenn das Strukturelement errType einen Controller-Fehler anzeigt, dann
gibt das Strukturelement diagPara eine Controller-Fehlernummer an (siehe
Liste der Controller-Fehlernummern). Geben Sie die Controller-Fehlernummer hexadezimal aus.
diagPara
2-18
5086A
InterBus-S
IBS-Diagnosefunktion
positive Quittung:
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
negative Quittung: ERR_INVLD_BOARD_NUM (0080hex)
Bedeutung
Ungültige Boardnummer
negative Quittung: ERR_NODE_NOT_READY (0087hex)
Bedeutung
IBS-Masterboard nicht ansprechbar (z.B. bootet gerade)
Abhilfe
Warten Sie einen Moment und versuchen Sie es erneut.
m
negative Quittung: MPM NOT AVAILABLE (0099hex)
Bedeutung
Das MPM ist nicht ansprechbar.
Abhilfe
Installieren Sie den Treiber neu.
s.
nt
Aufrufsyntax:
INT16 GetIBSDiagnostic(
USIGN16 BoardNumber,
co
Werten Sie die Diagnoseinformationen nur aus, wenn die Funktion erfolgreich
ausgeführt wurde (positive Quittung ERR_OK (0000hex)). Bei Rückgabe einer
negativen Quittung sind keine gültigen Diagnoseinformationen vorhanden!
*/
*/
po
ne
/*Boardnummer der
Anschaltbaugruppe
T_IBS_DIAG FAR *diagInfo); /*Zeiger auf Struktur
mit Fehlerdetails
Programmausschnitt zum Auswerten des Parameters state durch Maskieren
(UND-Verknüpfung) mit vorgegebenen Konstanten:
on
l
Beispiel:
in
ec
om
Aufbau der Struktur T_IBS_DIAG FAR:
typedef struct {
USIGN16 state;
/* Zustand des Busses: Ready, Run usw. */
USIGN16 errType; /* Fehlerart: Fernbus-, PeripheriebusTeilnehmer- oder Controllerfehler
*/
USIGN16 diagPara;/* ergänzende Informationen, siehe Parameterbeschreibung auf der Vorseite */
} T_IBS_DIAG;
void Diagnose (void)
{
if (GetIBSDiagnostic(boardNumber, &Errinfo) == ERR_OK);
if ((Errinfo.state & DIAG_IBS_READY) == DIAG_IBS_READY)
{
printf(“IBS Ready“)
}
if ((Errinfo.state & DIAG_IBS_RUN) == DIAG_IBS_RUN)
{
printf(“IBS Run“)
}
else
{
printf(“IBS Stop!“)
}
}
5086A
2-19
on
l
in
ec
om
po
ne
nt
s.
co
m
InterBus-S
Treibersoftware für C unter DOS
2-20
5086A
Kapitel
3
Treibersoftware für Pascal unter DOS
Dieses Kapitel informiert Sie über
po
ne
nt
s.
Struktur der Treibersoftware auf dem Host (PC)
Struktur der Treibersoftware auf dem COP . .
Units . . . . . . . . . . . . . . . . .
Funktionen für DOS . . . . . . . . . . .
Funktionen des Device-Driver-Interfaces . . .
Funktionen zur Verwaltung von Datenkanälen .
Funktionen des Mailbox-Interfaces. . . . . .
Funktionen des Data-Interfaces . . . . . . .
Funktionen zur Kontrolle der Hardware . . . .
Abfrage der DIP-Schalter . . . . . . . . .
Überwachung des SysFail-Registers . . . . .
Funktionen zur Ansprache des SRAMs . . . .
Funktionen zur Kontrolle der Watchdogs . . .
IBS-Diagnosefunktion. . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3-3
3-3
3-4
3-5
3-6
3-6
3-8
3-10
3-13
3-13
3-14
3-14
3-16
3-18
on
l
in
ec
3.1
3.2
3.3
3.4
3.4.1
3.4.1.1
3.4.1.2
3.4.1.3
3.4.2
3.4.2.1
3.4.2.2
3.4.2.3
3.4.2.4
3.4.3
co
Treibersoftware für Pascal unter DOS. . . . . . . . . . . . . . . . . . . 3-3
om
3
m
- Die Realisierung und die Funktionen des Device-Driver-Interfaces
- Die benötigten Units
- Device-Driver für DOS
5086A
3-1
3-2
5086A
s.
nt
ne
po
om
in
ec
on
l
co
m
InterBus-S
Treibersoftware für Pascal unter DOS
3 Treibersoftware für Pascal unter DOS
3.1 Struktur der Treibersoftware auf dem Host (PC)
Das Device-Driver-Interface linken Sie in Form einer Unit zu Ihrem Anwenderprogramm hinzu. Die Device-Driver für DOS sind als TSR-Programme realisiert
(ähnlich wie die Treiber von Netzwerkkarten).
PC
m
Anwenderprogramm
TSR-Programm
TSR-Programm
MPM
MPM
MPM
TSR-Programm
MA
COP
MA
COP
MA
5086A301
Realisierung der Treibersoftware unter Microsoft-DOS für Pascal
om
Bild 3-1:
COP
ne
MA
MPM
po
COP
nt
s.
TSR-Programm
co
Unit
in
ec
Für jedes Anschaltbaugruppe muß ein Device-Driver, also ein TSR-Programm,
installiert werden! Die Installation der Device-Driver ist im Kapitel 4 Inbetriebnahme des Handbuchs IBS PC CB UM beschrieben.
on
l
3.2 Struktur der Treibersoftware auf dem COP
Anwenderprogramm
COP
Unit
TSR-Programm
MPM
IBS
Host
Masterboard
5086A302
Bild 3-2:
5086A
Realisierung der Treibersoftware für Pascal auf dem COP
3-3
InterBus-S
Treibersoftware für Pascal unter DOS
Die Programmierung des Coprozessorboards (COP) unterscheidet sich nicht
von der Programmierung auf dem Host unter DOS. Ab Treibersoftware Version
0.9 ist auch das Linken mit speziellen Units für das Coprozessorboard nicht
mehr erforderlich, weil zum Betrieb auf dem Host und dem COP die gleichen
Units verwendet werden. Ein auf dem Host unter DOS erstelltes Programm
kann somit auch auf dem Coprozessorboard ablaufen.
Nutzen Sie zum Betrieb auf dem COP anstelle von IBSPCCB.EXE das TSRProgamm IBSCOP.EXE als Device-Driver.
3.3 Units
nt
s.
co
m
Um dem Anwender die Arbeit mit dem Treibersoftware zu erleichtern, sind ab
Version 0.9 alle benötigten DDI- und Hilfsfunktionen in der Unit DDI_DRV.PAS
zusammengefaßt, die sowohl auf dem Host (PC) als auch dem Coprozessorboard Verwendung findet. Es ist damit möglich, ein Anwenderprogramm wahlweise auf dem Host (PC) oder Coprozessorboard zu betreiben, ohne daß ein
erneutes Übersetzen oder Linken notwendig ist. Voraussetzung hierfür ist, daß
auf beiden Systemen die entsprechenden Treiber (TSR-Programme) geladen
sind.
po
ne
Lediglich die Funktionen zum Lesen und Schreiben des SRAM des Coprozessorboards sind auf dem Host (PC) nicht verfügbar und werden dort mit der Fehlermeldung ERR_INVLD_CMD (008Chex) quittiert.
on
l
in
ec
om
In der Unit DDI_VAR.PAS sind die Konstanten und globalen Variablen definiert.
Diese Unit ermöglicht auch die Nutzung der im Kapitel 7 beschriebenen Makros.
Sie sind in dieser Datei für Pascal als Funktionen deklariert.
3-4
5086A
InterBus-S
Funktionen für DOS
3.4 Funktionen für DOS
Tabelle 3-1:
Übersicht über die DDI-Funktionen für DOS
Aufgabe
Seite
DDI_DevOpenNode
Öffnet einen Datenkanal zu einem Node
3-6
DDI_DevCloseNode
Schließt einen Datenkanal zu einem Node
3-7
DDI_MXI_SndMessage
Schreibt eine Meldung in das MPM
3-8
DDI_MXI_RcvMessage
Liest eine Meldung aus dem MPM
3-9
DDI_DTI_ReadData
Liest Daten aus dem MPM
3-10
DDI_DTI_WriteData
Schreibt Daten in das MPM
3-11
co
Übersicht über die Funktionen zur Kontrolle der Hardware
s.
Tabelle 3-2:
m
Funktion
Aufgabe
COP_WriteStaticRAM
Schreibt eine Anzahl von Bytes in das SRAM des COPs
COP_ReadStaticRAM
Liest eine Anzahl von Bytes aus dem SRAM des COPs
3-15
GetDIPSwitch
Liest die Stellungen des DIP-Schalters zum Einstellen der
Boot-Konfiguration aus
3-13
GetSysFailRegister
Liest den Inhalt des SysFail-Registers aus
3-14
EnableWatchDog
Schaltet einen Watchdog ein
3-16
TriggerWatchDog
Triggert einen Watchdog
3-16
GetWatchDogState
Liest den Status eines Watchdogs aus
3-17
ClearWatchDog
Setzt den Status eines Watchdogs zurück
3-17
Wertet den Betriebszustand des IBS-Masterboards aus
3-18
5086A
ne
po
om
in
ec
on
l
GetIBSDiagnostic
nt
Funktion
Seite
3-14
3-5
InterBus-S
Treibersoftware für Pascal unter DOS
3.4.1 Funktionen des Device-Driver-Interfaces
3.4.1.1 Funktionen zur Verwaltung von Datenkanälen
DDI_DevOpenNode
Aufgabe:
Mit dieser Funktion wird ein Datenkanal zu einem Node geöffnet.
Synopsis:
DDI_DevOpenNode
(DevName:StringPtr ;perm:INT16;NodeHd:INT16Ptr):INT16;
Parameter:
DevName
co
m
Der Device-Name ist der Name des anzusprechenden
Gerätes. Er legt die Anschaltbaugruppe (Boardnumber)
und den MPM-Teilnehmer auf dieser Anschaltbaugruppe fest (siehe Kapitel 5.2.3.1 Verwaltung von Datenkanälen im Handbuch IBS PC CB UM).
Die Access-Permission gibt an, mit welchen Zugriffsrechten auf den Datenkanal zugegriffen werden darf.
Es kann zwischen lesend, schreibend und lesend/
schreibend unterschieden werden.
Der Node-Handle ist ein vom DDI vergebener Wert,
über den in allen weiteren Funktionen eine Zuordnung
zum geöffneten Node gefunden wird.
s.
perm
in
ec
Ursache
om
negative Quittung: DDI-Error-Code
ne
Node-Handle
po
positive Quittung:
nt
NodeHd
Spezifiziert den beim Öffnen des Datenkanals zu einem
Node gefundenen Fehler näher (siehe Kapitel 7 Fehlermeldungen des DDI).
- unbekannter Device-Name
- Node nicht vorhanden
on
l
Aufrufsyntax:
DDI_DevOpenNode(
DevName:StringPtr;
perm:INT16;
NodeHd:INT16Ptr)
:INT16;
Konstanten für die Zugriffsrechte:
DDI_READ
DDI_WRITE
DDI_RW
{ IN: device name
}
{ IN: access permission
}
{ OUT: address of node-handle }
nur lesender Zugriff
nur schreibender Zugriff
lesender und schreibender Zugriff
In der aktuellen Version (V 0.9) der Treibersoftware darf zwischen zwei MPMTeilnehmern (z.B. Host und COP) der gleiche Datenkanal (gleicher DeviceName) nur einmal geöffnet sein. Wenn zwischen zwei MPM-Teilnehmern der
gleiche Datenkanal gleichzeitig mehrmals geöffnet ist, überschreiben die Daten
eines Datenkanals die Daten eines anderen, da sie denselben MPM-Speicherberich verwenden. Es erfolgt in diesem Fall keine Fehlermeldung.
3-6
5086A
InterBus-S
Funktionen zur Verwaltung von Datenkanälen
Beispiele:
Falsch:
var ret : USIGN16;
var s : string;
s:= ’IBB1N1_D’ +#0;
ret:= DDI_DevOpenNode(addr(s[1]),...., @nodeHd1)
s:= ’IBB1N1_D’ +#0;
ret:= DDI_DevOpenNode(addr(s[1]),...., @nodeHd2)
Richtig:
var ret : USIGN16;
var s : string;
co
m
s:= ’IBB1N1_D’ +#0;
ret:= DDI_DevOpenNode(addr(s[1]),...., @nodeHd1)
s.
s:= ’IBB1N2_D’ +#0;
ret:= DDI_DevOpenNode(addr(s[1]),...., @nodeHd2)
nt
(siehe Kapitel 5.2.3.1 Verwaltung von Datenkanälen im Handbuch
IBS PC CB UM)
po
ne
Der Term (addr(s[1]) ist notwendig, da der Device-Driver in der Programmiersprache „C“ geschrieben wurde. Es ergibt sich so eine C-kompatible Übergabestruktur.
om
DDI_DevCloseNode
Diese Funktion schließt einen zuvor mit DDI_DevOpenNode() geöffneten Datenkanal zu einem Node. Nach dem erfolgreichem Aufruf dieser Funktion ist das
Gerät nicht mehr mit dem aufrufenden Programm "verbunden", und der NodeHandle ist nicht mehr gültig.
in
ec
Aufgabe:
DDI_DevCloseNode(NodeHd : INT16):INT16;
on
l
Synopsis:
Parameter:
*nodeHd
positive Quittung:
ERR_OK (0000hex)
Bedeutung
negative Quittung: DDI-Error-Code
Ursache
5086A
Der Node-Handle spezifiziert den zu schließenden
Node.
Die Funktion wurde erfolgreich ausgeführt.
Spezifiziert den beim Aufruf der Funktion aufgetretenen
Fehler näher (siehe Kapitel 7 Fehlermeldungen des
DDI).
- unbekannter Device-Name
- ungültiger Node-Handle
- Node nicht vorhanden
3-7
InterBus-S
Treibersoftware für Pascal unter DOS
3.4.1.2 Funktionen des Mailbox-Interfaces
DDI_MXI_SndMessage
Aufgabe:
Diese Funktion stellt eine Meldung oder ein Kommando in eine Mailbox.
Synopsis:
DDI_MXI_SndMessage
(NodeHd : INT16;mxiAcc : P_DDI_MXI_ACCESS): INT16;
Parameter:
NodeHd
Der Node-Handle ist die logische Nummer (Handle) eines zuvor an der DDI-Schnittstelle geöffneten Kanals.
Zeiger auf eine Datenstruktur vom Typ
T_DDI_MXI_ACCESS (siehe unten).
mxiAcc
msgType
s.
msgLength
om
ERR_OK (0000hex)
Bedeutung
po
DDIUserID
ne
nt
msgBlk
positive Quittung:
in
ec
negative Quittung: DDI-Error-Code
on
l
Ursache
Die Firmware 3.x unterstützt das Strukturelement Message-Type noch nicht. Setzen Sie es auf 0.
Das Strukturelement Message-Length enthält die Gesamtlänge der zu sendenden Meldung in Bytes. Die maximal zulässige Gesamtlänge (siehe unten) ist 1024.
Das Strukturelement msgBlk ist ein Zeiger auf einen
Message-Block, der die zu sendende Meldung in Mailbox-Syntax enthält. Das Handbuch IBS PC CB UM beschreibt den Aufbau der Mailbox-Syntax.
Das Strukturelement DDIUserID wird von Firmware 3.x
noch nicht unterstützt. Setzen Sie DDIUserID auf 0.
co
Strukturelemente:
m
T_DDI_MXI_ACCESS: Datenstruktur mit den zum Senden eines Kommandos notwendigen Elementen.
Die Funktion wurde erfolgreich ausgeführt.
Gibt an, warum die Funktion nicht ausgeführt werden
konnte (siehe Kapitel 7 Fehlermeldungen des DDI)
ungültiger Node-Handle;
keine passende Mailbox gefunden;
die Meldung überschreitet die maximal nutzbare Mailbox-Länge (1020 Bytes = 1024 Bytes minus 2 Bytes
Kommando-Code minus 2 Bytes Parameter-Zähler).
Aufrufsyntax:
DDI_MXI_SndMessage(
NodeHd : INT16;
mxiAcc : P_DDI_MXI_ACCESS)
{ IN : node-handle
{ IN : pointer to mailboxaccess-structure
*}
*}
:INT16;
Aufbau der Struktur T_DDI_MXI_ACCESS:
P_DDI_MXI_ACCESS = ^T_DDI_MXI_ACCESS;
T_DDI_MXI_ACCESS = record
msgType
: INT16;
{
msgLength : USIGN16; {
DDIUserID : USIGN16; {
MsgBlk
: USIGN8Ptr;{
end;
3-8
Message-Type
Message-Length
DDI_User_ID
Pointer to array for the Message
}
}
}
}
5086A
InterBus-S
Funktionen des Mailbox-Interfaces
DDI_MXI_RcvMessage
Diese Funktion holt eine Meldung aus einer Mailbox. Sie wird z.B. verwendet,
um die auf ein IBS-Kommando erfolgende Rückmeldung abzuholen. Es wird
nicht auf die Rückmeldung gewartet! Ist keine Rückmeldung vorhanden, erfolgt
eine entsprechende Meldung im Parameter DDI-Error-Code.
Voraussetzung:
In die Komponente msgLength der Struktur T_DDI_MXI_ACCESS muß die
Länge des zur Verfügung gestellten Empfangspuffers eingetragen werden. Der
Treiber prüft die Größe des Empfangspuffers vor dem Einlesen und generiert
die Fehlermeldung ERR_MSG_TO_Long (009Ahex), falls die empfangene
Nachricht gößer ist als der zur Verfügung stehende Speicherplatz.
Synopsis:
DDI_MXI_RcvMessage(NodeHd:INT16;mxiAcc:P_DDI_MXI_ACCESS):INT16;
Parameter:
NodeHd
m
Aufgabe:
co
Der Node-Handle ist die logische Nummer eines zuvor
an der DDI-Schnittstelle geöffneten Kanals.
Zeiger auf eine Datenstruktur vom Typ
T_DDI_MXI_ACCESS (siehe unten).
s.
mxiAcc
msgType
Die Firmware 3.x unterstützt das Strukturelement Message-Type noch nicht. Setzen Sie es auf 0.
Geben Sie vor dem Aufruf der Funktion
DDI_MXI_RcvMessage mit dem Strukturelement
Message-Length die Größe des zur Verfügung stehenden Eingangspuffers in Bytes an. Nach dem erfolgreichen Empfang einer Meldung enthält das Strukturelement Message-Length die tatsächliche Länge der
Meldung in Bytes.
Das Strukturelement *msgBlk ist ein Zeiger auf einen
Message-Block, der die empfangene Meldung in Mailbox-Syntax enthält. Das Handbuch IBS PC CB UM beschreibt den Aufbau der Mailbox-Syntax.
Das Strukturelement DDIUserID wird von Firmware 3.x
noch nicht unterstützt. Setzen Sie DDIUserID auf 0.
ne
Strukturelemente:
nt
T_DDI_MXI_ACCESS: Datenstruktur mit den zum Empfangen einer Meldung notwendigen Elementen.
in
ec
msgBlk
om
po
msgLength
on
l
DDIUserID
positive Quittung:
ERR_OK (0000hex)
Bedeutung
negative Quittung: DDI-Error-Code
Ursache
5086A
Die Funktion wurde erfolgreich ausgeführt.
Gibt an, warum die Funktion nicht ausgeführt werden
konnte (siehe Kapitel 7 Fehlermeldungen des DDI).
- ungültiger Node-Handle;
- zu kleiner Empfangspuffer;
- keine Meldung vorhanden
3-9
InterBus-S
Treibersoftware für Pascal unter DOS
Aufrufsyntax:
DDI_MXI_RcvMessage(
NodeHd:INT16;
mxiAcc:P_DDI_MXI_ACCESS)
{ IN : node-handle
}
{ OUT: pointer to
mailboxaccess-structure }
:INT16;
Message-Type
Message-Length
DDI_User_ID
Pointer to array for the Message
}
}
}
}
3.4.1.3 Funktionen des Data-Interfaces
s.
DDI_DTI_ReadData
co
m
Aufbau der Struktur P_DDI_MXI_ACCESS:
P_DDI_MXI_ACCESS = ^T_DDI_MXI_ACCESS;
T_DDI_MXI_ACCESS = record
msgType
: INT16;
{
msgLength : USIGN16; {
DDIUserID : USIGN16; {
MsgBlk
: USIGN8Ptr;{
end;
Diese Funktion liest Daten über das Data-Interface aus dem MPM. Sie stellt diese Daten im Motorola-Format in den angegebenen Buffer.
Bemerkung:
Verwenden Sie vor der weiteren Verarbeitung der Daten die Makros zur Konvertierung von Eingangsdaten. Diese Makros konvertieren die Eingangsdaten vom
Motorola- ins Intel-Format (siehe Kapitel 6).
Synopsis:
DDI_DTI_ReadData(NodeHd:INT16;dtiAcc:P_DDI_DTI_ACCESS):INT16;
Parameter:
NodeHd
dtiAcc
in
ec
om
po
ne
nt
Aufgabe:
Der Node-Handle spezifiziert den Node.
Zeiger auf eine Datenstruktur vom Typ
T_DDI_MXI_ACCESS (siehe unten).
on
l
T_DDI_DTI_ACCESS: Datenstruktur mit den zum Lesen von Prozeßdaten notwendigen Elementen.
Strukturelemente:
length
address
dataCons
data
Das Strukturelement Length enthält die Anzahl der zu
lesenden Daten in Bytes. Die maximale Anzahl ist 1024
Bytes.
Das Strukturelement Address gibt die DTI-Adresse eines Prozeßdatenwortes im MPM in Byte an (siehe Kapitel Aufteilung des MPMs im Handbuch IBS PC CB UM).
Das Strukturelement Data-Consistency gibt an, welche
Datenkonsistenz beim Zugriff verwendet werden soll.
Dieses Strukturelement ist ein Zeiger auf den Buffer, in
dem die gelesenen Daten abgelegt werden sollen.
Konstanten für die möglichen Datenkonsistenzbereiche:
DTI_DATA_BYTE
: Byte-Datenkonsistenz (1 Byte)
DTI_DATA_WORD
: Word-Datenkonsistenz (2 Byte)
DTI_DATA_LWORD : Longword-Datenkonsistenz (4 Byte)
DTI_DATA_48BIT
: 48 Bit-Datenkonsistenz (6 Byte)
Die Datenkonsistenzbereiche DTI_DATA_LWORD und DTI_DATA_48BIT sind
für Zugriffe auf das IBS-Masterboard erst ab Firmware 3.72 möglich.
3-10
5086A
InterBus-S
Funktionen des Data-Interfaces
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
Spezifiziert den beim Lesen der Prozessdaten aufgetretenen Fehler näher (siehe Kapitel 7 Fehlermeldungen
des DDI).
- ungültiger Node-Handle
- ungültige Parameter
- Grenzen des Datenbereichs werden überschritten
number of bytes to read/write
}
address to read/write process data}
data consistency of the access
}
pointer to data to read/write
}
po
ne
Aufbau der Struktur T_DDI_DTI_ACCESS:
P_DDI_DTI_ACCESS = ^T_DDI_DTI_ACCESS;
T_DDI_DTI_ACCESS = record
length
: USIGN16; {
address : USIGN16; {
dataCons : INT16;
{
Data
: USIGN8Ptr;{
end;
{ IN : node-handle
}
{ IN : dti access structure }
m
Aufrufsyntax:
DDI_DTI_ReadData(
NodeHd:INT16;
dtiAcc:P_DDI_DTI_ACCESS)
:INT16;
co
Ursache
s.
negative Quittung: DDI-Error-Code
nt
positive Quittung:
DDI_DTI_WriteData
Diese Funktion schreibt Daten über das Data-Interface in das MPM. Das Funktion benötigt hierzu Daten im Motorola-Format.
Synopsis:
DDI_DTI_WriteData(NodeHd:INT16;dtiAcc:P_DDI_DTI_ACCESS):INT16;
Verwenden Sie vor dem Schreiben von Daten in das MPM die Makros zur Konvertierung von Ausgabedaten. Diese Makros konvertieren die Ausgabedaten
vom Intel- ins Motorola-Format (siehe Kapitel 6).
on
l
Bemerkung:
in
ec
om
Aufgabe:
Parameter:
NodeHd
dtiAcc
Der Node-Handle spezifiziert den Node.
Zeiger auf eine Datenstruktur vom Typ
T_DDI_MXI_ACCESS (siehe unten).
T_DDI_DTI_ACCESS: Datenstruktur mit den zum Schreiben von Prozeßdaten notwendigen Elementen.
Strukturelemente:
length
address
dataCons
data
5086A
Das Strukturelement Length enthält die Anzahl der zu
schreibenden Daten in Bytes. Die maximale Anzahl ist
1024 Bytes (1 KByte).
Das Strukturelement Address gibt die DTI-Adresse eines Prozeßdatenwortes im MPM in Byte an (siehe Kapitel Aufteilung des MPMs im Handbuch IBS PC CB UM).
Das Strukturelement Data-Consistency gibt an, welche
Datenkonsistenz beim Zugriff verwendet werden soll.
Dieses Strukturelement ist ein Zeiger auf den Buffer,
aus dem die zu schreibenden Daten entnommen werden sollen.
3-11
InterBus-S
Treibersoftware für Pascal unter DOS
Konstanten für die möglichen Datenkonsistenzbereiche:
DTI_DATA_BYTE
: Byte-Datenkonsistenz (1 Byte)
DTI_DATA_WORD
: Word-Datenkonsistenz (2 Byte)
DTI_DATA_LWORD : Longword-Datenkonsistenz (4 Byte)
DTI_DATA_48BIT
: 48 Bit-Datenkonsistenz (6 Byte)
Die Datenkonsistenzbereiche DTI_DATA_LWORD und DTI_DATA_48BIT sind
für Zugriffe auf das IBS-Masterboard erst ab Verwendung von Firmware 3.72
möglich.
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
Spezifiziert einen beim Schreiben von Prozessdaten
aufgetretenen Fehler näher (siehe Kapitel 7 Fehlermeldungen des DDI).
- ungültiger Node-Handle
- ungültige Parameter
- Grenzen des Datenbereichs werden überschritten
m
negative Quittung: DDI-Error-Code
{ IN : node-handle
}
{ IN : dti access structure }
po
ne
Aufrufsyntax:
DDI_DTI_WriteData(
NodeHd:INT16;
dtiAcc:P_DDI_DTI_ACCESS)
:INT16;
s.
co
Ursache
nt
positive Quittung:
number of bytes to read/write
}
address to read/write process data}
data consistency of the access
}
pointer to data to read/write
}
on
l
in
ec
om
Aufbau der Struktur T_DDI_DTI_ACCESS:
P_DDI_DTI_ACCESS = ^T_DDI_DTI_ACCESS;
T_DDI_DTI_ACCESS = record
length
: USIGN16; {
address : USIGN16; {
dataCons : INT16;
{
Data
: USIGN8Ptr;{
end;
3-12
5086A
InterBus-S
Funktionen zur Kontrolle der Hardware
3.4.2 Funktionen zur Kontrolle der Hardware
3.4.2.1 Abfrage der DIP-Schalter
GetDIPSwitch
Die Funktion GetDIPSwitch schreibt in die durch dataPtr referenzierte Variable
die Schalterstellungen des DIP-Schalters zum Einstellen der Boot-Konfiguration. Der Anwender kann somit zur Programmlaufzeit die Boot-Konfiguration ermitteln, um z.B. festzustellen, welches Board (PC oder COP) den InterBus-S
steuert. Die acht Schalter werden auf die Bits 0 bis 7 des Worts abgebildet, d.h.
der DIP-Schalter 1 ist dem Bit 0, der DIP-Schalter 2 dem Bit 1, usw. des Wortes
zugeordnet. Befindet sich ein Schalter in der Schaltstellung ON, ist das jeweilige
Bit gleich Null. Die nicht verwendeten Bits 8 bis 15 des Worts sind in jedem Fall
auf Eins gesetzt.
Synopsis:
GetDIPSwitch(boardNumber : USIGN16; dataPtr : USIGN16Ptr):INT16;
Parameter:
boardNumber
dataPtr
positive Quittung:
ERR_OK (0000hex)
Bedeutung
co
m
Aufgabe:
ne
nt
s.
Boardnummer (PC: 1 bis 4, COP: 1)
Zeiger auf die Variable, in welche die ermittelten Schalterstellungen eingetragen werden).
po
Die Funktion wurde erfolgreich ausgeführt.
on
l
in
ec
om
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
ERR_TSR_NOT_LOADED (008Bhex)
Bedeutung
Das angegebene Board ist nicht vorhanden, bzw. der
Treiber hierfür ist nicht geladen.
5086A
3-13
InterBus-S
Treibersoftware für Pascal unter DOS
3.4.2.2 Überwachung des SysFail-Registers
GetSysFailRegister
Die Funktion GetSysFailRegister schreibt in die durch sysFailRegPtr referenzierte Variable den Inhalt des SysFail-Registers. Die Bits 0, 4, 8, und 12 des Registers zeigen an, ob das SysFail-Signal des entsprechenden Boards (PC, IBSMaster und COP) aktiviert ist oder nicht. Tritt bei einem MPM-Teilnehmer eine
Funktionsstörung auf (z.B. Watchdog hat ausgelöst), wird das zugehörige Bit im
SysFail-Register aktiviert, d.h auf Eins gesetzt. Dieses Bit bleibt dann bis zur
Beendigung der Störung gesetzt. Die einzelnen Bits des Register sind folgendermaßen den MPM-Teilnehmern zugeordnet:
Bit 0:
Host (PC)
Bit 4:
IBS-Masterboard (MA)
Bit 8:
Coprozessorboard (COP)
Bit 12:
wird nicht verwendet, da nur drei MPM-Teilnehmer vorhanden sind.
Synopsis:
GetSysFailRegister
(boardNumber : USIGN16; SysFailReg : USIGN16Ptr):INT16;
Parameter:
boardNumber
sysFailRegPtr
positive Quittung:
ERR_OK (0000hex)
Bedeutung
s.
co
m
Aufgabe:
ne
nt
Boardnummer (PC: 1 bis 4, COP: 1)
Zeiger auf eine Variable, in welche der Inhalt des
SysFail-Registers eingetragen wird.
po
Die Funktion wurde erfolgreich ausgeführt.
in
ec
om
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
ERR_TSR_NOT_LOADED (008Bhex)
Bedeutung
Das angegebene Board ist nicht vorhanden, bzw. der
Treiber hierfür ist nicht geladen.)
on
l
3.4.2.3 Funktionen zur Ansprache des SRAMs
(nur für IBS PC CB/COP/I-T und IBS PC CB/486RTX/I-T)
COP_WriteStaticRAM
Aufgabe:
Schreibt die angegebene Anzahl von Bytes ab der vorgegebenen Adresse in
das statische RAM (SRAM) des COPs. Die niedrigste mögliche Adresse ist 0.
Synopsis:
COP_WriteStaticRam
(address:USIGN32;length:USIGN16;Data:Pointer):INT16;
Parameter:
address
length
Data
positive Quittung:
ERR_OK (0000hex)
Bedeutung
3-14
Startadresse im statischen RAM
Datensatzlänge (Anzahl der zu schreibenden Bytes)
Zeiger auf den Buffer, aus aus dem die Funktion die zu
schreibenden Daten entnehmen soll
Die Funktion wurde erfolgreich ausgeführt.
5086A
InterBus-S
Funktionen zur Ansprache des SRAMs
negative Quittung: ERR_AREA_EXCDED (0096hex)
Bedeutung
Der zu lesenden Datensatz ist zu groß. Die Funktion
kann maximal 64 KByte in einem Aufruf lesen.
Abhilfe
Rufen Sie die Funktion zweimal auf, um größere Datenmengen blockweise zu übertragen. Erhöhen Sie beim
zweiten Aufruf die Startadresse um 64 KByte.
Bedeutung
Die obere Bereichsgrenze ist überschritten. Das statische RAM ist 128 KByte groß.
Abhilfe
Beachten Sie, daß die Summe aus Startadresse und
Datensatzlänge die Bereichsgrenze nicht überschreitet.
COP_ReadStaticRAM
Liest die angegebene Anzahl von Bytes ab der vorgegebenen Adresse aus dem
statischen RAM des COP.
Synopsis:
COP_ReadStaticRam
(address:USIGN32;length:USIGN16;Data:Pointer):INT16;
Parameter:
address
length
Data
positive Quittung:
ERR_OK (0000hex)
Bedeutung
co
m
Aufgabe:
ne
nt
s.
Startadresse im statischen RAM
Datensatzlänge (Anzahl der zu lesenden Bytes)
Dieses Strukturelement ist ein Zeiger auf den Buffer, in
den die Funktion die zu lesenden Daten ablegen soll.
po
Die Funktion wurde erfolgreich ausgeführt.
on
l
in
ec
om
negative Quittung: ERR_AREA_EXCDED (0096hex)
Bedeutung
Der zu schreibende Datensatz ist zu groß. Die Funktion
kann maximal 64 KByte in einem Aufruf lesen.
Abhilfe
Rufen Sie die Funktion zweimal auf, um größere Datenmengen blockweise zu übertragen. Erhöhen Sie beim
zweiten Aufruf die Startadresse um 64 KByte.
Bedeutung
Die obere Bereichsgrenze ist überschritten. Das statische RAM ist 128 KByte groß.
Abhilfe
Beachten Sie, daß die Summe aus Startadresse und
Datensatzlänge die Bereichsgrenze nicht überschreitet.
5086A
3-15
InterBus-S
Treibersoftware für Pascal unter DOS
3.4.2.4 Funktionen zur Kontrolle der Watchdogs
EnableWatchDog()
Aufgabe:
Die Funktion schaltet den Watchdog ein.
Synopsis:
EnableWatchDog(boardNumber : USIGN16):INT16;
Parameter:
boardNumber
Boardnummer (PC: 1 bis 4, COP: 1)
positive Quittung:
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
Nach dem Aufruf der Funktion muß der Watchdog in regelmäßigen Abständen
getriggert werden.
PC:
Triggerabstand kleiner 146 ms, sonst wird im SysFail-Register ein
Bit gesetzt.
COP:
Triggerabstand kleiner 125 ms, sonst wird im SysFail-Register ein
Bit gesetzt, das den Reset des COPs auslöst.
po
TriggerWatchDog()
ne
nt
s.
Bemerkung:
co
m
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
Abhilfe
Geben Sie eine gültige Boardnummer an.
Die Funktion triggert den Watchdog.
Synopsis:
INT16 FAR TriggerWatchDog(USIGN16 boardNumber)
Parameter:
boardNumber
in
ec
positive Quittung:
om
Aufgabe:
ERR_OK (0000hex)
Bedeutung
Boardnummer (PC: 1 bis 4, COP: 1)
Die Funktion wurde erfolgreich ausgeführt.
on
l
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
Abhilfe
Geben Sie eine gültige Boardnummer an.
Bemerkung:
3-16
Dieser Aufruf muß in regelmäßigen Abständen wiederholt werden.
PC:
Triggerabstand kleiner 146 ms, sonst wird im SysFail-Register ein
Bit gesetzt.
COP:
Triggerabstand kleiner 125 ms, sonst wird im SysFail-Register ein
Bit gesetzt, das den Reset des COPs auslöst.
5086A
InterBus-S
Funktionen zur Kontrolle der Watchdogs
GetWatchDogState()
Aufgabe:
Mit dieser Funktion können Sie aus ihrem Anwenderprogramm heraus abfragen, ob der entsprechende Watchdog ausgelöst hat. Falls das Anwenderprogramm auf dem Host läuft, fragt die Funktion automatisch nach dem Watchdog
des Hosts. Falls das Anwenderprogramm auf dem COP läuft, fragt die Funktion
automatisch nach dem Watchdog des COPs.
Synopsis:
GetWatchDogState(boardNumber : USIGN16):INT16;
Parameter:
boardNumber
positive Quittung:
-
Boardnummer (PC: 1 bis 4, COP: 1)
Watchdogstatus des Coprozessorboards:
1 Der Watchdog hat den letzten Warmstart (Software-Reset) des COPs ausgelöst.
0 Der Watchdog hat den letzten Warmstart (Software-Reset) des COPs nicht
ausgelöst.
Watchdogstatus des Hosts:
1 Der Watchdog des Hosts hat ausgelöst.
0 Der Watchdog des Hosts hat nicht ausgelöst.
po
ne
nt
s.
Rückgabewert:
co
m
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
Abhilfe
Geben Sie eine gültige Boardnummer an.
om
Die Rückgabewerte sind nach einem Hardware-Reset von Anschaltbaugruppe
oder Host nicht mehr verfügbar.
in
ec
ClearWatchDog()
Aufgabe:
Die Funktion setzt den Watchdog-Status zurück.
ClearWatchDog(boardNumber : USIGN16):INT16;
on
l
Synopsis:
Parameter:
boardNumber
Boardnummer (PC: 1 bis 4, COP: 1)
positive Quittung:
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
negative Quittung: ERR_INVALID_BOARD_NUM (0080hex)
Bedeutung
Es wurde eine ungültige Boardnummer angegeben.
Abhilfe
Geben Sie eine gültige Boardnummer an.
5086A
3-17
InterBus-S
Treibersoftware für Pascal unter DOS
3.4.3 IBS-Diagnosefunktion
GetIBSDiagnostic();
Aufgabe:
Mit der Funktion GetIBSDiagnostic() können Sie den Betriebszustand des IBSMasterboards und somit den Betriebszustand des IBS-Systems auswerten.
Synopsis:
GetIBSDiagnostic(boardNumber : USIGN16; DiagInfo : P_IBS_DIAG):INT16;
Parameter:
boardNumber
DiagInfo
P_IBS_DIAG
Struktur mit Diagnosedetails
Strukturelemente:
state
Boardnummer (PC: 1 bis 4, COP: 1)
Zeiger auf Struktur mit Fehlerdetails
po
ne
nt
s.
co
m
Die Bits des Strukturelements state beschreiben den
Zustand des Busses. Durch Maskieren (UND-Verknüpfung) des Strukturelements state mit folgenden Konstanten können Sie den Zustand des IBS-Systems
auswerten:
DIAG_IBS_READY
IBS ist bereit
DIAG_IBS_RUN
IBS ist gestartet und läuft
DIAG_IBS_SYS_FAIL Im SysFail-Register wurde (z.B. von
einem Watchdog) ein Bit gesetzt
DIAG_IBS_BSA
ein Bussegment ist abgeschaltet
DIAG_IBS_ERROR
IBS-Masterboard hat Fehler gemeldet
Die Bits des Strukturelements errType beschreiben aufgetretene Fehler genauer. Durch Maskieren (UND-Verknüpfung) des Strukturelements errType mit folgenden
Konstanten können Sie die Fehlerart auswerten:
DIAG_CNTRL_ERR
Controller-Fehler (Anschaltbaugruppe)
DIAG_RMT_BUS_ERR Fernbusfehler (Remotebus Error)
(z.B. Fernbuskabel defekt)
DIAG_LCL_BUS_ERR Peripheriebusfehler (Local Bus Error)
(z.B. Peripheriebuskabel defekt)
DIAG_MDL_ERR
IBS-Teilnehmerfehler (Module Error)
z.B. unterbrochene Peripherie-Versorgungsspannung, Ausgang überlastet)
on
l
in
ec
om
errType
Werten Sie den Inhalt des Strukturelements diagPara in
Abhängigkeit seines Wertes und des Strukturelements
errType verschieden aus:
- Wenn das Strukturelement errType einen Fernbus-, Peripheriebus- oder
IBS-Teilnehmerfehler anzeigt und der Wert des Strukturelements diagPara
im Bereich 0 bis 255 liegt, dann gibt diagPara die Nummer des fehlerbehafteten Bussegments an. Geben Sie das Bussegment dezimal aus.
- Wenn das Strukturelement errType einen Fernbus-, Peripheriebus- oder
IBS-Teilnehmerfehler anzeigt und der Wert des Strukturelements diagPara
über 255 liegt, dann gibt diagPara eine Fehlernummer (E01, E02, E04, E05
oder E06) an. Siehe Beschreibung der Meldung Bus_Error_Information_Indication (80C4hex) im Handbuch zur Anschaltbaugruppe (IBS PC CB UM).
- Wenn das Strukturelement errType einen Controller-Fehler anzeigt, dann
gibt das Strukturelement diagPara eine Controller-Fehlernummer an (siehe
Liste der Controller-Fehlernummern). Geben Sie die Controller-Fehlernummer hexadezimal aus.
diagPara
3-18
5086A
InterBus-S
IBS-Diagnosefunktion
positive Quittung:
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
negative Quittung: ERR_INVLD_BOARD_NUM (0080hex)
Bedeutung
Ungültige Boardnummer
negative Quittung: ERR_NODE_NOT_READY (0087hex)
Bedeutung
IBS-Masterboard nicht ansprechbar (z.B. bootet gerade)
Abhilfe
Warten Sie einen Moment und versuchen Sie es erneut
m
negative Quittung: MPM NOT AVAILABLE (0099hex)
Bedeutung
Das MPM ist nicht ansprechbar
Abhilfe
Installieren Sie den Treiber neu
co
Werten Sie die Diagnoseinformationen nur aus, wenn die Funktion erfolgreich
ausgeführt wurde (positive Quittung ERR_OK (0000hex)). Bei Rückgabe einer
negativen Quittung sind keine gültigen Diagnoseinformationen vorhanden!
po
ne
nt
s.
Aufrufsyntax:
GetIBSDiagnostic(
boardNumber : USIGN16; { Boardnummer der Anschaltbaugruppe }
DiagInfo : P_IBS_DIAG) { Zeiger auf Struktur
mit Fehlerdetails
}
:INT16;
Beispiel:
on
l
in
ec
om
Aufbau der Struktur P_IBS_DIAG:
P_IBS_DIAG = ^T_IBS_DIAG;
T_IBS_DIAG = record
state
: USIGN16; {Zustand des Busses z.B. Ready, Run }
errType : USIGN16; {Art des Fehlers, z.B. Fernbus-,
Lokalbus oder Peripheriefehler
}
diagPara : USIGN16; {ergänzende Informationen, siehe Parameterbeschreibung auf der Vorseite }
end;
Programmausschnitt zum Auswerten des Parameters state durch Maskieren
(UND-Verknüpfung) mit vorgegebenen Konstanten:
Procedure Diagnose;
Result
: INT16;
IBS_Info : T_IBS_DIAG
begin
Result:=GetIBSDiagnostic(boardNumber, @IBS_Info);
if Result=ERR_OK then begin
if (IBS_Info.state AND DIAG_IBS_READY) = DIAG_IBS_READY
then writeln(’IBS Ready’);
if (IBS_Info.state AND DIAG_IBS_RUN) = DIAG_IBS_RUN
then writeln(’IBS Run’);
else
writeln(’IBS Stop!’)
end
end;
5086A
3-19
on
l
in
ec
om
po
ne
nt
s.
co
m
InterBus-S
Treibersoftware für Pascal unter DOS
3-20
5086A
Kapitel
4
Ergänzungen zur Treibersoftware für Windows®
Dieses Kapitel informiert Sie über
ne
nt
s.
Struktur der Treibersoftware auf dem Host (PC) .
Notification-Mode . . . . . . . . . . . . .
Library unter Windows . . . . . . . . . . .
Include-Dateien für „C“ . . . . . . . . . . .
Units für Pascal . . . . . . . . . . . . . .
Initialisierungs-Datei unter Windows . . . . . .
Funktionen für Windows . . . . . . . . . . .
Funktionen des Device-Driver-Interfaces . . . .
Funktionen zur Verwaltung des Notification-Modes
Funktionen zur Kontrolle der Hardware . . . . .
Nutzung der Treibersoftware mit C++ . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-3
4-3
4-5
4-5
4-6
4-6
4-7
4-8
4-9
4-13
4-14
on
l
in
ec
om
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.7.1
4.7.2
4.7.3
4.8
co
Ergänzungen zur Treibersoftware für Windows . . . . . . . . . . . . . . . 4-3
po
4
m
- Die Realisierung von Device-Driver-Interface und Device-Driver für Windows.
- Die zu verwendenden Funktionen
- Die benötigten Include-Dateien und Libraries.
5086A
4-1
4-2
5086A
s.
nt
ne
po
om
in
ec
on
l
co
m
InterBus-S
Ergänzungen zur Treibersoftware für Windows
4 Ergänzungen zur Treibersoftware für Windows
4.1 Struktur der Treibersoftware auf dem Host (PC)
Die Treibersoftware für Microsoft Windows® ist als Dynamic-Link-Library (DLL)
ausgeführt (IBSPCCB.DLL). Diese DLL beinhaltet das Device-Driver-Interface
sowie Device-Driver für vier Anschaltbaugruppen.
PC
COP
MA
COP
MA
MPM
COP
MA
5086A401
Realisierung der IBS-Treibersoftware unter Microsoft-Windows
om
Bild 4-1:
MA
MPM
po
COP
MPM
ne
MPM
nt
s.
Dynamic-Link-Library
co
m
Anwenderprogramm
in
ec
In der Datei IBSPCCB.DLL sind die Device-Driver für vier Anschaltbaugruppen
integriert, die in der Datei IBSPCCB.INI eingetragen und parametriert werden
müssen.
on
l
4.2 Notification-Mode
Der Betrieb im Notification-Mode ermöglicht es, das Anwenderprogramm über
das Eintreffen einer Nachricht (z.B. Meldung des IBS-Masterboards) im MPM
durch eine Windows-Message zu informieren. Das zyklische Aufrufen der Funktion DDI_MXI_RcvMessage() aus dem Anwenderprogramm ist dann unter
Microsoft Windows® nicht erforderlich.
5086A
4-3
InterBus-S
Ergänzungen zur Treibersoftware für Windows
PC
Anwenderprogramm
3
DDI
(Device-Driver-Interface)
s.
co
MPM
(Multi-Port-Memory)
5
m
4
2
nt
1
5086A402
Notification-Mode unter Microsoft Windows
om
Bild 4-2:
po
Anschaltbaugruppe
ne
MA/COP
on
l
in
ec
Funktionsweise des Notification-Modes unter Microsoft Windows®:
1 Das IBS-Masterboard (MA) oder das Coprozessorboard (COP) stellen eine
Nachricht ins Multi-Port-Memory (MPM).
2 Das Eintreffen der Nachricht im MPM verursacht einen Interrupt, der vom
Mailbox-Interface des DDI ausgewertet wird.
3 Wenn der Notification-Mode zwischen IBS-Masterboard bzw. Coprozessorboard und Anwenderprogramm aktiviert ist, erzeugt das DDI unter Nutzung
der Windows-Procedur PostMessage eine Windows-Message, die das Anwenderprogramm über das Eintreffen einer Nachricht im MPM informiert.
4 Daraufhin wird im Anwenderprogramm die Funktion DDI_MXI_RcvMessage
aufgerufen.
5 Die Nachricht wird dem Anwenderprogramm in einem Buffer zur Verfügung
gestellt.
Die Windows-Message zeigt nur an, daß eine Nachricht im MPM vorliegt. Lesen
Sie die Nachricht dann mit Hilfe der Funktion DDI_MXI_RcvMessage aus.
Um eine schnelle Reaktion zu erhalten, ist es sinnvoll, dem Parameter
firstParam den Wert des Node-Handles zuzuweisen
(Beispiel: firstParam = nodeHd). Beim Empfang der Windows-Message kann
dann dieser Parameter, der wParam entspricht, zum Auslesen der Nachricht
verwendet werden. Bei der Vergabe des Wertes für die Windows-Message
(msg) empfiehlt es sich die Windows-Konstante WM_USER zu nutzen
(Beispiel: msg = WM_USER + 255).
4-4
5086A
InterBus-S
Library unter Windows
Mit der Funktion DDI_SetMsgNotification wird der Notification-Mode zwischen
einem Windows-Fenster und einem MPM-Teilnehmer aktiviert. Die Funktion
DDI_ClrMsgNotification deaktiviert den Notification-Mode wieder. Sie können
den Notification-Mode für jeden MPM-Teilnehmer getrennt aktivieren bzw. deaktivieren.
Der Notification-Mode wird, wenn der dem Node-Handle zugeordnete Datenkanal geschlossen d.h. der betreffende Node-Handle wieder freigeben wird, automatisch beendet.
4.3 Library unter Windows
s.
co
m
Zum Betrieb der Anschaltbaugruppen unter Microsoft Windows® wird nur eine
Dynamic-Link-Library (DLL) benötigt. In dieser im Protected Mode erstellten
DLL (IBSPCCB.DLL) sind die gleichen DDI-Funktionen implementiert, welche
auch die Treibersoftware für DOS zur Verfügung stellt. Zusätzlich wurden zwei
Funktionen zur Meldung des Eintreffens von Nachrichten im Mailbox-Interface
integriert (Notification-Mode).
ne
nt
Kopieren Sie die Datei IBSPCCB.DLL, wie unter Windows üblich, in das Verzeichnis, in dem sich Ihr Anwenderprogramm befindet, oder in das WindowsStammverzeichnis.
po
4.4 Include-Dateien für „C“
in
ec
om
Ab Treibersoftware-Version 0.9 müssen Sie nur noch die Include-Datei
IBS_WIN.H einbinden. Aus dieser Include-Datei werden alle weiter benötigten
Include-Dateien (STDTYPES.H, COMPILER.H, IBS_CM.H, DDI_USR.H,
DDI_ERR.H, DDI_LIB.H, PC_UTIL.H und DDI_MACR.H) aufgerufen. Sie können aber auch, wie bei älteren Versionen der Treibersoftware, die benötigten Include-Dateien einzeln aufrufen.
on
l
Bei Verwendung der Include-Datei IBS_WIN.H ist es außerdem nicht notwendig, von Hand Compiler-Switches im Programm bzw. in der Kommandozeile des
Compilers einzutragen. Die notwendige Konstanten-Deklaration
(IBS_WIN_DRV) erfolgt dann innerhalb von IBS_WIN.H.
Die Include-Datei DDI_MACR.H ermöglicht die Nutzung der im Kapitel 7 beschriebenen Makrofunktionen. Die Makros sind in dieser Datei definiert.
Falls Sie IBS_WIN.H nicht verwenden möchten und die benötigten Include-Dateien einzeln im Programm aufrufen, müssen Sie vor dem Einbinden der Include
Dateien die Anweisung #define IBS_WIN_DRV einfügen. Dies kann entweder
im Programmtext oder als Compileroption erfolgen.
Beispiele:
#define IBS_WIN_DRV
#include "stdtypes.h"
#include "ddi_usr.h"
...
oder:
cl /C /Ox /DIBS_WIN_DRV ...
5086A
4-5
InterBus-S
Ergänzungen zur Treibersoftware für Windows
4.5 Units für Pascal
Unter Windows müssen Sie, außer den auch schon unter DOS benötigten Units
DDI_DRV.PAS und DDI_VAR.PAS, zusätzlich nur die Unit TPPCCB.PAS einbinden. Diese Unit stellt das Pascal-Interface zur Library IBSPCCB.DLL dar. In
der Unit TPPCCB.PAS sind auch die Funktionen zur Kontrolle des NotificationModes deklariert.
4.6 Initialisierungs-Datei unter Windows
nt
ne
po
[BOARD1]
BoardInUseFlag=TRUE
IOAddress=120
MPMAddress=D000
IRQ=10
s.
[GENERAL]
EnableInitErrorMessage=TRUE
co
m
Im Windows-Stammverzeichnis muß sich außerdem die Datei IBSPCCB.INI befinden, die zur Parametrierung dient. Tragen Sie die zur Initialisierung der Anschaltbaugruppen erforderlichen Parameter (IO-Adresse, MPM-Adresse und
Interruptnummer) in die Datei IBSPCCB.INI ein. Das folgende Beispiel zeigt die
Einträge für den Betrieb einer Anschaltbaugruppe.
in
ec
om
[BOARD2]
BoardInUseFlag=FALSE
IOAddress=120
MPMAddress=D100
IRQ=11
on
l
[BOARD3]
BoardInUseFlag=FALSE
IOAddress=120
MPMAddress=D200
IRQ=12
[BOARD4]
BoardInUseFlag=FALSE
IOAddress=120
MPMAddress=D300
IRQ=15
Bild 4-3:
Beispieleinträge in der Datei IBSPCCB.INI
Setzen Sie z.B. für Board 1 den Eintrag BoardInUseFlag auf TRUE, damit die
Anschaltbaugruppe Nr. 1 während der Initialisierungsphase erkannt wird. Andernfalls wird, selbst wenn die Anschaltbaugruppe Nr. 1 vorhanden ist, diese als
nicht vorhanden gekennzeichnet und nicht initialisiert.
Wenn Sie einen ungültigen Wert angegeben, wird die Initialisierung der DLL
nicht abgebrochen.
4-6
5086A
InterBus-S
Funktionen für Windows
- Falls der Eintrag EnableInitErrorMessage=TRUE lautet, wird beim Laden der
DLL (Start des Anwenderprogramms) eine Fehlermeldung in einer WindowsMessage-Box ausgegeben.
- Falls der Eintrag EnableInitErrorMessage=FALSE lautet, wird beim Laden
der DLL (Start des Anwenderprogramms) keine Fehlermeldung ausgegeben. In diesem Fall können Sie nur anhand der Fehlermeldungen der Treiber- bzw. DDI-Funktionen (z.B. beim ersten Öffnen eines Datenkanals
erkennen), daß ein Fehler während der Initialisierung aufgetreten ist.
Die Parameter entsprechen bis auf die Einschränkung, daß die Werte für
MPMAddress nur im Bereich von A0000hex bis FF000hex liegen dürfen, denen
der Treibersoftware für DOS.
co
Tabelle 4-1:
m
4.7 Funktionen für Windows
Übersicht über die DDI-Funktionen für Microsoft Windows
Aufgabe
DDI_DevOpenNode
Öffnet einen Datenkanal zu einem Node
4-8
DDI_DevCloseNode
Schließt einen Datenkanal zu einem Node
4-8
DDI_MXI_SndMessage
Schreibt eine Meldung in das MPM
4-8
DDI_MXI_RcvMessage
Liest eine Meldung aus dem MPM
4-8
DDI_DTI_ReadData
Liest Daten aus dem MPM
4-8
DDI_DTI_WriteData
Schreibt Daten in das MPM
4-8
DDI_SetMsgNotification
Aktiviert den Notification-Mode für Windows
4-9
DDI_ClrMsgNotification
Deaktiviert den Notification-Mode für Windows
4-11
in
ec
om
po
ne
nt
s.
Funktion
Funktion
on
l
Tabelle 4-2:
Seite
Übersicht über die Funktionen zur Kontrolle der Hardware
Aufgabe
Seite
COP_WriteStaticRAM
Schreibt eine Anzahl von Bytes in das SRAM des COPs
*
COP_ReadStaticRAM
Liest eine Anzahl von Bytes aus dem SRAM des COPs
*
GetDIPSwitch
Liest die Stellungen des DIP-Schalters zum Einstellen der
Boot-Konfiguration aus
4-13
GetSysFailRegister
Liest den Inhalt des SysFail-Registers aus
4-13
EnableWatchDog
Der Einsatz des Watchdogs zur Überwachung des Host ist
unter Windows nicht sinnvoll. Es ist nicht gewährleistet, daß
Ihr Programm innerhalb der vorgeschriebenen Zeit ein Triggern des Watchdogs leisten kann. Ein Beispiel: Sie verschieben mit der Maus den Rahmen eines Fensters. Solange Sie
den Rahmen des Fensters mit der Maus festhalten, läuft Ihr
Programm nicht weiter!
—
Wertet den Betriebszustand des IBS-Masterboards aus
4-13
TriggerWatchDog
GetWatchDogState
ClearWatchDog
GetIBSDiagnostic
5086A
—
—
—
4-7
InterBus-S
Ergänzungen zur Treibersoftware für Windows
* Dies sind Funktionen für das Coprozessorboard. Sie sind ausschließlich für
die Verwendung unter den DOS-kompatiblen Betriebsystemen (RTXDOS,
TDOS) des Coprozessorboards definiert und im Kapitel 2 (C) und Kapitel 3
(Pascal) beschrieben.
4.7.1 Funktionen des Device-Driver-Interfaces
m
Die DDI-Funktionen für den Betrieb unter Microsoft Windows® unterscheiden
sich nicht grundsätzlich von denen für den Betrieb unter DOS. Sie haben die
gleiche Funktionalität und verwenden die gleichen Parameter. Abweichungen
ergeben sich dadurch, daß es unter Windows möglich ist, sich vom Eintreffen
einer Nachricht im MPM per Windows-Message unterrichten zu lassen. Hierzu
steht der Notification-Mode zur Verfügung.
co
Deklaration der für Microsoft Windows® zur Verfügung stehenden DDIFunktionen
po
DDI_DevOpenNode(CHAR FAR *devName, INT16 perm, INT16 FAR *nodeHd)
DDI_DevCloseNode(INT16 nodeHd)
DDI_DTI_WriteData(INT16 nodeHd, T_DDI_DTI_ACCESS FAR *dtiAcc)
DDI_DTI_ReadData(INT16 nodeHd, T_DDI_DTI_ACCESS FAR *dtiAcc)
DDI_MXI_SndMessage(INT16 nodeHd, T_DDI_MXI_ACCESS FAR *mxiAcc)
DDI_MXI_RcvMessage(INT16 nodeHd, T_DDI_MXI_ACCESS FAR *mxiAcc)
om
INT16 FAR PASCAL
INT16 FAR PASCAL
INT16 FAR PASCAL
INT16 FAR PASCAL
INT16 FAR PASCAL
INT16 FAR PASCAL
ne
nt
s.
Im Unterschied zur Treibersoftware für DOS sind die DDI-Funktionen der Treibersoftware für Microsoft Windows® in der DLL IBSPCCB.DLL als FAR PASCAL deklariert, um eine Nutzung dieser DLL mit verschiedenen
Programmiersprachen zu ermöglichen. Die Funktionen für Microsoft Windows®
sind folgendermaßen deklariert:
on
l
in
ec
Diese Funktionen sind, bis auf die Deklaration, mit der Treibersoftware für DOS
identisch und werden im Kapitel 2 (C) und Kapitel 3 (Pascal) beschrieben. Die
zu übergebenden Parameter entsprechen den dortigen Beschreibungen.
4-8
5086A
InterBus-S
Funktionen zur Verwaltung des Notification-Modes
4.7.2 Funktionen zur Verwaltung des Notification-Modes
Zusätzlich sind zwei Funktionen zum Aktivieren und Deaktivieren des Notification-Mode vorhanden.
DDI_SetMsgNotification
Die Funktion aktiviert den Notification-Mode für einen Datenkanal.
Voraussetzung:
Der der Funktion ebenfalls übergebene Node-Handle (nodeHd) muß zu einem
geöffneten Datenkanal des Mailbox-Interfaces gehören, andernfalls erfolgt eine
allgemeine DDI-Fehlermeldung.
Synopsis (C):
INT16 DDI_SetMsgNotification
(INT16 nodeHd, T_IBS_WIN_NOTIFY FAR *notifyInfoPtr)
m
Aufgabe:
nodeHd
Der Node-Handle ist die logische Nummer eines zuvor
an der DDI-Schnittstelle geöffneten Kanals.
Zeiger auf eine Datenstruktur vom Typ
T_IBS_WIN_NOTIFY (siehe unten).
s.
Parameter:
co
Synopsis (Pascal): DDI_SetMsgNotification
(NodeHd : INT16;notifyInfoPtr: P_IBS_WIN_NOTIFY):INT16;
ne
nt
*notifyInfoPtr
Datenstruktur mit den zum Aktivieren der Notification-Funktion nowendigen Elementen
Strukturelemente:
hWnd
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
on
l
in
ec
om
firstParam
secondParam
Der Windows-Handle gibt an, welches Windows-Fenster die Windows-Message erhalten soll.
Vom Anwender für die Nachricht zu vergebender Message-Code.
erster optionaler Parameter
zweiter optionaler Parameter
msg
positive Quittung:
po
T_IBS_WIN_NOTIFY:
negative Quittung: allgemeiner DDI-Error-Code
Ursache
Siehe Beschreibung der Fehlermeldungen des DDI
negative Quittung: EROR_NODE_IN_USE (00B0hex)
Ursache
Sie haben versucht, den Notification-Mode für einen
Node zu aktivieren, für den der Notification-Mode bereits eingeschaltet war.
5086A
4-9
InterBus-S
Ergänzungen zur Treibersoftware für Windows
DDI_SetMsgNotification in der Programmiersprache „C“
Aufrufsyntax:
INT16 DDI_SetMsgNotification(
INT16 nodeHd,
/* IN: node-handle*/
T_IBS_WIN_NOTIFY FAR *notifyInfoPtr); /* IN: pointer to
WIN-notifystructure */
m
UINT msg;
WPARAM firstParam;
LPARAM secondParam;
} T_IBS_WIN_NOTIFY;
/* Handle des Zielfensters
der Nachricht
/* Message Code der Nachricht
/* Erster Parameter (wParam)
/* Zweiter Parameter (lParam)
*/
*/
*/
*/
co
Aufbau der Struktur T_IBS_WIN_NOTIFY:
typedef struct {
HWND hWnd;
po
ne
nt
s.
Zuordnung der Windows-Prozedurkomponenten zu den Komponenten der Struktur:
WndProc(
HWND hWnd;
/* HWND hWnd
*/
WORD Message;
/* UINT msg
*/
WORD wParam;
/* WPARAM firstParam
*/
LONG lParam;)
/* LPARA MsecondParam */
DDI_SetMsgNotification in der Programmiersprache Pascal
in
ec
om
Aufrufsyntax:
DDI_SetMsgNotification(
NodeHd : INT16;
notifyInfoPtr : P_IBS_WIN_NOTIFY)
{ IN: node-handle
{ IN: pointer to
WIN-notifystructure
}
}
on
l
:INT16;
Aufbau der Struktur T_IBS_WIN_NOTIFY:
type P_IBS_WIN_NOTIFY = ^T_IBS_WIN_NOTIFY;
T_IBS_WIN_NOTIFY = record
H_Wnd
: HWND;
msg
: USIGN16;
firstParam
: USIGN16;
secondParam
: USIGN32;
end;
Zuordnung der Windows-Prozedurkomponenten zu den Komponenten der Struktur:
WndProc(
HWND hWnd;
{ HWND hWnd
}
WORD Message;
{ UINT msg
}
WORD wParam;
{ WPARAM firstParam
}
LONG lParam;)
{ LPARA MsecondParam }
4-10
5086A
InterBus-S
Funktionen zur Verwaltung des Notification-Modes
DDI_ClrMsgNotification
Aufgabe:
Die Funktion deaktiviert den Notification-Mode für einen Datenkanal.
Synopsis (C):
INT16 DDI_ClrMsgNotification
(INT16 nodeHd, T_IBS_WIN_NOTIFY FAR *notifyInfoPtr)
Synopsis (Pascal): DDI_ClrMsgNotification
(NodeHd : INT16;notifyInfoPtr: P_IBS_WIN_NOTIFY):INT16;
Parameter:
nodeHd
Der Node-Handle ist die logische Nummer eines zuvor
an der DDI-Schnittstelle geöffneten Kanals.
Zeiger auf eine Datenstruktur vom Typ
T_IBS_WIN_NOTIFY (siehe unten).
m
*notifyInfoPtr
hWnd
Geben Sie zur Kontrolle mit dem Windows-Handle das
Windows-Fenster an, das Sie beim Aktivieren des Notification-Modes für diesen Datenkanal verwendet haben.
Vom Anwender für die Nachricht zu vergebender Message-Code.
erster optionaler Parameter
zweiter optionaler Parameter
s.
Strukturelemente:
co
T_IBS_WIN_NOTIFY: Datenstruktur mit den zum Deaktivieren der Notification-Funktion nowendigen
Elementen.
nt
msg
po
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
om
positive Quittung:
ne
firstParam
secondParam
in
ec
negative Quittung: allgemeiner DDI-Error-Code
Ursache
Siehe Beschreibung der Fehlermeldungen des DDI.
negative Quittung: ERR_INVLD_NODE_HD (0085hex)
Ursache
Sie haben einen falschen Node-Handle angegeben.
on
l
negative Quittung: ERR_INVLD_HWND (00D1hex)
Ursache
Sie haben einen ungültigen Windows-Handle angegeben.
Abhilfe
Verwenden Sie beim Deaktivieren des Notification-Modes die gleichen Parameter (nodeHd, hWnd ), die auch
beim Aktivieren des Notification-Modes verwendet wurden.
Bemerkung
5086A
Bei Angabe eines falschen Node- oder Windows-Handles wird der NotificationMode nicht deaktiviert. Die Parameter msg, firstParam und secondParam werden nicht überprüft.
4-11
InterBus-S
Ergänzungen zur Treibersoftware für Windows
DDI_ClrMsgNotification in der Programmiersprache „C“
Aufrufsyntax:
INT16 DDI_ClrMsgNotification(
INT16 nodeHd,
/* IN: node-handle*/
T_IBS_WIN_NOTIFY FAR *notifyInfoPtr); /* IN: pointer to
WIN-notifystructure */
Aufbau der Struktur T_IBS_WIN_NOTIFY:
typedef struct {
HWND hWnd;
*/
*/
*/
*/
co
m
/* Handle des Zielfensters
der Nachricht
UINT msg;
/* Message Code der Nachricht
WPARAM firstParam; /* Erster Parameter (wParam)
LPARAM secondParam; /* Zweiter Parameter (lParam)
} T_IBS_WIN_NOTIFY;
po
ne
nt
s.
Zuordnung der Windows-Prozedurkomponenten zu den Komponenten der Struktur:
WndProc(
HWND hWnd;
/* HWND hWnd
*/
WORD Message;
/* UINT msg
*/
WORD wParam;
/* WPARAM firstParam */
LONG lParam;)
/* LPARA MsecondParam */
DDI_ClrMsgNotification in der Programmiersprache Pascal
in
ec
om
Aufrufsyntax:
DDI_ClrMsgNotification(
NodeHd : INT16;
notifyInfoPtr : P_IBS_WIN_NOTIFY)
{ IN: node-handle }
{ IN: pointer to
WIN-notifystructure
}
on
l
:INT16;
Aufbau der Struktur T_IBS_WIN_NOTIFY:
type P_IBS_WIN_NOTIFY = ^T_IBS_WIN_NOTIFY;
T_IBS_WIN_NOTIFY = record
H_Wnd
: HWND;
msg
: USIGN16;
firstParam
: USIGN16;
secondParam
: USIGN32;
end;
Zuordnung der Windows-Prozedurkomponenten zu den Komponenten der Struktur:
WndProc(
HWND hWnd;
{ HWND hWnd
}
WORD Message;
{ UINT msg
}
WORD wParam;
{ WPARAM firstParam
}
LONG lParam;)
{ LPARA MsecondParam }
4-12
5086A
InterBus-S
Funktionen zur Kontrolle der Hardware
4.7.3 Funktionen zur Kontrolle der Hardware
Zur Kontrolle der Hardware stehen, bis auf die Funktionen für die Watchdogs,
ebenfalls die unter DOS beschriebenen Funktionen zur Verfügung.
Deklaration der für Microsoft Windows® zur Verfügung stehenden Kontroll-Funktionen
Im Unterschied zur Treibersoftware für DOS sind die DDI-Funktionen der Treibersoftware für Microsoft Windows® in der DLL IBSPCCB.DLL als
FAR PASCAL deklariert, um eine Nutzung dieser DLL mit verschiedenen Programmiersprachen zu ermöglichen. Die Funktionen für Microsoft Windows®
sind folgendermaßen deklariert:
co
m
INT16 FAR PASCAL GetDIPSwitch(USIGN16 boardNumber, USIGN16 FAR *dataPtr)
INT16 FAR PASCAL GetSysFailRegister(USIGN16 boardNumber, USIGN16 FAR *sysFailRegPtr)
INT16 FAR PASCAL GetIBSDiagnostic(USIGN16 boardNumber, T_IBS_DIAG FAR *infoPtr)
nt
s.
Diese Funktionen sind, bis auf die Deklaration, mit der Treibersoftware für DOS
identisch und werden im Kapitel 2 (C) und Kapitel 3 (Pascal) beschrieben. Die
zu übergebenden Parameter entsprechen den dortigen Beschreibungen.
po
ne
Da unter Windows selbst im fehlerfreien Betrieb nicht sicherzustellen ist, daß in
ausreichenden kurzen Zeitabständen (<146ms) der Watchdog getriggert wird,
wurde auf die Watchdog-Funktionen (EnableWatchDog, TriggerWatchDog,
ClearWatchDog und GetWatchDogState) verzichtet.
in
ec
om
Die Einbindung der oben aufgeführten Funktionen in ein eigenes Programm
kann über die Import-Liste in der DEF-Datei des Anwendungsprogramms oder
die mitgelieferte Import-Library (IBSPCCB.LIB) erfolgen. Die in der DEF-Datei
notwendigen Einträge sind:
on
l
IMPORTS
DDI_DevOpenNode=ibspccb.2
DDI_DevCloseNode=ibspccb.3
DDI_DTI_WriteData=ibspccb.4
DDI_DTI_ReadData=ibspccb.5
DDI_MXI_SndMessage=ibspccb.6
DDI_MXI_RcvMessage=ibspccb.7
DDI_SetMsgNotification=ibspccb.8
DDI_ClrMsgNotification=ibspccb.9
GetIBSDiagnostic=ibspccb.10
GetSysFailRegister=ibspccb.11
GetDIPSwitch=ibspccb.12
5086A
4-13
InterBus-S
Ergänzungen zur Treibersoftware für Windows
4.8 Nutzung der Treibersoftware mit C++
Eine Nutzung der Treibersoftware für Windows ist auch mit C++ möglich. Dabei
ist lediglich zu berücksichtigen, daß die Include-Dateien mit extern "C" eingebunden werden. Andernfalls kann die Applikation nicht gelinkt werden.
Bsp.:
on
l
in
ec
om
po
ne
nt
s.
co
m
extern "C" {
#include ibs_win.h"
}
4-14
5086A
Kapitel
5
Ergänzungen zur Treibersoftware für OS/2®
Dieses Kapitel informiert Sie über
ne
nt
s.
Struktur der Treibersoftware auf dem Host (PC)
Notification-Mode unter OS/2 . . . . . . . .
Library und Include-Dateien für OS/2 . . . . .
CONFIG.SYS unter OS/2 . . . . . . . . .
Compileroptionen . . . . . . . . . . . .
Funktionen für OS/2 . . . . . . . . . . .
Funktionen des Device-Driver-Interfaces . . .
Funktionen zur Verwaltung des Blocked-Modes
Funktionen zur Kontrolle der Hardware . . . .
Nutzung der Treibersoftware mit C++ . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5-3
5-3
5-5
5-6
5-7
5-8
5-8
5-10
5-13
5-14
on
l
in
ec
om
5.1
5.2
5.3
5.4
5.5
5.6
5.6.1
5.6.2
5.6.3
5.7
. . . . . . . . . . . . . . . . 5-3
co
Ergänzungen zur Treibersoftware für OS/2
po
5
m
- Die Realisierung von Device-Driver-Interface und Device-Driver für OS/2.
- Die zu verwendenden Funktionen
- Die benötigten Include-Dateien und Libraries.
5086A
5-1
5-2
5086A
s.
nt
ne
po
om
in
ec
on
l
co
m
InterBus-S
Ergänzungen zur Treibersoftware für OS/2
5 Ergänzungen zur Treibersoftware für OS/2
5.1 Struktur der Treibersoftware auf dem Host (PC)
Das Device-Driver-Interface für IBM OS/2® ist als Dynamic-Link-Library (DLL)
ausgeführt (IBSPCCB.DLL). Die Device-Driver sind für OS/2 als OS/2-DeviceDriver realisiert.
PC
Anwenderprogramm
m
Dynamic-Link-Library
OS/2
Device-Driver
OS/2
Device-Driver
MPM
MPM
MPM
OS/2
Device-Driver
MA
COP
MA
COP
MA
5086A501
Realisierung der IBS-Treibersoftware für IBM OS/2
om
Bild 5-1:
COP
ne
MA
MPM
po
COP
nt
s.
OS/2
Device-Driver
co
OS/2 API
OS/2 Kernel
in
ec
Für jedes Anschaltbaugruppe muß ein OS/2-Device-Driver installiert werden!
Dazu ist jeweils ein Eintrag in der Datei CONFIG.SYS Ihres OS/2-Systems erforderlich. Die Installation der Device-Driver ist im Handbuch IBS PC CB UM
(Artikel-Nr. 27 54 74 9) im Kapitel 4 (Einbau und Parametrierung) beschrieben.
on
l
5.2 Notification-Mode unter OS/2
Blocked-Mode
5086A
Als Notification-Mode kann unter OS/2 der Blocked-Mode genutzt werden. Der
Blocked-Mode ermöglicht es, einen Thread des Anwenderprogramms auf das
Eintreffen einer Nachricht (z.B. Meldung des IBS-Masterboards) warten zu lassen. Während der Wartezeit befindet sich der Thread im Zustand Sleep, das
heißt es wird keine Prozessorzeit "verschwendet". Dies bedeutet für einen
Thread, der zyklisch die Funktion DDI_MXI_RcvMessage aufruft, daß er sich
unter Verwendung des Blocked-Mode im Zustand Sleep befindet falls keine
Nachricht im MPM vorhanden ist.
5-3
InterBus-S
Ergänzungen zur Treibersoftware für OS/2
PC
Anwenderprogramm
1
5
Thread (Run)
4
MPM
s.
(Multi-Port-Memory)
co
3
m
Thread (Sleep)
nt
2
5086A502
Blocked-Mode unter OS/2
om
Bild 5-2:
po
Anschaltbaugruppe
ne
MA/COP
on
l
in
ec
Funktionsweise des Blocked-Mode unter OS/2®:
1 Das Anwenderprogramm startet einen Thread, in dem die Funktion
DDI_MXI_RcvMessage aufgerufen wird. Falls im Moment keine Nachricht im
MPM vorliegt schläft der Thread ein und beschäftigt den Prozessor nicht weiter.
2 Das IBS-Masterboard (MA) oder das Coprozessorboard (COP) stellen eine
Nachricht ins Multi-Port-Memory (MPM).
3 Das Eintreffen der Nachricht im MPM verursacht einen Interrupt, der den
schlafenden Thread aufweckt und wieder in den Zustand Run setzt.
4 Der Thread holt mit der Funktion DDI_MXI_RcvMessage die Nachricht aus
dem MPM.
5 Die Funktion DDI_MXI_RcvMessage kehrt mit der Nachricht zurück.
Das Anwenderprogramm startet den Thread nach Übernahme der Nachricht sofort wieder. Der Thread holt so mit der Funktion DDI_MXI_RcvMessage alle vorhandenen Meldungen aus dem MPM ab. Sobald keine weitere Meldung mehr
vorhanden ist fällt der Thread wieder in den Zustand Sleep.
Mit der Funktion DDI_SetMsgNotification (siehe Funktionsbeschreibung) wird
der Blocked-Mode aktiviert. Sie können den Blocked-Mode für jeden MPM-Teilnehmer getrennt aktivieren bzw. deaktivieren.
Falls Sie versuchen, einen Prozeß zu beenden, solange sich ein Thread dieses
Prozesses noch im Zustand Sleep befindet, hängt sich an dieser Stelle Ihr Anwenderprogramm auf. Deaktivieren Sie, um dies zu verhindern, für diesen Node
5-4
5086A
InterBus-S
Library und Include-Dateien für OS/2
zuvor den Blocked-Mode mit der Funktion DDI_ClrMsgNotification. Der Thread
kehrt jetzt ohne eine Nachricht mit der Fehlermeldung ERR_NO_MSG zurück.
Er wird dann sofort neu gestartet. Da dieser Start nicht im Blocked-Mode erfolgt,
schläft der Thread, wenn keine Nachricht im MPM vorliegt, nicht mehr ein!
Damit der Thread nach Deaktivieren des Blocked-Mode nicht andauernd zyklisch nach eingetroffenen Messages pollt, müssen Sie ihn beenden.
5.3 Library und Include-Dateien für OS/2
co
m
Zum Betrieb der Anschaltbaugruppe unter IBM OS/2 wird nur eine DynamicLink-Library (DLL) benötigt. In dieser 32-Bit- DLL (IBSPCCB.DLL) sind die gleichen DDI-Funktionen deklariert, welche auch die Treibersoftware für DOS zur
Verfügung stellt. Zusätzlich wurden zwei Funktionen zur Meldung des Eintreffens von Nachrichten im Mailbox-Interface integriert (DDI_SetMsgNotification,
DDI_ClrMsgNotification).
ne
nt
s.
Sie können die Funktionen der IBSPCCB.DLL über die IMPORTS-Liste der
DEF-Datei oder über die mitgelieferte IMPORT-Library dem Anwenderprogramm zuführen. Die Einträge in die DEF-Datei eines OS/2-Programmes stellen
sich folgendermaßen dar:
on
l
in
ec
om
po
IMPORTS
IBSPCCB.DDI_DevOpenNode
IBSPCCB.DDI_DevCloseNode
IBSPCCB.DDI_DTI_WriteData
IBSPCCB.DDI_DTI_ReadData
IBSPCCB.DDI_MXI_SndMessage
IBSPCCB.DDI_MXI_RcvMessage
IBSPCCB.DDI_SetMsgNotification
IBSPCCB.DDI_ClrMsgNotification
IBSPCCB.GetIBSDiagnostic
IBSPCCB.GetDIPSwitch
IBSPCCB.GetSysFailRegister
Kopieren Sie die DLL IBSPCCB.DLL, wie unter OS/2 üblich, in das Verzeichnis,
in dem sich Ihr Anwenderprogramm befindet, oder in das Verzeichnis OS2\DLL.
Include-Datei
Um eine einfache Handhabung der Include-Dateien zu gewährleisten, ist es bei
Treibersoftware-Version 0.9 nur notwendig, die Include-Datei IBS_OS2.H einzubinden. Aus dieser Include-Datei werden alle weiter benötigten Include-Dateien aufgerufen. Sie können aber auch die benötigten Include-Dateien einzeln
aufrufen.
Bei Verwendung der Include-Datei IBS_OS2.H ist es außerdem nicht notwendig, von Hand Compiler-Switches im Programm bzw. in der Kommandozeile des
Compilers einzutragen. Die notwendige Konstanten-Deklaration
(IBS_OS2_DRV) erfolgt dann innerhalb von IBS_OS2.H.
5086A
5-5
InterBus-S
Ergänzungen zur Treibersoftware für OS/2
Tabelle 5-1:
Library und Include-Dateien
DLL
IBSPCCB.DLL
Include-Datei
IBS_OS2.H
(ruft STDTYPES.H, COMPILER.H, IBS_CM.H, DDI_USR.H, DDI_ERR.H,
DDI_LIB.H, PC_UTIL.H und DDI_MACR.H auf)
Die Include-Datei DDI_MACR.H ermöglicht die Nutzung der im Kapitel 7 beschriebenen Makrofunktionen. Die Makros sind in dieser Datei definiert.
co
m
Falls Sie IBS_OS2.H nicht verwenden möchten und die benötigten Include-Dateien einzeln im Programm aufrufen, müssen Sie vor dem Einbinden der Include
Dateien die Anweisung #define IBS_OS2_DRV einfügen. Dies kann entweder
im Programmtext oder als Compileroption erfolgen.
po
oder
/O+ /DIBS_OS2_DRV ...
om
icc /C+
nt
ne
#define IBS_OS2_DRV
#include "stdtypes.h"
#include "ddi_usr.h"
...
s.
Beispiele:
in
ec
5.4 CONFIG.SYS unter OS/2
Die OS/2-Device-Driver für die Anschaltbaugruppen müssen beim Starten des
Hosts (PC) geladen werden. Tragen Sie dazu für jede Anschaltbaugruppe (maximal vier) einen OS/2-Device-Driver in die Datei CONFIG.SYS ihres Hosts ein.
on
l
Bei mehreren Anschaltbaugruppen (im Beispiel 3) können die Einträge z.B. so
aussehen:
DEVICE=OS2_IBS.DRV
DEVICE=OS2_IBS.DRV BN= 2 IO=120 MPM=D100 IRQ=11
DEVICE=OS2_IBS.DRV BN= 3 IO=120 MPM=D200 IRQ=12
Da im Beispiel für den ersten Treiber keine Parameter angegeben sind, werden
hier automatisch folgende Standardwerte verwendet:
DEVICE=OS2_IBS.DRV BN= 1 IO=120 MPM=D000 IRQ=15
Die verwendeten Parameterwerte werden beim Laden des Treibers angezeigt.
5-6
5086A
InterBus-S
Compileroptionen
Die einzelnen Parameter haben dabei folgende Bedeutung:
on
l
in
ec
om
po
ne
nt
s.
co
m
OS2_IBS.DRV: Dies ist der Name des eigentlichen Treibers. Geben Sie den
kompletten Pfad an, falls sich der Treiber nicht im
OS/2-Wurzelverzeichnis befindet.
BN=1:
Die Board-Number (BN) gibt an, für welche Anschaltbaugruppe der Treiber geladen werden soll. Der Standardwert
ist 1, d.h. falls der Treiber für die Anschaltbaugruppe Nr.1 (einstellbar über DIP-Schalter) geladen werden soll, braucht der
Parameter BN=1 nicht angegeben werden. Gültige Werte für
die Board-Number sind 1, 2, 3 und 4.
IO=120:
Dieser Parameter steht für die IO-Adresse, unter der die Anschaltbaugruppe im IO-Adressbereich des PCs angesprochen werden kann. Die IO-Adresse ist ebenfalls an den DIPSchaltern einzustellen. Stimmt die dort eingestellte Adresse
nicht mit der angebenen Adresse überein, wird die Initialisierung des Boards abgebrochen und eine Fehlermeldung ausgegeben. Der Standardwert hierfür ist 120hex. Hinweise zu
alternativen IO-Adressen können Sie dem Handbuch IBS PC
CB UM entnehmen.
MPM=D000:
Dieser Parameter steht für die Adresse im Speicherbereich
des PC unter dem die Anschaltbaugruppe zu finden ist. Die
Anschaltbaugruppe belegt dort einen Adreßbereich von
4 KBytes. Dieser Bereich darf nicht bereits von anderen Karten belegt sein. Eine Überprüfung findet nicht statt. Der Standardwert ist D000hex. Hinweise zu alternativen Adressen
können Sie dem Handbuch IBS PC CB UM entnehmen.
IRQ=15:
Vergeben Sie für jede Anschaltbaugruppe einen freien Interrupt des PCs. OS/2 gestattet es auf dem ISA-Bus nicht, daß
ein Interrupt von mehreren Anschaltbaugruppen verwendet
wird. Achten Sie darauf, daß der verwendete Interrupt nicht
bereits belegt ist. Andernfalls wird die Initialisierung abgebrochen und eine Fehlermeldung (Error at SetIRQ) ausgegeben.
Der Standardwert für den Interrupt ist 15. Hinweise zu alternativen Interrupts können Sie dem Handbuch IBS PC CB UM
entnehmen.
Falls Sie die Angabe eines Parameters unterlassen, wird für diesen Parameter
automatisch der Standardwert verwendet.
5.5 Compileroptionen
Achten Sie bei der Nutzung der DDI- und der Hilfsfunktionen darauf, daß die
DLL IBSPCCB.DLL bei ihrer Erstellung mit der Compileroption /Sp1 (Byte Alignment) übersetzt wurde. Nachfolgend sind alle dabei für den Anwender relevanten Compileroptionen aufgeführt:
/Gm+
/Se
/Sp1
/Mp
5086A
Use multithread libraries
Allow all c Set/2 language extensions except migrations
Byte alignment
Use optlink linkage for functions
5-7
InterBus-S
Ergänzungen zur Treibersoftware für OS/2
5.6 Funktionen für OS/2
Tabelle 5-2:
Übersicht über die DDI-Funktionen für OS/2
Aufgabe
Seite
DDI_DevOpenNode
Öffnet einen Datenkanal zu einem Node
5-9
DDI_DevCloseNode
Schließt einen Datenkanal zu einem Node
5-9
DDI_MXI_SndMessage
Schreibt eine Meldung in das MPM
5-9
DDI_MXI_RcvMessage
Liest eine Meldung aus dem MPM
5-9
DDI_DTI_ReadData
Liest Daten aus dem MPM
5-9
DDI_DTI_WriteData
Schreibt Daten in das MPM
5-9
DDI_SetMsgNotification
Aktiviert den Blocked-Mode für OS/2
DDI_ClrMsgNotification
Deaktiviert den Blocked-Mode für OS/2
5-10
5-12
Tabelle 5-3:
nt
s.
co
m
Funktion
Übersicht über die Funktionen zur Kontrolle der Hardware
Aufgabe
COP_WriteStaticRAM
Schreibt eine Anzahl von Bytes in das SRAM des COPs
COP_ReadStaticRAM
Liest eine Anzahl von Bytes aus dem SRAM des COPs
*
GetDIPSwitch
Liest die Stellungen des DIP-Schalters zum Einstellen der
Boot-Konfiguration aus
5-13
GetSysFailRegister
Liest den Inhalt des SysFail-Registers aus
5-13
EnableWatchDog
Schalten einen Watchdog ein
5-13
Triggert einen Watchdog
5-13
Liest den Status eines Watchdogs aus
5-13
ClearWatchDog
Setzt den Status eines Watchdogs zurück.
5-13
GetIBSDiagnostic
Wertet den Betriebszustand des IBS-Masterboards aus
5-13
po
om
in
ec
TriggerWatchDog
ne
Funktion
on
l
GetWatchDogState
Seite
*
* Dies sind Funktionen für das Coprozessorboard. Sie sind ausschließlich für
die Verwendung unter den DOS-kompatiblen Betriebsystemen (RTXDOS,
TDOS) des Coprozessorboards definiert und im Kapitel 2 beschrieben.
5.6.1 Funktionen des Device-Driver-Interfaces
Die DDI-Funktionen für den Betrieb unter IBM OS/2® unterscheidenen sich nicht
grundsätzlich von denen für den Betrieb unter DOS. Sie haben die gleiche Funktionalität und verwenden die gleichen Parameter. Abweichungen ergeben sich
dadurch, daß es unter OS/2 möglich ist, einen Thread des Anwenderprogramms
auf das Eintreffen einer Nachricht warten zu lassen. Hierzu steht der BlockedMode und spezielle Funktionen zur Verfügung.
5-8
5086A
InterBus-S
Funktionen des Device-Driver-Interfaces
Deklaration der für IBM OS/2® zur Verfügung stehenden DDI-Funktionen
Die DDI-Funktionen der Treibersoftware für OS/2 sind in der DLL IBSPCCB.DLL
in der gleichen weise deklariert wie in der Treibersoftware für DOS. Der einzige
Unterschied besteht darin, daß unter OS/2 auf die Angabe von Speichermodellen (z.B. FAR) verzichtet werden kann.
INT16
INT16
INT16
INT16
INT16
INT16
DDI_DevOpenNode(CHAR *devName, INT16 perm, INT16 *nodeHd)
DDI_DevCloseNode(INT16 nodeHd)
DDI_DTI_WriteData(INT16 nodeHd, T_DDI_DTI_ACCESS *dtiAcc)
DDI_DTI_ReadData(INT16 nodeHd, T_DDI_DTI_ACCESS *dtiAcc)
DDI_MXI_SndMessage(INT16 nodeHd, T_DDI_MXI_ACCESS *mxiAcc)
DDI_MXI_RcvMessage(INT16 nodeHd, T_DDI_MXI_ACCESS *mxiAcc)
co
m
Diese Funktionen sind, bis auf die Deklaration, mit der Treibersoftware für DOS
identisch und werden im Kapitel 2 beschrieben. Die zu übergebenden Parameter entsprechen den dortigen Beschreibungen.
threadRcvMessage(void *ulp)
mxiAcc;
ne
T_MXI_ACC
nt
void
{
s.
Beispiel:
po
mxiAcc.msgLength = sizeof(rcvBuf);
mxiAcc.msgBlk = rcvBuffer;
om
/* Solange Nachrichten lesen, bis von aussen signalisiert wird, dass/*
/* keine weiteren Nachrichten abgeholt werden sollen.
/*
on
l
in
ec
while (stopRcvMsg == FALSE)
{
mxiAcc.msgLength = sizeof(rcvBuf);
if ((ret = DDI_MXI_RcvMessage(nodeHd, &mxiAcc)) == ERR_OK)
{
/* Empfangene Nachricht an dieser Stelle auswerten
/* und weitere Bearbeitung veranlassen.
. . .
}
else
{
/* Fehler beim Empfang der Nachricht
. . .
}
*/
*/
*/
}
_endthread();
}
Tragen Sie in die Komponente msgLength der Struktur T_MXI_ACC die Länge
des zur Verfügung gestellten Empfangspuffers ein! Der Treiber prüft mittels Betriebssystemaufrufen, ob der Speicher für den Empfangspuffer gültig ist und
dem aufrufenden Prozeß gehört. Ist das nicht der Fall, wird das Programm mit
einem OS/2 General Protection Fault beendet.
5086A
5-9
InterBus-S
Ergänzungen zur Treibersoftware für OS/2
5.6.2 Funktionen zur Verwaltung des Blocked-Modes
Zusätzlich sind zwei Funktionen zum Aktivieren und Deaktivieren des BlockedMode vorhanden:
DDI_SetMsgNotification
Die Funktion aktiviert den Blocked-Mode für einen Datenkanal.
Voraussetzung:
Der der Funktion ebenfalls übergebene Node-Handle (nodeHd) muß zu einem
geöffneten Datenkanal des Mailbox-Interfaces gehören, andernfalls erfolgt eine
allgemeine DDI-Fehlermeldung.
Synopsis:
DDI_SetMsgNotification(INT16 nodeHd, T_IBS_OS2_NOTIFY *infoPtr):
Parameter:
nodeHd
m
Aufgabe:
co
Der Node-Handle ist die logische Nummer eines zuvor
an der DDI-Schnittstelle geöffneten Kanals.
Zeiger auf eine Datenstruktur vom Typ
T_IBS_OS2_NOTIFY (siehe unten).
s.
*infoPtr
in
ec
om
processId
on
l
timeout
positive Quittung:
Initialisieren Sie das Strukturelement
msgNotifyMode mit dem Wert IBS_BLOCKED_MODE
um den Blocked-Mode zu aktivieren. Andere Werte sind
momentan nicht zulässig.
Das Strukturelement processId enthält den ProcessIdentifier des Prozesses, welcher den Blocked-Mode
aktiviert. Der Prozeß-Identifier muß beim Aktivieren und
Deaktivieren den gleichen Wert haben. Eine Ausnahme
bildet der Wert Null (00000000hex) beim Deaktivieren. In
diesem Fall wird der Blocked-Mode ohne weitere Überprüfungen für den entsprechenden Node deaktiviert.
Tragen Sie in das Strukturelement timeout die Zeit (in
Millisekunden) ein, welche ein Thread maximal auf eine
Message warten soll. Trifft eine Nachricht vor Ablauf dieser Zeit ein, kehrt der Thread mit der Nachricht zurück.
Andernfalls wird der Thread mit der Fehlermeldung
ERR_BLOCK_TIMEOUT (00CBhex) beendet.
ne
msgNotifyMode
po
Strukturelemente:
nt
T_IBS_OS2_NOTIFY: Datenstruktur mit den zum Aktivieren des Blocked-Modes nowendigen Elementen
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
negative Quittung: allgemeiner DDI-Error-Code
Ursache
Siehe Beschreibung der Fehlermeldungen des DDI
5-10
5086A
InterBus-S
Funktionen zur Verwaltung des Blocked-Modes
Aufrufsyntax:
DDI_SetMsgNotification(
INT16 nodeHd,
T_IBS_OS2_NOTIFY *InfoPtr);
/* IN: node-handle
*/
/* IN: pointer to
OS2-notify-structure*/
*/
*/
*/
on
l
in
ec
om
po
ne
nt
s.
co
m
Aufbau der Datenstruktur T_IBS_OS2_NOTIFY:
typedef struct {
USIGN16 msgNotifyMode; /* Blocked-Mode
USIGN32 processId;
/* Process-Identifier
USIGN32 timeout;
/* Timeout in Millisekunden
} T_IBS_OS2_NOTIFY;
5086A
5-11
InterBus-S
Ergänzungen zur Treibersoftware für OS/2
DDI_ClrMsgNotification
Aufgabe:
Die Funktion deaktiviert den Blocked-Mode für einen Datenkanal.
Synopsis:
DDI_ClrMsgNotification(INT16 nodeHd, T_IBS_OS2_NOTIFY *infoPtr):
Parameter:
nodeHd
Der Node-Handle ist die logische Nummer eines zuvor
an der DDI-Schnittstelle geöffneten Kanals.
Zeiger auf eine Datenstruktur vom Typ T_IBS_OS2_NOTIFY (siehe unten).
*infoPtr
T_IBS_OS2_NOTIFY: Datenstruktur mit den zum Deaktivieren des Blocked-Modes nowendigen Elementen.
Initialisieren Sie das Strukturelement msgNotifyMode
mit dem Wert IBS_BLOCKED_MODE um den BlockedMode zu deaktivieren. Andere Werte sind momentan
nicht zulässig.
Das Strukturelement processId enthält den ProcessIdentifier des Prozesses, welcher den Blocked-Mode
deaktiviert. Der Prozeß-Identifier muß beim Aktivieren
und Deaktivieren den gleichen Wert haben. Eine Ausnahme bildet der Wert Null (00000000hex) beim Deaktivieren. In diesem Fall wird der Blocked-Mode ohne
weitere Überprüfungen für den entsprechenden Node
deaktiviert.
Dieser Parameter ist für die Funktion DDI_ClrMsgNotification ohne Bedeutung und wird nicht ausgewertet.
m
MsgNotifyMode
co
Strukturelemente:
po
ne
nt
s.
ProcessId
ERR_OK (0000hex)
Bedeutung
Die Funktion wurde erfolgreich ausgeführt.
in
ec
positive Quittung:
om
Timeout
negative Quittung: allgemeiner DDI-Error-Code
Ursache
Siehe Beschreibung der Fehlermeldungen des DDI
on
l
negative Quittung: ERR_INVLD_NODE_HD (0085hex)
Ursache
Sie haben einen falschen Node-Handle angegeben
negative Quittung: ERR_INVLD_Process-Identifier (00C0hex)
Ursache
Sie haben einen falschen Process-Identifier angegeben
Abhilfe
Verwenden Sie beim Deaktivieren des Blocked-Modes
die gleichen Parameter (nodeHd, Process-Identifier),
die auch beim Aktivieren des Blocked-Modes verwendet
wurden.
Bemerkung
Bei Angabe eines falschen Node-Handles oder Process-Identifiers wird der Blocked-Mode nicht deaktiviert.
Aufrufsyntax:
DDI_ClrMsgNotification(
INT16 nodeHd,
/* IN: node-handle
*/
T_IBS_OS2_NOTIFY *notifyInfoPtr);/* IN: pointer to
OS2-notify-structure*/
5-12
5086A
InterBus-S
Funktionen zur Kontrolle der Hardware
Aufbau der Datenstruktur T_IBS_OS2_NOTIFY :
typedef struct {
USIGN16 msgNotifyMode; /* Blocked-Mode
USIGN32 processId;
/* Process-Identifier
USIGN32 timeout;
/* Timeout in Millisekunden
} T_IBS_OS2_NOTIFY;
*/
*/
*/
5.6.3 Funktionen zur Kontrolle der Hardware
m
Zur Kontrolle der Hardware stehen ebenfalls die unter DOS beschriebenen
Funktionen zur Verfügung. Der einzige Unterschied besteht darin, daß unter
OS/2® auf die Angabe von Speichermodellen (z.B. FAR) verzichtet werden
kann.
co
s.
nt
ne
INT16
INT16
INT16
INT16
INT16
INT16
INT16
Deklaration der für IBM OS/2® zur Verfügung stehenden Kontroll-Funktionen
GetIBSDiagnostic(USIGN16 boardNumber, T_IBS_DIAG *infoPtr)
GetDIPSwitch(USIGN16 boardNumber, USIGN16 *dataPtr)
GetSysFailRegister(USIGN16 boardNumber, USIGN16
*sysFailRegPtr)
EnableWatchDog(USIGN16 boardNumber)
TriggerWatchDog(USIGN16 boardNumber)
GetWatchDogState(USIGN16 boardNumber)
ClearWatchDog (USIGN16 boardNumber)
om
po
Diese Funktionen sind, bis auf die Deklaration, mit der Treibersoftware für DOS
identisch und werden im Kapitel 2 beschrieben. Die zu übergebenden Parameter entsprechen den dortigen Beschreibungen.
in
ec
Die Funktionen zur Nutzung der Watchdogs werden für OS/2 erst ab
Treiber-Version 0.91 unterstützt.
on
l
Die Einbindung der oben aufgeführten Funktionen in ein eigenes Programm
kann über die Import-Liste in der DEF-Datei des Anwendungsprogramms oder
die mitgelieferte Import-Library (IBSPCCB.LIB) erfolgen. Die in der DEF-Datei
notwendingen Einträge sind:
IMPORTS
DDI_DevOpenNode=ibspccb.2
DDI_DevCloseNode=ibspccb.3
DDI_DTI_WriteData=ibspccb.4
DDI_DTI_ReadData=ibspccb.5
DDI_MXI_SndMessage=ibspccb.6
DDI_MXI_RcvMessage=ibspccb.7
DDI_SetMsgNotification=ibspccb.8
DDI_ClrMsgNotification=ibspccb.9
GetIBSDiagnostic=ibspccb.10
GetSysFailRegister=ibspccb.11
GetDIPSwitch=ibspccb.12
5086A
5-13
InterBus-S
Ergänzungen zur Treibersoftware für OS/2
5.7 Nutzung der Treibersoftware mit C++
Eine Nutzung der Treibersoftware für OS/2 ist auch mit C++ möglich. Dabei ist
lediglich zu berücksichtigen, daß die Include-Dateien mit extern "C" eingebunden werden. Andernfalls kann die Applikation nicht gelinkt werden.
Beispiel:
on
l
in
ec
om
po
ne
nt
s.
co
m
extern "C" {
#include ibs_os2.h"
}
5-14
5086A
Kapitel
6
Makros zur Programmierunterstützung
Dieses Kapitel informiert Sie über Makros,
s.
Makros zur Datenkonvertierung . . . . . . . . . . . . .
Makros zur Konvertierung des Datenblocks eines Kommandos
Makros zur Konvertierung des Datenblocks einer Meldung . .
Makros zur Konvertierung von Eingangsdaten . . . . . . .
Makros zur Konvertierung von Ausgabedaten . . . . . . .
6-3
6-5
6-7
6-8
6-10
on
l
in
ec
om
po
ne
6.1
6.1.1
6.1.2
6.1.3
6.1.4
co
Makros zur Programmierunterstützung . . . . . . . . . . . . . . . . . . 6-3
nt
6
m
- welche den Austausch von Datensätzen zwischen dem IBS-Masterboard
(InterBus-S-Master-Protokoll-Chip) und dem Host oder Coprozessorboard
(Intel-Prozessor) vereinfachen.
5086A
6-1
6-2
5086A
s.
nt
ne
po
om
in
ec
on
l
co
m
InterBus-S
Makros zur Programmierunterstützung
6 Makros zur Programmierunterstützung
6.1 Makros zur Datenkonvertierung
Die folgenden Makros (für Pascal Makro-Funktionen) vereinfachen die Übertragung von Daten (Kommandos, Meldungen, Prozeßdaten) zwischen Host oder
Coprozessorboard auf der einen und dem IBS-Masterboard auf der anderen
Seite.
co
m
- Der InterBus-S-Master-Protokoll-Chip (IPMS) der Anschaltbaugruppe legt
seine Daten im Motorola-Format (68xxx-Familie) in das MPM und erwartet
dieses Format auch beim Lesen.
- Die Prozessoren des Hosts und des COPs verarbeiten Daten im für IBMkompatible PCs typischen Intel-Format.
ne
nt
s.
Die Numerierung von Worten und Bytes innerhalb eines Datenfeldes geschieht
bei diesen Formaten entgegengesetzt. Die Makros konvertieren die Daten zwischen Motorola- und Intel-Format und schreiben sie in die angegebenen Puffer,
so daß Sie sich z.B. auf einfache Weise ein Prozeßabbild im Intel-Format erstellen können.
Makros für
Kommandos
in
ec
Puffer für
Kommandos
und
Meldungen
om
Anwenderprogramm
Makros für
Meldungen
on
l
IN TE L
F o rm a t
Prozeßabbild
IN TE L
F o rm a t
Anschaltbaugruppe
po
Host/Coprozessorboard
Sendepuffer
MOTOROLA
Format
Empfangspuffer
MOTOROLA
Format
IBSMasterboard
DDI_MXI_
SndMessage
DDI_MXI_
RCVMessage
MPM
MOTOROLA
Format
Makros für
Ausgabedaten
Makros für
Eingangsdaten
Ausgangspuffer
MOTOROLA
Format
Eingangspuffer
MOTOROLA
Format
DDI_DTI_
WriteData
DDI_DTI_
ReadData
5086A701
Bild 6-1:
5086A
Verwendung der Makros zur Datenkonvertierung
6-3
InterBus-S
Makros zur Programmierunterstützung
Tabelle 6-1:
Übersicht über die Makros zur Datenkonvertierung
Aufgabe
Seite
IB_SetCmdCode
Trägt den Command-Code (16 Bit) in den angegebenen
Sendepuffer ein
6-5
IB_SetParaCnt
Trägt den Parameter-Zähler (16 Bit) in den angegebenen
Sendepuffer ein
6-5
IB_SetParaN
Trägt einen Parameter (16 Bit) in den angegebenen Sendepuffer ein
6-6
IB_SetParaNHiByte
Trägt das höherwertige Byte (Bit 8 bis 15) eines Parameters
in den angegebenen Sendepuffer ein
6-6
IB_SetParaNLoByte
Trägt das niederwertige Byte (Bit 0 bis 7) eines Parameters
in den angegebenen Sendepuffer ein
6-8
IB_SetBytePtrHiByte
Liefert die Adresse, beginnend ab dem höchstwertigen Byte
(Bit 8 bis 15), eines Parametereintrages zurück
IB_SetBytePtrLoByte
Liefert die Adresse, beginnend ab dem niederwertigen Byte
(Bit 0 bis 7), eines Parametereintrages zurück
6-6
IB_GetMsgCode
Liest einen Meldungs-Codes (16 Bit) aus dem angegebenen
Empfangspuffer
6-7
IB_GetParaCnt
Liest den Parameter-Zähler (16 Bit) aus dem angegebenen
Empfangspuffer
6-7
IB_GetParaN
Liest einen Parameter (16 Bit) aus dem angegebenen Empfangspuffer
6-7
IB_GetParaNHiByte
Liest das höherwertige Byte (Bit 8 bis 15) eines Parameters
aus dem angegebenen Empfangspuffer
6-7
in
ec
om
po
ne
nt
s.
co
m
Makro
6-6
Liest das niederwertige Byte (Bit 0 bis 7) eines Parameters
aus dem angegebenen Empfangspuffer
6-8
IB_GetBytePtrHiByte
Liefert die Adresse, beginnend ab dem höchstwertigen Byte
(Bit 8 bis 15), eines Parametereintrages zurück
6-8
IB_GetBytePtrLoByte
Liefert die Adresse, beginnend ab dem niederwertigen Byte
(Bit 0 bis 7), eines Parametereintrages zurück
6-8
IB_PD_GetLongDataN
Liest ein Langwort (32 Bit) an der angebenen Position aus
dem Eingangspuffer
6-8
IB_PD_GetDataN
Liest ein Wort (16 Bit) an der angegebenen Position aus
dem Eingangspuffer
6-9
IB_PD_GetDataNHiByte
Liest das höherwertige Byte (Bit 8 bis 15) eines Worts aus
dem Eingangspuffer
6-9
IB_PD_GetDataNLoByte
Liest das niederwertige Byte (Bit 0 bis 7) eines Worts aus
dem Eingangspuffer
6-9
IB_PD_GetBytePtrHiByte
Liefert die Adresse, beginnend ab dem höchstwertigen Byte
(Bit 8 bis 15), eines Wortes zurück
6-9
IB_PD_GetBytePtrLoByte
Liefert die Adresse, beginnend ab dem niederwertigen Byte
(Bit 0 bis 7), eines Wortes zurück
6-9
on
l
IB_GetParaNLoByte
6-4
5086A
InterBus-S
Makros zur Konvertierung des Datenblocks eines Kommandos
Tabelle 6-1:
Übersicht über die Makros zur Datenkonvertierung
Aufgabe
Seite
IB_PD_SetLongDataN
Schreibt ein Langwort (32 Bit) in den Ausgangspuffer
6-10
IB_PD_SetDataN
Schreibt ein Wort (16 Bit) in den Ausgangspuffer
6-10
IB_PD_SetDataNHiByte
Schreibt das höherwertige Byte (Bit 8 bis 15) eines Wortes in
den Ausgangspuffer
6-10
IB_PD_SetDataNLoByte
Schreibt das niederwertige Byte (Bit 0 bis 7) eines Wortes in
den Ausgangspuffer
6-10
IB_PD_SetBytePtrHiByte
Liefert die Adresse, beginnend ab dem höchstwertigen Byte
(Bit 8 bis 15), eines Wortes zurück
6-11
IB_PD_SetBytePtrLoByte
Liefert die Adresse, beginnend ab dem niederwertigen Byte
(Bit 0 bis 7), eines Wortes zurück
6-11
co
m
Makro
nt
s.
Die Makros sind in den Device-Driver-Interfaces für die verschiedenen Betriebsysteme und Compiler so definiert, daß Sie universell verwendet werden können.
po
ne
Die jeweils für die Nutzung der Makros erforderlichen Include-Dateien und Libraries bzw. Units werden in den Kapiteln 2, 3, 4 und 5 beschrieben.
6.1.1 Makros zur Konvertierung des Datenblocks eines Kommandos
om
IB_SetCmdCode(n, m)
Dieses Makro konvertiert einenen Kommando-Code (16 Bit) in das MotorolaFormat und trägt ihn in den angegebenen Sendepuffer ein.
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Sendepuffer
Einzutragender Command-Code
on
l
Parameter:
in
ec
Aufgabe:
IB_SetParaCnt(n, m)
Aufgabe:
Parameter:
5086A
Dieses Makro konvertiert den Parameter-Zähler (16 Bit) in das Motorola-Format
und trägt ihn in den angegebenen Sendepuffer ein. Der Aufruf wird nur benötigt,
wenn es sich um ein Kommando mit Parametern handelt. Der Parameter-Zähler
gibt die Anzahl der nachfolgenden Parameter in Worten an.
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Sendepuffer
Einzutragender Parameter-Zähler
6-5
InterBus-S
Makros zur Programmierunterstützung
IB_SetParaN(n, m, o)
Aufgabe:
Dieses Makro konvertiert einen Parameter(16 Bit) in das Motorola-Format und
trägt ihn in den angegebenen Sendepuffer ein. Der Aufruf wird nur benötigt,
wenn es sich um ein Kommando mit Parametern handelt.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
o(USIGN16):
Zeiger auf den Sendepuffer
Parameter-Nr. (Wort-Nr.)
Einzutragender Parameterwert
IB_SetParaNHiByte(n, m, o)
Dieses Makro konvertiert das höherwertige Byte (Bit 8 bis 15) eines Parameters
in das Motorola-Format und trägt es in den angegebenen Sendepuffer ein. (siehe auch IB_SetParaN).
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
o(USIGN8):
m
Aufgabe:
s.
co
Zeiger auf den Sendepuffer
Parameter-Nr. (Wort-Nr.)
Einzutragender Parameter (Byte)
nt
IB_SetParaNLoByte(n, m, o)
Dieses Makro konvertiert das niederwertige Byte (Bit 0 bis 7) eines Parameters
in das Motorola-Format und trägt es in den angegebenen Sendepuffer ein. (siehe auch IB_SetParaN)
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
o(USIGN8):
om
po
ne
Aufgabe:
Zeiger auf den Sendepuffer
Parameter-Nr. (Wort-Nr.)
Einzutragender Parameter (Byte)
in
ec
IB_SetBytePtrHiByte(n, m)
Dieses Makro liefert die Adresse, beginnend ab dem höchstwertigen Byte (Bit 8
bis 15), eines Parametereintrages zurück.
Die Adresse ist vom Datentyp USIGN8 FAR *.
on
l
Aufgabe:
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Sendepuffer
Parameter-Nr. (Wort-Nr.)
Rückgabewert:
(USIGN8 FAR *):
Adresse des höherwertigen Bytes des Parameters im
Sendepuffer.
IB_SetBytePtrLoByte(n, m)
Aufgabe:
Dieses Makro liefert die Adresse, beginnend ab dem niederwertigen Byte (Bit 0
bis 7), eines Parametereintrages zurück.
Die Adresse ist vom Datentyp USIGN8 FAR *.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Sendepuffer
Parameter-Nr. (Wort-Nr.)
Rückgabewert:
(USIGN8 FAR *):
Adresse des niederwertigen Bytes des Parameters im
Sendepuffer
6-6
5086A
InterBus-S
Makros zur Konvertierung des Datenblocks einer Meldung
6.1.2 Makros zur Konvertierung des Datenblocks einer Meldung
IB_GetMsgCode(n)
Aufgabe:
Dieses Makro liest einen Meldungs-Code (16 Bit) aus dem angegebenen Empfangspuffer und konvertiert ihn in das Intel-Format.
Parameter:
n(USIGN8 FAR *):
Zeiger auf den Empfangspuffer
Rückgabewert:
(USIGN16):
Message-Code
IB_GetParaCnt(n)
Dieses Makro liest den Parameter-Zähler (16 Bit) aus dem Datenblock der Meldung aus und konvertiert ihn in das Intel-Format. Der Parameter-Zähler gibt die
Anzahl der nachfolgenden Parameter in Worten an.
Parameter:
n(USIGN8 FAR *):
Zeiger auf den Empfangspuffer
Rückgabewert:
(USIGN16):
Parameter-Zähler
Bemerkung:
Lesen Sie den Parameter-Zähler nur für die Meldungen aus, die auch Parameter besitzen.
po
IB_GetParaN(n, m)
ne
nt
s.
co
m
Aufgabe:
Dieses Makro liest einen Parameterwert (16 Bit) aus dem Datenblock der Meldung aus und konvertiert ihn in das Intel-Format.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
(USIGN16):
Zeiger auf den Empfangspuffer
Parameter-Nr. (Wort-Nr.)
Parameterwert
Lesen Sie nur für die Meldungen Parameter aus, die auch Parameter besitzen.
on
l
Bemerkung:
in
ec
Rückgabewert:
om
Aufgabe:
IB_GetParaNHiByte(n, m)
Aufgabe:
Dieses Makro liest das höherwertige Byte (Bit 8 bis 15) eines Parameters aus
dem angegebenen Empfangspuffer und konvertiert es in das Intel-Format.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Empfangspuffer
Parameter-Nr. (Wort-Nr.)
Rückgabewert:
(USIGN8):
Parameterwert (Byte)
Bemerkung:
Lesen Sie nur für die Meldungen Parameter aus, die auch Parameter besitzen.
5086A
6-7
InterBus-S
Makros zur Programmierunterstützung
IB_GetParaNLoByte(n, m)
Aufgabe:
Dieses Makro liest das das niederwertige Byte (Bit 0 bis 7) eines Parameters
aus dem angegebenen Empfangspuffer und konvertiert es in das Intel-Format.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Empfangspuffer
Parameter-Nr. (Wort-Nr.)
Rückgabewert:
(USIGN8):
Parameterwert (Byte)
Bemerkung:
Lesen Sie nur für die Meldungen Parameter aus, die auch Parameter besitzen.
IB_GetBytePtrHiByte(n, m)
Dieses Makro liefert die Adresse, beginnend ab dem höchstwertigen
Byte (Bit 8 bis 15), eines Parametereintrages zurück.
co
m
Aufgabe:
Die Adresse ist vom Datentyp USIGN8 FAR *.
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Empfangspuffer
Parameter-Nr. (Wort-Nr.)
Rückgabewert:
(USIGN8 FAR *):
Adresse des höherwertigen Bytes eines Parameters im
Empfangspuffer.
ne
nt
s.
Parameter:
po
IB_GetBytePtrLoByte(n, m)
Dieses Makro liefert die Adresse, beginnend ab dem niederwertigen
Byte (Bit 0 bis 7), eines Parametereintrages zurück.
om
Aufgabe:
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Empfangspuffer
Parameter-Nr. (Wort-Nr.)
(USIGN8 FAR *):
Adresse des niederwertigen Bytes eines Parameters im
Empfangspuffer.
on
l
Rückgabewert:
in
ec
Die Adresse ist vom Datentyp USIGN8 FAR *.
6.1.3 Makros zur Konvertierung von Eingangsdaten
In der Datei IBS_MACR.H stehen Makros zur Konvertierung von Langworten,
Worten und Bytes vom Motorola- in das Intel-Format zur Verfügung. Die Adressierung ist dabei in jedem Fall wortorientiert.
IB_PD_GetLongDataN(n, m, o)
Aufgabe:
Dieses Makro liest ein Langwort (32 Bit) an der angebenen Position aus dem
Eingangspuffer und konvertiert es in das Intel-Format. Als Position wird der
Wortindex innerhalb des Eingangspuffers verwendet. Das Makro liest somit das
Langwort ab der angegebenen Wort-Adresse über zwei Worte.
Parameter :
n (USIGN8 FAR *)
m (USIGN16)
o (USIGN32)
6-8
Zeiger auf den Eingangspuffer
Parameter-Nr. (Wort-Nr.)
Prozeßdatum (32 Bit)
5086A
InterBus-S
Makros zur Konvertierung von Eingangsdaten
IB_PD_GetDataN(n, m)
Aufgabe:
Dieses Makro liest ein Wort (16 Bit) an der angegebenen Position aus dem Eingangspuffer und konvertiert es in das Intel-Format.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Rückgabewert:
(USIGN8):Prozeßdatum (16 Bit)
Zeiger auf den Eingangspuffer
Parameter-Nr. (Wort-Nr.)
IB_PD_GetDataNHiByte(n, m)
Dieses Makro liest das höherwertige Byte (Bit 8 bis 15) eines Worts aus dem
Eingangspuffer und konvertiert es in das Intel-Format.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Eingangspuffer
Parameter-Nr. (Wort-Nr.)
Rückgabewert:
(USIGN8):
Prozeßdatum (8 Bit)
s.
co
m
Aufgabe:
nt
IB_PD_GetDataNLoByte(n, m)
Dieses Makro liest das niederwertige Byte (Bit 0 bis 7) eines Worts aus dem Eingangspuffer und konvertiert es in das Intel-Format.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Rückgabewert:
(USIGN8):
ne
Aufgabe:
om
po
Zeiger auf den Eingangspuffer
Parameter-Nr. (Wort-Nr.)
Prozeßdatum (8 Bit)
Aufgabe:
in
ec
IB_PD_GetBytePtrHiByte(n, m)
Dieses Makro liefert die Adresse, beginnend ab dem höchstwertigen
Byte (Bit 8 bis 15), eines Wortes zurück.
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Eingangspuffer
Parameter-Nr. (Wort-Nr.)
(USIGN8 FAR *):
Adresse des höherwertigen Bytes eines Wortes im Eingangspuffer.
on
l
Parameter:
Rückgabewert:
IB_PD_GetBytePtrLoByte(n, m)
Aufgabe:
Dieses Makro liefert die Adresse, beginnend ab dem niederwertigen
Byte (Bit 0 bis 7), eines Wortes zurück.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Eingangspuffer
Parameter-Nr. (Wort-Nr.)
Rückgabewert:
(USIGN8 FAR *):
Adresse des niederwertigen Bytes eines Wortes im Eingangspuffer.
5086A
6-9
InterBus-S
Makros zur Programmierunterstützung
6.1.4 Makros zur Konvertierung von Ausgabedaten
In der Datei IBS_MACR.H stehen Makros zur Konvertierung von Langworten,
Worten und Bytes vom Intel- in das Motorola-Format zur Verfügung. Die Adressierung ist dabei in jedem Fall wortorientiert.
IB_PD_SetLongDataN(n, m, o)
Aufgabe:
Dieses Makro konvertiert ein Langwort (32 Bit) in das Motorola-Format und
schreibt es an der angebenen Position in den Ausgangspuffer. Als Position wird
der Wortindex innerhalb des Ausgangspuffers verwendet. Das Makro schreibt
somit das Langwort ab der angegebenen Wort-Adresse über zwei Worte.
Parameter :
n (USIGN8 FAR *)
m (USIGN16)
o (USIGN32)
co
m
Zeiger auf den Ausgangspuffer
Parameter-Nr. (Wort-Nr.)
Prozeßdatum (32 Bit)
IB_PD_SetDataN(n, m, o)
Dieses Makro konvertiert ein Wort (16 Bit) in das Motorola-Format und schreibt
es an der angebenen Position in den Ausgangspuffer.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
o(USIGN16):
nt
s.
Aufgabe:
po
ne
Zeiger auf den Ausgangspuffer
Parameter-Nr. (Wort-Nr.)
Prozeßdatum (16 Bit)
IB_PD_SetDataNHiByte(n, m, o)
Dieses Makro konvertiert das höherwertige Byte (Bit 8 bis 15) eines Wortes in
das Motorola-Format und schreibt es an der angebenen Position in den Ausgangspuffer.
n(USIGN8 FAR *):
m(USIGN16):
o(USIGN8):
Zeiger auf den Ausgangspuffer
Parameter-Nr. (Wort-Nr.)
Prozeßdatum (8 Bit)
on
l
Parameter:
in
ec
om
Aufgabe:
IB_PD_SetDataNLoByte(n, m, o)
Aufgabe:
Parameter:
6-10
Dieses Makro konvertiert das niederwertige Byte (Bit 0 bis 7) eines Wortes in
das Motorola-Format und schreibt es an der angebenen Position in den Ausgangspuffer.
n(USIGN8 FAR *):
m(USIGN16):
o(USIGN8):
Zeiger auf den Ausgangspuffer
Parameter-Nr. (Wort-Nr.)
Prozeßdatum (8 Bit)
5086A
InterBus-S
Makros zur Konvertierung von Ausgabedaten
IB_PD_SetBytePtrHiByte(n, m)
Aufgabe:
Dieses Makro liefert die Adresse, beginnend ab dem höchstwertigen
Byte (Bit 8 bis 15), eines Wortes zurück.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Ausgangspuffer
Parameter-Nr. (Wort-Nr.)
Rückgabewert:
(USIGN8 FAR *):
Adresse des höherwertigen Bytes eines Wortes im Ausgangspuffer.
IB_PD_SetBytePtrLoByte(n, m)
Dieses Makro liefert die Adresse, beginnend ab dem niederwertigen
Byte (Bit 0 bis 7), eines Wortes zurück.
Parameter:
n(USIGN8 FAR *):
m(USIGN16):
Zeiger auf den Ausgangspuffer
Parameter-Nr. (Wort-Nr.)
Rückgabewert:
(USIGN8 FAR *):
Adresse des niederwertigen Bytes eines Wortes im Ausgangspuffer.
on
l
in
ec
om
po
ne
nt
s.
co
m
Aufgabe:
5086A
6-11
on
l
in
ec
om
po
ne
nt
s.
co
m
InterBus-S
Makros zur Programmierunterstützung
6-12
5086A
Kapitel
7
Diagnose zur Treibersoftware
Dieses Kapitel informiert Sie über die Meldungen und Fehlermeldungen der
Treibersoftware.
ne
nt
s.
Meldungen des DDI . . . . . . . . . . . . . . . . . 7-4
Fehlermeldungen des DDI . . . . . . . . . . . . . . . 7-4
Fehlermeldungen zur Initialisierung der Anschaltbaugruppe . . 7-4
Allgemeine Fehlermeldungen. . . . . . . . . . . . . . 7-6
Fehlermeldungen beim Öffnen eines Datenkanals . . . . . 7-7
Fehlermeldungen zur Übertragung von Meldungen/Kommandos7-8
Fehlermeldungen zur Übertragung von Prozessdaten . . . . 7-10
Fehlermeldungen unter DOS . . . . . . . . . . . . . . 7-10
Fehlermeldungen unter Microsoft Windows . . . . . . . . 7-11
Fehlermeldungen unter OS/2 . . . . . . . . . . . . . . 7-12
on
l
in
ec
om
7.1
7.2
7.2.1
7.2.2
7.2.3
7.2.4
7.2.5
7.2.6
7.2.7
7.2.8
co
Diagnose zur Treibersoftware . . . . . . . . . . . . . . . . . . . . . . 7-3
po
7
m
- Bedeutung
- Ursachen
- Abhilfe
5086A
7-1
7-2
5086A
s.
nt
ne
po
om
in
ec
on
l
co
m
InterBus-S
Diagnose zur Treibersoftware
7 Diagnose zur Treibersoftware
Übersicht über die Meldungen des DDI
Fehlermeldung
Ursache
Seite
0000hex
ERR_OK
Die Funktion wurde erfolgreich ausgeführt
7-4
0080hex
ERR_INVLD_BOARD_NUM
Unzulässige oder ungültige Boardnummer
7-4
0081hex
ERR_INVLD_IO_ADDR
Unzulässige IO-Adresse
7-4
0082hex
ERR_INVLD_MPM_ADDR
Unzulässige Adresse für das MPM-Fenster
7-5
0083hex
ERR_INVLD_INTR_NUM
Unzulässiger Interrupt
7-5
0084hex
ERR_INVLD_CARD_CODE
Falscher Karten-Code
7-5
0085hex
ERR_INVLD_NODE_HD
Unzulässiger Node-Handle angegeben
7-6
0086hex
ERR_INVLD_NODE_STATE
Node-Handle eines bereits geschlossenen
Datenkanals angegeben
7-6
0087hex
ERR_NODE_NOT_READY
Gewünschter Node nicht bereit
7-6
0088hex
ERR_WRONG_DEV_TYP
Falscher Node-Handle
7-6
0089hex
ERR_DEV_NOT_READY
IBS-Masterboard noch nicht bereit
7-6
008Ahex
ERR_INVLD_PERM
Zugriffsart für Kanal nicht freigegeben
7-6
008Bhex
ERR_TSR_NOT_LOADED
Device-Driver nicht geladen
7-10
008Chex
ERR_INVLD_CMD
7-7
008Dhex
ERR_INVLD_PARAM
Utility-Funktion, wird von der Treiberversion 0.9 nicht unterstützt
0090hex
ERR_NODE_NOT_PRES
Node nicht vorhanden
7-7
0091hex
ERR_INVLD_DEV_NAME
Unbekannter Device-Name verwendet
7-7
0092hex
ERR_NO_MORE_HNDL
Ressourcen des Device-Drivers sind
erschöpft
7-7
0096hex
ERR_AREA_EXCDED
Der Zugriff überschreitet die die Grenze
des ausgewählten Datenbereiches
7-10
0097hex
ERR_INVLD_DATA_CONS
Angegebene Datenkonsistenz unzulässig
7-10
0099hex
ERR_MPM_NOT_AVALBL
Auf das MPM kann nicht zugegriffen werden
7-6
ERR_MSG_TO_LONG
Meldung oder Kommando enthält zu viele
Parameter
7-8
009Bhex
ERR_NO_MSG
Es liegt keine Meldung vor
7-8
009Chex
ERR_NO_MORE_MAILBOX
Keine Mailbox der geforderten Größe frei
7-8
009Dhex
ERR_SVR_IN_USE
Send-Vektor-Register ist belegt
7-8
009Ehex
ERR_SVR_TIMEOUT
Aufruf eines ungültigen Nodes
7-8
009Fhex
ERR_AVR_TIMEOUT
Aufruf eines ungültigen Nodes
7-9
00A0hex
ERR_COP_USES_MA
Steuerung des IBS-Masterbord ist für den
PC nicht freigegeben
7-9
00A1hex
ERR_PC_USES_MA
Steuerung des IBS-Masterbord ist für den
COP nicht freigegeben
7-9
00B0hex
ERR_NODE_IN_USE
Doppelte Aktivierung des NotificationModes für einen Node(Windows)
7-11
00C0hex
ERR_INVLD_PID
Angabe eines falschen Process-Identifiers
7-12
5086A
co
nt
ne
po
om
in
ec
on
l
009Ahex
m
Code
s.
Tabelle 7-1:
7-7
7-3
InterBus-S
Diagnose zur Treibersoftware
Tabelle 7-1:
Übersicht über die Meldungen des DDI
Fehlermeldung
Ursache
Seite
00C1hex
ERR_BLK_MODE_IS_ENBLD
Blocked-Mode ist bereits eingeschaltet
7-12
00C2hex
ERR_THREAD_IS_WAITING
Ein anderer Thread belegt bereits den
Notification-Mode für diesen Node
7-12
00C9hex
ERR_INVLD_MEMORY
Ungültiger Empfangspuffer
7-12
00CAhex
ERR_INVLD_NOTIFY_MODE
Unzulässiger Notification-Mode
7-12
00CBhex
ERR_BLOCK_TIMEOUT
Wartezeit auf eine Meldung überschritten
7-12
00D1hex
ERR_INVLD_HWND
Ungültiger Windows-Handle
7-11
00D2hex
ERR_BOARD_NOT_PRES
Board nicht in IBSPCCB.INI eingetragen
7-11
00D3hex
ERR_INVLD_INI_PARAM
Ungültiger Parameter in IBSPCCB.INI
7-11
m
Code
co
7.1 Meldungen des DDI
s.
ERR_OK
0000hex
Nach erfolgreicher Ausführung einer Funktion erzeugt die Treibersoftware als
positive Quittung diese Meldung.
Ursache:
Es trat kein Fehler bei der Ausführung der Funktion auf. Sollte eine Funktion
nicht erfolgreich ausgeführt worden sein, erzeugt die Treibersoftware eine der
im folgenden aufgeführten Fehlermeldungen.
om
po
ne
nt
Bedeutung:
7.2 Fehlermeldungen des DDI
in
ec
Falls das Device-Driver-Interface als negative Quittung eine der folgenden Fehlermeldungen erzeugt, konnte die zuvor aufgerufene Funktion nicht erfolgreich
abgearbeitet werden.
on
l
7.2.1 Fehlermeldungen zur Initialisierung der Anschaltbaugruppe
ERR_INVLD_BOARD_NUM
Ursache:
Es wurde ein unzulässige oder ungültige Boardnummer verwendet.
Abhilfe:
Geben Sie eine gültige Boardnummer ein. Zulässig sind 1, 2, 3 und 4.
ERR_INVLD_IO_ADDR
0080hex
0081hex
Ursache:
Die für die Anschaltbaugruppe angegebene IO-Adresse ist unzulässig.
Abhilfe:
Verwenden Sie eine der zulässigen IO-Adressen. Zulässig sind:
100hex, 120hex, 140hex, 160hex, 180hex, 1A0hex, 200hex, 220hex, 240hex, 280hex,
2A0hex, 300hex, 320hex, 340hex, 380hex, 3A0hex
(siehe auch Kapitel 4-1 im Handbuch IBS PC CB UM)
7-4
5086A
InterBus-S
Fehlermeldungen zur Initialisierung der Anschaltbaugruppe
ERR_INVLD_MPM_ADDR
0082hex
Ursache:
Die im Speicherbereich des PCs angegebene Basisadresse für das 4 KByte
große MPM-Fenster (MPM-Address) liegt außerhalb des von der Anschaltbaugruppe unterstützten Bereiches.
Abhilfe:
Verwenden Sie eine MPM-Adresse innerhalb des von der Anschaltbaugruppe
unterstützten Bereichs (C0000hex bis FF000hex).
co
m
Die Anschaltbaugruppe belegt ab dieser Basisadresse einen Adreßraum von 4
KBytes. Stellen Sie sicher, daß dieser Bereich nicht bereits von anderen Karten
belegt wird. Eine automatische Überprüfung findet nicht statt. Da dieser Speicherbereich in der Praxis schon recht weitgehend belegt ist (BIOS usw.), beschränkt sich der zur Verfügung stehende Adreßbereich in der Regel auf Teile
der Adreß-Segmente D und E (Adressen von D0000hex bis EFFFFhex). Der
Standardwert (default) ist D0000hex (siehe Kapitel 4-6 im Handbuch
IBS PC CB UM).
0083hex
s.
ERR_INVLD_INTR_NUM
Der angegebene Interrupt ist nicht zulässig.
Abhilfe:
Zulässig sind die Interrupts IRQ3, IRQ5, IRQ7, IRQ9, IRQ10, IRQ11, IRQ12 und
IRQ15.
ne
nt
Ursache:
in
ec
om
po
Bei Verwendung mehrerer Anschaltbaugruppen in einem Host muß für jede installierte Anschaltbaugruppe ein anderer Interrupt verwendet werden. Auf einem Standard-PC sind die Interrupts IRQ10, IRQ11, IRQ12 und IRQ15 meist
nicht benutzt und bieten sich somit für die Device-Driver an. Die anderen Interrupts werden häufig von Standard-PC-Komponenten (serielle Schnittstellen
COM1 und COM2, Netzwerkkarten usw.) verwendet und sollten deshalb nicht
von für die Anschaltbaugruppen benutzt werden.
ERR_INVLD_CARD_CODE
Abhilfe:
5086A
Im Statusregister der Anschaltbaugruppe steht ein unbekannter Karten-Code.
(Der Treiber für IBS PC CB/.../I-T erwartet den Karten-Code 2Dhex)
on
l
Ursache:
0084hex
Lassen Sie die Anschaltbaugruppe überprüfen.
7-5
InterBus-S
Diagnose zur Treibersoftware
7.2.2 Allgemeine Fehlermeldungen
Diese Fehlermeldungen können beim Aufruf jeder DDI-Funktion auftreten.
ERR_MPM_NOT_AVALBL
0099hex
Ursache:
Auf das MPM kann nicht zugegriffen werden. Auf der Anschaltbaugruppe ist
möglicherweise ein Reset (Resettaster auf dem Board) ausgelöst worden.
Abhilfe:
De-Installieren Sie den Treiber und starten Sie erneut.
ERR_INVLD_NODE_HD
0085hex
Beim Aufruf der Funktion wurde ein unzulässiger Node-Handle verwendet.
Abhilfe:
Verwenden Sie den zulässigen Node-Handle eines erfolgreich geöffneten Datenkanals.
co
m
Ursache:
0086hex
s.
ERR_INVLD_NODE_STATE
Beim Aufruf der Funktion wurde ein ungültiger Node-Handle verwendet. Es handelt sich dabei um den Handle eines bereits geschlossenen Datenkanals.
Abhilfe:
Öffnen Sie den geschlossenen Datenkanal oder verwenden Sie einen bereits
geöffneten Datenkanal.
po
ne
nt
Ursache:
ERR_NODE_NOT_READY
Abhilfe:
om
Der Node, mit dem gearbeitet werden soll, hat sich noch nicht "Bereit" gemeldet,
d.h. das Node-Ready-Bit im Status-Register des MPM ist nicht gesetzt. Ursache
dafür kann z.B. ein Hardware-Defekt sein.
in
ec
Ursache:
- Überprüfen Sie, ob die Anschaltbaugruppe hochgelaufen ist
- Reset des PCs
on
l
ERR_WRONG_DEV_TYP
Ursache:
0087hex
0088hex
Falscher Node-Handle. Es wurde z.B. versucht, mit einem Node-Handle für das
Data-Interface auf das Mailbox-Interface zuzugreifen.
ERR_DEV_NOT_READY
0089hex
Ursache:
Das IBS-Masterboard wurde angesprochen, obwohl es noch nicht bereit war
(Ready-LED).
Abhilfe:
Fragen Sie nach einem Reset des IBS-Masterboards mit der Funktion GetIBSDiagnostic() das Ready-Bit im Status/Control-Register ab. Erst wenn dieses Bit
gesetzt ist, ist das IBS-Masterboard initialisiert und darf angesprochen werden.
ERR_INVLD_PERM
Ursache:
7-6
008Ahex
Es wurde versucht, eine Funktion auf einem Kanal auszuführen, für die nicht die
entsprechenden Zugriffsrechte beim Öffnen des Datenkanals angemeldet wurden. Dieser Fehler tritt auf, wenn z.B. in das Data-Interface geschrieben werden
soll, aber beim Öffnen des Kanals nur Leserechte (Konstante DDI_READ) an5086A
InterBus-S
Fehlermeldungen beim Öffnen eines Datenkanals
gegeben wurden.
Abhilfe:
Schließen Sie den Kanal und mit öffnen Sie ihn mit geänderten Zugriffsrechten
erneut.
ERR_INVLD_CMD
008Chex
Ursache:
Diese Fehlermeldung erfolgt, wenn bestimmte neue Hilfsfunktionen der neuen
DDI_TSR.LIB mit einem älteren Treiber (Version < 0.9) verwendet werden.
Abhilfe:
Verwenden Sie einen neueren Treiber (Version ≥ 0.9).
ERR_INVLD_PARAM
008Dhex
Diese Fehlermeldung erfolgt, wenn bestimmte neue Hilfsfunktionen der neuen
DDI_TSR.LIB mit einem älteren Treiber (Version < 0.9) verwendet werden.
Abhilfe:
Verwenden Sie einen neueren Treiber (Version ≥ 0.9).
s.
co
m
Ursache:
nt
7.2.3 Fehlermeldungen beim Öffnen eines Datenkanals
0090hex
ne
ERR_NODE_NOT_PRES
Es wurde versucht, einen Datenkanal zu einem Node zu öffnen, der nicht vorhanden ist.
Abhilfe:
Wählen Sie den richtigen Node aus.
Mögliche Nodes:
IBS PC CB:
Node 1 = IBS-Master
IBS PC CB/COP:
Node 0 = PC, Node 1 = IBS-Master, Node 2 = COP
in
ec
om
po
Ursache:
ERR_INVLD_DEV_NAME
Abhilfe:
Es wurde beim Öffnen eines Datenkanals ein unbekannter Device-Name als
Parameter angegeben.
on
l
Ursache:
0091hex
Wählen Sie einen korrekten Device-Namen laut Tabelle 5-2 bis 5-5 aus.
ERR_NO_MORE_HNDL
0092hex
Ursache:
Die Ressourcen des Device-Drivers sind erschöpft. Es können keine weiteren
Datenkanäle geöffnet werden. Wenn Sie ein Programm beenden, ohne die verwendeten Datenkanäle zu schließen, bleiben diese geöffnet. Beim nächsten
Programmstart werden weitere Datenkanäle geöffnet. Nach mehrmaligem Programmstart ist dann die maximale Anzahl der gleichzeitig offenen Datenkanäle
erreicht, und es ist kein weiterer mehr verfügbar.
Abhilfe:
Schließen Sie einen nicht benötigten Datenkanal oder installieren Sie den Device-Driver neu. Schließen Sie grundsätzlich bei Beendigung eines Programms
alle von diesem verwendeten Datenkanäle.
5086A
7-7
InterBus-S
Diagnose zur Treibersoftware
7.2.4 Fehlermeldungen zur Übertragung von Meldungen/Kommandos
ERR_MSG_TO_LONG
009Ahex
Ursache:
Erfolgt die Fehlermeldung beim Senden eines Kommandos, dann überschreitet
die Länge des Kommandos die Anzahl der maximal zulässigen Parameter.
Abhilfe:
Verringern Sie die Anzahl der Parameter.
Ursache:
Erfolgt die Fehlermeldung beim Empfangen einer Meldung, dann überschreitet
die Länge der Meldung die Länge des angegebenen Empfangspuffers.
Abhilfe:
Vergrößern Sie die Länge des Empfangspuffers.
m
ERR_NO_MSG
009Bhex
Die Meldung erfolgt, wenn mit der Funktion DDI_MXI_RCV_MESSAGE versucht wird, eine Meldung abzuholen, aber keine Meldung für den durch den
Node-Handle spezifizierten Node vorliegt.
s.
co
Ursache:
009Chex
nt
ERR_NO_MORE_MAILBOX
Sie haben in kurzer Zeit zu viele Mailboxen angefordert.
Abhilfe:
Vergrößern Sie das Zeitintervall zwischen den einzelnen Mailbox-Anforderungen und versuchen Sie es erneut.
Ursache:
Es ist keine freie Mailbox der geforderten Größe mehr vorhanden. Beachten sie
die maximal nutzbare Mailbox-Größe (1020 Bytes).
Abhilfe:
Wählen Sie eine kleinere Mailbox oder warten Sie, bis wieder eine Mailbox der
geforderten Größe freigegeben ist.
in
ec
om
po
ne
Ursache:
Abhilfe:
Sie haben versucht, das Coprozessorboard (COP) anzusprechen, dieses ist
aber defekt.
on
l
Ursache:
Setzen Sie sich mit Phoenix Contact in Verbindung.
ERR_SVR_IN_USE
009Dhex
Ursache:
Das Send-Vektor-Register zu dem Node ist belegt.
Abhilfe:
Sprechen Sie das Register nochmals an, oder warten Sie bis das Register wieder frei ist.
ERR_SVR_TIMEOUT
Beschreibung:
7-8
009Ehex
Wenn eine vom IBS-Masterboard in das MPM gestellte Meldung nicht durch den
angesprochenen MPM-Teilnehmer abgeholt wird, setzt dieser auch das vom
IBS-Masterboard gesetzte Rückmeldungs-Bit nicht zurück, d.h. der angesprochene MPM-Teilnehmer signalisiert nicht Nachricht erkannt. Nach Ablauf einer
bestimmten Zeit (Timeout) generiert das IBS-Masterboard die Fehlermeldung
ERR_SVR_TIMEOUT . Tritt diese Fehlermeldung mehrmals nacheinander auf,
muß davon ausgegangen werden, daß der angesprochene Node nicht mehr bereit ist, die Nachricht anzunehmen.
5086A
InterBus-S
Fehlermeldungen zur Übertragung von Meldungen/Kommandos
Ursache:
Aufruf eines ungültigen Nodes, z.B.:
Sie haben versucht, das Coprozessorboard (COP) anzusprechen, dieses ist
aber defekt.
Abhilfe:
Setzen Sie sich mit Phoenix Contact in Verbindung.
ERR_AVR_TIMEOUT
009Fhex
Beim Lesen einer Nachricht wird ein Rückmeldungs-Bit gesetzt, um dem Kommunikationspartner anzuzeigen, daß eine Nachricht bearbeitet wurde und die
Mailbox wieder frei ist. Diese Bit muß vom Kommunikationspartner wieder zurückgesetzt werden, um zu signalisieren, daß erkannt wurde, daß die Mailbox
wieder frei ist. Erfolgt dieses Zurücksetzen nicht innerhalb einer festgesetzten
Zeit, wird diese Fehlermeldung generiert.
Ursache:
Aufruf eines ungültigen Nodes, z.B.:
co
m
Beschreibung:
ERR_COP_USES_MA
nt
Setzen Sie sich mit Phoenix Contact in Verbindung.
ne
Abhilfe:
s.
Sie haben versucht, das Coprozessorboard (COP) anzusprechen, dieses ist
aber defekt oder nicht vorhanden.
00A0hex
Der Host (PC) hat versucht, ein Kommando an das IBS-Masterboard zu senden,
obwohl nach Stellung des Boot-Konfigurations-Schalters das IBS-Masterboard
vom Coprozessorboard gesteuert wird.
Abhilfe:
Vermeiden Sie das Senden von Kommandos an das IBS-Masterboard durch
den Host (PC), wenn das IBS-Masterboard vom Coprozessorboard gesteuert
wird. Überprüfen Sie die Stellung des Boot-Konfigurations-Schalters (siehe Kapitel 4 im Handbuch IBS PC CB UM).
in
ec
om
po
Ursache:
Ursache:
Abhilfe:
5086A
00A1hex
on
l
ERR_PC_USES_MA 00A1
Das Coprozessorboard hat versucht, ein Kommando an das IBS-Masterboard
zu senden, obwohl nach Stellung des Boot-Konfigurations-Schalters das IBSMasterboard vom Host (PC) gesteuert wird.
Vermeiden Sie das Senden von Kommandos an das IBS-Masterboard durch
das Coprozessorboard, wenn das IBS-Masterboard vom Host (PC) gesteuert
wird. Überprüfen Sie die Stellung des Boot-Konfigurations-Schalters (siehe Kapitel Inbetriebnahme).
7-9
InterBus-S
Diagnose zur Treibersoftware
7.2.5 Fehlermeldungen zur Übertragung von Prozessdaten
Diese Fehler treten nur beim Zugriff auf das Data-Interface (DTI) auf.
ERR_AREA_EXCDED
0096hex
Der Zugriff überschreitet die die obere Grenze des ausgewählten Datenbereiches.
Ursache:
Der zu lesenden oder zu schreibende Datensatz ist zu groß. Die Funktion kann
maximal 4 KByte in einem Aufruf lesen.
Abhilfe:
Lesen oder schreiben Sie nur Datensätze von maximal 4 KByte.
Ursache:
Die obere Bereichsgrenze (4 KByte über dem Beginn des Teilnehmerbereiches)
ist überschritten.
Abhilfe:
Beachten Sie, daß die Summe aus Adreß-Offset, relativer Adresse und zu lesender Datenlänge die obere Bereichsgrenze nicht überschreiten darf. Die Teilnehmer- und Datenbereiche sind im Kapitel 5 des Handbuchs IBS PC CB UM
unter Aufteilung des MPMs beschrieben.
0097hex
ne
ERR_INVLD_DATA_CONS
nt
s.
co
m
Bedeutung:
Für die Datenkonsistenz (1,2,4 oder 6 Bytes) wurde ein unzulässiger Wert angegeben.
Abhilfe:
Legen Sie eine zulässige Datenkonsistenz durch Angabe einer der folgenden
Konstanten fest:
DTI_DATA_BYTE
: Byte-Datenkonsistenz (1 Byte)
DTI_DATA_WORD
: Word-Datenkonsistenz (2 Byte)
DTI_DATA_LWORD : Longword-Datenkonsistenz (4 Byte)
DTI_DATA_48BIT
: 48 Bit-Datenkonsistenz (6 Byte)
in
ec
om
po
Ursache:
on
l
7.2.6 Fehlermeldungen unter DOS
ERR_TSR_NOT_LOADED
Ursache:
Abhilfe:
7-10
008Bhex
Der Device-Driver ist noch nicht geladen, trotzdem wurde versucht, auf ihn zuzugreifen.
Laden Sie als Device-Driver auf dem Host das TSR-Programm IBSPCCB.EXE
bzw. auf den Coprozessorboard das TSR-Programm IBSCOP.EXE.
5086A
InterBus-S
Fehlermeldungen unter Microsoft Windows
7.2.7 Fehlermeldungen unter Microsoft Windows
ERR_NODE_IN_USE
Ursache:
00B0hex
Sie haben versucht, den Notification-Mode für einen Node zu aktivieren, für den
der Notification-Mode bereits eingeschaltet war.
ERR_INVLD_HWND
00D1hex
Sie haben einen ungültigen Windows-Handle (hWnd) verwendet
Ursache:
Der angewandte Windows-Handle stimmt nicht mit dem beim Einschalten des
Notification verwendeten überein.
Abhilfe:
Verwenden Sie den korrekten Windows-Handle.
Bemerkung:
Bei Angabe eines falschen Windows- oder Node-Handles wird der NotificationMode nicht deaktiviert.
co
m
Ursache:
s.
ERR_BOARD_NOT_PRES
00D2hex
Sie haben beim Öffnen oder Schließen eines Datenkanals (Funktion
DDI_DevOpenNode oder DDI_DevCloseNode) mit dem Parameter DeviceName eine ungültige Boardnummer ausgewählt. Eine Anschaltbaugruppe mit
dieser Boardnummer ist laut dem Eintrag BoardInUseFlag=False in der Datei
IBSPCCB.INI nicht vorhanden.
Abhilfe:
Überprüfen Sie, ob eine Anschaltbaugruppe mit der von Ihnen angesprochenen
Boardnummer vorhanden ist. Falls dies der Fall ist, korrigieren Sie in der Datei
IBSPCCB.INI den Eintrag auf BoardInUseFlag=True.
om
po
ne
nt
Ursache:
Ursache:
00D3hex
Ein Parameter in der der Datei IBSPCCB.INI ist nicht gültig.
Überprüfen Sie die Einträge in der Datei IBSPCCB.INI.
on
l
Abhilfe:
in
ec
ERR_INVLD_INI_PARAM
5086A
7-11
InterBus-S
Diagnose zur Treibersoftware
7.2.8 Fehlermeldungen unter OS/2
ERR_INVLD_PID
00C0hex
Ursache:
Sie haben einen falschen Process-Identifier angegeben.
Abhilfe:
Verwenden Sie beim Deaktivieren des Notification-Modes die gleichen Parameter (nodeHd, processId), die auch beim Aktivieren des Notification-Modes verwendet wurden.
ERR_BLK_MODE_IS_ENBLD
00C1hex
Der Blocked-Mode ist für diesen Node bereits eingeschaltet.
Abhilfe:
Bevor sich ein neuer Prozeß anmelden kann, muß die Funktion
DDI_ClrMsgNotification aufgerufen werden.
co
m
Ursache:
ERR_THREAD_IS_WAITING
00C2hex
Ein anderer Thread wartet bereits auf Messages von diesem Node und befindet
sich dabei im Modus Sleep. Während ein Thread auf Messages von einem
Node wartet, kann von diesen Node generell kein anderer Thread Messages lesen.
Abhilfe:
Beenden Sie gegebenenfalls den Notification-Mode für den schon länger wartenden Thread.
po
ne
nt
s.
Ursache:
in
ec
Abhilfe:
Der an die Funktion DDI_MXI_RcvMessage übergebene Empfangspuffer ist
nicht gültig, d. h. er kann nicht zum Abspeichern einer Nachricht verwendet werden. Andernfalls meldet OS/2 eine Schutzverletzung.
Überprüfen Sie den für den Emfangspuffer zur Verfügung gestellten Speicherbereich.
on
l
Ursache:
ERR_INVLD_NOTIFY_MODE
Ursache:
Abhilfe:
00C9hex
om
ERR_INVLD_MEMORY
00CAhex
Es wurde versucht, einen unzulässigen Notification-Mode zu aktivieren. Die
Treibersoftware-Versionen 0.9 und 0.91 unterstützen nur den Blocked-Mode.
Verwenden Sie einen Notification-Mode, den ihre Treibersoftware unterstützt.
ERR_BLOCK_TIMEOUT
00CBhex
Ursache:
Bei der Aktivierung des Notification-Modes für einen Thread haben Sie in das
Strukturelement timeout die Zeit eingetragen, welche ein Thread maximal auf
eine Message warten soll. Da innerhalb dieser Zeit keine Message empfangen
worden ist, wurde der Thread mit der Fehlermeldung ERR_BLOCK_TIMEOUT
(00CBhex) beendet.
Abhilfe:
Stellen Sie durch Überprüfen von Anwenderprogramm und Anlage fest, warum
eine zu erwartende Nachricht nicht rechtzeitig eingetroffen ist. Erhöhen Sie gegebenenfalls die Wartezeit.
7-12
5086A
Anhang
A
Anhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A-3
co
A
m
Anhang zum Dokument
Abbildungsverzeichnis . . . . . . . . . . . . . . . . A-3
Tabellenverzeichnis . . . . . . . . . . . . . . . . . A-4
Stichwortverzeichnnis. . . . . . . . . . . . . . . . . A-5
on
l
in
ec
om
po
ne
nt
s.
A.1
A.1
A.1
5086A
A-1
A-2
5086A
s.
nt
ne
po
om
in
ec
on
l
co
m
InterBus-S
Anhang
A Anhang
A.1 Abbildungsverzeichnis
Kapitel 2
Realisierung der Treibersoftware unter Microsoft-DOS für C . . . . . 2-3
Realisierung der Treibersoftware für C auf dem COP . . . . . . . . 2-3
Kapitel 3
Kapitel 3
m
Realisierung der Treibersoftware unter Microsoft-DOS für Pascal . . . 3-3
s.
co
Realisierung der Treibersoftware für Pascal auf dem COP . . . . . . 3-3
Kapitel 4
nt
Realisierung der IBS-Treibersoftware unter Microsoft-Windows . . . . 4-3
ne
Notification-Mode unter Microsoft Windows . . . . . . . . . . . . 4-4
po
Beispieleinträge in der DateiIBSPCCB.INI . . . . . . . . . . . . 4-6
om
Kapitel 5
Realisierung der IBS-Treibersoftware für IBM OS/2
. . . . . . . . 5-3
Kapitel 6
in
ec
Blocked-Mode unter OS/2 . . . . . . . . . . . . . . . . . . 5-4
on
l
Verwendung der Makros zur Datenkonvertierung . . . . . . . . . 6-3
5086A
A-3
InterBus-S
Anhang
A.2 Tabellenverzeichnis
Kapitel 1
Betriebssysteme . . . . . . . . . . . . . . . . . . . . . . 1-3
Compiler . . . . . . . . . . . . . . . . . . . . . . . . . 1-3
Kombinationen von Compiler und Betriebsystem auf dem Host . . . . 1-4
Kombinationen von Compiler und Betriebsystem auf dem COP . . . . 1-4
Kapitel 2
. . . . . . . . . . . 2-5
co
Übersicht über die DDI-Funktionen für DOS
m
Libraries und Include-Dateien . . . . . . . . . . . . . . . . . 2-4
s.
Übersicht über die Funktionen zur Kontrolle der Hardware . . . . . . 2-5
nt
Kapitel 3
Kapitel 3
ne
Übersicht über die DDI-Funktionen für DOS
. . . . . . . . . . . 3-5
po
Übersicht über die Funktionen zur Kontrolle der Hardware . . . . . . 3-5
om
Kapitel 4
Übersicht über die DDI-Funktionen für Microsoft Windows . . . . . . 4-7
Kapitel 5
in
ec
Übersicht über die Funktionen zur Kontrolle der Hardware . . . . . . 4-7
on
l
Library und Include-Dateien . . . . . . . . . . . . . . . . . . 5-6
Übersicht über die DDI-Funktionen für OS/2 . . . . . . . . . . . 5-8
Übersicht über die Funktionen zur Kontrolle der Hardware . . . . . . 5-8
Kapitel 6
Übersicht über die Makros zur Datenkonvertierung . . . . . . . . . 6-4
Kapitel 7
Übersicht über die Meldungen des DDI . . . . . . . . . . . . . 7-3
A-4
5086A
InterBus-S
Stichwortverzeichnnis
A.3 Stichwortverzeichnnis
L
Library 2-4
A
M
Access-Permission 2-6, 3-6
Makros zur Datenkonvertierung 6-3
Message-Block 2-8, 3-8
Message-Length 2-8, 3-8
Microsoft Windows 4-3
Motorola-Format 6-3
MPM, Daten-Adresse 2-11
B
Blocked-Mode 5-3, 5-10
C
Compileroption für OS/2 5-7
CONFIG.SYS für OS/2 5-6
Controller-Fehler 2-18, 3-18
co
Node-Handle 2-6, 3-6
Notification-Mode 4-3, 4-9, 5-3
Notification-Mode für OS/2 5-3
Notification-Mode für Windows 4-3, 4-9
nt
O
po
ne
OS/2 5-3
in
ec
om
Data-Interface 2-10, 3-10
Datenkanal 2-6, 3-6
Datenkonsistenz 2-10, 3-10
Device-Name 2-6, 3-6
Diagnosefunktion 2-18, 3-18
DIP-Schalter 2-13, 3-13
DTI-Adresse 2-10, 2-11, 3-10, 3-11
Dynamic- Link-Library für OS/2 5-5
Dynamic-Link-Library 5-5
Dynamic-Link-Library für Windows 4-5
s.
D
F
on
l
Fehlermeldungen des DDI 7-3, 7-4
Fernbusfehler 2-18, 3-18
G
m
N
GetIBSDiagnostic 2-18, 3-18
P
Pascal-Interface 4-6
Peripheriebusfehler 2-18, 3-18
Prozeßabbild 6-3
S
Speichermodell 2-4
SRAM 2-14, 3-14
SysFail-Register 2-14, 3-14
T
Teilnehmerfehler 2-18, 3-18
TSR-Programm 2-3, 3-3
I
IBSPCCB.INI 4-6
Include-Datei 2-4, 4-5
Include-Datei für DOS 2-4
Include-Datei für OS/2 5-5
Include-Datei für Windows 4-5
Intel-Format 6-3
IPMS 6-3
K
U
Unit 3-4
W
Watchdog 2-16, 3-16
Windows-Handle 4-9
Windows-Message 4-3
Karten-Code 7-5
5086A
A-5
on
l
in
ec
om
po
ne
nt
s.
co
m
InterBus-S
Anhang
A-6
5086A
Ihre Meinung interessiert uns!
Geben Sie uns die Möglichkeit, Ihre Anregungen, Wünsche und Kritikpunkte zum vorliegenden InterBusHandbuch zu erfahren. Aus diesem Grund beantworten Sie bitte den Fragebogen auf der Rückseite.
Jeder noch so kleine Hinweis oder Kommentar wird von uns bearbeitet.
Dieses Antwortschreiben können Sie als FAX-Vorlage, im Fensterbrief oder auch - gefaltet (1. / 2.) und
zusammengeklebt (mit Tesafilm) - direkt versenden.
Falls Sie einen Briefumschlag verwenden, kennzeichnen Sie diesen im rechten,
oberen Teil der Vorderseite mit dem Vermerk "Entgelt bezahlt Empfänger".
m
Vielen Dank !
..............
Entgelt
bezahlt
Empfänger
po
ne
nt
s.
co
...............................................................................................................................................................................1.
om
Antwort
on
l
in
ec
Phoenix Contact GmbH & Co. KG
Produktmarketing InterBus/ME-DOK
Flachsmarktstraße 8 - 28
D-32825 Blomberg
................................................................................................................................................................................2.
..............
FAX-NR.: *49-(0)5235-331199
FAX-Antwort
Phoenix Contact GmbH & Co. KG
Produktmarketing InterBus/ME-DOK
Datum:
..............................
Anzahl Seiten:
....................
Absender:
Firma:
.............................................................................
Name:
................................................................................
.............................................................................
Abteilung: ................................................................................
Straße:
.............................................................................
Funktion:
................................................................................
Ort:
.......................... ................................................
Tel.:
............................... / ..............................................
Fax:
............................... / ..............................................
Revision: .............
Art.-Nr.: .......................
co
Typ: ......................................................................
m
Angaben zum Handbuch:
s.
Meine Meinung zum Handbuch
Gestaltung
nt
Ist das Inhaltsverzeichnis übersichtlich gestaltet?
ne
Sind die gewählten Bilder/Grafiken verständlich/aussagekräftig?
Fördert die Seitengestaltung die schnelle Infosuche?
po
Ist die Kapitelinhaltsübersicht ausführlich?
Sind die Texterklärungen zu den Bildern ausreichend?
in
ec
Inhalt
om
Entspricht die Qualität der Bilder (Übersichtlichkeit/selbsterklärend) Ihren
Erwartungen/Ansprüchen?
Führen die Indexeinträge zu den informativen Stellen?
Sind die gewählten Fachbegriffe verständlich/aussagekräftig?
Sind die gewählten Formulierungen verständlich/aussagekräftig?
Sind die gewählten Verzeichniseinträge verständlich/aussagekräftig?
on
l
Welches Verzeichnis benutzen Sie am häufigsten, um Informationen zu
suchen? .............................................................................................................
Fehlen wichtige Informationen?
Wenn ja, welche?
...............................................................................................................................
...............................................................................................................................
Sind die Beispiele praxisgerecht?
Ist das Handbuch gut zu handhaben?
Wünschen Sie mehr Platz für Notizen?
Ja
r
r
r
r
r
r
r
z.Teil
r
r
r
r
r
r
r
Nein
Ja
z.Teil
Nein
r
r
r
r
r
r
r
r r r
r r r
r r r
r r r
r r r
r r r
r r r
Ich habe folgende Anregung(en)/Anmerkung(en):
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
5050CF17
D
N
R
2
5
3
2

Similar documents