B Die Datentypen des HLI - Onlinecomponents.com
B Die Datentypen des HLI - Onlinecomponents.com
B Die Datentypen des HLI - Onlinecomponents.com
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
AUTOMATIONWORX<br />
Anwenderhandbuch<br />
IBS PC SC <strong>HLI</strong> UM<br />
Art.-Nr.:<br />
2729156<br />
Anwender-Schnittstelle Version 2.x für<br />
Hochsprachen-Programmierung der<br />
INTERBUS Standard Controller Generation 4<br />
online<strong>com</strong>ponents.<strong>com</strong>
online<strong>com</strong>ponents.<strong>com</strong>
AUTOMATIONWORX<br />
Anwenderhandbuch<br />
Anwender-Schnittstelle Version 2.x für Hochsprachen-Programmierung<br />
der INTERBUS Standard Controller Generation 4<br />
Bezeichnung:<br />
Revision:<br />
Art.-Nr.:<br />
IBS PC SC <strong>HLI</strong> UM<br />
02<br />
2729156<br />
<strong>Die</strong>ses Handbuch ist gültig für:<br />
Bezeichnung Revision Art.-Nr.<br />
IBS PC ISA SC/I-T 17 2719234<br />
IBS PC 104 SC-T 15 2721701<br />
IBS PCI SC/I-T 13 2725260<br />
IBS PCCARD SC/I-T 02 2724876<br />
IBS ISA SC/486DX/I-T 10 2723945<br />
IBS ETH DSC/I-T 18 2722920<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
06/2006<br />
5626_de_02<br />
PHOENIX CONTACT
IBS PC ISA SC/I-T<br />
Bitte beachten Sie folgende Hinweise<br />
Damit Sie das in diesem Handbuch beschriebene Produkt sicher einsetzen können, lesen<br />
und beachten Sie bitte dieses Handbuch aufmerksam. <strong>Die</strong> folgenden Hinweise geben<br />
Ihnen eine erste Orientierung zum Gebrauch <strong>des</strong> Handbuchs.<br />
Zielgruppe <strong>des</strong> Handbuches<br />
Der in diesem Handbuch beschriebene Produktgebrauch richtet sich ausschließlich an<br />
Elektrofachkräfte oder von Elektrofachkräften unterwiesene Personen, die mit den<br />
geltenden nationalen Normen und sonstigen Vorschriften zur Elektrotechnik und insbesondere<br />
mit den einschlägigen Sicherheitskonzepten vertraut sind.<br />
Für Fehlhandlungen und Schäden, die an Produkten von Phoenix Contact und Fremdprodukten<br />
durch Missachtung der Informationen dieses Handbuchs entstehen, übernimmt<br />
Phoenix Contact keine Haftung.<br />
Erklärungen zu den verwendeten Symbolen<br />
Das Symbol Achtung bezieht sich auf Handlungen, die einen Schaden der Hard- oder<br />
Software oder Personenschaden (im indirekten Zusammenhang mit gefährlicher<br />
Prozessperipherie) zur Folge haben können.<br />
Das Symbol Hinweis vermittelt Bedingungen, die für einen fehlerfreien Betrieb unbedingt<br />
beachtet werden müssen. Es weist außerdem auf Tipps und Ratschläge für den effizienten<br />
Geräteeinsatz und die Software-Optimierung hin, um Ihnen Mehrarbeit zu ersparen.<br />
Das Symbol Text verweist Sie auf weiterführende Informationsquellen (Handbücher,<br />
Datenblätter, Literatur etc.) zu dem angesprochenen Thema, Produkt o.ä. Ebenso gibt<br />
dieser Text hilfreiche Hinweise zur Orientierung im Handbuch.<br />
Ihre Meinung interessiert uns<br />
Wir sind ständig bemüht, die Qualität unserer Handbücher zu verbessern.<br />
Sollten Sie Anregungen und Verbesserungsvorschläge zu Inhalt und Gestaltung unseres<br />
Handbuchs haben, würden wir uns freuen, wenn Sie uns Ihre Vorschläge zusenden.<br />
PHOENIX CONTACT GmbH & Co. KG<br />
Documentation Services<br />
32823 Blomberg<br />
DEUTSCHLAND<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Telefon +49 - (0) 52 35 - 3-00<br />
Telefax +49 - (0) 52 35 - 3-4 20 21<br />
E-Mail tecdoc@phoenixcontact.<strong>com</strong><br />
PHOENIX CONTACT<br />
5626_de_02
IBS PC ISA SC/I-T<br />
Allgemeine Nutzungsbedingungen für Technische Dokumentation<br />
<strong>Die</strong> Phoenix Contact GmbH & Co. KG behält sich das Recht vor, die technische Dokumentation<br />
und die in den technischen Dokumentationen beschriebenen Produkte jederzeit<br />
ohne Vorankündigung zu ändern, zu korrigieren und/oder zu verbessern.<br />
Der Erhalt von technischer Dokumentation (insbesondere von Datenblättern, Montageanleitungen,<br />
Handbüchern etc.) begründet keine weitergehende Informationspflicht der<br />
Phoenix Contact GmbH & Co. KG über etwaige Änderungen der Produkte und/oder<br />
technischer Dokumentation. Anderslautende Vereinbarungen gelten nur, wenn sie ausdrücklich<br />
von der Phoenix Contact GmbH & Co. KG in schriftlicher Form bestätigt sind.<br />
Bitte beachten Sie, dass die übergebene Dokumentation ausschließlich eine produktbezogene<br />
Dokumentation ist.<br />
Obwohl die Phoenix Contact GmbH & Co. KG stets mit der notwendigen Sorgfalt darum<br />
bemüht ist, dass die Informationen und Inhalte korrekt und auf dem aktuellen Stand der<br />
Technik sind, können die Informationen technische Ungenauigkeiten und/oder Druckfehler<br />
enthalten. <strong>Die</strong> Phoenix Contact GmbH & Co. KG gibt keine Garantien oder Zusicherungen<br />
in Bezug auf die Genauigkeit und Richtigkeit der Informationen.<br />
<strong>Die</strong> Phoenix Contact GmbH & Co. KG übernimmt keine Haftung oder Verantwortung für<br />
Fehler oder Auslassungen im Inhalt der technischen Dokumentation (insbesondere Datenblätter,<br />
Montageanleitungen, Handbücher etc.).<br />
Sämtliche der technischen Dokumentation zu entnehmenden Informationen werden –<br />
soweit gesetzlich zulässig – ohne jegliche ausdrückliche, konkludente oder stillschweigende<br />
Mängelhaftung oder Garantie erteilt. Sie enthalten keinerlei Beschaffenheitsvereinbarungen,<br />
beschreiben keine handelsübliche Qualität und stellen auch nicht Eigenschaftszusicherungen<br />
oder Zusicherungen im Hinblick auf die Eignung zu einem bestimmten<br />
Zweck dar.<br />
<strong>Die</strong> Phoenix Contact GmbH & Co. KG behält sich das Recht vor, die Informationen und die<br />
in diesen Informationen beschriebenen Produkte jeder Zeit ohne Vorankündigung zu<br />
ändern, zu korrigieren und/oder zu verbessern.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02<br />
PHOENIX CONTACT
IBS PC ISA SC/I-T<br />
Erklärungen zu den rechtlichen Grundlagen<br />
<strong>Die</strong>ses Handbuch ist einschließlich aller darin enthaltenen Abbildungen urheberrechtlich<br />
geschützt. Jede Drittverwendung dieses Handbuchs ist verboten. <strong>Die</strong> Reproduktion,<br />
Übersetzung und öffentliche Zugänglichmachung sowie die elektronische und fotografische<br />
Archivierung und Veränderung bedarf der schriftlichen Genehmigung der<br />
Firma Phoenix Contact. Zuwiderhandlungen verpflichten zu Schadenersatz.<br />
Phoenix Contact behält sich jegliche Änderungen, die dem technischen Fortschritt dienen,<br />
vor.<br />
Alle Rechte für den Fall der Patenterteilung oder Gebrauchsmustereintragung sind<br />
Phoenix Contact vorbehalten. Fremdprodukte werden stets ohne Vermerk auf Patentrechte<br />
genannt. <strong>Die</strong> Existenz solcher Rechte ist daher nicht auszuschließen.<br />
Internet<br />
Aktuelle Informationen zu Produkten von Phoenix Contact finden Sie im Internet unter:<br />
www.phoenixcontact.<strong>com</strong>.<br />
Stellen Sie sicher, dass Sie immer mit der aktuellen Dokumentation arbeiten.<br />
<strong>Die</strong>se steht unter der folgenden Adresse zum Download bereit:<br />
www.download.phoenixcontact.de.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
PHOENIX CONTACT<br />
5626_de_02
Inhaltsverzeichnis<br />
1 Grundlagen zum <strong>HLI</strong> ..............................................................................................................1-1<br />
1.1 Allgemeines........................................................................................................1-1<br />
1.2 Hardware- und Software-Anforderungen ...........................................................1-2<br />
2 Installation ..............................................................................................................................2-1<br />
2.1 Installation unter Windows 95/98 und Windows NT 4........................................2-1<br />
2.2 Installation unter MS-DOS .................................................................................2-1<br />
2.3 Komponenten.....................................................................................................2-2<br />
2.4 Test ....................................................................................................................2-2<br />
3 Struktur und Funktionalität <strong>des</strong> <strong>HLI</strong> ........................................................................................3-1<br />
3.1 Anschaltbaugruppen-Initialisierung und INTERBUS-Anlauf...............................3-1<br />
3.1.1 <strong>Die</strong> einfache Standard-Initialisierung ..................................................3-1<br />
3.2 Prozessdaten-Management ...............................................................................3-3<br />
3.2.1 Deklaration von INTERBUS-Prozessdaten Objekten (PDO) ..............3-3<br />
3.2.2 Registrierung von INTERBUS-Prozessdaten Objekten ......................3-3<br />
3.3 Ereignis-Management ........................................................................................3-5<br />
3.4 INTERBUS-Steuerung .......................................................................................3-5<br />
3.5 PCP-<strong>Die</strong>nste und -Management ........................................................................3-6<br />
3.6 Informationsdienste............................................................................................3-7<br />
3.7 <strong>HLI</strong>-Zustands-Maschine .....................................................................................3-7<br />
4 Anwendungs-Erstellung ..........................................................................................................4-1<br />
4.1 Anwendungs-Erstellung mit 'C / C++'.................................................................4-1<br />
4.1.1 MS-DOS-Anwendungen erstellen ......................................................4-1<br />
4.1.2 Windows-32-Bit-Anwendungen erstellen ............................................4-1<br />
4.1.3 Co-Prozessor-Anwendungen erstellen<br />
(DOS-Anwendungen) .........................................................................4-1<br />
4.2 Anwendungs-Erstellung mit 'Delphi'...................................................................4-2<br />
4.3 Anwendungs-Erstellung mit 'Visual Basic'..........................................................4-2<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5 Anwendungs-Programmierung ...............................................................................................5-1<br />
5.1 Initialisierung der Anschaltbaugruppe und<br />
INTERBUS-Anlauf..............................................................................................5-1<br />
5.1.1 Instanzierung <strong>des</strong> Status-Datentyps ...................................................5-1<br />
5.1.2 Standard-Initialisierung .......................................................................5-1<br />
5.1.3 Initialisierung mit Konfigurations-Vorgabe ..........................................5-2<br />
5.2 Registrierung von Prozessdaten-Objekten.........................................................5-4<br />
5.2.1 Prozessdaten-Bit-Objekte registrieren ................................................5-5<br />
5.2.2 Prozessdaten-Bitstring-Objekte registrieren .......................................5-6<br />
5.2.3 Prozessdaten Objekte registrieren<br />
(Byte, Wort und Doppelwort) ..............................................................5-7<br />
5626_de_02 PHOENIX CONTACT i
IBS PC SC <strong>HLI</strong> UM<br />
5.3 Prozessdaten-Bearbeitung...............................................................................5-10<br />
5.3.1 Standard-Busbetrieb (asynchron) .....................................................5-10<br />
5.3.3 Anwendungsgesteuerter Busbetrieb ................................................5-11<br />
5.4 Steuerung <strong>des</strong> INTERBUS...............................................................................5-15<br />
5.4.1 Starten <strong>des</strong> Datentransfers ...............................................................5-15<br />
5.4.2 Stoppen <strong>des</strong> Datentransfers .............................................................5-15<br />
5.4.3 Alarm-Stopp <strong>des</strong> Datentransfers ......................................................5-15<br />
5.4.4 Schalten von Fernbus-Segmenten ...................................................5-16<br />
5.4.5 Schalten von Lokalbus-Segmenten ..................................................5-16<br />
5.5 PCP-Kommunikation........................................................................................5-18<br />
5.5.2 Teilnehmer-Identifikation (Identify-<strong>Die</strong>nst) ........................................5-20<br />
5.6 Fehler- und Ereignisbehandlung ......................................................................5-27<br />
5.6.1 Negative Funktionsausführung .........................................................5-27<br />
5.6.2 INTERBUS-Status ............................................................................5-27<br />
5.6.4 Ereignis-Filter einstellen ...................................................................5-28<br />
5.6.5 Ereignis-Fenster ...............................................................................5-29<br />
5.7 Informations-Funktionen ..................................................................................5-30<br />
5.7.1 Lesen der INTERBUS-Controller-Daten ...........................................5-30<br />
5.7.2 Lesen der INTERBUS-Daten ............................................................5-30<br />
5.7.4 Lesen von Diagnose-Daten ..............................................................5-31<br />
5.8 IBS ISA SC/486DX/I-T:<br />
Kommunikations-Funktionen............................................................................5-32<br />
5.8.1 Senden und Empfangen von Nachrichten ........................................5-32<br />
6 Anwendungs-Projektierung mit IBS CMD G4 .........................................................................6-1<br />
6.1 Einbinden <strong>des</strong> Export-Filters ..............................................................................6-1<br />
6.2 Erstellen der Teilnehmer-Konfiguration..............................................................6-1<br />
6.3 Definition der Prozessdaten-Objekte .................................................................6-2<br />
6.4 Der Export ..........................................................................................................6-2<br />
6.5 Geräte-Parametrierungen nutzen ......................................................................6-4<br />
A <strong>HLI</strong> Software-Architektur ........................................................................................................ A-5<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
A 1 Das Device-Driver-Interface (DDI) .................................................................... A-5<br />
A 2 Software-Schnittstellen, Betriebssysteme und Programmiersprachen ............. A-5<br />
A 2.1 MS-DOS-Anwendungen .................................................................... A-5<br />
A 2.2 32-Bit-Anwendungen unter Windows 95/98 ...................................... A-6<br />
A 2.3 32-Bit-Anwendungen unter Windows NT 4 ....................................... A-6<br />
A 2.4 MS-DOS-Anwendungen für IBS PC ISA SC/486DX/I-T .................... A-7<br />
ii PHOENIX CONTACT 5626_de_02
Inhaltsverzeichnis<br />
B<br />
C<br />
<strong>Die</strong> <strong>Datentypen</strong> <strong>des</strong> <strong>HLI</strong> .........................................................................................................B-1<br />
B 1 Standard-<strong>Datentypen</strong> ........................................................................................ B-1<br />
B 2 Prozessdaten-Objekt-Typen ............................................................................. B-2<br />
B 3 Datentyp für den Controller-Status: T_<strong>HLI</strong>_STATE .......................................... B-2<br />
B 4 Datentyp für Zeitstempel: T_<strong>HLI</strong>_TIME............................................................. B-3<br />
B 5 Datentyp für ein <strong>HLI</strong>-Ereignis: T_<strong>HLI</strong>_EVENT .................................................. B-3<br />
B 6 Datentyp für Controller-Informationen: T_<strong>HLI</strong>_SC_INFO.................................. B-3<br />
B 7 Datentyp für Bus-Informationen: T_<strong>HLI</strong>_BUS_INFO......................................... B-4<br />
B 8 Datentyp für Teilnehmer-Konfigurations-Daten: T_<strong>HLI</strong>_DEVICE_DATA.......... B-4<br />
B 9 Datentyp für Teilnehmer-Informationen: T_<strong>HLI</strong>_DEVICE_INFO....................... B-5<br />
B 10 Datentyp für PCP-Teilnehmer-Identifikation: T_<strong>HLI</strong>_PCP_DEVICE_INFO....... B-5<br />
B 11 Datentyp für PCP- Read / Write-<strong>Die</strong>nst: T_<strong>HLI</strong>_PCP_RW................................ B-6<br />
B 12 Datentyp für PCP- Progamm-<strong>Die</strong>nste: T_<strong>HLI</strong>_PCP_PRG ................................ B-6<br />
B 13 Datentyp für Diagnose-Informationen: T_<strong>HLI</strong>_SC_DIAG.................................. B-7<br />
B 14 Datentyp für nachrichtenorientierte Kommunikation: T_<strong>HLI</strong>_MSG ................... B-7<br />
<strong>HLI</strong>-Funktions-Referenz .........................................................................................................C-1<br />
C 1 <strong>Die</strong> <strong>HLI</strong>-Funktionen im Überblick....................................................................... C-1<br />
C 2 System-Initialisierung ........................................................................................ C-5<br />
C 2.1 IBS_<strong>HLI</strong>_Init ...................................................................................... C-5<br />
C 2.2 IBS_<strong>HLI</strong>_Init_CFG ............................................................................. C-6<br />
C 3 Ereignis-Management ....................................................................................... C-8<br />
C 3.1 IBS_<strong>HLI</strong>_EnableEvents ..................................................................... C-8<br />
C 3.2 IBS_<strong>HLI</strong>_DisableEvents .................................................................... C-9<br />
C 3.3 IBS_<strong>HLI</strong>_GetEventInfo .................................................................... C-10<br />
C 3.4 IBS_<strong>HLI</strong>_GetEventText ................................................................... C-11<br />
C 3.5 IBS_<strong>HLI</strong>_CreateLogWindow (Nur Windows-Versionen) ................. C-12<br />
C 3.7 IBS_<strong>HLI</strong>_LogUserEvent (Nur Windows-Versionen) ........................ C-13<br />
C 4 IBS_<strong>HLI</strong>_LogAutoSave (Nur Windows-Versionen) ......................................... C-14<br />
C 5 Informations-Funktionen ................................................................................. C-15<br />
C 5.1 IBS_<strong>HLI</strong>_GetControllerInfo .............................................................. C-15<br />
C 5.3 IBS_<strong>HLI</strong>_GetDeviceInfo .................................................................. C-16<br />
C 5.4 IBS_<strong>HLI</strong>_GetDiagnosticInfo ............................................................. C-17<br />
C 6 Registrierung von Prozessdaten-Objekten...................................................... C-18<br />
C 6.1 IBS_<strong>HLI</strong>_RegisterPDObject ............................................................ C-18<br />
C 6.2 IBS_<strong>HLI</strong>_RegisterPDO_BOOL ........................................................ C-21<br />
C 6.3 IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING ............................................... C-22<br />
C 6.5 IBS_<strong>HLI</strong>_RegisterPDO_WORD ....................................................... C-26<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C 7 <strong>HLI</strong>-Zustands-Maschine .................................................................................. C-30<br />
C 7.1 IBS_<strong>HLI</strong>_Process ............................................................................ C-30<br />
5626_de_02 PHOENIX CONTACT iii
IBS PC SC <strong>HLI</strong> UM<br />
C 8 Prozessdaten-Management ............................................................................ C-30<br />
C 8.1 IBS_<strong>HLI</strong>_PD_In ............................................................................... C-30<br />
C 8.3 IBS_<strong>HLI</strong>_PD_Input .......................................................................... C-31<br />
C 8.4 IBS_<strong>HLI</strong>_PD_Out ............................................................................ C-32<br />
C 8.5 IBS_<strong>HLI</strong>_PD_DeviceOut ................................................................. C-32<br />
C 9 Anwendungsgesteuerte Betriebsart ................................................................ C-34<br />
C 9.1 IBS_<strong>HLI</strong>_GetCyclePhase ................................................................ C-34<br />
C 9.2 IBS_<strong>HLI</strong>_RunCycle .......................................................................... C-36<br />
C 9.3 IBS_<strong>HLI</strong>_RunCompleteCycle .......................................................... C-36<br />
C 10 PCP-<strong>Die</strong>nste ................................................................................................... C-37<br />
C 10.1 IBS_<strong>HLI</strong>_PCP_DeviceState ............................................................ C-37<br />
C 10.2 IBS_<strong>HLI</strong>_PCP_IdentifyRequest ....................................................... C-38<br />
C 10.3 IBS_<strong>HLI</strong>_PCP_IdentifyService ........................................................ C-39<br />
C 10.5 IBS_<strong>HLI</strong>_PCP_ReadService ........................................................... C-42<br />
C 10.6 IBS_<strong>HLI</strong>_PCP_WriteRequest .......................................................... C-44<br />
C 10.8 IBS_<strong>HLI</strong>_PCP_RegisterClientObject ............................................... C-47<br />
C 10.11 IBS_<strong>HLI</strong>_PCP_StopRequest ........................................................... C-50<br />
C 10.12 IBS_<strong>HLI</strong>_PCP_StopService ............................................................ C-51<br />
C 10.13 IBS_<strong>HLI</strong>_PCP_ResumeRequest ..................................................... C-52<br />
C 10.14 IBS_<strong>HLI</strong>_PCP_ResumeService ...................................................... C-53<br />
C 10.15 IBS_<strong>HLI</strong>_PCP_ResetRequest ......................................................... C-53<br />
C 10.16 IBS_<strong>HLI</strong>_PCP_ResetService .......................................................... C-54<br />
C 11 Zugriff auf PCP-Objektdaten ........................................................................... C-55<br />
C 11.1 IBS_<strong>HLI</strong>_PCP_LoadObjectByName ................................................ C-55<br />
C 11.3 IBS_<strong>HLI</strong>_PCP_LoadObjectByEntry ................................................. C-56<br />
C 11.4 IBS_<strong>HLI</strong>_PCP_InitObject ................................................................. C-56<br />
C 11.5 IBS_<strong>HLI</strong>_PCPObject_SetInt16 ........................................................ C-57<br />
C 11.7 IBS_<strong>HLI</strong>_PCPObject_SetFloat ........................................................ C-58<br />
C 11.9 IBS_<strong>HLI</strong>_PCPObject_GetInt16 ........................................................ C-59<br />
C 11.10 IBS_<strong>HLI</strong>_PCPObject_GetInt32 ........................................................ C-59<br />
C 11.11 IBS_<strong>HLI</strong>_PCPObject_GetFloat ........................................................ C-60<br />
C 11.12 IBS_<strong>HLI</strong>_PCPObject_GetString ...................................................... C-60<br />
C 12 INTERBUS-<strong>Die</strong>nste......................................................................................... C-61<br />
C 12.1 IBS_<strong>HLI</strong>_StartBus ........................................................................... C-61<br />
C 12.2 IBS_<strong>HLI</strong>_StopBus ............................................................................ C-61<br />
C 12.3 IBS_<strong>HLI</strong>_AlarmStop ........................................................................ C-61<br />
C 12.4 IBS_<strong>HLI</strong>_SwitchRemoteBus ............................................................ C-62<br />
C 12.5 IBS_<strong>HLI</strong>_SwitchLocalBus ................................................................ C-62<br />
C 12.6 IBS_<strong>HLI</strong>_SwitchGroup ..................................................................... C-63<br />
C 13 Host-Kommunikations-Funktionen<br />
(Nur Co-Prozessor-Version)............................................................................ C-64<br />
C 13.1 IBS_<strong>HLI</strong>_SendMessageToHost ....................................................... C-64<br />
C 13.2 IBS_<strong>HLI</strong>_ReceiveMessageFromHost .............................................. C-65<br />
C 13.3 IBS_<strong>HLI</strong>_ReadDataFromHost ......................................................... C-65<br />
C 13.4 IBS_<strong>HLI</strong>_WriteDataToHost .............................................................. C-66<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
iv PHOENIX CONTACT 5626_de_02
Inhaltsverzeichnis<br />
C 14 Kommunikation mit dem Co-Prozessor<br />
(Nur Win32 -Version unter Windows NT)........................................................ C-67<br />
C 14.1 IBS_<strong>HLI</strong>_SendMessageToCop ....................................................... C-67<br />
C 14.3 IBS_<strong>HLI</strong>_WaitForMessageFromCop ............................................... C-68<br />
C 14.4 IBS_<strong>HLI</strong>_ReadDataFromCop .......................................................... C-69<br />
C 14.5 IBS_<strong>HLI</strong>_WriteDataToCop .............................................................. C-70<br />
C 15 Steuerungs-Überwachung .............................................................................. C-72<br />
C 15.1 IBS_<strong>HLI</strong>_ActivateWatchdog ............................................................ C-72<br />
D <strong>HLI</strong>-Klassendefinition.............................................................................................................. D-1<br />
D 1 C++ ................................................................................................................... D-4<br />
D 1.1 Der Konstruktor zur Initialisierung ohne Konfigurationsvorgabe ....... D-4<br />
D 1.4 Destruktor .......................................................................................... D-6<br />
D 1.5 Public-Eigenschaften ......................................................................... D-6<br />
D 2 Delphi ................................................................................................................ D-7<br />
D 2.1 Der Konstruktor zur Initialisierung ohne Konfigurationsvorgabe ....... D-7<br />
D 2.4 INTERBUS-Controller deinitialisieren ................................................ D-9<br />
D 2.5 Public-Eigenschaften ......................................................................... D-9<br />
E <strong>HLI</strong>-Co<strong>des</strong> .............................................................................................................................. E-1<br />
E 1 Positive Funktions-Ausführung ......................................................................... E-1<br />
E 2 Allgemeine Fehler-Co<strong>des</strong>.................................................................................. E-1<br />
E 3 INTERBUS-Zustands-Co<strong>des</strong>............................................................................. E-3<br />
E 4 Zustands-Co<strong>des</strong> für PCP-Teilnehmer ............................................................... E-4<br />
E 5 Zustands-Co<strong>des</strong> für PCP-<strong>Die</strong>nste..................................................................... E-5<br />
E 6 Ereignis-Co<strong>des</strong>.................................................................................................. E-6<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT v
IBS PC SC <strong>HLI</strong> UM<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
vi PHOENIX CONTACT 5626_de_02
Grundlagen zum <strong>HLI</strong><br />
1 Grundlagen zum <strong>HLI</strong><br />
1.1 Allgemeines<br />
Das High-Level-Language-Interface (<strong>HLI</strong>) bietet dem INTERBUS-Anwender eine möglichst<br />
einfache, aber effiziente Programmierschnittstelle zur Entwicklung von Steuerungs-<br />
Anwendungen in Hochsprache für die INTERBUS Anschaltbaugruppen IBS PC ISA SC/I-<br />
T, IBS PCI SC/I-T, IBS PC 104 SC-T, IBS PCCARD SC/I-T, IBS ISA SC/486DX/I-T und<br />
IBS ETH DSC/I-T (MS-DOS und Windows 32-Bit-Anwendungen).<br />
Es setzt vollständig auf dem bestehenden Device-Driver-Interface (DDI) von<br />
Phoenix Contact auf und ist verfügbar für die Betriebssysteme MS-DOS und Microsoft<br />
Windows 95/98 und NT 4. Anwendungen können in 'C' und 'C++' erstellt werden, die<br />
Programmiersysteme 'Borland Delphi' und 'Microsoft Visual Basic' werden bei Anwendungen<br />
für die Betriebssysteme Microsoft Windows 95/98 und NT 4 unterstützt.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Bild 1-1<br />
0 I J2 +<br />
) M A @ A HF H C H= <br />
0 EC D A L A = C K = C A 1 JA HB= ? A 0 1<br />
, A L E? A , HEL A H1 JA HB= ? A , , 1<br />
15 )<br />
2 + 1<br />
6 + 2 12<br />
9 E @ M I 6 "<br />
9 E @ M I ' # ' &<br />
Architektur der INTERBUS-Treiber- und <strong>HLI</strong>-Schnittstellen<br />
5 , 5 <br />
# $ $ * <br />
Durch Einbindung <strong>des</strong> mitgelieferten Export-Filters kann die INTERBUS-Projektierung<br />
auch mit IBS CMD G4 durchgeführt und für <strong>HLI</strong>-Anwendungen durch intelligente Source-<br />
Code-Erzeugung exportiert werden.<br />
5626_de_02 PHOENIX CONTACT 1-1
IBS PC SC <strong>HLI</strong> UM<br />
1.2 Hardware- und Software-Anforderungen<br />
INTERBUS Anschaltbaugruppe mit aktuellem Treiber:<br />
IBS PC ISA SC/I-T Art.-Nr. 2719234<br />
IBS PC 104 SC-T Art.-Nr. 2721701<br />
IBS PCI SC/I-T Art.-Nr. 2725260<br />
IBS PCCARD SC/I-T Art.-Nr. 2724876<br />
IBS ISA SC/486DX/I-T Art.-Nr. 2723945<br />
IBS ETH DSC/I-T Art.-Nr. 2722920<br />
PC mit folgender Minimal-Ausstattung:<br />
– Pentium-Prozessor mit 200 MHz<br />
– 32 MB Arbeitsspeicher (RAM)<br />
– 30 MB freier Festplattenspeicher<br />
– Microsoft MS DOS 6.0 oder höher,<br />
– oder Microsoft Windows 95/98,<br />
– oder Microsoft Windows NT 4.0<br />
Software:<br />
– Microsoft Visual Studio 6.0<br />
– Microsoft Visual Basic 6.0<br />
– Microsoft Visual C++ 1.52 (MS-DOS)<br />
– Borland C++ Builder 4.0<br />
– Borland C++ 4.5<br />
– Borland C++ 3.1 (MS-DOS)<br />
– Borland Delphi<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
1-2 PHOENIX CONTACT 5626_de_02
Installation<br />
2 Installation<br />
2.1 Installation unter Windows 95/98 und<br />
Windows NT 4<br />
Installieren Sie den Treiber für die Anschaltbaugruppe für das entsprechende Betriebssystem.<br />
Legen Sie die Diskette „IBS PC SC <strong>HLI</strong> Installation Disk 1/2“ ein, wählen Sie „Ausführen...“<br />
aus dem Windows-Start-Menü aus und geben Sie ein:<br />
„A:\setup“.<br />
Folgen Sie den Anweisungen auf dem Bildschirm.<br />
Wählen Sie Ihr Zielverzeichnis, in dem die Komponenten <strong>des</strong> <strong>HLI</strong> eingerichtet werden sollen<br />
(Voreinstellung ist „C:\IBSG4<strong>HLI</strong>“) aus.<br />
Wenn alle verfügbaren Komponenten installiert werden sollen, wählen Sie bei dem Setup-<br />
Typ „Vollständig“.<br />
Wenn Sie selektieren wollen, welche Komponenten installiert werden sollen, wählen Sie<br />
den Setup-Typ „Benutzer" und die zu installierenden Komponenten aus.<br />
2.2 Installation unter MS-DOS<br />
<strong>Die</strong> Installationsroutine installiert alle <strong>HLI</strong>-Komponenten für die Benutzung unter MS-DOS<br />
auf ein Festplattenlaufwerk.<br />
(Legen Sie die Diskette „IBS PC SC <strong>HLI</strong> Installation Disk 1/2“ ein, wechseln Sie zu Ihrem<br />
Diskettenlaufwerk (z.B. „A: “ ) und geben Sie ein:<br />
„INSTALL X:\Zielverzeichnis“<br />
wobei für „X:\Zielverzeichnis“ der gewünschte Installationspfad inklusive Festplattenlaufwerksbuchstabe<br />
einzugeben ist.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 2-1
IBS PC SC <strong>HLI</strong> UM<br />
2.3 Komponenten<br />
Nach erfolgter Installation befindet sich folgende Unterverzeichnisstruktur im gewählten<br />
Zielverzeichnis (bei vollständiger Installation):<br />
EA L A H A E? D EI <br />
+ , / " - : 2<br />
+ 2 " & $<br />
* +<br />
5 +<br />
, 5<br />
* +<br />
5 +<br />
- : ) 2 - 5<br />
+<br />
+ * 7 1 , - 4 <br />
, - 2 0 1!<br />
. + !<br />
8 *<br />
Bild 2-1<br />
Verzeichnisstruktur im Zielverzeichnis<br />
(*: nur bei Windows 32-Bit-Installation)<br />
Bei der Windows 32-Bit-Installation werden die Dynamischen-Link-Bibliotheken<br />
– G4<strong>HLI</strong>W32.DLL<br />
zusätzlich in das Windows-System-Verzeichnis<br />
(Windows 95/98: \WINDOWS\SYSTEM;<br />
Windows NT: \WINNT\SYSTEM32) installiert.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
2.4 Test<br />
9 1 ! <br />
+ * 7 1 , - 4<br />
* +<br />
5 +<br />
0 1- N F HJ. EJA H* E> E JD A B H1* 5 + , / "<br />
, 5 ) M A @ K C A B H1* 5 2 + 15 ) 5 + " & $ , : 16<br />
0 1* E> E JD A B H* H= @ + + <br />
0 1* E> E JD A B H E? H I BJ+ + <br />
, 5 ) M A @ K C A <br />
0 1* E> E JD A B H* H= @ + + <br />
0 1* E> E JD A B H E? H I BJ+ + <br />
* A EI F EA 5 K H? A ? @ A<br />
* A EI F EA A B H5 J= @ = H@ + I A ) M A @ K C A <br />
* A EI F EA A B H* H= @ + * K E@ A H<br />
* A EI F EA A B H* H= @ , A F D E<br />
* A EI F EA A B H E? H I BJ8 EI K = + <br />
* A EI F EA A B H E? H I BJ8 EI K = * = I E?<br />
9 E @ M I ! * EJ) M A @ K C A <br />
0 1! * EJ, O = EI ? D A E * E> E JD A 6 A I JF H C H= <br />
0 1! * EJ1 F HJ* E> E JD A B H* H= @ + * K E@ A H<br />
0 1! * EJ1 F HJ* E> E JD A B H* H= @ + + <br />
0 1! * EJ1 F HJ* E> E JD A B H E? H I BJ+ + <br />
# $ $ * <br />
Um die Funktionalität der gesamten INTERBUS-Anwendungsschichten (<strong>HLI</strong>, DDI, Controller)<br />
unter Microsoft Windows zu prüfen, wird das Testprogramm CHK<strong>HLI</strong>32.EXE (Windows<br />
32-Bit) mitgeliefert. Das Testprogramm versucht, den Controller über das <strong>HLI</strong> anzusprechen<br />
und prüft damit die Funktionalität <strong>des</strong> <strong>HLI</strong>, <strong>des</strong> Device Driver Interface und <strong>des</strong><br />
Controllers.<br />
<strong>Die</strong> Report-Ausgaben können zur Fehlersuche hilfreich sein.<br />
2-2 PHOENIX CONTACT 5626_de_02
Struktur und Funktionalität <strong>des</strong> <strong>HLI</strong><br />
3 Struktur und Funktionalität <strong>des</strong> <strong>HLI</strong><br />
Das <strong>HLI</strong> ist eine intelligente Anwendungs-Schnittstelle zur Bereitstellung von INTERBUS-<br />
Funktionalitäten. Funktions-Aufrufe durch die Anwendung setzt das <strong>HLI</strong> in die komplexen<br />
Kommunikationsvorgänge mit der INTERBUS-Anschaltbaugruppe um. Dabei ist es anwendungspassiv,<br />
d.h. seine Funktionalität wird ausschließlich über die entsprechenden<br />
Anwendungs-Aufrufe gesteuert.<br />
Bei Anwendungen auf einem HOST-PC können bis zu vier IBS PC ISA SC/I-T - Anschaltbaugruppen<br />
parallel betrieben werden. Anwendungen unter Windows NT können zusätzlich<br />
bis zu vier Anschaltbaugruppen <strong>des</strong> Typs IBS ETH DSC/I-T über TCP/IP steuern. Weiterhin<br />
unterstützt das <strong>HLI</strong> die anwendungsgesteuerte Betriebsart (Synchron-Mode mit<br />
IBS PC ISA SC/I-T) der INTERBUS-Anschaltbaugruppe, die es gestattet, die Datentransferzyklen<br />
(auch mehrerer Anschaltbaugruppen) synchron zur Anwendung zu betreiben.<br />
<strong>Die</strong> im <strong>HLI</strong> integrierte Funktionalität umfasst die Bereiche:<br />
– Controller-Initialisierung und INTERBUS-Anlauf<br />
– Prozessdaten-Management<br />
– Fehler- und Ereignis-Management<br />
– INTERBUS-Steuerung<br />
– PCP-<strong>Die</strong>nst-Management<br />
– Informations-<strong>Die</strong>nste<br />
3.1 Anschaltbaugruppen-Initialisierung und<br />
INTERBUS-Anlauf<br />
Das <strong>HLI</strong> stellt zwei Möglichkeiten <strong>des</strong> INTERBUS-Anlaufs zur Verfügung (siehe Kapitel 5).<br />
3.1.1 <strong>Die</strong> einfache Standard-Initialisierung<br />
<strong>Die</strong> INTERBUS-Anschaltbaugruppe wird angewiesen, die physikalisch vorhandene Buskonfiguration<br />
in Betrieb zu nehmen. Es erfolgt eine automatische Nummerierung der Bus-<br />
Teilnehmer (siehe log. Teilnehmer-Nummern bei INTERBUS Generation 4). Dabei werden<br />
Gruppen und Alternativen nicht angelegt.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 3-1
IBS PC SC <strong>HLI</strong> UM<br />
3.1.2 <strong>Die</strong> Initialisierung mit Konfigurations-Vorgabe<br />
<strong>Die</strong> Anwendung übergibt die erwartete Buskonfiguration in Form einer Liste von Teilnehmerdaten.<br />
<strong>Die</strong> Anschaltbaugruppe vergleicht die physikalisch vorhandene Buskonfiguration<br />
mit der übergebenen Konfiguration und nimmt sie bei Übereinstimmung in Betrieb.<br />
<strong>Die</strong> logische Nummerierung der Bus-Teilnehmer sowie die Definition von Gruppen und Alternativen<br />
ist in der Teilnehmer-Liste enthalten, die von der Anwendung übergebenen wird.<br />
) K BHK B@ A H0 1<br />
1 EJE= EI EA HK C I BK JE <br />
, , 1<br />
1 EJE= EI EA HK C<br />
+ JH A H1 B <br />
A I A <br />
* K I BEC K H= JE <br />
= JEL EA HA <br />
) K BL HD = @ A A <br />
2 + 2 6 A E A D A H<br />
F H BA <br />
2 H A I I @ = JA K @<br />
- HA EC EI = = C A A J<br />
E EJE= EI EA HA <br />
) M A @ K C<br />
. A D A H<br />
. A D A H<br />
. A D A H<br />
0 1<br />
- HA EC EI EJ<br />
. A D A H1 B H = JE <br />
- HA EC EI EJ<br />
. A D A H1 B H = JE <br />
- HA EC EI EJ<br />
. A D A H1 B H = JE <br />
4 ? C = > A M A HJI EC = EI EA HJ<br />
- HB C @ A H. A D A H<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
# $ $ ) !<br />
Bild 3-1<br />
INTERBUS-Anlauf-Management<br />
3-2 PHOENIX CONTACT 5626_de_02
3.2 Prozessdaten-Management<br />
Struktur und Funktionalität <strong>des</strong> <strong>HLI</strong><br />
Das <strong>HLI</strong> ermöglicht eine Abbildung von INTERBUS-Prozessdaten auf die im Anwenderprogramm<br />
deklarierten Variablen (Prozessdaten-Objekte, PDO), so dass damit eine einfache<br />
Programmierung von Steuerungsfunktionen realisiert werden kann.<br />
<strong>Die</strong>se Prozessdaten-Abbildung erfolgt in drei Schritten:<br />
– Deklaration von INTERBUS-Prozessdaten-Objekten (PDO)<br />
– Registrierung von INTERBUS-Prozessdaten-Objekte<br />
– Aktualisierung der registrierten INTERBUS-Prozessdaten-Objekten<br />
3.2.1 Deklaration von INTERBUS-Prozessdaten Objekten (PDO)<br />
Zur Deklaration von INTERBUS-Prozessdaten-Objekten definiert das <strong>HLI</strong> folgende <strong>Datentypen</strong>:<br />
T_IBS_BOOL :<br />
boolsches Objekt (Bit-Objekt)<br />
(Visual Basic: Boolean)<br />
T_IBS_BITSTRING : Bit-String-Objekt (1 ... 16-Bit)<br />
(Visual Basic: Integer)<br />
T_IBS_BYTE :<br />
Byte-Objekt (8-Bit-Objekt)<br />
(Visual Basic: Byte)<br />
T_IBS_WORD :<br />
Wort-Objekt (16-Bit-Objekt)<br />
(Visual Basic: Integer)<br />
T_IBS_DWORD : Doppel-Wort-Objekt (32-Bit-Objekt)<br />
(Visual Basic: Long)<br />
3.2.2 Registrierung von INTERBUS-Prozessdaten Objekten<br />
Bei der Prozessdaten-Objekt-Registrierung wird ein in der Anwendung deklariertes Prozessdaten-Objekt<br />
zum Prozessabbild eines INTERBUS-Teilnehmers zugeordnet.<br />
Sie erfolgt durch Angabe:<br />
– der logischen Nummer (Segment-Nr. und Segment-Position) <strong>des</strong> Teilnehmers<br />
– der Datenrichtung (Input- oder Output-Objekt)<br />
– <strong>des</strong> Byte-Offsets innerhalb <strong>des</strong> Prozessdaten-Bereichs <strong>des</strong> Teilnehmers<br />
– der Bitlänge und der Bitposition (bei Bit-Objekten)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 3-3
IBS PC SC <strong>HLI</strong> UM<br />
3.2.3 Aktualisierung der registrierten INTERBUS Prozessdaten-<br />
Objekte<br />
Das Prozessdaten-Management <strong>des</strong> INTERBUS-Controllers und <strong>des</strong> <strong>HLI</strong> unterscheidet<br />
zwischen Eingangs- und Ausgangs-Prozessdaten-Objekten.<br />
<strong>Die</strong> Aktualisierung der Eingangs-Objekte (die Abbildung <strong>des</strong> aktuellen Eingangs-Prozessabbilds<br />
auf Eingangs-Objekte) und das Abbilden der Ausgangs-Objekte (der Transfer der<br />
Ausgangs-Objekt-Zustände auf das Ausgangs-Prozessabbild) erfolgt getrennt und kontrolliert<br />
durch die Anwendung. Hierfür stehen der Anwendung entsprechende Funktionen<br />
zur Verfügung.<br />
Bild 3-2<br />
0 12 H A I I @ = JA = = C A A J<br />
) M A @ A HF H C H= 0 1<br />
2 H A I I @ = JA > A JA<br />
2 H C H= 8 = HE= > A * <br />
5 ? D = JA H6 1* 5 * <br />
<br />
1* 5 0 1 2 , 1 <br />
<br />
<br />
1* 5 0 1 2 , K J<br />
<br />
K H@ K C K 2 H A I I = > > E@<br />
@ A I A JI F HA ? D A @ A 6 A E A D A HI<br />
@ K H? D ) K BHK BL <br />
1* 5 0 1 4 A C EI JA H2 , > A ? J<br />
) K BHK B@ K H? D @ EA ) M A @ K C<br />
) K BHK B@ K H? D @ EA ) M A @ K C<br />
<strong>HLI</strong>-Prozessdaten-Management<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
6 A I J= K B2 = K I E> EEJ JK @<br />
0 E K B C A K HE JA H A <br />
+ JH A HK @ 6 A E A D A HI F A EBEI ? D A <br />
2 H A I I @ = JA > A J EI JA <br />
) JK = EI EA HK C = A HHA C EI JHEA HJA <br />
2 H A I I @ = JA - E C = C I > A JA<br />
= D = @ @ A I = JK A A <br />
2 H A I I @ = JA ) > > E@ I<br />
6 H= I BA H@ A H K I J @ A = A H<br />
2 H A I I @ = JA ) K I C = C I > A JA<br />
= K B@ = I = JK A A 2 H A I I @ = JA ) > > E@<br />
# $ $ ) $<br />
3-4 PHOENIX CONTACT 5626_de_02
Struktur und Funktionalität <strong>des</strong> <strong>HLI</strong><br />
3.3 Ereignis-Management<br />
Bus-Aktionen, Meldungen oder Fehlersituationen sind Ereignisse, die das <strong>HLI</strong> in einem Ereignis-Datensatz<br />
codiert und in einer internen FIFO-Liste ablegt. Ereignisse sind in folgende<br />
Gruppen untergliedert:<br />
– Interne Fehler wie z.B. Speichermangel<br />
– Fehler <strong>des</strong> Device-Driver-Interface<br />
– Fehler <strong>des</strong> Controllers<br />
– Fehler, die zum Bus-Stopp führen<br />
– Teilnehmer-Meldungen<br />
– Gesteuerte Zustandsänderungen <strong>des</strong> INTERBUS<br />
– PCP-Kommunikations-Fehler<br />
– Anwendungsfehler<br />
<strong>Die</strong> Anwendung kann diese Datensätze in der Reihenfolge ihres Auftretens anfordern,<br />
sowie eine Ereignisbeschreibung im Klartext zum entsprechenden Datensatz lesen.<br />
Ob Ereignisse aufgetreten sind, meldet das <strong>HLI</strong> der Anwendung über ein Element der anwendungseigenen<br />
Controller-Status-Instanz. Weiterhin kann durch Angabe eines Ereignis-Gruppen-Filters<br />
bestimmt werden, welche Ereignisse der Anwendung gemeldet werden.<br />
3.4 INTERBUS-Steuerung<br />
Zur Steuerung <strong>des</strong> INTERBUS stehen folgende <strong>Die</strong>nste zu Verfügung:<br />
– Start, Stopp und Alarm-Stopp <strong>des</strong> Bus-Datentransfers<br />
– Schalten von Fernbus- und Lokalbus-Segmenten<br />
– Schalten von Teilnehmer-Gruppen und Alternativen<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 3-5
IBS PC SC <strong>HLI</strong> UM<br />
3.5 PCP-<strong>Die</strong>nste und -Management<br />
Das <strong>HLI</strong> ermöglicht es auf einfache Weise, <strong>Die</strong>nste auf PCP-Teilnehmer unter Angabe<br />
ihrer logischen Teilnehmer-Nummer anzuwenden. Dabei steuert und überwacht das <strong>HLI</strong><br />
die gesamte Kommunikations-Beziehung zum Teilnehmer und die <strong>Die</strong>nst-Ausführung.<br />
Es gibt zwei Arten, PCP-<strong>Die</strong>nste auszuführen:<br />
– Als „Request":<br />
das <strong>HLI</strong> führt die <strong>Die</strong>nstanforderung aus und kehrt zur Anwendung zurück. Solange<br />
der <strong>Die</strong>nst durch die INTERBUS-Anschaltbaugruppe ausgeführt wird, kann die Anwendung<br />
weitere Aufgaben erledigen und muss die Beendigung <strong>des</strong> <strong>Die</strong>nstes abfragen<br />
(Polling eines Zustands-Objekts).<br />
– Als „Service" :<br />
das <strong>HLI</strong> führt die <strong>Die</strong>nstanforderung aus und wartet das Beenden <strong>des</strong> <strong>Die</strong>nstes ab.<br />
Weitere Aufgaben können zwischenzeitlich nicht bearbeitet werden (betrifft Single-<br />
Tasking-Systeme).<br />
Unterstützte <strong>Die</strong>nste sind:<br />
– Identify-<strong>Die</strong>nst<br />
– Read-<strong>Die</strong>nst<br />
– Write-<strong>Die</strong>nst<br />
– Client für Write-<strong>Die</strong>nste eines Teilnehmers<br />
– Programm-Start-<strong>Die</strong>nst<br />
– Programm-Stop-<strong>Die</strong>nst<br />
– Programm-Resume-<strong>Die</strong>nst<br />
– Programm-Reset-<strong>Die</strong>nst<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
3-6 PHOENIX CONTACT 5626_de_02
Struktur und Funktionalität <strong>des</strong> <strong>HLI</strong><br />
3.6 Informationsdienste<br />
Folgende Informationen über das INTERBUS-System können vom <strong>HLI</strong><br />
erfragt werden:<br />
– Anschaltbaugruppen-Informationen (Bezeichnung, Hard- und Firmware-Version)<br />
– Diagnose-Statistik (Zyklen, fehlerhafte Zyklen)<br />
– Bus-Konfiguration (Anzahl Teilnehmer, IO-Bits, PCP-Teilnehmer, Gesamt-Prozessdatenlänge,<br />
Zykluszeit)<br />
– Teilnehmer-Information (Bus-Position, ID-Code, Längen-Code, PCP-Kennung)<br />
– PCP-Teilnehmer-Information (über Identify-<strong>Die</strong>nst)<br />
3.7 <strong>HLI</strong>-Zustands-Maschine<br />
Das gesamte interne Management <strong>des</strong> <strong>HLI</strong> wird durch die Bearbeitung der internen Zustands-Maschine<br />
durchgeführt. <strong>Die</strong> Bearbeitung dieser Zustands-Maschine ist mit dem<br />
Aufruf bestimmter <strong>HLI</strong>-Funktionen automatisch verknüpft.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Bild 3-3<br />
+ JH A H5 J= JK I<br />
A I A <br />
5 J= JK I ) > > E@<br />
@ A H) M A @ K C<br />
= JK = EI EA HA <br />
0 11 JA H A K I J= @ I = I ? D E A<br />
0 1. K JE I = K BHK B<br />
A @ K C A @ A I A E<br />
+ JH A HI L HD = @ A <br />
=<br />
* K I . A D A H @ A H<br />
2 A HEF D A HEA . A D A H<br />
2 + 2 A @ K C <br />
<strong>HLI</strong>-Zustandsmaschine<br />
) M A @ A HF H C H= <br />
- HA EC EI<br />
A H A K C A <br />
2 + 2 , EA I J<br />
> A = H> A EJA <br />
5 I JEC A > A = H> A EJA <br />
0 1. K JE I 4 ? A D H<br />
) F F E = JE <br />
I EC = EI EA HA <br />
) F F E = JE <br />
I EC = EI EA HA <br />
0 1. K JE <br />
= K I B D H A <br />
# $ $ ) "<br />
5626_de_02 PHOENIX CONTACT 3-7
IBS PC SC <strong>HLI</strong> UM<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
3-8 PHOENIX CONTACT 5626_de_02
Anwendungs-Erstellung<br />
4 Anwendungs-Erstellung<br />
4.1 Anwendungs-Erstellung mit 'C / C++'<br />
4.1.1 MS-DOS-Anwendungen erstellen<br />
– Erstellen Sie Ihr Projekt im „Large“-Memory-Model<br />
– Falls vorhanden (z.B. Microsoft Visual C++), stellen Sie die Ausrichtung von Strukturelementen<br />
auf „1 Byte“.<br />
– Fügen Sie folgende Include-Anweisung in die Module ein, die <strong>HLI</strong>-Funktionalitäten<br />
verwenden (Beachten Sie die Such-Verzeichnis-Einstellungen Ihres Compilers für Include-Dateien):<br />
#include "G4<strong>HLI</strong>DOS.H"<br />
<strong>Die</strong>se Datei definiert eine globale Konstante „<strong>HLI</strong>_DOS_VERSION“ und bindet den<br />
Master-Header „IBSG4<strong>HLI</strong>.H“ <strong>des</strong> <strong>HLI</strong> ein.<br />
– Fügen Sie die <strong>HLI</strong>-Bibliothek „G4<strong>HLI</strong>DOS.LIB“ zu Ihrem Projekt hinzu (beachten Sie<br />
das Bibliotheks-Format: Microsoft-kompatibel / Borland-kompatibel!)<br />
4.1.2 Windows-32-Bit-Anwendungen erstellen<br />
– Fügen Sie folgende Include-Anweisung in die Module ein, die <strong>HLI</strong>-Funktionalitäten<br />
verwenden (Beachten Sie die Such-Verzeichnis-Einstellungen Ihres Compilers für Include-Dateien):<br />
#include "G4<strong>HLI</strong>W32.H"<br />
<strong>Die</strong>se Datei definiert eine globale Konstante „<strong>HLI</strong>_WIN32_VERSION“ und bindet den<br />
Master-Header „IBSG4<strong>HLI</strong>.H“ <strong>des</strong> <strong>HLI</strong> ein.<br />
– Fügen Sie die <strong>HLI</strong>-Import-Bibliothek „G4<strong>HLI</strong>W32.LIB“ zu Ihrem Projekt hinzu (beachten<br />
Sie das Bibliotheks-Format: Microsoft-kompatibel / Borland-kompatibel!)<br />
4.1.3 Co-Prozessor-Anwendungen erstellen<br />
(DOS-Anwendungen)<br />
– Erstellen Sie Ihr Projekt im „Large“-Memory-Model<br />
– Falls vorhanden (z.B. Microsoft Visual C++), stellen Sie die Ausrichtung von Strukturelementen<br />
auf „1 Byte“.<br />
– Fügen Sie folgende Include-Anweisung in die Module ein, die <strong>HLI</strong>-Funktionalitäten<br />
verwenden (Beachten Sie die Such-Verzeichnis-Einstellungen Ihres Compilers für Include-Dateien):<br />
#include "G4<strong>HLI</strong>COP.H"<br />
<strong>Die</strong>se Datei definiert eine globale Konstante „<strong>HLI</strong>_DOS_VERSION“ und bindet den<br />
Master-Header „IBSG4<strong>HLI</strong>.H“ <strong>des</strong> <strong>HLI</strong> ein.<br />
– Fügen Sie die <strong>HLI</strong>-Bibliothek „G4<strong>HLI</strong>COP.LIB“ zu Ihrem Projekt hinzu<br />
(beachten Sie das Bibliotheks-Format: Microsoft-kompatibel / Borland-kompatibel!).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 4-1
IBS PC SC <strong>HLI</strong> UM<br />
4.2 Anwendungs-Erstellung mit 'Delphi'<br />
– Fügen Sie Ihrem Projekt die <strong>HLI</strong>-Interface-Unit „IBSG4<strong>HLI</strong>.PAS“ aus dem „INCLUDE<br />
\ DELPHI“ - Verzeichnis hinzu.<br />
– Erweitern Sie die „Uses“-Anweisung in allen Units Ihres Projekts, die <strong>HLI</strong>-Funktionalitäten<br />
nutzen, um den Eintrag:<br />
„ Uses ..., IBSG4<strong>HLI</strong>“.<br />
4.3 Anwendungs-Erstellung mit 'Visual Basic'<br />
– Fügen Sie Ihrem Projekt das <strong>HLI</strong>-Interface-Modul „IBSG4<strong>HLI</strong>.BAS“ aus dem „INCLU-<br />
DE \ VB" - Verzeichnis hinzu.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
4-2 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
5 Anwendungs-Programmierung<br />
5.1 Initialisierung der Anschaltbaugruppe und<br />
INTERBUS-Anlauf<br />
5.1.1 Instanzierung <strong>des</strong> Status-Datentyps<br />
Deklarieren Sie eine modul- oder anwendungs-globale Variable <strong>des</strong> Typs T_<strong>HLI</strong>_STATE<br />
(siehe Anhang B), z.B.:<br />
C-Syntax: T_<strong>HLI</strong>_STATE IBS_SC1;<br />
Delphi: IBS_SC1 : T_<strong>HLI</strong>_STATE;<br />
Visual Basic:<br />
Dim IBS_SC1 As T_<strong>HLI</strong>_STATE<br />
<strong>Die</strong> Struktur darf nicht lokal, d.h. innerhalb einer Funktion definiert sein, da sie dort nur innerhalb<br />
der Funktion gültig ist. Das <strong>HLI</strong> greift auf diese Struktur schreibend zu, solange<br />
<strong>HLI</strong>-Aktivitäten für den zugeordneten INTERBUS-Controller laufen.<br />
5.1.2 Standard-Initialisierung<br />
Durch den Aufruf von<br />
IBS_<strong>HLI</strong>_Init(Controller_ID, Referenz_auf_IBS_SC1,<br />
Betriebsart)<br />
werden folgende Aktionen durch das <strong>HLI</strong> ausgeführt:<br />
– <strong>Die</strong> Kommunikationsverbindungen zur angesprochenen INTERBUS-Anschaltbaugruppe<br />
Controller_ID werden über das Device Driver Interface aufgebaut.<br />
– <strong>Die</strong> aktuelle Buskonfiguration wird eingelesen und als aktive Konfiguration deklariert.<br />
– <strong>Die</strong> Anschaltbaugruppe wird auf die Betriebsart Betriebsart eingestellt.<br />
Für Controller_ID sind folgende Werte definiert:<br />
– ISASC1 ... ISASC4 lokal vorhandene IBS PC ISA SC/I-T<br />
Anschaltbaugruppen 1...4<br />
– PCISC1 ... PCISC4 lokal vorhandene IBS PCI SC/I-T<br />
Anschaltbaugruppen 1...4<br />
– SCCOP IBS PC ISA SC/486DX/I-T - Anschaltbaugruppe<br />
– ETHDSC1 ... ETHDSC4 IBS ETH DSC/I-T 1 ... 4<br />
– PCCARD1 ... PCCARD4 lokal vorhandene IBS PCCARD SC/I-T<br />
Für Betriebsart sind folgende Werte definiert:<br />
– IBS_STANDARD Normale Betriebsart <strong>des</strong> INTERBUS (Asynchron)<br />
– IBS_CONTROLLED Anwendungsgesteuerter Betrieb <strong>des</strong> INTERBUS<br />
Bei erfolgreicher Ausführung der Funktion befindet sich der Controller im aktiven Zustand,<br />
d.h. er verfügt über eine gültige Konfiguration und ist bereit für den zyklischen Bus-Datentransfer.<br />
Der Rückgabewert der Funktion ist dann <strong>HLI</strong>_OKAY.<br />
Den Buszustand und die Ereignismeldungen bildet <strong>HLI</strong> auf dem Statusobjekt SC1 ab.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Im Fehlerfall ist der Rückgabewert entweder ein allgemeiner Fehlercode oder ein Ereignis-<br />
Code (siehe Anhang E).<br />
5626_de_02 PHOENIX CONTACT 5-1
IBS PC SC <strong>HLI</strong> UM<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_STATE SC1; /* Global ! */<br />
...<br />
<strong>HLI</strong>RET ret;<br />
ret = IBS_<strong>HLI</strong>_Init( ISASC1, &SC1, IBS_NORMAL);<br />
Delphi-Beispiel:<br />
var<br />
SC1 : T_<strong>HLI</strong>_STATE; { Global ! }<br />
...<br />
var<br />
ret : <strong>HLI</strong>RET;<br />
begin<br />
ret := IBS_<strong>HLI</strong>_Init( ISASC1, @SC1, IBS_NORMAL);<br />
Visual Basic-Beispiel:<br />
Dim SC1 As T_<strong>HLI</strong>_STATE ' Global !<br />
...<br />
Dim ret As Integer<br />
ret = IBS_<strong>HLI</strong>_Init(ISASC1, SC1, IBS_NORMAL)<br />
5.1.3 Initialisierung mit Konfigurations-Vorgabe<br />
Alternativ zur Standard-Initialisierung kann auch die zu betreibende Bus-konfiguration bei<br />
der Controller-Initialisierung vorgegeben werden.<br />
Instanzieren Sie hierzu ein der Anzahl der Busteilnehmer entsprechend grosses Feld <strong>des</strong><br />
Datentyps T_<strong>HLI</strong>_DEVICE_DATA (siehe B.8), und initialisieren Sie das Feld mit den entsprechenden<br />
Werten Ihrer Bus-Konfiguration.<br />
Durch den Aufruf von<br />
IBS_<strong>HLI</strong>_Init_CFG (Controller_ID, Referenz_auf_IBS_SC1, Betriebsart, Anzahl,<br />
Teilnehmer, BusKonfigurationsListe)<br />
werden folgende Aktionen durch das <strong>HLI</strong> ausgeführt:<br />
– <strong>Die</strong> Kommunikationsverbindungen zum angesprochen INTERBUS-Controller<br />
Controller_ID werden über das Device Driver Interface aufgebaut.<br />
– <strong>Die</strong> übergebene Buskonfiguration wird geprüft und zum Controller übertragen.<br />
– Der Controller überprüft die übertragene mit der physikalisch vorhandenen Konfiguration.<br />
– Der Controller wird auf die Betriebsart Betriebsart eingestellt.<br />
Bei erfolgreicher Ausführung der Funktion befindet sich der Controller im aktiven Zustand,<br />
d.h. er verfügt über eine gültige Konfiguration und ist bereit für den zyklischen Datentransfer.<br />
Das <strong>HLI</strong> bildet den Bus-Zustand und die Ereignismeldungen auf dem Statusobjekt SC1 ab.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5-2 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
Im Fehlerfall ist der Rückgabewert entweder ein allgemeiner Fehlercode oder ein Ereignis-<br />
Code (siehe Anhang E).<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_STATE SC1; /* Global ! */<br />
T_<strong>HLI</strong>_DEVICE_DATA BusConfig[5] = /* Global ! */<br />
{<br />
{ 1,0, ... , "Station 1" }, /*<br />
Teilnehmer 1.0 */...<br />
{ 5,0, ... , "Station 1" } /*<br />
Teilnehmer 5.0 */<br />
};<br />
...<br />
<strong>HLI</strong>RET ret;<br />
ret = IBS_<strong>HLI</strong>_Init_CFG( ISASC1, &SC1, IBS_NORMAL, 5, BusConfig );<br />
Delphi-Beispiel:<br />
var<br />
...<br />
var<br />
SC1 : T_<strong>HLI</strong>_STATE; { Global ! }<br />
BusConfig : array [0..4] of T_<strong>HLI</strong>_DEVICE_DATA;<br />
{ Global ! }<br />
ret : <strong>HLI</strong>RET;<br />
begin<br />
BusConfig[0].Segment := 1; BusConfig[0].<br />
Position:= 0;...<br />
...<br />
ret := IBS_<strong>HLI</strong>_Init_CFG( ISASC1, @SC1, IBS_NORMAL, 5,<br />
@BusConfig );<br />
Visual Basic-Beispiel:<br />
Dim SC1 As T_<strong>HLI</strong>_STATE ' Global !<br />
Dim BusConfig[0 to 4] As T_<strong>HLI</strong>_DEVICE_DATA ' Global !<br />
...<br />
Dim ret As Integer<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
BusConfig(0).Segment = 1<br />
BusConfig(0).Position = 0;<br />
...<br />
ret = IBS_<strong>HLI</strong>_Init_CFG( ISASC1, SC1, IBS_NORMAL, 5, BusConfig )<br />
5626_de_02 PHOENIX CONTACT 5-3
IBS PC SC <strong>HLI</strong> UM<br />
5.2 Registrierung von Prozessdaten-Objekten<br />
Für den Zugriff auf INTERBUS-Prozessdaten stehen bei Verwendung <strong>des</strong> <strong>HLI</strong> folgende<br />
Prozessdaten-Objekt-Typen zur Verfügung (siehe auch 6.1.2):<br />
– T_IBS_BOOL digitales Prozessdaten-Objekt, es<br />
(Visual Basic: Boolean) repräsentiert den Zustand eines Bits<br />
im Prozessdatenabbild<br />
– T_IBS_BITSTRING Mehrbit-Prozessdaten-Objekt, es<br />
(Visual Basic: Integer) repräsentiert den Zustand von<br />
n (= 2 bis 15) aufeinanderfolgenden<br />
Bits im Prozessdatenabbild<br />
– T_IBS_BYTE 8-Bit-Prozessdaten-Objekt, es<br />
(Visual Basic: Byte)<br />
repräsentiert den Zustand eines<br />
Bytes im Prozessdatenabbild<br />
– T_IBS_WORD 16-Bit-Prozessdaten-Objekt, es<br />
(Visual Basic: Integer) repräsentiert den Zustand eines<br />
Worts im Prozessdatenabbild<br />
– T_IBS_DWORD 32-Bit-Prozessdaten-Objekt, es<br />
(Visual Basic: Long)<br />
repräsentiert den Zustand eines<br />
Doppel-Worts im Prozessdatenabbild<br />
<strong>Die</strong> Zuordnung einer Variable <strong>des</strong> o.g. Typs zum Prozessdatenabbild eines INTERBUS-<br />
Teilnehmers erfolgt durch die Deklaration einer entsprechenden Variable und Registrierung<br />
dieser Variable beim <strong>HLI</strong> als Eingangs- oder Ausgangsobjekt.<br />
Für jeden INTERBUS-Teilnehmer können maximal 32 Eingangsobjekte und 32 Ausgangsobjekte<br />
registriert werden.<br />
Optional kann für Eingangsobjekte zusätzlich eine Referenz auf eine Variable <strong>des</strong> Typs<br />
<strong>HLI</strong>BOOL bei der Registrierung angegeben werden, die einen Zustandswechsel <strong>des</strong> Prozessdatenobjekts<br />
anzeigt (State-Changed-Indication-Variable).<br />
Beachten Sie bitte den Gültigkeitsbereich Ihrer Variablen.<br />
Solange eine Variable registriert ist, muss sie auch gültig sein!<br />
<strong>HLI</strong> lässt mehrfache Zuordnungen von Ausgangsobjekten zum Prozessdaten-Ausgangsbereich<br />
eines Teilnehmers zu, bei dem sich die Zuordnungen überschneiden können. Für<br />
den Transfer der Variablenzustände zu den Teilnehmer-Ausgangsdaten gilt folgende Prioritätenreihenfolge:<br />
– Bit-Objekte : Höchste Priorität<br />
– Bitstring-Objekte<br />
– Byte-Objekte<br />
– Wort-Objekte<br />
– Doppelwort-Objekte : Niedrigste Priorität<br />
Für jeden Objekt-Typ steht eine entsprechende Registrierungsfunktion zur Verfügung.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5-4 PHOENIX CONTACT 5626_de_02
5.2.1 Prozessdaten-Bit-Objekte registrieren<br />
Anwendungs-Programmierung<br />
<strong>Die</strong> Zuordnung einer Variable vom Typ T_IBS_BOOL zum Prozessdatenabbild eines IN-<br />
TERBUS-Teilnehmers erfordert folgende Parameter:<br />
– INTERBUS-Controller-ID<br />
– die Teilnehmer-Nummer (Segment. Position)<br />
– Eingangs- oder Ausgangsdatenobjekt<br />
– den relativen Byte-Offset im Prozessdatenabbild <strong>des</strong> Teilnehmers<br />
– die Bitposition im Prozessdatenabbild <strong>des</strong> Teilnehmers<br />
– die Referenz auf das anwendungseigene Prozessdaten-Objekt<br />
– bei Eingangsobjekten optional eine Referenz auf eine anwendungseigene State-<br />
Changed-Indication-Variable (NULL, falls nicht genutzt).<br />
<strong>Die</strong> Registrierung erfolgt durch den Aufruf der Funktion<br />
IBS_<strong>HLI</strong>_RegisterPDO_BOOL(Controller_ID,<br />
IBS_PDO_INPUT oder IBS_PDO_OUTPUT,<br />
Segment, Position,<br />
ByteOffset, Bitposition,<br />
Referenz_auf_Objekt,<br />
Referenz_auf_State_Changed<br />
_Indication_Variable)<br />
Bei erfolgreicher Ausführung ist der Rückgabewert <strong>HLI</strong>_OKAY.<br />
Konnte die Zuordnung nicht durchgeführt werden,z.B. aufgrund unbekannter Teilnehmer-<br />
Nummer oder die Objekt-Größe und -Lage überschreitet Prozessdatenlänge <strong>des</strong> Teilnehmers,<br />
wird ein entsprechen<strong>des</strong> Ereignis erzeugt. Der Rückgabewert ist dann der Ereignis-<br />
Typ.<br />
C-Beispiel:<br />
T_IBS_BOOL DigitalIn;<br />
...<br />
/* digitales Eingangs-Objekt zu Teilnehmer 2.1, Bit 3<br />
im 2. Wort zuordnen, keine StateChanged-Variable */<br />
IBS_<strong>HLI</strong>_RegisterPDO_BOOL( ISASC1, IBS_PDO_INPUT, 2, 1,<br />
2, 3, &DigitalIn, NULL);<br />
Delphi-Beispiel:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
var<br />
DigitalIn : T_IBS_BOOL;<br />
...<br />
begin<br />
{ digitales Eingangs-Objekt zu Teilnehmer 2.1, Bit 3 im 2. Wort<br />
zuordnen, keine StateChanged-Variable }<br />
IBS_<strong>HLI</strong>_RegisterPDO_BOOL( ISASC1, IBS_PDO_INPUT, 2, 1,<br />
2, 3, @DigitalIn, nil);<br />
5626_de_02 PHOENIX CONTACT 5-5
IBS PC SC <strong>HLI</strong> UM<br />
Visual Basic -Beispiel:<br />
Dim DigitalIn As Boolean<br />
...<br />
' digitales Eingangs-Objekt zu Teilnehmer 2.1,<br />
' Bit 3 im 2. Wort zuordnen, keine StateChanged-<br />
' Variable<br />
Call IBS_<strong>HLI</strong>_RegisterPDO_BOOL( ISASC1, IBS_PDO_INPUT,<br />
2, 1, 2, 3, DigitalIn, Null )<br />
5.2.2 Prozessdaten-Bitstring-Objekte registrieren<br />
<strong>Die</strong> Zuordnung einer Variable vom Typ T_IBS_BITSTRING zum Prozessdatenabbild eines<br />
INTERBUS-Teilnehmers erfordert die Parameter:<br />
– INTERBUS-Anschaltbaugruppe<br />
– Teilnehmer-Nummer (Segment. Position)<br />
– Eingangs- oder Ausgangsdatenobjekt<br />
– den relativen Byte-Offset im Prozessdatenabbild <strong>des</strong> Teilnehmers<br />
– Bitposition im Prozessdatenabbild <strong>des</strong> Teilnehmers<br />
– Bitlänge <strong>des</strong> Objekts (2...15)<br />
– Referenz auf das anwendungseigene Prozessdatenobjekt<br />
– bei Eingangsobjekten optional eine Referenz auf eine anwendungseigene State-<br />
Changed-Indication-Variable (NULL, falls nicht genutzt).<br />
<strong>Die</strong> Registrierung erfolgt durch den Aufruf der Funktion:<br />
IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING(<br />
Controller_ID,<br />
IBS_PDO_INPUT oder IBS_PDO_OUTPUT,<br />
Segment, Position,<br />
ByteOffset, Bitposition, Bitlänge,<br />
Referenz_auf_Objekt,<br />
Referenz_auf_State_Changed<br />
_Indication_Variable)<br />
Bei erfolgreicher Ausführung ist der Rückgabewert <strong>HLI</strong>_OKAY.<br />
Konnte die Zuordnung nicht durchgeführt werden, wird ein entsprechen<strong>des</strong> Ereignis erzeugt.<br />
Der Rückgabewert ist dann der Ereignis-Typ.<br />
C-Beispiel:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
T_IBS_BITSTRING AnalogIn12Bit;<br />
<strong>HLI</strong>BOOL<br />
AnalogChanged;<br />
...<br />
/* 12-Bit-Eingangs-Objekt bei Teilnehmer 3.2 zu den<br />
höherwertigen Bits im 4. Wort zuordnen, mit<br />
StateChanged-Variable */<br />
IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING( ISASC1, IBS_PDO_INPUT,<br />
3, 2, 6, 4, 12,<br />
&AnalogIn12Bit,<br />
&AnalogChanged);<br />
5-6 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
Delphi-Beispiel:<br />
var<br />
AnalogIn12Bit : T_IBS_BITSTRING;<br />
AnalogChanged : <strong>HLI</strong>BOOL;<br />
...<br />
begin<br />
{ 12-Bit-Eingangs-Objekt bei Teilnehmer 3.2 zu den<br />
höherwertigen Bits im 4. Wort zuordnen, mit<br />
StateChanged-Variable }<br />
IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING( ISASC1, IBS_PDO_INPUT,<br />
3, 2, 6, 4, 12,<br />
@AnalogIn12Bit,<br />
@AnalogChanged);<br />
Visual Basic -Beispiel:<br />
Dim AnalogIn12Bit As Integer<br />
Dim AnalogChanged As Boolean<br />
...<br />
' 12-Bit-Eingangs-Objekt bei Teilnehmer 3.2 zu den<br />
' höherwertigen Bits im 4. Wort zuordnen, mit<br />
' StateChanged-Variable<br />
Call IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING( ISASC1,<br />
IBS_PDO_INPUT, 3, 2, 6, 4,<br />
12, AnalogIn12Bit,<br />
AnalogChanged)<br />
5.2.3 Prozessdaten Objekte registrieren<br />
(Byte, Wort und Doppelwort)<br />
<strong>Die</strong> Zuordnung einer Variable vom Typ T_IBS_BYTE, T_IBS_WORD oder<br />
T_IBS_DWORD zum Prozessdatenabbild eines INTERBUS-Teilnehmers erfordert folgende<br />
Parameter:<br />
– INTERBUS-Anschaltbaugruppe<br />
– die Teilnehmer-Nummer (Segment.Position)<br />
– Eingangs- oder Ausgangsdatenobjekt<br />
– der relative Byte-Offset im Prozessdatenabbild <strong>des</strong> Teilnehmers<br />
– die Referenz auf das anwendungseigene Prozessdatenobjekt<br />
<strong>Die</strong> Registrierung von Byte-Objekten erfolgt durch den Aufruf der Funktion:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
IBS_<strong>HLI</strong>_RegisterPDO_BYTE(Controller_ID,<br />
IBS_PDO_INPUT oder IBS_PDO_OUTPUT,<br />
Segment, Position,<br />
ByteOffset,<br />
Referenz_auf_Objekt,<br />
Referenz_auf_State_Changed<br />
_Indication_Variable)<br />
5626_de_02 PHOENIX CONTACT 5-7
IBS PC SC <strong>HLI</strong> UM<br />
<strong>Die</strong> Registrierung von Wort-Objekten erfolgt durch den Aufruf der Funktion:<br />
IBS_<strong>HLI</strong>_RegisterPDO_WORD(Controller_ID,<br />
IBS_PDO_INPUT oder IBS_PDO_OUTPUT,<br />
Segment, Position,<br />
ByteOffset,<br />
Referenz_auf_Objekt,<br />
Referenz_auf_State_Changed_<br />
Indication_Variable)<br />
<strong>Die</strong> Registrierung von Doppelwort-Objekten erfolgt durch den Aufruf der Funktion:<br />
IBS_<strong>HLI</strong>_RegisterPDO_DWORD(Controller_ID,<br />
IBS_PDO_INPUT oder IBS_PDO_OUTPUT,<br />
Segment, Position,<br />
ByteOffset,<br />
Referenz_auf_Objekt,<br />
Referenz_auf_State_Changed_<br />
Indication_Variable)<br />
Bei erfolgreicher Ausführung ist der Rückgabewert <strong>HLI</strong>_OKAY.<br />
Konnte die Zuordnung nicht durchgeführt werden, wird ein entsprechen<strong>des</strong> Ereignis erzeugt.<br />
Der Rückgabewert ist dann der Ereignis-Typ.<br />
C-Beispiel:<br />
T_IBS_WORD Out16;<br />
...<br />
/* Ausgangs-Wort-Objekt zu Teilnehmer 2.1, 4. Wort<br />
zuordnen */<br />
IBS_<strong>HLI</strong>_RegisterPDO_WORD( ISASC1, IBS_PDO_OUTPUT, 2,<br />
1, 6, &Out16, NULL );<br />
Delphi-Beispiel:<br />
var<br />
Out16 : T_IBS_WORD;<br />
...<br />
begin<br />
{ Ausgangs-Wort-Objekt zu Teilnehmer 2.1, 4.Wort zuordnen }<br />
IBS_<strong>HLI</strong>_RegisterPDO_WORD( ISASC1, IBS_PDO_OUTPUT, 2,<br />
1, 6, @Out16, nil );<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Visual Basic -Beispiel:<br />
Dim Out16 As Integer<br />
...<br />
' Ausgangs-Wort-Objekt zu Teilnehmer 2.1, 4.Wort<br />
' zuordnen<br />
Call IBS_<strong>HLI</strong>_RegisterPDO_WORD( ISASC1,<br />
IBS_PDO_OUTPUT, 2, 1, 6,<br />
Out16, Null )<br />
5-8 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
5.2.4 Registrierung von Prozessdaten-Objekten aufheben<br />
Bei Bedarf kann die Registrierung einer Prozessdaten-Variable durch den Aufruf von<br />
IBS_<strong>HLI</strong>_UnregisterPDObject<br />
(Controller_ID,<br />
Referenz_auf_Objekt)<br />
wieder aufgehoben werden.<br />
Falls Sie eine Mehrfach-Registrierung für eine Variable auf Ausgangsobjekte durchgeführt<br />
haben, werden alle Zuordnungen dieser Variable aufgehoben!<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 5-9
IBS PC SC <strong>HLI</strong> UM<br />
5.3 Prozessdaten-Bearbeitung<br />
5.3.1 Standard-Busbetrieb (asynchron)<br />
Im asynchronen Busbetrieb steuert die Anschaltbaugruppe im schnellstmöglichen Zyklus<br />
selbsttätig den Datentransfer auf dem INTERBUS. <strong>Die</strong> Übernahme von Ausgangsdaten<br />
<strong>des</strong> Host-Systems geschieht asynchron. <strong>Die</strong> Eingangsdaten werden ebenfalls dem Host-<br />
System asynchron zur Verfügung gestellt. <strong>Die</strong> Aufgaben <strong>des</strong> Host-Systems bei der Bearbeitung<br />
von INTERBUS-Prozessdaten beschränken sich damit auf das:<br />
– Lesen der Eingangsdaten<br />
– Schreiben der Ausgangsdaten<br />
5.3.1.1 Lesen von Eingangsdaten<br />
Durch den Aufruf von<br />
IBS_<strong>HLI</strong>_PD_In(Controller_ID)<br />
liest das <strong>HLI</strong> das aktuelle Abbild der Prozess-Eingangsdaten vom INTERBUS-Controller<br />
und aktualisiert die Werte aller registrierten Eingangs-Prozessdaten-Objekte.<br />
<strong>Die</strong> Werte der Eingangs-Prozessdaten-Objekte eines speziellen Teilnehmers können<br />
durch den Aufruf von<br />
IBS_<strong>HLI</strong>_PD_DeviceIn(Controller_ID, Segment, Position)<br />
direkt aus dem aktuellen Prozessdatenabbild aktualisiert werden.<br />
Der Wert eines einzelnen Eingangs-Prozessdaten-Objekts kann durch den Aufruf von<br />
IBS_<strong>HLI</strong>_PD_Input(Controller_ID, Referenz_auf_Objekt)<br />
direkt aus dem aktuellen Prozessdatenabbild aktualisiert werden.<br />
Wurden State-Changed-Indication-Variablen für Eingangsobjekte registriert, so haben<br />
diese den Wert TRUE (>0) wenn sich der Zustand <strong>des</strong> Eingangsobjekts gegenüber dem<br />
letzten Aufruf von IBS_<strong>HLI</strong>_PD_In() bzw. IBS_<strong>HLI</strong>_PD_Input() geändert hat.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5-10 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
5.3.2 Schreiben von Ausgangsdaten<br />
Durch den Aufruf von<br />
IBS_<strong>HLI</strong>_PD_Out(Controller_ID)<br />
überträgt das <strong>HLI</strong> die aktuellen Werte aller registrierten Ausgangs-Prozessdaten-Objekte<br />
auf das Ausgangs-Prozessabbild <strong>des</strong> INTERBUS.<br />
<strong>Die</strong> Werte der Ausgangs-Prozessdaten-Objekte eines speziellen Teilnehmers können<br />
durch den Aufruf von<br />
IBS_<strong>HLI</strong>_PD_DeviceOut(Controller_ID, Segment, Position)<br />
direkt auf das aktuelle Prozessdatenabbild übertragen werden.<br />
Der Wert eines einzelnen Ausgangs-Prozessdaten-Objekts kann durch den Aufruf von<br />
IBS_<strong>HLI</strong>_PD_Output(Controller_ID, Referenz_auf_Objekt);<br />
direkt auf das aktuelle Prozessdatenabbild übertragen werden.<br />
5.3.3 Anwendungsgesteuerter Busbetrieb<br />
Im Anwendungs-gesteuerten Busbetrieb wird der Datentransfer auf dem INTERBUS durch<br />
definierte Aufrufe der Anwendung gesteuert. <strong>Die</strong>s betrifft alle INTERBUS-Controller, die in<br />
dieser Betriebsart initialisiert wurden.<br />
<strong>Die</strong> Firmware <strong>des</strong> INTERBUS-Controllers durchläuft beim Datentransfer verschiedene<br />
Phasen, die beim asynchronen Betrieb für das Host-System keine Rolle spielen, jedoch<br />
bei der gesteuerten Betriebsart von der Anwendung berücksichtigt werden müssen:<br />
Phase<br />
Daten-Zyklus-Aktiv-Signal<br />
(Controller-Rückmeldung an<br />
<strong>HLI</strong> )<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
<strong>HLI</strong> kann auf Eingangsdaten<br />
zugreifen (lesen)<br />
A<br />
B<br />
Eingangsdaten-Zugriff<br />
C<br />
D<br />
A<br />
<strong>HLI</strong> kann auf Ausgangsdaten<br />
zugreifen (schreiben) Ausgangsdaten-Zugriff<br />
Daten-Zyklus-Start-Signal<br />
(durch <strong>HLI</strong> gesteuert)<br />
INTERBUS Daten-Transfer<br />
5626A005<br />
Bild 5-1<br />
Anwendungs-gesteuerter Betrieb<br />
5626_de_02 PHOENIX CONTACT 5-11
IBS PC SC <strong>HLI</strong> UM<br />
Das <strong>HLI</strong> übernimmt die Signal-Steuerung und bildet die Phasenzustände zur Anwendung<br />
hin ab. <strong>Die</strong>se muss somit vor Ausführung <strong>des</strong> Prozessdatentransfers und dem Starten der<br />
Datenzyklen den Phasen-Zustand <strong>des</strong> Controllers abfragen und darf dann nur (für die aktuellen<br />
Phase) erlaubte Aktionen ausführen.<br />
5.3.3.1 Ermitteln der Zyklus-Phase<br />
<strong>Die</strong>se Funktion steht Ihnen nur im anwendungsgesteuerten Betrieb zur Verfügung. <strong>Die</strong> Anwendung<br />
ermittelt zyklisch über den Aufruf von<br />
Aktuelle_Phase = IBS_<strong>HLI</strong>_GetCyclePhase()<br />
die aktuelle Zyklus-Phase <strong>des</strong> (der) Controller(s) und kann folgende erlaubte Aktionen<br />
ausführen:<br />
Tabelle 5-1<br />
Zustands-Code (Phase)<br />
C-Beispiel:<br />
<strong>HLI</strong>_IBS_IDLE<br />
(A)<br />
<strong>HLI</strong>_IBS_PREPARING_CYC<br />
LE<br />
(B)<br />
<strong>HLI</strong>_IBS_CAN_RUN<br />
(C)<br />
<strong>HLI</strong>_IBS_RUN<br />
(D)<br />
Erlaubte Aktionen innerhalb der Zyklus-Phasen<br />
Anderer<br />
Zustandsbeschreibung / ausführbare Aktionen<br />
Zustand nach abgeschlossenem<br />
Datentransfer;<br />
Prozessdaten können gelesen und geschrieben<br />
werden.<br />
Phase nach dem Schreiben der Ausgangsdaten;<br />
Der Controller bereitet den nächsten Datenzyklus<br />
vor. Keine weiteren Aktionen während dieses Zustands<br />
zulässig.<br />
Der Controller ist bereit, den nächsten Datentransferzyklus<br />
zu starten.<br />
Datentransferzyklus wird gerade ausgeführt.<br />
Keine weiteren Aktionen während dieses Zustands<br />
zulässig.<br />
Fehler- oder Ereigniscode vorhanden<br />
(Datentransferbetrieb nicht gestattet)<br />
switch( IBS_<strong>HLI</strong>_GetCyclePhase() ) /* Phase abfragen */<br />
{<br />
case <strong>HLI</strong>_IBS_IDLE: /* Prozessdaten-Bearbeitung ... */<br />
IBS_<strong>HLI</strong>_PD_Out(ISASC1);<br />
/* .. Vorbereitung gestartet */<br />
break;<br />
case <strong>HLI</strong>_IBS_PREPARING_CYCLE : /* weiter warten ... */<br />
break;<br />
case <strong>HLI</strong>_IBS_CAN_RUN : /* jetzt Datenzyklus<br />
starten! */<br />
IBS_<strong>HLI</strong>_RunCycle();<br />
break;<br />
case <strong>HLI</strong>_IBS_RUN : /* warten bis Datenzyklus<br />
beendet */<br />
break;<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5-12 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
Delphi-Beispiel:<br />
case IBS_<strong>HLI</strong>_GetCyclePhase() of { Phase abfragen }<br />
<strong>HLI</strong>_IBS_IDLE : begin<br />
{ Prozessdaten-Bearbeitung ... }<br />
IBS_<strong>HLI</strong>_PD_Out(ISASC1);<br />
{ .. Vorbereitung gestartet }<br />
end;<br />
<strong>HLI</strong>_IBS_PREPARING_CYCLE : { weiter warten ... }<br />
<strong>HLI</strong>_IBS_CAN_RUN : { jetzt Datenzyklus starten ! }<br />
IBS_<strong>HLI</strong>_RunCycle();<br />
<strong>HLI</strong>_IBS_RUN : { warten bis Datenzyklus beendet }<br />
end;<br />
Visual-Basic-Beispiel:<br />
Dim Phase As Integer<br />
Phase = IBS_<strong>HLI</strong>_GetCyclePhase() ' Phase abfragen<br />
Select Case Phase<br />
Case <strong>HLI</strong>_IBS_IDLE<br />
' Prozessdaten-Bearbeitung ...<br />
Call IBS_<strong>HLI</strong>_PD_Out(ISASC1)<br />
' .. Vorbereitung gestartet<br />
Case <strong>HLI</strong>_IBS_PREPARING_CYCLE<br />
' warten bis Datenzyklus beendet<br />
Case <strong>HLI</strong>_IBS_CAN_RUN<br />
' jetzt Datenzyklus starten !<br />
Call IBS_<strong>HLI</strong>_RunCycle()<br />
Case <strong>HLI</strong>_IBS_RUN<br />
' warten bis Datenzyklus beendet<br />
End Select<br />
5.3.3.2 Lesen von Eingangsdaten<br />
Während der Zyklusphase A (<strong>HLI</strong>_IBS_IDLE) wird durch den Aufruf von:<br />
IBS_<strong>HLI</strong>_PD_In(Controller_ID)<br />
das aktuelle Abbild der Prozess-Eingangsdaten vom INTERBUS-Controller eingelesen.<br />
Es werden die Werte aller registrierten Eingangs-Prozessdaten-Objekte aktualisiert.<br />
Der Wert eines einzelnen Eingangs-Prozessdaten-Objekts kann durch den Aufruf von:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
IBS_<strong>HLI</strong>_PD_Input(Controller_ID, Referenz_auf_Objekt)<br />
direkt aus dem aktuellen Prozessdatenabbild aktualisiert werden.<br />
5.3.3.3 Schreiben von Ausgangsdaten<br />
Durch den Aufruf von<br />
result = IBS_<strong>HLI</strong>_PD_Out(Controller_ID)<br />
5626_de_02 PHOENIX CONTACT 5-13
IBS PC SC <strong>HLI</strong> UM<br />
während der Zyklusphase A (<strong>HLI</strong>_IBS_IDLE) überträgt das <strong>HLI</strong> die aktuellen Werte der<br />
registrierten Prozessdaten-Variablen auf das Abbild der Prozess-Ausgangsdaten <strong>des</strong><br />
INTERBUS. Der Controller wechselt dann in die Phase B.<br />
5.3.3.4 Starten eines Datentransfer-Zyklus<br />
Voraussetzung für den Start eines Datentransferzyklus ist die Ausführung von<br />
IBS_<strong>HLI</strong>_PD_Out(Controller_ID) für jeden initialisierten Controller in der Betriebsart<br />
anwendungsgesteuert.<br />
Ist (sind) der (die) Controller in der Phase C (IBS_<strong>HLI</strong>_GetCyclePhase() liefert<br />
<strong>HLI</strong>_IBS_CAN_RUN), wird durch den Aufruf von<br />
result = IBS_<strong>HLI</strong>_RunCycle()<br />
der nächste Datentransferzyklus gestartet. Während der Transferphase liefert<br />
IBS_<strong>HLI</strong>_GetCyclePhase() den Wert <strong>HLI</strong>_IBS_RUN (Phase D).<br />
5.3.3.5 Rücksetzen der gesamten Ausgangsdaten<br />
Mit dem Start <strong>des</strong> Datentransfers wird das zuletzt gültige Prozessdatenabbild der Ausgänge<br />
wieder zu den Teilnehmern übertragen. <strong>Die</strong>s kann z.B. nach einem Fehlerzustand<br />
der Anlage erwünscht oder unerwünscht sein.<br />
Durch den Aufruf von<br />
result = IBS_<strong>HLI</strong>_ResetAllOutputs(Controller_ID)<br />
werden alle bei Controller_ID registrierten Prozessdaten-Ausgangsobjekte auf 0 und<br />
das Prozessdatenabbild zurückgesetzt.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5-14 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
5.4 Steuerung <strong>des</strong> INTERBUS<br />
5.4.1 Starten <strong>des</strong> Datentransfers<br />
Nach erfolgreicher Initialisierung oder bei einem Stopp- bzw. Fehlerzustand kann durch<br />
den Aufruf von<br />
result = IBS_<strong>HLI</strong>_StartBus(Controller_ID)<br />
der Datentransfer (erneut) gestartet werden.<br />
Der Rückgabewert ist <strong>HLI</strong>_OKAY bei fehlerfreier Ausführung. Das Element BusState<br />
<strong>des</strong> Statusobjekts erhält den Wert <strong>HLI</strong>_IBS_RUN.<br />
Kann der Datentransfer nicht gestartet werden, so ist der Rückgabewert ein entsprechender<br />
Ereigniscode.<br />
Mit dem Start <strong>des</strong> Datentransfers wird auch das zuletzt gültige Prozessdatenabbild der<br />
Ausgänge wieder zu den Teilnehmern übertragen.<br />
<strong>Die</strong>s kann z.B. nach einem Fehlerzustand der Anlage erwünscht, oder unerwünscht<br />
sein.<br />
Mit der Funktion IBS_<strong>HLI</strong>_ResetAllOutputs() können Sie vor dem Starten <strong>des</strong> Datentransfers<br />
die Ausgangsdaten aller Teilnehmer zurücksetzen (siehe Kapitel 5.3.3).<br />
5.4.2 Stoppen <strong>des</strong> Datentransfers<br />
Der Datentransfer <strong>des</strong> INTERBUS kann durch den Aufruf von<br />
result = IBS_<strong>HLI</strong>_StopBus(Controller_ID)<br />
gestoppt werden. <strong>Die</strong> Ausgänge der INTERBUS-Teilnehmer bleiben in ihrem aktuellen Zustand.<br />
Der Rückgabewert ist <strong>HLI</strong>_OKAY bei fehlerfreier Ausführung. Das Element BusState<br />
<strong>des</strong> Statusobjekts erhält den Wert <strong>HLI</strong>_IBS_STOPPED.<br />
Konnte der Befehl nicht ausgeführt werden, so ist der Rückgabewert ein entsprechender<br />
Ereigniscode.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5.4.3 Alarm-Stopp <strong>des</strong> Datentransfers<br />
Der INTERBUS-Controller kann durch den Aufruf von<br />
result = IBS_<strong>HLI</strong>_AlarmStop(Controller_ID)<br />
in den Alarm-Stopp-Zustand versetzt werden.<br />
Der Datentransfer wird gestoppt. <strong>Die</strong> Ausgänge der INTERBUS-Teilnehmer werden zurückgesetzt.<br />
Der Rückgabewert ist <strong>HLI</strong>_OKAY bei fehlerfreier Ausführung. Das Element<br />
BusState <strong>des</strong> Statusobjekts erhält den Wert <strong>HLI</strong>_IBS_STOPPED. Konnte der Befehl<br />
nicht ausgeführt werden, so ist der Rückgabewert ein entsprechender Ereigniscode.<br />
5626_de_02 PHOENIX CONTACT 5-15
IBS PC SC <strong>HLI</strong> UM<br />
5.4.4 Schalten von Fernbus-Segmenten<br />
Beim Schalten von Fernbus-Segmenten wird die weiterführende Schnittstelle <strong>des</strong> vor dem<br />
zu schaltenden Segment positionierten Fernbus-Teilnehmers ab- bzw. zugeschaltet.<br />
Davon sind alle Segmente betroffen, die physikalisch folgen.<br />
Ein Fernbus-Segment kann durch den Aufruf von<br />
result = IBS_<strong>HLI</strong>_SwitchRemoteBus (Controller_ID,<br />
Segment_nummer,<br />
SwitchCode)<br />
geschaltet werden.<br />
Segment_nummer ist dabei die logische Nummer <strong>des</strong> Segments, für SwitchCode sind<br />
folgende Werte definiert:<br />
– <strong>HLI</strong>_SEGMENT_OFF Segment abschalten<br />
– <strong>HLI</strong>_SEGMENT_ON Segment zuschalten<br />
Der Rückgabewert ist <strong>HLI</strong>_OKAY bei fehlerfreier Ausführung. Konnte der Befehl nicht ausgeführt<br />
werden, so ist der Rückgabewert ein entsprechender Ereigniscode.<br />
5.4.5 Schalten von Lokalbus-Segmenten<br />
Beim Schalten von Lokalbus-Segmenten wird die abzweigende Schnittstelle der Lokalbus-<br />
Busklemme ab- bzw. zugeschaltet. Davon sind alle Teilnehmer dieses Lokalbusses betroffen.<br />
Ein Lokalbus-Segment kann durch den Aufruf von<br />
result = IBS_<strong>HLI</strong>_SwitchLocalBus (Controller_ID,<br />
Segment_nummer,<br />
SwitchCode)<br />
geschaltet werden.<br />
Segment_Nr ist dabei die logische Nummer <strong>des</strong> Fernbus-Segments, dem die Busklemme<br />
<strong>des</strong> zu schaltenden Lokalbusses zugeordnet ist.<br />
Für SwitchCode sind folgende Werte definiert:<br />
– <strong>HLI</strong>_SEGMENT_OFF Segment abschalten<br />
– <strong>HLI</strong>_SEGMENT_ON Segment zuschalten<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Der Rückgabewert ist <strong>HLI</strong>_OKAY bei fehlerfreier Ausführung. Konnte der Befehl nicht ausgeführt<br />
werden, so ist der Rückgabewert ein entsprechender Ereigniscode.<br />
5-16 PHOENIX CONTACT 5626_de_02
5.4.6 Schalten von Gruppen und Alternativen<br />
Anwendungs-Programmierung<br />
Sind bei der Bus-Konfiguration Gruppen oder Alternativen definiert worden, so können<br />
diese wahlweise ab- bzw. zugeschaltet werden. Das Schalten von Gruppen ist vergleichbar<br />
mit dem Schalten von Lokalbus- und Fernbus-Segmenten. Zur Gruppe gehörende<br />
Teilnehmer werden im Bus aktiviert / deaktiviert.<br />
Beim Schalten von Alternativen muss eine Schaltreihenfolge beachtet werden, da hier der<br />
Bus physikalisch verändert wird:<br />
– Abschalten der aktiven Alternative<br />
– physikalischer Wechsel der Busteilnehmer<br />
– Zuschalten der neuen Alternative<br />
Stimmt die zugeschaltete Alternative physikalisch nicht mit der Vorgabe überein, so generiert<br />
der Controller einen Fernbus-Fehler.<br />
Eine Gruppe / Alternative kann durch den Aufruf von<br />
result = IBS_<strong>HLI</strong>_SwitchGroup (Controller_ID,<br />
Gruppen_nummer,<br />
Alternative, SwitchCode)<br />
geschaltet werden (Bei Gruppen: Alternative = 0).<br />
Gruppen_nummer ist dabei die Nummer der zu schaltenden Gruppe, Alternative entsprechend<br />
die Nummer der Alternative.<br />
Für SwitchCode sind folgende Werte definiert:<br />
– <strong>HLI</strong>_GROUP_OFF Gruppe / Alternative abschalten<br />
– <strong>HLI</strong>_GROUP_ON Gruppe / Alternative zuschalten<br />
Der Rückgabewert ist <strong>HLI</strong>_OKAY bei fehlerfreier Ausführung. Konnte der Befehl nicht ausgeführt<br />
werden, so ist der Rückgabewert ein entsprechender Ereigniscode.<br />
C-Beispiel:<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* Alternative 4.1 abschalten ... */<br />
if( IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 1, <strong>HLI</strong>_GROUP_OFF) == <strong>HLI</strong>_OKAY<br />
)<br />
/* Alternative 4.2 zuschalten ... */<br />
ret = IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 2, <strong>HLI</strong>_GROUP<br />
_ON );<br />
Delphi-Beispiel:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
var<br />
ret : <strong>HLI</strong>RET;<br />
{ Alternative 4.1 abschalten ... }<br />
if IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 1, <strong>HLI</strong>_GROUP_OFF) = <strong>HLI</strong>_OKAY<br />
then<br />
{ Alternative 4.2 zuschalten ... }<br />
ret := IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 2,<br />
<strong>HLI</strong>_GROUP_ON );<br />
5626_de_02 PHOENIX CONTACT 5-17
IBS PC SC <strong>HLI</strong> UM<br />
Visual-Basic-Beispiel:<br />
Dim ret As Integer<br />
...<br />
' Alternative 4.1 abschalten ... }<br />
if IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 1, <strong>HLI</strong>_GROUP_OFF) = <strong>HLI</strong>_OKAY<br />
then<br />
' Alternative 4.2 zuschalten ...<br />
ret = IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 2,<br />
<strong>HLI</strong>_GROUP_ON )<br />
5.5 PCP-Kommunikation<br />
Bei der PCP-Kommunikation werden bedarfsorientiert Telegramme zwischen INTERBUS-<br />
Master und PCP-Teilnehmer ausgetauscht.<br />
<strong>Die</strong> Telegramme sind nachrichtenorientiert und in das Summenrahmenprotokoll <strong>des</strong><br />
INTERBUS integriert.<br />
Als Kommunikationspartner können PCP-Teilnehmer dem INTERBUS-Master <strong>Die</strong>nste zur<br />
Verfügung stellen (PCP-Server), aber auch <strong>Die</strong>nste vom INTERBUS-Master anfordern<br />
(PCP-Client). Voraussetzung für eine Kommunikation ist der Verbindungsaufbau zum Teilnehmer<br />
und die Verbindungsüberwachung durch den INTERBUS-Master.<br />
<strong>Die</strong>nste werden dann über die entsprechenden Telegramme schrittweise ausgeführt:<br />
– Anforderung <strong>des</strong> <strong>Die</strong>nstes durch die Anwendung:<br />
→ Request-Telegramm zum Teilnehmer → Indication beim Teilnehmer<br />
– Bearbeitung <strong>des</strong> <strong>Die</strong>nstes durch den Teilnehmer<br />
– Antwort <strong>des</strong> Teilnehmers:<br />
→ Response-Telegramm <strong>des</strong> Teilnehmers → Confirmation beim Controller → Rückmeldung<br />
zur Anwendung<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5-18 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
<strong>Die</strong> PCP-Telegramme benötigen durch die abschnittweise Übertragung im Summenrahmentelegramm<br />
mehrere INTERBUS-Zyklen für den Transfer. <strong>Die</strong> Bearbeitungszeit<br />
eines PCP-<strong>Die</strong>nstes hängt somit von folgenden Parametern ab:<br />
– Telegrammlänge der Anforderung (Request) und der Antwort<br />
(Response)<br />
– Anzahl der benötigten INTERBUS-Zyklen für die Telegramme<br />
– Zykluszeit <strong>des</strong> INTERBUS<br />
– Bearbeitungszeit durch den Teilnehmer<br />
Weitere Informationen zur PCP-Kommunikation siehe Anwenderhandbuch Peripherials<br />
Communication Protocol (PCP), IBS SYS PCP G4 UM, Artikel-Nr. 2745114.<br />
Das PCP-Management der <strong>HLI</strong>-Zustandsmaschine übernimmt die Aufgaben Verbindungsaufbau,<br />
Verbindungsüberwachung, <strong>Die</strong>nstanforderung und <strong>Die</strong>nstüberwachung auf<br />
der Ebene der Firmware-<strong>Die</strong>nste. <strong>Die</strong> Aufgaben einer <strong>HLI</strong>-Anwendung für eine Kommunikation<br />
reduzieren sich damit auf:<br />
– Abfrage <strong>des</strong> Teilnehmer-Zustands (kommunikationsbereit?)<br />
– Je nach <strong>Die</strong>nst Aufbereitung der Kommunikationsdaten (Nutzdaten)<br />
– Aufrufen der <strong>HLI</strong>-PCP-Funktionen<br />
– Je nach <strong>Die</strong>nst Auswertung der Kommunikationsdaten (Nutzdaten)<br />
<strong>Die</strong> PCP-Funktionen <strong>des</strong> <strong>HLI</strong> stellen folgende <strong>Die</strong>nste bereit:<br />
– Lesen der Teilnehmer-Identifikation (Identify-<strong>Die</strong>nst)<br />
– Lesen von Teilnehmerdaten (Read-<strong>Die</strong>nst auf ein Kommunikationsobjekt <strong>des</strong> Teilnehmers,<br />
identifiziert durch Index und Subindex)<br />
– Schreiben von Teilnehmerdaten (Write-<strong>Die</strong>nst auf ein Kommunikationsobjekt <strong>des</strong> Teilnehmers,<br />
identifiziert durch Index und Subindex)<br />
– Client-Funktion für Write-<strong>Die</strong>nste durch einen Teilnehmer<br />
– Teilnehmer-Programm-<strong>Die</strong>nste Start, Stopp, Resume und Reset<br />
Es gibt zwei Arten, PCP-<strong>Die</strong>nste auszuführen:<br />
– Als „Request":<br />
<strong>Die</strong> <strong>HLI</strong>-Funktion sendet die <strong>Die</strong>nstanforderung, initialisiert das zugehörige interne<br />
Management und kehrt zurück. <strong>Die</strong> Zustandsmaschine <strong>des</strong> <strong>HLI</strong> überwacht die <strong>Die</strong>nstausführung.<br />
<strong>Die</strong> Anwendung muss im weiteren Verlauf die Beendigung <strong>des</strong> <strong>Die</strong>nstes<br />
über ein Objekt-Element abfragen und dabei die Ausführung der <strong>HLI</strong>- Zustandsmaschine<br />
gewährleisten.<br />
– Als „Service":<br />
<strong>Die</strong> <strong>HLI</strong>-Funktion sendet die <strong>Die</strong>nstanforderung und wartet mit einer Zeitüberwachung<br />
auf die <strong>Die</strong>nstantwort. <strong>Die</strong> Funktion kehrt nach Empfang der Antwort oder nach Ablauf<br />
der Wartezeit zurück.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 5-19
IBS PC SC <strong>HLI</strong> UM<br />
5.5.1 Kommunikationsbereitschaft <strong>des</strong> Teilnehmers<br />
Vor der Ausführung von PCP-<strong>Die</strong>nsten kann die Kommunikationsbereitschaft <strong>des</strong> Teilnehmers<br />
durch Aufruf der Funktion<br />
Status = IBS_<strong>HLI</strong>_PCP_DeviceState(Controller_ID,<br />
Segment, Position)<br />
abgefragt werden.<br />
Ist der zurückgelieferte Wert <strong>HLI</strong>_PCP_DEVICE_READY, so ist der Teilnehmer kommunikationsbereit,<br />
andernfalls ist die Verbindung noch nicht aufgebaut, gestört, oder es wird<br />
bereits ein <strong>Die</strong>nst ausgeführt (siehe Anhang E 4).<br />
5.5.2 Teilnehmer-Identifikation (Identify-<strong>Die</strong>nst)<br />
Über den Identify-<strong>Die</strong>nst werden die Informationen „Name", „Hersteller" und „Revision"<br />
eines Teilnehmers abgefragt und als Zeichenketten zur Verfügung gestellt.<br />
Deklarieren Sie hierzu ein Objekt DI <strong>des</strong> Datentyps T_<strong>HLI</strong>_PCP_DEVICE_INFO, und initialisieren<br />
Sie die folgenden Elemente:<br />
– Segment PCP-Teilnehmer (Bus-Segment)<br />
– Position PCP-Teilnehmer (Bus-Position)<br />
Nach erfolgreicher <strong>Die</strong>nstausführung enthalten die Elemente Name,<br />
Manufacturer und Revision die Identifikationsdaten <strong>des</strong> Teilnehmers als Null-terminierte<br />
Zeichenketten.<br />
<strong>Die</strong> folgenden Beispiele zeigen die Verwendung sowohl <strong>des</strong> Requests als auch <strong>des</strong> Service:<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_DEVICE_INFO DI;<br />
...<br />
DI.Segment = 4; DI.Position = 2; /* Teilnehmer 4.2 */<br />
/* Als Request : */<br />
if( IBS_<strong>HLI</strong>_PCP_IdentifyRequest( ISASC1, &DI ) ==<br />
<strong>HLI</strong>_OKAY )<br />
{<br />
... /* Loop */<br />
IBS_<strong>HLI</strong>_Process(ISASC1); /* Zustands-Maschine */<br />
if( DI.State != <strong>HLI</strong>_PCP_SERVICE_PENDING )<br />
if( DI.State == <strong>HLI</strong>_PCP_SERVICE_OKAY )<br />
... /* Daten auswerten ... */<br />
}<br />
/* Als Service : */<br />
if( IBS_<strong>HLI</strong>_PCP_IdentifyService( ISASC1, &DI, 1000 )<br />
== <strong>HLI</strong>_PCP_SERVICE_OKAY )<br />
{<br />
... /* Daten auswerten ... */<br />
}<br />
Delphi-Beispiel:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
var<br />
5-20 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
DI : T_<strong>HLI</strong>_PCP_DEVICE_INFO;<br />
...<br />
DI.Segment := 4; DI.Position := 2; { Teilnehmer 4.2 }<br />
{ Als Request : }<br />
if IBS_<strong>HLI</strong>_PCP_IdentifyRequest( ISASC1, @DI ) =<br />
<strong>HLI</strong>_OKAY then<br />
begin<br />
... { Loop }<br />
IBS_<strong>HLI</strong>_Process(ISASC1); { Zustands-Maschine }<br />
if DI.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if DI.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
... { Daten auswerten ... }<br />
end;<br />
{ Als Service : }<br />
if IBS_<strong>HLI</strong>_PCP_IdentifyService( ISASC1, @DI, 1000 ) =<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
begin<br />
... { Daten auswerten ... }<br />
end;<br />
Visual-Basic-Beispiel:<br />
Dim DI As T_<strong>HLI</strong>_PCP_DEVICE_INFO<br />
...<br />
DI.Segment = 4<br />
DI.Position = 2 ' Teilnehmer 4.2<br />
' Als Request:<br />
if IBS_<strong>HLI</strong>_PCP_IdentifyRequest( ISASC1, DI ) =<br />
<strong>HLI</strong>_OKAY then<br />
... ' Loop<br />
Call IBS_<strong>HLI</strong>_Process(ISASC1) ' Zustands-Maschine<br />
if DI.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if DI.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
... ' Daten auswerten ...<br />
End IF<br />
' Als Service:<br />
if IBS_<strong>HLI</strong>_PCP_IdentifyService( ISASC1, @DI, 1000 ) =<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
... ' Daten auswerten ...<br />
End If<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 5-21
IBS PC SC <strong>HLI</strong> UM<br />
5.5.3 Teilnehmerdaten lesen (Read-<strong>Die</strong>nst)<br />
Über den Read-<strong>Die</strong>nst werden die Werte von Teilnehmer-Variablen (Kommunikations-Objekte)<br />
abgefragt, die über einen Index und Subindex identifiziert werden.<br />
Deklarieren Sie hierzu ein Objekt RD <strong>des</strong> Datentyps T_<strong>HLI</strong>_PCP_RW , und initialisieren Sie<br />
die folgenden Elemente:<br />
– Segment PCP-Teilnehmer (Bus-Segment)<br />
– Position PCP-Teilnehmer (Bus-Position)<br />
– Index Index <strong>des</strong> zu lesenden<br />
Kommunikationsobjekts<br />
– Subindex Subindex <strong>des</strong> zu lesenden<br />
Kommunikationsobjekts<br />
Nach erfolgreicher <strong>Die</strong>nstausführung enthält das Element Data die gelesenen Daten <strong>des</strong><br />
Kommunikationsobjekts, das Element Length die Anzahl der gelesenen Bytes.<br />
Der Aufbau bzw. die Interpretation der gelesenen Daten ist abhängig von der Definition<br />
<strong>des</strong> Kommunikationsobjekts.<br />
<strong>Die</strong> im Element Data bereitgestellten Daten werden im MOTOROLA-Format abgelegt.<br />
Zum typ-orientierten Zugriff auf die Daten stellt <strong>HLI</strong> entsprechende Funktionen zum Lesen<br />
von Int16, Int32, Float und String-Daten zur Verfügung (siehe Anhang C 10).<br />
<strong>Die</strong> folgenden Beispiele zeigen die Verwendung sowohl <strong>des</strong> Requests als auch <strong>des</strong> Service<br />
sowie den typ-orientierten Zugriff auf die Daten:<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_RW RD;<br />
USIGN16 Wort1;<br />
...<br />
RD.Segment = 4; RD.Position = 2; /* Teilnehmer 4.2 */<br />
RD.Index = 0x5FFE; RD.Subindex = 0; /* Kommuniksationsobjekt<br />
*/<br />
/* Als Request : */<br />
if( IBS_<strong>HLI</strong>_PCP_ReadRequest( ISASC1, &RD ) ==<br />
<strong>HLI</strong>_OKAY )<br />
{<br />
/* Loop ...*/<br />
IBS_<strong>HLI</strong>_Process(ISASC1); /* Zustands-Maschine */<br />
if( RD.State != <strong>HLI</strong>_PCP_SERVICE_PENDING )<br />
if( RD.State == <strong>HLI</strong>_PCP_SERVICE_OKAY )<br />
/* Daten auswerten ... */<br />
IBS_<strong>HLI</strong>_PCPObject_GetInt16(&RD, 0, &Wort1);<br />
}<br />
/* Als Service : */<br />
if( IBS_<strong>HLI</strong>_PCP_ReadService( ISASC1, &RD, 1000 ) ==<br />
<strong>HLI</strong>_OKAY )<br />
/* Daten auswerten ... */<br />
IBS_<strong>HLI</strong>_PCPObject_GetInt16(&RD, 0, &Wort1);<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5-22 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
Delphi-Beispiel:<br />
var<br />
RD : T_<strong>HLI</strong>_PCP_RW;<br />
Wort1 : USIGN16;<br />
...<br />
RD.Segment := 4; RD.Position := 2; { Teilnehmer 4.2 }<br />
RD.Index := $5FFE; RD.Subindex := 0; { Kommunikationsobjekt<br />
}<br />
{ Als Request : }<br />
if IBS_<strong>HLI</strong>_PCP_ReadRequest(ISASC1, @RD) = <strong>HLI</strong>_OKAY then<br />
begin<br />
{ Loop... }<br />
IBS_<strong>HLI</strong>_Process(ISASC1); { Zustands-Maschine }<br />
if RD.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if RD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
{ Daten auswerten ... }<br />
IBS_<strong>HLI</strong>_PCPObject_GetInt16(@RD, 0, @Wort1);<br />
end;<br />
{ Als Service : }<br />
if IBS_<strong>HLI</strong>_PCP_ReadService(ISASC1, @RD, 1000) =<br />
<strong>HLI</strong>_OKAY then<br />
begin<br />
{ Daten auswerten ... }<br />
IBS_<strong>HLI</strong>_PCPObject_GetInt16(@RD, 0, @Wort1);<br />
end;<br />
Visual-Basic-Beispiel:<br />
im RD As T_<strong>HLI</strong>_PCP_RW<br />
Dim Wort1 As Integer<br />
...<br />
RD.Segment = 4<br />
RD.Position = 2 ' Teilnehmer 4.2<br />
RD.Index = &H5FFE ' Kommunikationsobjekt<br />
RD.Subindex = 0<br />
' Als Request:<br />
if IBS_<strong>HLI</strong>_PCP_ReadRequest( ISASC1, RD ) = <strong>HLI</strong>_OKAY then<br />
' Loop ...<br />
Call IBS_<strong>HLI</strong>_Process(ISASC1) ' Zustands-Maschine<br />
if RD.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if RD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
' Daten auswerten ...<br />
Call IBS_<strong>HLI</strong>_PCPObject_GetInt16(RD, 0, Wort1)<br />
End If<br />
' Als Service:<br />
if IBS_<strong>HLI</strong>_PCP_ReadService( ISASC1, RD, 1000 ) =<br />
<strong>HLI</strong>_OKAY then<br />
' Daten auswerten ...<br />
Call IBS_<strong>HLI</strong>_PCPObject_GetInt16(RD, 0, Wort1)<br />
End If<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 5-23
IBS PC SC <strong>HLI</strong> UM<br />
5.5.4 Teilnehmerdaten schreiben (Write-<strong>Die</strong>nst)<br />
Über den Write-<strong>Die</strong>nst werden Teilnehmer-Variablen (Kommunikationsobjekte), die über<br />
einen Index und Subindex identifiziert werden, mit übergebenen Werten beschrieben.<br />
Deklarieren Sie hierzu ein Objekt WD <strong>des</strong> Datentyps T_<strong>HLI</strong>_PCP_RW , und initialisieren Sie<br />
die folgenden Elemente:<br />
– Segment PCP-Teilnehmer (Bus-Segment)<br />
– Position PCP-Teilnehmer (Bus-Position)<br />
– Index Index <strong>des</strong> zu schreibenden<br />
Kommunikationsobjekts<br />
– Subindex Subindex <strong>des</strong> zu schreibenden<br />
Kommunikationsobjekts<br />
– Length Nutzdaten-Länge in Bytes<br />
– Data Nutzdaten (MOTOROLA-Format)<br />
Der Aufbau bzw. die Interpretation der zu schreibenden Daten ist abhängig von der Definition<br />
<strong>des</strong> Kommunikationsobjekts.<br />
<strong>Die</strong> im Element Data einzutragenden Daten werden im MOTOROLA-Format erwartet.<br />
Zur typ-orientierten Vorbereitung der Daten stellt <strong>HLI</strong> entsprechende Funktionen zum<br />
Schreiben von Int16, Int32, Float und String-Daten zur Verfügung (siehe Anhang C 10).<br />
<strong>Die</strong> folgenden Beispiele zeigen die Verwendung sowohl <strong>des</strong> Requests als auch <strong>des</strong> Service<br />
sowie die typ-orientierte Vorbereitung der Daten:<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_RW WD;<br />
...<br />
WD.Segment = 4; WD.Position = 2; /* Teilnehmer 4.2 */<br />
WD.Index = 0x6031; WD.Subindex = 1; /* Kommuniksationsobjekt<br />
*/<br />
/* Daten vorbereiten ... */<br />
IBS_<strong>HLI</strong>_PCPObject_SetFloat(&WD, 0, 3.1418);<br />
/* Als Request : */<br />
if( IBS_<strong>HLI</strong>_PCP_WriteRequest( ISASC1, &WD ) ==<br />
<strong>HLI</strong>_OKAY )<br />
{<br />
/* Loop ...*/<br />
IBS_<strong>HLI</strong>_Process(ISASC1); /* Zustands-Maschine */<br />
if( WD.State != <strong>HLI</strong>_PCP_SERVICE_PENDING )<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
if( WD.State == <strong>HLI</strong>_PCP_SERVICE_OKAY )<br />
/* <strong>Die</strong>nst okay ... */<br />
}<br />
/* Als Service : */<br />
if( IBS_<strong>HLI</strong>_PCP_WriteService( ISASC1, &WD, 1000 ) ==<br />
<strong>HLI</strong>_OKAY )<br />
/* <strong>Die</strong>nst okay ... */<br />
5-24 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
Delphi-Beispiel:<br />
var<br />
WD : T_<strong>HLI</strong>_PCP_RW;<br />
..<br />
WD.Segment := 4; WD.Position := 2; { Teilnehmer 4.2 }<br />
WD.Index := $6031; WD.Subindex := 1; { Kommunikationsobjekt<br />
}<br />
{ Daten vorbereiten }<br />
IBS_<strong>HLI</strong>_PCPObject_SetFloat(@WD, 0, 3.1418 );<br />
{ Als Request : }<br />
if IBS_<strong>HLI</strong>_PCP_WriteRequest(ISASC1, @WD) = <strong>HLI</strong>_OKAY then<br />
begin<br />
{ Loop... }<br />
IBS_<strong>HLI</strong>_Process(ISASC1); { Zustands-Maschine }<br />
if WD.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if WD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
{ <strong>Die</strong>nst okay ... }<br />
end;<br />
{ Als Service : }<br />
if IBS_<strong>HLI</strong>_PCP_WriteService(ISASC1, @WD, 1000) =<br />
<strong>HLI</strong>_OKAY then<br />
begin<br />
{ <strong>Die</strong>nst okay ... }<br />
end;<br />
Visual-Basic-Beispiel:<br />
Dim WD As T_<strong>HLI</strong>_PCP_RW<br />
...<br />
WD.Segment = 4<br />
WD.Position = 2 ' Teilnehmer 4.2<br />
WD.Index = &H5FFE ' Kommunikationsobjekt<br />
WD.Subindex = 0<br />
' Daten vorbereiten }<br />
Call IBS_<strong>HLI</strong>_PCPObject_SetFloat(WD, 0, 3.1418 )<br />
' Als Request:<br />
if IBS_<strong>HLI</strong>_PCP_WriteRequest( ISASC1, WD ) = <strong>HLI</strong>_OKAY then<br />
' Loop ...<br />
Call IBS_<strong>HLI</strong>_Process(ISASC1) ' Zustands-Maschine<br />
if WD.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if WD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
' <strong>Die</strong>nst okay ...<br />
End If<br />
' Als Service:<br />
if IBS_<strong>HLI</strong>_PCP_WriteService( ISASC1, WD, 1000 ) =<br />
<strong>HLI</strong>_OKAY then<br />
' <strong>Die</strong>nst okay ...<br />
End If<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 5-25
IBS PC SC <strong>HLI</strong> UM<br />
5.5.5 PCP-Client-Registrierung<br />
PCP-Teilnehmer können Schreibanforderungen an den INTERBUS-Master senden.<br />
Solange kein Client-Objekt für einen PCP-Teilnehmer registriert wurde, beantwortet <strong>HLI</strong><br />
eine Schreibanforderung dieses PCP-Teilnehmers negativ.<br />
Nach Registrierung eines Client-Objekts beantwortet <strong>HLI</strong> eine Schreibanforderung <strong>des</strong><br />
PCP-Teilnehmers positiv, setzt das Element State <strong>des</strong> registrierten Objekts auf<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY und stellt im registrierten Objekt die geschriebenen Daten zur<br />
Verfügung (setzt die Bearbeitung der <strong>HLI</strong>-Zustandsmaschine voraus).<br />
Deklarieren Sie hierzu ein Objekt CL <strong>des</strong> Datentyps T_<strong>HLI</strong>_PCP_RW, und initialisieren Sie<br />
die folgenden Elemente:<br />
– Segment PCP-Teilnehmer (Bus-Segment)<br />
– Position PCP-Teilnehmer (Bus-Position)<br />
Rufen Sie dann die Objekt-Registrierung auf.<br />
Setzen Sie das Element State <strong>des</strong> Objekts auf einen Wert ungleich<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY, damit der Eingang einer Schreibanforderung registriert werden<br />
kann. Nachdem ein Schreibeingang erkannt (Element State <strong>des</strong> registrierten Objekts<br />
wurde auf <strong>HLI</strong>_PCP_SERVICE_OKAY gesetzt) und ausgewertet wurde, ist dies ebenfalls<br />
durchzuführen.<br />
<strong>Die</strong> folgenden Beispiele zeigen die Handhabung bei einer Client-Registrierung:<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_RW CD;<br />
<strong>HLI</strong>RET ret;<br />
...<br />
CD.Segment = 3; CD.Position = 1; /* Teilnehmer 3.1 */<br />
/* Registrierung */<br />
ret = IBS_<strong>HLI</strong>_PCP_RegisterClientObject( ISASC1, &CD );<br />
CD.State = <strong>HLI</strong>_PCP_SERVICE_PENDING;<br />
... /* <strong>HLI</strong>-Zustandsmaschine bearbeiten */<br />
if( CD.State == <strong>HLI</strong>_PCP_SERVICE_OKAY )<br />
{ /* Schreibanforderung eingegangen */<br />
... /* CD enthält Index, Subindex, Length, Data */<br />
CD.State = <strong>HLI</strong>_PCP_SERVICE_PENDING;<br />
}<br />
Delphi-Beispiel:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
var<br />
CD : T_<strong>HLI</strong>_PCP_RW;<br />
ret: <strong>HLI</strong>RET;<br />
...<br />
CD.Segment := 3; CD.Position := 1; { Teilnehmer C.1 }<br />
{ Registrierung }<br />
ret := IBS_<strong>HLI</strong>_PCP_RegisterClientObject( ISASC1, @CD);<br />
CD.State := <strong>HLI</strong>_PCP_SERVICE_PENDING;<br />
... { <strong>HLI</strong>-Zustandsmaschine bearbeiten }<br />
if CD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
begin { Schreibanforderung eingegangen }<br />
... { CD enthält Index, Subindex, Length, Data }<br />
5-26 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
CD.State := <strong>HLI</strong>_PCP_SERVICE_PENDING;<br />
end;<br />
Visual-Basic-Beispiel:<br />
Dim CD As T_<strong>HLI</strong>_PCP_RW<br />
Dim ret As Integer<br />
...<br />
CD.Segment = 3<br />
CD.Position = 1 ' Teilnehmer C.1<br />
' Registrierung<br />
ret = IBS_<strong>HLI</strong>_PCP_RegisterClientObject( ISASC1, CD )<br />
CD.State = <strong>HLI</strong>_PCP_SERVICE_PENDING<br />
... ' <strong>HLI</strong>-Zustandsmaschine bearbeiten<br />
if CD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
' Schreibanforderung eingegangen }<br />
... ' CD enthält Index, Subindex, Length, Data<br />
CD.State = <strong>HLI</strong>_PCP_SERVICE_PENDING<br />
End If<br />
5.6 Fehler- und Ereignisbehandlung<br />
5.6.1 Negative Funktionsausführung<br />
Konnte eine <strong>HLI</strong>-Funktion nicht positiv bearbeitet werden, so ist der Rückgabewert der entsprechenden<br />
Funktion ein Wert ungleich <strong>HLI</strong>_OKAY (funktionaler Fehler).<br />
Abhängig von der Funktion und der Art <strong>des</strong> Fehlers werden von der aufgerufenen Funktion<br />
ein oder mehrere entsprechende Ereignisse erzeugt, die zur weiteren Information gelesen<br />
werden können (siehe Anhang E).<br />
<strong>Die</strong> Funktion liefert als Rückgabewert dann einen Fehler- oder einen entsprechenden<br />
Ereigniscode zurück.<br />
5.6.2 INTERBUS-Status<br />
Der Status <strong>des</strong> INTERBUS (Run / Stopp / Fehler) wird auf das Element BusState, das<br />
zum Statusobjekt <strong>des</strong> Controllers gehört, abgebildet.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
<strong>Die</strong> Aktualisierung <strong>des</strong> Elements wird wie die Ereignis-Verwaltung durch Aufrufe von <strong>HLI</strong>-<br />
Funktionen durchgeführt, die das Bearbeiten der Zustandsmaschine bewirken.<br />
5626_de_02 PHOENIX CONTACT 5-27
IBS PC SC <strong>HLI</strong> UM<br />
5.6.3 Ereignisse lesen<br />
<strong>Die</strong> Anwendung wird über das Element EventIndication, das zum Controller zugeordneten<br />
Statusobjekt gehört, über das Auftreten von Ereignissen informiert.<br />
Der Wert dieses Elements wird vom <strong>HLI</strong> bei jedem aufgetretenen Ereignis inkrementiert.<br />
Deklarieren Sie ein Objekt Event <strong>des</strong> Datentyps T_<strong>HLI</strong>_EVENT durch den Aufruf der<br />
Funktion:<br />
result = IBS_<strong>HLI</strong>_GetEventInfo(Controller_ID,<br />
Referenz_auf_Event)<br />
<strong>Die</strong> Anwendung liest dann einzelne Ereignis-Daten nach Event in der Reihenfolge ihres<br />
Auftretens. Der Wert <strong>des</strong> Elements EventIndication wird nach jedem erfolgreichen<br />
Aufruf dekrementiert. Somit zeigt der Wert von EventIndication immer die Anzahl der<br />
Ereignisse an, die noch nicht von der Anwendung gelesen wurden.<br />
Mit dem Aufruf von<br />
IBS_<strong>HLI</strong>_CopyEventText(Referenz_auf_Event,<br />
Sprachen_code, Ziel_Puffer)<br />
kann sich die Anwendung den Klartext eines Ereignisses in einen eigenen Puffer<br />
(Ziel_Puffer) kopieren lassen, wobei Sprachen_code den Wert <strong>HLI</strong>_ENGLISH für<br />
englischen Text oder <strong>HLI</strong>_DEUTSCH für die deutsche Textversion annehmen darf.<br />
5.6.4 Ereignis-Filter einstellen<br />
Ereignisse sind in folgende Gruppen untergliedert, für die ein entsprechender Ereignis-<br />
Gruppen-Code definiert ist:<br />
– <strong>HLI</strong>_EG_INTERNAL: interne Fehler wie z.B. Speichermangel<br />
– <strong>HLI</strong>_EG_DDI: Fehler <strong>des</strong> Device Driver Interface<br />
– <strong>HLI</strong>_EG_CTRL: Fehler <strong>des</strong> Controllers<br />
– <strong>HLI</strong>_EG_BUSFAULT: Fehler, die zum Bus-Stopp führen<br />
– <strong>HLI</strong>_EG_DEVICES: Teilnehmer-Meldungen<br />
– <strong>HLI</strong>_EG_BUSSTATE: Gesteuerte Zustandsänderungen <strong>des</strong><br />
INTERBUS<br />
– <strong>HLI</strong>_EG_PCP: PCP-Kommunikations-Fehler<br />
– <strong>HLI</strong>_EG_APP: Anwendungsfehler<br />
– <strong>HLI</strong>_EG_ALL: Alle Ereignis-Gruppen<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
<strong>Die</strong> Anwendung kann über das Setzen von Filtern bestimmen, welche Art von Ereignissen<br />
intern gespeichert und der Anwendung gemeldet werden.<br />
Mit dem Aufruf von<br />
IBS_<strong>HLI</strong>_DisableEvents(Controller_ID,<br />
Gruppen_Code_Kombination)<br />
werden Ereignisgruppen von der Speicherung und Meldung ausgeschlossen, mit<br />
IBS_<strong>HLI</strong>_EnableEvents(Controller_ID,<br />
Gruppen_Code_Kombination)<br />
5-28 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
wieder aktiviert.<br />
Gruppen_Code_Kombination ist dabei eine bitweise Oder-Verknüpfung der Gruppen-<br />
Co<strong>des</strong> (z.B. <strong>HLI</strong>_EG_BUSFAULTS Bit O der <strong>HLI</strong>_EG_DEVICES).<br />
<strong>Die</strong> Aktivierung / Deaktivierung gilt nur für Ereignisse, die nach dem Aufruf der Funktion<br />
erzeugt wurden.<br />
5.6.5 Ereignis-Fenster<br />
Das <strong>HLI</strong> bietet die Möglichkeit, zu jedem INTERBUS-Controller ein Ereignisfenster zu öffnen,<br />
das den Status <strong>des</strong> Controllers sowie die aufgetretenen Ereignisse im Klartext darstellt.<br />
Mit dem Aufruf von<br />
IBS_<strong>HLI</strong>_CreateLogWindow(Controller_ID, Sprachen_Code,<br />
Filter_Einstellung_möglich)<br />
wird das Ereignisfenster für Controller_ID erzeugt, wobei Sprachen_code den Wert<br />
<strong>HLI</strong>_ENGLISH für englischen Text oder <strong>HLI</strong>_DEUTSCH für die deutsche Textversion <strong>des</strong><br />
Fensters annehmen darf. Der Parameter Filter_Einstellung_möglich bestimmt, ob<br />
der<br />
Anwender eine dialog-gestützte Filterung der Ereignisse per Systemmenue <strong>des</strong> Fenster<br />
vornehmen kann (siehe 5.7.4):<br />
– Filter_Einstellung_möglich = 0 keine Filtereinstellung<br />
möglich<br />
– Filter_Einstellung_möglich ≠ 0Filtereinstellung möglich<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Bild 5-2<br />
<strong>HLI</strong>-Ereignis-Fenster<br />
Der Aufruf von<br />
IBS_<strong>HLI</strong>_CloseLogWindow(Controller_ID)<br />
schließt das Ereignisfenster für Controller_ID.<br />
5626_de_02 PHOENIX CONTACT 5-29
IBS PC SC <strong>HLI</strong> UM<br />
5.7 Informations-Funktionen<br />
5.7.1 Lesen der INTERBUS-Controller-Daten<br />
<strong>Die</strong> Anwendung erzeugt eine Instanz CTRLDATEN <strong>des</strong> Datentyps T_<strong>HLI</strong>_SC_INFO. Durch<br />
den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_GetControllerInfo(Controller_ID,<br />
Referenz_auf_CTRLDATEN)<br />
werden die vom <strong>HLI</strong> ermittelten Controllerdaten in die Elemente von<br />
CTRLDATEN eingetragen:<br />
– Ident: Bezeichnung <strong>des</strong> Controllers (String)<br />
– FW_Vversion: Firmware-Version (String)<br />
– HW_Version: Hardware-Version (String)<br />
5.7.2 Lesen der INTERBUS-Daten<br />
<strong>Die</strong> Anwendung erzeugt eine Instanz BUSDATEN <strong>des</strong> Datentyps T_<strong>HLI</strong>_BUS_INFO. Durch<br />
den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_GetBusInfo(Controller_ID,<br />
Referenz_auf_BUSDATEN)<br />
werden die vom <strong>HLI</strong> ermittelten Bus-Daten in die Elemente von BUSDATEN eingetragen:<br />
– Devices: Anzahl der Busteilnehmer<br />
– IO_Points: Anzahl der E/A-Punkte<br />
– PCP_Devices: Anzahl der PCP-Teilnehmer<br />
– PD_Length: Länge <strong>des</strong> Gesamt-Prozessdatenabbilds<br />
in Bytes<br />
– Cycletime: Aktuelle Zykluszeit<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5-30 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
5.7.3 Lesen von Teilnehmer-Daten<br />
<strong>Die</strong> Anwendung erzeugt eine Instanz TLNDATEN <strong>des</strong> Datentyps T_<strong>HLI</strong>_DEVICE_INFO.<br />
Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_GetDeviceInfo(Controller_ID, Index,<br />
Referenz_auf_TLNDATEN)<br />
werden die vom <strong>HLI</strong> ermittelten Teilnehmer-Daten in die Elemente von TLNDATEN eingetragen:<br />
– Segment: Segmentnummer<br />
– Position: Positionsnummer<br />
– ID_Code: ID-Code <strong>des</strong> Teilnehmers<br />
– LengthCode: Längencode <strong>des</strong> Teilnehmers<br />
– Level: Ebene in der Bustopologie<br />
– Group: Zugeordnete Gruppennummer<br />
– Alternative: Zugeordnete Nummer der Alternative<br />
– PCP_CR: Kommunikationsreferenz <strong>des</strong><br />
PCP-Teilnehmers<br />
– Active: Teilnehmer aktiv / nicht aktiv im Bus<br />
– InBitLength: Prozessdatenlänge (IN)<br />
– OutBitLength: Prozessdatenlänge (OUT)<br />
Als Index ist die laufende Nummer (nicht die logische Teilnehmer-Nummer!) <strong>des</strong> Teilnehmers<br />
in der physikalischen Reihenfolge, beginnend mit 1, zu übergeben.<br />
5.7.4 Lesen von Diagnose-Daten<br />
Der INTERBUS-Controller gestattet das Auslesen von Statistikdaten der INTERBUS-Zyklen.<br />
<strong>Die</strong>se lassen u.a. Rückschlüsse auf die Übertragungsqualität im Bus zu. <strong>Die</strong> Anwendung<br />
erzeugt eine Instanz DIAGDATEN <strong>des</strong> Datentyps T_<strong>HLI</strong>_DIAG_INFO.<br />
Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_GetDiagInfo(Controller_ID,<br />
Referenz_auf_DIAGDATEN)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
werden die vom <strong>HLI</strong> ermittelten Statistikdaten in die Elemente von<br />
DIAGDATEN eingetragen:<br />
– Cycle_Count: Anzahl aller gefahrenen Zyklen<br />
– Cycle_Error_Count: Anzahl aller fehlerhaften Zyklen<br />
– ID_Cycle_Count: Anzahl aller ID-Zyklen<br />
– ID_Cycle_Error_Count: Anzahl aller fehlerhaften<br />
ID-Zyklen<br />
– Data_Cycle_Count: Anzahl aller Daten-Zyklen<br />
– Data_Cycle_Error_Count: Anzahl aller fehlerhaften<br />
Daten-Zyklen<br />
5626_de_02 PHOENIX CONTACT 5-31
IBS PC SC <strong>HLI</strong> UM<br />
5.8 IBS ISA SC/486DX/I-T:<br />
Kommunikations-Funktionen<br />
Zur Kommunikation zwischen einer Anwendung auf dem Co-Prozessor der IBS ISA<br />
SC/486DX/I-T und einer Anwendung auf dem Host-PC stellt das <strong>HLI</strong> zwei Kommunikations-Mechanismen<br />
zur Verfügung:<br />
– Senden und Empfangen von Nachrichten (wird intern über das Mailbox-Interface,<br />
Handshake- und Interrupt-gesteuert bearbeitet)<br />
– Lesen und Schreiben von Prozessdaten (intern über das Daten-Interface, nicht<br />
Handshake-gesteuert)<br />
<strong>Die</strong> Funktionalitäten zur Prozessdaten-Kommunikation mit dem Co-Prozessor werden<br />
derzeit nur unter Windows NT unterstützt!<br />
5.8.1 Senden und Empfangen von Nachrichten<br />
Nachrichten entsprechen in Ihrem Aufbau den Kommandos an die INTERBUS-Controller-<br />
Firmware. Sie enthalten einen Nachrichten-Code (16-Bit) und einen Parameter-Counter<br />
(16-Bit), der die Anzahl dieser Nachricht zugehörenden Parameter angibt, sowie die zugehörenden<br />
Parameter (max. 510 x 16-Bit-Parameter).<br />
Eine Nachricht wird in einem <strong>HLI</strong>-Datentyp T_<strong>HLI</strong>_MSG kodiert.<br />
Das Handshake zur Übertragung von Nachrichten übernimmt der Device-Driver. Er verwaltet<br />
sieben interne Mailboxen, in die Nachrichten zum Senden zwischengespeichert<br />
werden. <strong>Die</strong>se Mailboxen werden erst bei der Empfangsquittung durch den Host wieder<br />
freigegeben.<br />
Somit kommt es zu einem Fehler durch die Sende-Funktion, wenn alle Mailboxen zu sendende<br />
Nachrichten enthalten, der Device-Driver auf der Gegenseite nicht aktiv ist und<br />
keine Nachrichten abgeholt werden.<br />
5.8.1.1 Senden von Nachrichten<br />
Der Nachrichten-Code kann von der Anwendung frei vergeben werden. Der Parameter-<br />
Counter (Element nParms von T_<strong>HLI</strong>_MSG) sowie die Parameter im Feld Parms von<br />
T_<strong>HLI</strong>_MSG sind zu initialisieren.<br />
Co-Prozessor: Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_SendMessageToHost(Referenz_auf_MSG,<br />
timeout_in_ms)<br />
wird die Nachricht an den Host gesendet.<br />
HOST: Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_SendMessageToCop(Referenz_auf_MSG,<br />
timeout_in_ms)<br />
wird die Nachricht an den Co-Prozessor gesendet.<br />
Bei fehlerfreier Ausführung ist der Rückgabewert <strong>HLI</strong>_OKAY.<br />
Konnte die Nachricht nicht gesendet werden, zeigt der Rückgabewert die Ursache:<br />
– <strong>HLI</strong>_SEND_MESSAGE_TIMEOUT<br />
<strong>Die</strong> Timeoutzeit ist abgelaufen, bevor die Mailboxen wieder frei geworden sind.<br />
– anderer: genereller Fehler <strong>des</strong> Device-Drivers.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5-32 PHOENIX CONTACT 5626_de_02
Anwendungs-Programmierung<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_MSG AppMsg;<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* Message erstellen */<br />
AppMsg.Code = 0x1001 ; /* anwendungs-definiert */<br />
AppMsg.nParms = 2 ; /* nachrichtenabhängig */<br />
AppMsg.Parms[0] = 0x0001 ; /* 1.Parameter */<br />
AppMsg.Parms[1] = 0x0002 ; /* 2.Parameter */<br />
/* Senden, Timeout = 200 ms */<br />
ret = IBS_<strong>HLI</strong>_SendMessageToHost(&AppMsg, 200);<br />
5.8.1.2 Empfangen von Nachrichten<br />
Beim Empfang einer Nachricht vom Host wird der entsprechende Datensatz durch das Device<br />
Driver Interface gepuffert. <strong>Die</strong> Anwendung wird nicht automatisch benachrichtigt, sondern<br />
muss den Empfang von Nachrichten erfragen.<br />
Co-Prozessor: Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_ReceiveMessageFromHost<br />
(Referenz_auf_MSG)<br />
wird eine empfangene Nachricht, sofern verfügbar, in das per Referenz_auf_MSG übergebene,<br />
anwendungseigene Objekt kopiert.<br />
HOST: Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_ReceiveMessageFromCop<br />
(Referenz_auf_MSG)<br />
wird eine empfangene Nachricht, sofern verfügbar, in das per Referenz_auf_MSG übergebene,<br />
anwendungseigene Objekt kopiert.<br />
Der Rückgabewert ist <strong>HLI</strong>_OKAY , wenn eine Nachricht empfangen wurde.<br />
Liegen keine Nachrichten vor, ist der Rückgabewert <strong>HLI</strong>_NO_MESSAGE_AVAILABLE.<br />
HOST: Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_WaitForMessageFromCop<br />
(Referenz_auf_MSG,timeout)<br />
wird auf den Empfang einer Nachricht gewartet. Nach Ablauf der Zeit timeout im ms<br />
ohne Nachrichtenempfang kehrt die Funktion mit dem Rückgabewert<br />
<strong>HLI</strong>_NO_MESSAGE_AVAILABLE zurück. Der aufrufende Thread wird hierbei in den<br />
Sleep-Zustand versetzt, und durch Empfang einer Nachricht oder Ablauf der Timeout-Zeit<br />
wieder fortgesetzt.<br />
C-Beispiel:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
T_<strong>HLI</strong>_MSG AppMsg;<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* Message empfangen ? */<br />
ret = IBS_<strong>HLI</strong>_ReceiveMessageFromHost(&AppMsg);<br />
if( ret == <strong>HLI</strong>_OKAY )<br />
/* ja, auswerten... */<br />
5626_de_02 PHOENIX CONTACT 5-33
IBS PC SC <strong>HLI</strong> UM<br />
5.8.2 Lesen und Schreiben von Daten<br />
Zum schnellen Datenaustausch stehen zwei Koppelspeicherbereiche von je 5120 Byte zur<br />
Verfügung, auf die asynchron, d.h. nicht handshake-gesteuert, zugegriffen werden kann:<br />
– Bereich 1: Host kann schreiben - Coprozessor kann lesen<br />
– Bereich 2: Host kann lesen - Coprozessor kann schreiben<br />
Dadurch kann ein Vollduplex-Datenstrom realisiert werden.<br />
5.8.2.1 Lesen von Daten<br />
Co-Prozessor: Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_ReadDataFromHost(VonOffset, nBytes,<br />
Referenz_auf_Zielspeicher)<br />
werden nBytes aus dem Koppelspeicherbereich 1 ab dem Offset<br />
VonOffset in einen anwendungseigenen Speicherbereich kopiert.<br />
HOST: Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_ReadDataFromCop(VonOffset, nBytes,<br />
Referenz_auf_Zielspeicher)<br />
werden nBytes aus dem Koppelspeicherbereich 2 ab dem Offset<br />
VonOffset in einen anwendungseigenen Speicherbereich kopiert.<br />
5.8.2.2 Schreiben von Daten<br />
Co-Prozessor: Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_WriteDataToHost(ZuOffset, nBytes,<br />
Referenz_auf_Quellspeicher)<br />
werden nBytes aus einem anwendungseigenen Speicherbereich in den Koppelspeicherbereich<br />
2 ab dem Offset ZuOffset kopiert.<br />
HOST: Durch den Aufruf der Funktion<br />
result = IBS_<strong>HLI</strong>_WriteDataToCop(ZuOffset, nBytes,<br />
Referenz_auf_Quellspeicher)<br />
werden nBytes aus einem anwendungseigenen Speicherbereich in den Koppelspeicherbereich<br />
1 ab dem Offset ZuOffset kopiert.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5-34 PHOENIX CONTACT 5626_de_02
6 Anwendungs-Projektierung mit IBS CMD G4<br />
Anwendungs-Projektierung mit IBS CMD G4<br />
Durch die Einbindung eines Export-Filters für <strong>HLI</strong> in die INTERBUS-Konfigurationssoftware<br />
IBS CMD G4 kann die INTERBUS-Projektierung vollständig mit CMD erfolgen. Anhand<br />
der durchgeführten Projektierung wird vom Export-Filter direkt übersetzbarer<br />
Source-Code zur Verwendung mit <strong>HLI</strong> erzeugt. Der erzeugte Code enthält<br />
– die INTERBUS-Teilnehmer-Informationen<br />
– die definierten Prozessdaten-Objekte<br />
sowie vorgefertigte Routinen, die den gesamten INTERBUS-Anlauf automatisieren.<br />
Das Einbinden <strong>des</strong> <strong>HLI</strong>-Exports (<strong>HLI</strong> Version 2.x) wird von CMD Version 4.5 oder höher<br />
unterstützt.<br />
Weitere Informationen zur Installation und Bedienung von CMD siehe<br />
Referenzhandbuch IBS CMD SWT G4 UM, Artikel-Nr. 2722247.<br />
6.1 Einbinden <strong>des</strong> Export-Filters<br />
– Starten Sie IBS CMD G4.<br />
– Wählen Sie den Menüpunkt<br />
„Extras... Programmerweiterungen → Aktivieren...".<br />
In dem Datei-Auswahl-Dialog wählen Sie die Datei „<strong>HLI</strong>EXPD.DLL" (Deutsche Verison)<br />
aus dem Unterverzeichnis „CMDG4EXP" ihres <strong>HLI</strong>-Installationsverzeichnisses an und bestätigen<br />
Sie die Dateiauswahl mit „Okay". Für die englische Version wählen Sie die Datei<br />
„<strong>HLI</strong>EXPE.DLL".<br />
6.2 Erstellen der Teilnehmer-Konfiguration<br />
Erstellen Sie Ihre Buskonfiguration gemäß Ihrer Projektvorgaben oder lesen Sie die physikalisch<br />
vorhandene Konfiguration vom Controller.<br />
Sie können Teilnehmer- und Stationsname für jeden Busteilnehmer eingeben, um sie mit<br />
der <strong>HLI</strong>-Anwendung zu verwenden.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT 6-1
IBS PC SC <strong>HLI</strong> UM<br />
6.3 Definition der Prozessdaten-Objekte<br />
Mit CMD können Sie teilnehmer-bezogen Prozessdaten-Objekte definieren, die der Exportfilter<br />
zur Deklaration von Prozessdaten-Objekten für Ihre Anwendung verwendet.<br />
Hierzu markieren Sie in CMD den Teilnehmer und wählen „Prozessdaten.." aus dem Kontextmenü<br />
aus (oder drücken Sie ).<br />
Bei der Eingabe sind folgende Regeln zu beachten:<br />
– Prozessdaten-Name<br />
Unter diesem Namen wird (mit wählbaren Zusätzen, s.u.) die Prozessdaten-Variable<br />
angelegt.<br />
CMD erlaubt die Eingabe von Zeichen, die bei Hochsprachen für die Variablen-Bezeichner<br />
nicht erlaubt sind (Leerzeichen, Sonderzeichen usw.). Der Export-Filter bietet<br />
zwar die Möglichkeit der Namenskonvertierung, es wird aber empfohlen, die<br />
Verwendung solcher Zeichen bei der Eingabe zu vermeiden.<br />
– Datenrichtung<br />
Wählen Sie unter „E/A", ob das Objekt ein Eingangsobjekt (E) oder ein Ausgangsobjekt<br />
(A) ist.<br />
– Länge<br />
In CMD wird die Länge von Prozessdaten-Objekten in Bit angegeben. <strong>Die</strong> folgende<br />
Auflistung zeigt die für die Verwendung mit <strong>HLI</strong> erlaubten Bitlängen und die zugehörigen<br />
<strong>HLI</strong>-Prozessdatentypen:<br />
1 BitT_IBS_BOOL<br />
2..7 BitT_IBS_BITSTRING<br />
8 BitT_IBS_BYTE<br />
16 BitT_IBS_WORD<br />
32 BitT_IBS_DWORD<br />
Bitlängen größer als 32 Bit werden von <strong>HLI</strong> nicht unterstützt.<br />
– Zuordnungen<br />
<strong>Die</strong> Zuordnungen spielen nur bei Systemen eine Rolle, bei denen die Steuerungsanwendung<br />
direkt auf den Prozessabbildspeicher zugreift. <strong>Die</strong>s ist bei <strong>HLI</strong>-Anwendungen<br />
nicht der Fall, somit werden diese Informationen vom Exportfilter ignoriert und<br />
brauchen nicht angegeben werden.<br />
– Standard-Teilnehmerdaten<br />
CMD legt für jeden E/A-Teilnehmer Standard-Prozessdaten-Objekte an. <strong>Die</strong>se Objekte<br />
sind nicht löschbar, können aber umbenannt werden.<br />
Der Exportfilter bietet die Möglichkeit, diese Objekte zu verwenden oder zu ignorieren.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
6.4 Der Export<br />
Nach Abschluss der INTERBUS-Projektierung können die Daten exportiert werden. Markieren<br />
Sie das Symbol „Parametrierungsspeicher" und wählen Sie aus dem Kontextmenü<br />
den Menüpunkt „ASCII-Datei schreiben → <strong>HLI</strong>-Export..."<br />
Stellen Sie im Export-Filter-Dialog die Ausgabe-Optionen ein:<br />
– Zielanwendung (Programmiersprache, Betriebssystem)<br />
– Welcher Controller mit dieser Konfiguration gesteuert werden soll<br />
– Behandlung von Standard-Prozessdatenobjekten<br />
6-2 PHOENIX CONTACT 5626_de_02
Anwendungs-Projektierung mit IBS CMD G4<br />
– Verfahren bei ungültigen Bezeichnern<br />
– Verwendung von State-Changed-Indication-Variablen<br />
– Anlaufoptionen<br />
Über können Sie eine Kurzbeschreibung <strong>des</strong> aktuell markierten Optionsfelds einsehen.<br />
Nachdem die Ausgabe-Optionen wie gewünscht eingestellt sind, wählen Sie „Erzeugen...".<br />
Sie werden (abhängig von der gewählten Programmiersprache) nach der (den) gewünschten<br />
Ausgabedatei(en) gefragt, die der Exportfilter<br />
erzeugen soll:<br />
– 'C': Source-Datei, Endung „.C"<br />
Header-Datei, Endung „.H"<br />
– 'C++': Source-Datei, Endung „.CPP"<br />
Header-Datei, Endung „.HPP"<br />
– Borland Delphi: Source-Unit, Endung „.PAS"<br />
– Microsoft Visual Basic: Source-Modul, Endung „.BAS"<br />
Geben Sie den (die) gewünschten Pfad- und Dateiname(n) an.<br />
Nach der Erzeugung wird ein Ausgabeprotokoll am Bildschirm angezeigt, das Sie über die<br />
erzeugten Dateien sowie die INTERBUS-spezifischen<br />
Inhalte informiert.<br />
Der Export-Filter erstellt bei Ausgabe für prozedurale Programmierung (C, Delphi, Visual<br />
Basic) :<br />
– die Bus-Konfiguration als globale Variable<br />
– die Prozessdatenobjekte als globale Variable<br />
– das Controller-Status-Objekt als globale Variable<br />
– eine Initialisierungsfunktion „IBS_<strong>HLI</strong>_Init_x()" (x = Name <strong>des</strong><br />
Status-Objekts), die den Controller initialisiert, die Prozessdatenobjekte registriert<br />
und, falls angegeben, den Bus startet.<br />
– eine Funktion „IBS_<strong>HLI</strong>_Exit_x()" zur De-Initialisierung <strong>des</strong><br />
Controllers<br />
– Eine Funktion „IBS_<strong>HLI</strong>_Process_x()" zur Prozessdatenbearbeitung und zur Bearbeitung<br />
der Zustandsmaschine (zyklischer Aufruf).<br />
bei Ausgabe für objektorientierte Programmierung (C++, Delphi):<br />
– die Bus-Konfiguration als globale Variable<br />
– die Definition einer von TIbsController abgeleiteten Klasse Tx<br />
(x = Controller-ID)<br />
– einen Konstruktor zur Übergabe der Bus-Konfiguration<br />
– die Prozessdatenobjekte als Public-Eigenschaften der Klasse<br />
– (Nur C++:) Eine globale Klasseninstanz X (X = Name <strong>des</strong> Status-<br />
Objekts)<br />
– (Nur Delphi:) Eine Funktion X_Init() zur Erzeugung der Klasseninstanz X (X = Name<br />
<strong>des</strong> Status-Objekts)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Fügen Sie dann die erzeugte(n) Datei(en) zu Ihrem Projekt hinzu (siehe Kapitel 4).<br />
5626_de_02 PHOENIX CONTACT 6-3
IBS PC SC <strong>HLI</strong> UM<br />
6.5 Geräte-Parametrierungen nutzen<br />
<strong>Die</strong> Daten von Kommunikationsobjekten von PCP-Teilnehmern können mit CMD G4 in der<br />
Geräte-Parametrierung dialoggestützt erfasst, bearbeitet, gespeichert und exportiert werden.<br />
Um vordefinierte Daten von Kommunikationsobjekten mit <strong>HLI</strong> zu nutzen, können diese<br />
Daten von CMD in eine beliebige Datei exportiert werden (Device-Description-Dateien,<br />
*.DSC).<br />
<strong>Die</strong> so exportierten Datensätze lassen sich mit den <strong>HLI</strong>-Funktionen<br />
- IBS_<strong>HLI</strong>_PCP_LoadObjectByName(),<br />
- IBS_<strong>HLI</strong>_PCP_LoadObjectByIndex() und<br />
- IBS_<strong>HLI</strong>_PCP_LoadObjectByEntry()<br />
in anwendungseigene Objekte laden (siehe Anhang C.10.1, C.10.2 und C.10.3).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
6-4 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong> Software-Architektur<br />
A <strong>HLI</strong> Software-Architektur<br />
A 1<br />
Das Device-Driver-Interface (DDI)<br />
Das Device-Driver-Interface von PHOENIX-CONTACT ist eine betriebssystemunabhängige<br />
Software-Schnittstelle zum Zugriff auf die Familie der PC-<br />
INTERBUS-Controller. Es besteht aus einem Treiber (Device-Driver, DD), der den physikalischen<br />
Zugriff auf den Controller durchführt und einer Treiberschnittstelle (Device-Driver-Interface,<br />
DDI) für Anwendungen.<br />
Das <strong>HLI</strong> benutzt zum Zugriff auf den INTERBUS-Controller das Device-Driver-Interface.<br />
Voraussetzung für eine lauffähige <strong>HLI</strong>-Anwendungen ist eine korrekte Installation <strong>des</strong> Device-Driver-Interface.<br />
Weitere Informationen zur Installation, Eigenschaften und Funktionsumfang siehe<br />
Treiber-Referenzhandbuch für PC-Anschaltbaugruppen, IBS PC SC SWD UM,<br />
Artikel-Nr. 2745127.<br />
A 2<br />
Software-Schnittstellen, Betriebssysteme und Programmiersprachen<br />
<strong>Die</strong> folgenden Schichten-Modelle zeigen die beteiligten Software-Komponenten, die für<br />
INTERBUS-Anwendungen mit <strong>HLI</strong> für die unterstützten Betriebssysteme benötigt werden,<br />
sowie die unterstützten Programmiersprachen:<br />
A 2.1<br />
Tabelle A-1<br />
Schicht<br />
Anwendung<br />
↓<br />
<strong>HLI</strong><br />
↓<br />
DDI<br />
↓<br />
MS-DOS-Anwendungen<br />
MS-DOS-Anwendungen<br />
Komponente<br />
.EXE<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
DD<br />
G4<strong>HLI</strong>DOS.LIB (wird zur Anwendung gebunden)<br />
IBSISA.EXE (TSR-Programm, vor der Anwendung zu<br />
starten)<br />
Unterstützte Programmiersprachen :<br />
Microsoft C / C++ , Borland C / C++ oder kompatibel<br />
5626_de_02 PHOENIX CONTACT A-5
IBS PC SC <strong>HLI</strong> UM<br />
A 2.2 32-Bit-Anwendungen unter Windows 95/98<br />
Tabelle A-2 32-Bit-Anwendungen unter Windows 95<br />
Schicht<br />
Anwendung<br />
↓<br />
<strong>HLI</strong><br />
↓<br />
DDI<br />
↓<br />
DD<br />
Komponente<br />
.EXE / .DLL<br />
G4<strong>HLI</strong>W32.DLL<br />
IBDDIW95.DLL<br />
VIBSSCD.VXD<br />
Unterstützte Programmiersprachen:<br />
Microsoft Visual C / C++ , Borland C / C++ oder kompatibel;<br />
Microsoft Visual Basic 4.0 oder höher; Borland Delphi 1.0 oder höher.<br />
A 2.3 32-Bit-Anwendungen unter Windows NT 4<br />
Tabelle A-3<br />
Schicht<br />
Anwendung<br />
↓<br />
<strong>HLI</strong><br />
↓<br />
DDI<br />
↓<br />
DD<br />
32-Bit-Anwendungen unter Windows NT<br />
Komponente<br />
.EXE / .DLL<br />
G4<strong>HLI</strong>W32.DLL<br />
IBDDIWNT.DLL<br />
IBSISASC.SYS<br />
Unterstützte Programmiersprachen:<br />
Microsoft Visual C / C++ , Borland C / C++ oder kompatibel; Microsoft Visual Basic 4.0 oder<br />
höher; Borland Delphi 2.0 oder höher.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
A-6 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong> Software-Architektur<br />
A 2.4<br />
Tabelle A-4<br />
MS-DOS-Anwendungen für IBS PC ISA SC/486DX/I-T<br />
MS-DOS-Anwendungen für IBS PC ISA SC/486DX/I-T<br />
Schicht<br />
Anwendung<br />
↓<br />
<strong>HLI</strong><br />
↓<br />
DDI<br />
↓<br />
DD<br />
Komponente<br />
.EXE<br />
G4<strong>HLI</strong>COP.LIB<br />
(wird zur Anwendung gebunden)<br />
IBSISA.EXE (TSR-Programm, das vor der Anwendung<br />
gestartet werden muss)<br />
Unterstützte Programmiersprachen:<br />
Microsoft Visual C / C++, Borland C / C++ oder kompatibel.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT A-7
IBS PC SC <strong>HLI</strong> UM<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
A-8 PHOENIX CONTACT 5626_de_02
<strong>Die</strong> <strong>Datentypen</strong> <strong>des</strong> <strong>HLI</strong><br />
B <strong>Die</strong> <strong>Datentypen</strong> <strong>des</strong> <strong>HLI</strong><br />
B 1<br />
Standard-<strong>Datentypen</strong><br />
Das <strong>HLI</strong> definiert folgende Standard-<strong>Datentypen</strong>:<br />
Tabelle B-1<br />
Standard-<strong>Datentypen</strong><br />
Datentyp in C / C++<br />
definiert als<br />
in Delphi<br />
definiert als<br />
in Visual Basic<br />
definiert als<br />
USIGN8 unsigned Byte<br />
Byte<br />
char<br />
USIGN16 unsigned Word Integer<br />
short<br />
USIGN32 unsigned LongInt Long<br />
long<br />
CHAR char char Byte<br />
FLOAT float Single Single<br />
<strong>HLI</strong>BOOL unsigned WordBool Boolean<br />
short<br />
STRINGREF char * pChar (ByRef)<br />
String<br />
Weiterhin ist als Rückgabewert für <strong>HLI</strong>-Funktionen definiert:<br />
Tabelle B-2<br />
Rückgabewert für <strong>HLI</strong>-Funktionen<br />
Datentyp in C / C++ in Delphi in Visual Basic<br />
definiert als definiert als definiert als<br />
<strong>HLI</strong>RET USIGN16 USIGN16 Integer<br />
In Visual Basic sind die angegebenen <strong>Datentypen</strong> zu verwenden!<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT B-1
IBS PC SC <strong>HLI</strong> UM<br />
B 2<br />
Prozessdaten-Objekt-Typen<br />
Das <strong>HLI</strong> definiert folgende Typen für Prozessdaten-Objekte:<br />
Tabelle B-3<br />
Prozessdaten-Objekt-Typen<br />
B 3<br />
Typ<br />
T_IBS_BOOL<br />
T_IBS_BITSTRING<br />
T_IBS_BYTE<br />
T_IBS_WORD<br />
T_IBS_DWORD<br />
Tabelle B-4<br />
definiert für<br />
(definiert als)<br />
digitale PD-Objekte,<br />
Länge 1 Bit (<strong>HLI</strong>BOOL)<br />
PD-Bitstring-Objekte,<br />
Länge 2-15 Bit (USIGN16)<br />
PD-Byte-Objekte,<br />
Länge 8 Bit(USIGN8)<br />
PD-Wort-Objekte,<br />
Länge 16 Bit (USIGN16)<br />
PD-Doppelwort-Objekte,<br />
Länge 32 Bit (USIGN32)<br />
Datentyp für den Controller-Status: T_<strong>HLI</strong>_STATE<br />
Datentyp für den Controller-Status: T_<strong>HLI</strong>_STATE<br />
Element Datentyp Beschreibung<br />
BusState USIGN16 Zustand <strong>des</strong> INTERBUS<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
in Visual Basic<br />
zu definieren als<br />
Boolean<br />
Integer<br />
Byte<br />
Integer<br />
Long<br />
DiagState USIGN16 Bit-kodierter Zustand <strong>des</strong> INTERBUS-<br />
Controllers; gesetzte Bits bedeuten:<br />
Bit 0: USER: Anwender-Fehler aufgetreten<br />
Bit 1: PF: Peripherie-Fehler aufgetreten<br />
Bit 2: BUS: Bus-Fehler aufgetreten<br />
Bit 3: CTRL: Controller-Fehler aufgetreten<br />
Bit 4: DETECT: Controller analysiert Bus<br />
Bit 5: RUN: Datentransfer aktiv<br />
Bit 6: ACTIVE: aktive Konfiguration<br />
Bit 7: READY: Controller ist bereit<br />
Bit 8: BSA: Bus-Segment abgeschaltet<br />
Bit 9: BASP: System-Fehler, Ausgänge =0<br />
EventIndication<br />
USIGN16<br />
Zeigt Anzahl der aufgetretenen, aber noch nicht<br />
gelesenen Ereignisse<br />
B-2 PHOENIX CONTACT 5626_de_02
<strong>Die</strong> <strong>Datentypen</strong> <strong>des</strong> <strong>HLI</strong><br />
B 4<br />
Datentyp für Zeitstempel: T_<strong>HLI</strong>_TIME<br />
Tabelle B-5<br />
Datentyp für Zeitstempel: T_<strong>HLI</strong>_TIME<br />
Element Datentyp Beschreibung<br />
d USIGN16 Tag<br />
mo USIGN16 Monat<br />
y USIGN16 Jahr<br />
h USIGN16 Stunde<br />
m USIGN16 Minute<br />
s USIGN16 Sekunde<br />
B 5<br />
Tabelle B-6<br />
B 6<br />
Datentyp für ein <strong>HLI</strong>-Ereignis: T_<strong>HLI</strong>_EVENT<br />
Datentyp für ein <strong>HLI</strong>-Ereignis: T_<strong>HLI</strong>_EVENT<br />
Element Datentyp Beschreibung<br />
Timestamp T_<strong>HLI</strong>_TIME Zeit und Datum <strong>des</strong> Ereignisses<br />
CID USIGN16 ID <strong>des</strong> Controllers<br />
Code USIGN16 Ereignis-Code (Typ <strong>des</strong> Ereignisses)<br />
Param Array of<br />
USIGN16<br />
(5 El.)<br />
Parameter 1..5 zur näheren<br />
Ereignisinformation<br />
Tabelle B-7<br />
Datentyp für Controller-Informationen:<br />
T_<strong>HLI</strong>_SC_INFO<br />
Datentyp für Controller-Informationen: T_<strong>HLI</strong>_SC_INFO<br />
Element Datentyp Beschreibung<br />
Ident String (32) Bezeichnung <strong>des</strong> Controllers<br />
FW_Version String (8) Firmware-Versions-Kennung<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
HW_Version String (4) Hardware-Versions-Nummer<br />
5626_de_02 PHOENIX CONTACT B-3
IBS PC SC <strong>HLI</strong> UM<br />
B 7<br />
Datentyp für Bus-Informationen: T_<strong>HLI</strong>_BUS_INFO<br />
Tabelle B-8<br />
Datentyp für Bus-Informationen: T_<strong>HLI</strong>_BUS_INFO<br />
Element Datentyp Beschreibung<br />
Devices USIGN16 Anzahl der Bus-Teilnehmer<br />
IO_Points USIGN16 Anzahl der E/A-Punkte<br />
PCP_Devices USIGN16 Anzahl der PCP-Teilnehmer<br />
PD_Length USIGN16 Gesamt-Prozessdatenlänge in Bytes<br />
Cycletime USIGN32 aktuelle Bus-Zykluszeit in µs<br />
B 8<br />
Tabelle B-9<br />
Datentyp für Teilnehmer-Konfigurations-Daten:<br />
T_<strong>HLI</strong>_DEVICE_DATA<br />
Datentyp für Teilnehmer-Konfigurations-Daten: T_<strong>HLI</strong>_DEVICE_DATA<br />
Element Datentyp Beschreibung<br />
Segment USIGN16 Bus-Segment (log. Teilnehmer-Nummer)<br />
Position USIGN16 Bus-Position (log. Teilnehmer-Nummer)<br />
ID_Code USIGN16 Ident-Code<br />
LengthCode USIGN16 Längen-Code<br />
Level USIGN16 Ebene in der Bustopologie<br />
Group USIGN16 zugeordnete Gruppen-Nummer<br />
Alternative USIGN16 zugeordnete Alternative<br />
Deactivated USIGN16 FFFF hex kennzeichnet deaktivierten<br />
Teilnehmer<br />
Station String (32) Stations-Name<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
B-4 PHOENIX CONTACT 5626_de_02
<strong>Die</strong> <strong>Datentypen</strong> <strong>des</strong> <strong>HLI</strong><br />
B 9<br />
Datentyp für Teilnehmer-Informationen:<br />
T_<strong>HLI</strong>_DEVICE_INFO<br />
Tabelle B-10<br />
Datentyp für Teilnehmer-Informationen: T_<strong>HLI</strong>_DEVICE_INFO<br />
Element Datentyp Beschreibung<br />
Segment USIGN16 Bus-Segment<br />
(log. Teilnehmer-Nummer)<br />
Position USIGN16 Bus-Position (log. Teilnehmer-Nummer)<br />
ID_Code USIGN16 Ident-Code<br />
LengthCode USIGN16 Längen-Code<br />
Level USIGN16 Ebene in der Bustopologie<br />
Group USIGN16 zugeordnete Gruppen-Nummer<br />
Alternative USIGN16 zugeordnete Alternative<br />
InBitLength USIGN16 Prozessdatenlänge (IN)<br />
OutBitLength USIGN16 Prozessdatenlänge (OUT)<br />
PCP_CR USIGN16 Kommunikationsreferenz bei PCP-<br />
Teilnehmern<br />
Active USIGN16 Teilnehmer aktiv / nicht aktiv im Bus<br />
B 10<br />
Tabelle B-11<br />
Datentyp für PCP-Teilnehmer-Identifikation:<br />
T_<strong>HLI</strong>_PCP_DEVICE_INFO<br />
Datentyp für PCP-Teilnehmer-Identifikation:<br />
T_<strong>HLI</strong>_PCP_DEVICE_INFO<br />
Element Datentyp Beschreibung<br />
Segment USIGN16 Bus-Segment (log. Teilnehmer-Nummer)<br />
Position USIGN16 Bus-Position (log. Teilnehmer-Nummer)<br />
State USIGN16 Zustand <strong>des</strong> PCP-Identify-<br />
<strong>Die</strong>nstes<br />
ID_Code USIGN16 Ident-Code<br />
LengthCode USIGN16 Längen-Code<br />
Manufacturer String (256) Hersteller-Bezeichnung<br />
Name String (256) Geräte-Bezeichnung<br />
Revision String (256) Revisions-Nummer<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT B-5
IBS PC SC <strong>HLI</strong> UM<br />
B 11<br />
Datentyp für PCP- Read / Write-<strong>Die</strong>nst:<br />
T_<strong>HLI</strong>_PCP_RW<br />
Tabelle B-12<br />
Datentyp für PCP-Read / Write-<strong>Die</strong>nst : T_<strong>HLI</strong>_PCP_RW<br />
Element Datentyp Beschreibung<br />
Segment USIGN16 Bus-Segment<br />
(log. Teilnehmer-Nummer)<br />
Position USIGN16 Bus-Position<br />
(log. Teilnehmer-Nummer)<br />
Index USIGN16 Index <strong>des</strong> Kommunikationsobjekts<br />
Subindex USIGN16 Sub-Index <strong>des</strong> Kommunikationsobjekts<br />
Length USIGN16 Nutzdatenlänge in Byte (1 bis 256)<br />
State USIGN16 Zustand <strong>des</strong> Read-/Write-<strong>Die</strong>nstes<br />
Data Array of Byte<br />
(256)<br />
Nutzdaten<br />
B 12<br />
Tabelle B-13<br />
Datentyp für PCP- Progamm-<strong>Die</strong>nste:<br />
T_<strong>HLI</strong>_PCP_PRG<br />
Datentyp für PCP-Progamm-<strong>Die</strong>nste: T_<strong>HLI</strong>_PCP_PRG<br />
Element Datentyp Beschreibung<br />
Segment USIGN16 Bus-Segment (log. Teilnehmer-Nummer)<br />
Position USIGN16 Bus-Position (log. Teilnehmer-Nummer)<br />
Index USIGN16 Index <strong>des</strong> Teilnehmer-Programms<br />
PRG_State USIGN16 Zustand <strong>des</strong> Programms<br />
State USIGN16 Zustand <strong>des</strong> PCP-<strong>Die</strong>nstes<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
B-6 PHOENIX CONTACT 5626_de_02
<strong>Die</strong> <strong>Datentypen</strong> <strong>des</strong> <strong>HLI</strong><br />
B 13<br />
Datentyp für Diagnose-Informationen:<br />
T_<strong>HLI</strong>_SC_DIAG<br />
Tabelle B-14<br />
Datentyp für Diagnose-Informationen : T_<strong>HLI</strong>_SC_DIAG<br />
Element Datentyp Beschreibung<br />
Cycle_Count USIGN32 Anzahl Gesamt-<br />
Buszyklen<br />
Cycle_Error_Count USIGN32 Anzahl fehlerhafter<br />
Buszyklen<br />
ID_Cycle_Count USIGN32 Anzahl ID-Zyklen<br />
ID_Cycle_Error_Count USIGN32 Anzahl fehlerhafter<br />
ID-Zyklen<br />
Data_Cycle_Count USIGN32 Anzahl Daten-Zyklen<br />
Data_Cycle_Error_Count USIGN32 Anzahl fehlerhafter<br />
Daten-Zyklen<br />
B 14<br />
Datentyp für nachrichtenorientierte Kommunikation:<br />
T_<strong>HLI</strong>_MSG<br />
Gilt nur für Co-Prozessor-Anwendungen IBS PC ISA SC/DX486/I-T<br />
Tabelle B-15<br />
Datentyp für nachrichtenorientierte Kommunikation: T_<strong>HLI</strong>_MSG<br />
Element Datentyp Beschreibung<br />
Code USIGN16 Nachrichten-Identifizierer<br />
nParms USIGN16 Anzahl nachfolgender Parameter<br />
Parms Array of USIGN16 Nachfolgende Parameter<br />
(512)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT B-7
IBS PC SC <strong>HLI</strong> UM<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
B-8 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C <strong>HLI</strong>-Funktions-Referenz<br />
C 1<br />
<strong>Die</strong> <strong>HLI</strong>-Funktionen im Überblick<br />
<strong>Die</strong> folgende Liste der <strong>HLI</strong>-Funktionen zeigt neben einer kurzen Aufgabenbeschreibung,<br />
welche der Funktionen die <strong>HLI</strong>-interne Zustandsmaschine (ZM) bearbeitet, und welche<br />
Funktionen Betriebssystem-Funktionen (Sys) aufrufen.<br />
<strong>Die</strong> Ausführungszeit von Funktionen, bei denen die Zustandsmaschine bearbeitet wird,<br />
kann variieren, da hier auf Meldungen und Zustandsänderungen <strong>des</strong> Controllers reagiert<br />
wird.<br />
Wichtig für Anwendungen unter MS-DOS:<br />
<strong>HLI</strong>-Funktionen, bei denen Systemfunktionen aufgerufen werden, dürfen nicht in Interrupt-Service-Routinen<br />
aufgerufen werden, da diese Funktionen u. U. MS-DOS-Betriebssystem-Funktionen<br />
ausführen!<br />
Tabelle C-1<br />
<strong>Die</strong> <strong>HLI</strong>-Funktionen<br />
Funktion ZM Sys Aufgabe<br />
Initialisierungs-Funktionen:<br />
IBS_<strong>HLI</strong>_Init X X Controller-Initialisierung<br />
IBS_<strong>HLI</strong>_Init_CFG X X Controller-Initialisierung<br />
IBS_<strong>HLI</strong>_Exit X X Controller-<br />
De-Initialisierung<br />
Ereignis-Funktionen:<br />
IBS_<strong>HLI</strong>_EnableEvents - - Ereignis-Filter setzen<br />
IBS_<strong>HLI</strong>_DisableEvents - - Ereignis-Filter setzen<br />
IBS_<strong>HLI</strong>_GetEventInfo - - Ereignis-Daten abfragen<br />
IBS_<strong>HLI</strong>_GetEventText - - textuelle Ereignis-<br />
Beschreibung<br />
IBS_<strong>HLI</strong>_CreateLogWindow - X erzeugt Ereignis-Fenster<br />
(Windows)<br />
IBS_<strong>HLI</strong>_EnableLogEvents - - Filter für das Ereignis-<br />
Fenster setzen<br />
IBS_<strong>HLI</strong>_DisableLogEvents - - Filter für das Ereignis-<br />
Fenster setzen<br />
IBS_<strong>HLI</strong>_CloseLogWindow - X Ereignis-Fenster<br />
(Windows) schließen<br />
IBS_<strong>HLI</strong>_LogUserEvent - X Nachricht ins Ereignis-<br />
Fenster<br />
IBS_<strong>HLI</strong>_LogAutoSave - X Ereignis-Fenster aufzeichnen<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-1
IBS PC SC <strong>HLI</strong> UM<br />
Tabelle C-1<br />
<strong>Die</strong> <strong>HLI</strong>-Funktionen<br />
Funktion ZM Sys Aufgabe<br />
Informations-Funktionen:<br />
IBS_<strong>HLI</strong>_GetControllerInfo - - Controller-Information abfragen<br />
IBS_<strong>HLI</strong>_CheckBusConfiguration - - Prüfen der<br />
Buskonfiguration<br />
IBS_<strong>HLI</strong>_GetBusInfo X X Informationen der<br />
Buskonfiguration<br />
IBS_<strong>HLI</strong>_GetDeviceInfo - - Informationen eines<br />
Teilnehmers<br />
IBS_<strong>HLI</strong>_GetDiagnosticInfo X X INTERBUS Diagnose-<br />
Informationen<br />
Zustands-Maschine:<br />
IBS_<strong>HLI</strong>_Process X X Zustands-Maschine<br />
bearbeiten<br />
Prozessdaten-Management:<br />
IBS_<strong>HLI</strong>_PD_Input - - Alle Eingangs-PDO aktualisieren<br />
IBS_<strong>HLI</strong>_PD_Output - - Alle Ausgangs-PDO<br />
transferieren<br />
IBS_<strong>HLI</strong>_PD_In - - Einzelne Eingangs-PDO<br />
aktualisieren<br />
IBS_<strong>HLI</strong>_PD_Out - - Einzelne Ausgangs-PDO<br />
transferieren<br />
IBS_<strong>HLI</strong>_PD_DeviceIn - - Teilnehmer-Eingangs-<br />
PDO aktualisieren<br />
IBS_<strong>HLI</strong>_PD_DeviceOut - - Teilnehmer-Ausgangs-<br />
PDO transferieren<br />
IBS_<strong>HLI</strong>_ResetAllOutputs - - Rücksetzen aller<br />
Ausgangs-PDOs<br />
Gesteuerter Betrieb: (anwendungsorientierter Betrieb)<br />
IBS_<strong>HLI</strong>_GetCyclePhase X X Abfrage der Zyklus-Phase<br />
IBS_<strong>HLI</strong>_RunCycle X X Startet Datentransfer-<br />
Zyklus<br />
IBS_<strong>HLI</strong>_RunCompleteCycle X X Führt INTERBUS-Zyklus<br />
aus<br />
Prozessdaten-Objekt-<br />
Registrierung<br />
IBS_<strong>HLI</strong>_RegisterPDObject - X Master-Funktion PDO-Registrierung<br />
IBS_<strong>HLI</strong>_RegisterPDO_BOOL - X Registriert ein digitales<br />
PD-Objekt<br />
IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING - X Registriert ein Bit-String-<br />
PD-Objekt<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-2 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Tabelle C-1<br />
<strong>Die</strong> <strong>HLI</strong>-Funktionen<br />
Funktion ZM Sys Aufgabe<br />
IBS_<strong>HLI</strong>_RegisterPDO_BYTE - X Registriert ein 8-Bit-PD-<br />
Objekt<br />
IBS_<strong>HLI</strong>_RegisterPDO_WORD - X Registriert ein 16-Bit-PD-<br />
Objekt<br />
IBS_<strong>HLI</strong>_RegisterPDO_DWORD - X Registriert ein 32-Bit-PD-<br />
Objekt<br />
IBS_<strong>HLI</strong>_UnregisterPDObject - X Hebt Registrierung eines<br />
PDO auf<br />
PCP-<strong>Die</strong>nste:<br />
IBS_<strong>HLI</strong>_PCP_DeviceState X X PCP-Teilnehmer-<br />
Zustand<br />
IBS_<strong>HLI</strong>_PCP_ReadRequest X X Startet Read-<strong>Die</strong>nst<br />
IBS_<strong>HLI</strong>_PCP_ReadService X X Führt Read-<strong>Die</strong>nst aus<br />
IBS_<strong>HLI</strong>_PCP_WriteRequest X X Startet Write-<strong>Die</strong>nst<br />
IBS_<strong>HLI</strong>_PCP_WriteService X X Führt Write-<strong>Die</strong>nst aus<br />
IBS_<strong>HLI</strong>_PCP_IdentifyRequest X X Startet Identify-<strong>Die</strong>nst<br />
IBS_<strong>HLI</strong>_PCP_IdentifyService X X Führt Identify-<strong>Die</strong>nst aus<br />
IBS_<strong>HLI</strong>_PCP_RegisterClientObject X X Registriert Write-Client<br />
IBS_<strong>HLI</strong>_PCP_StartRequest X X Startet Programm-Start-<br />
<strong>Die</strong>nst<br />
IBS_<strong>HLI</strong>_PCP_StartService X X Führt Programm-Start-<br />
<strong>Die</strong>nst aus<br />
IBS_<strong>HLI</strong>_PCP_StopRequest X X Startet Programm-Stop-<br />
<strong>Die</strong>nst<br />
IBS_<strong>HLI</strong>_PCP_StopService X X Führt Programm-Stop-<br />
<strong>Die</strong>nst aus<br />
IBS_<strong>HLI</strong>_PCP_ResumeRequest X X Startet Programm-Resume-<strong>Die</strong>nst<br />
IBS_<strong>HLI</strong>_PCP_ResumeService X X Führt Programm-Resume-<br />
<strong>Die</strong>nst aus<br />
IBS_<strong>HLI</strong>_PCP_ResetRequest X X Startet Programm-Reset-<br />
<strong>Die</strong>nst<br />
IBS_<strong>HLI</strong>_PCP_ResetService X X Führt Programm-Reset-<br />
<strong>Die</strong>nst aus<br />
PCP-Datenobjekt-Makros<br />
IBS_<strong>HLI</strong>_PCP_LoadObjectByName - X Liest PCP-Datensatz aus<br />
einer Datei<br />
IBS_<strong>HLI</strong>_PCP_LoadObjectByIndex - X Liest PCP-Datensatz aus<br />
einer Datei<br />
IBS_<strong>HLI</strong>_PCP_InitObject - - Initialisiert ein PCP-<br />
Datenobjekt<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-3
IBS PC SC <strong>HLI</strong> UM<br />
Tabelle C-1<br />
<strong>Die</strong> <strong>HLI</strong>-Funktionen<br />
Funktion ZM Sys Aufgabe<br />
IBS_<strong>HLI</strong>_PCPObject_SetByte - - Schreibt Byte in PCP-<br />
Objekt<br />
IBS_<strong>HLI</strong>_PCPObject_SetInt16 - - Schreibt Wort in PCP-<br />
Objekt<br />
IBS_<strong>HLI</strong>_PCPObject_SetInt32 - - Schreibt Doppelwort in<br />
PCP-Objekt<br />
IBS_<strong>HLI</strong>_PCPObject_SetFloat - - Schreibt Float-Wert in<br />
PCP-Objekt<br />
IBS_<strong>HLI</strong>_PCPObject_SetString - - Schreibt String in PCP-<br />
Objekt<br />
IBS_<strong>HLI</strong>_PCPObject_GetByte - - Liest Byte von PCP-<br />
Objekt<br />
IBS_<strong>HLI</strong>_PCPObject_GetInt16 - - Liest Wort von PCP-<br />
Objekt<br />
IBS_<strong>HLI</strong>_PCPObject_GetInt32 - - Liest Doppelwort von<br />
PCP-Objekt<br />
IBS_<strong>HLI</strong>_PCPObject_GetFloat - - Liest Float-Wert von PCP-<br />
Objekt<br />
IBS_<strong>HLI</strong>_PCPObject_GetString - - Liest String von PCP-<br />
Objekt<br />
Steuerung <strong>des</strong> Interbus:<br />
IBS_<strong>HLI</strong>_ActivateWatchdog - X Aktiviert den Watchdog<br />
IBS_<strong>HLI</strong>_StartBus X X Startet den INTERBUS<br />
IBS_<strong>HLI</strong>_StopBus X X Stoppt den INTERBUS<br />
IBS_<strong>HLI</strong>_AlarmStop X X INTERBUS-Alarm-Stop<br />
IBS_<strong>HLI</strong>_SwitchRemoteBus X X Schaltet Fernbus-<br />
Segment<br />
IBS_<strong>HLI</strong>_SwitchLocalBus X X Schaltet Lokalbus-Segment<br />
IBS_<strong>HLI</strong>_SwitchGroup X X Schaltet<br />
Gruppe / Alternative<br />
Versions-Kennung<br />
IBS_<strong>HLI</strong>_GetVersion - - liefert <strong>HLI</strong>-Versions-Kennung<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-4 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 2<br />
System-Initialisierung<br />
C 2.1<br />
IBS_<strong>HLI</strong>_Init<br />
Aufgabe:<br />
Initialisiert einen INTERBUS-Controller und die zugehörige <strong>HLI</strong>-Verwaltung ohne Vorgabe<br />
einer Bus-Konfiguration. Der Controller liest die aktuell angeschlossene Konfiguration und<br />
aktiviert diese. Wird nur erfolgreich ausgeführt, wenn eine funktionsfähige Buskonfiguration<br />
am Controller angeschlossen ist.<br />
Nach erfolgreicher Ausführung ist der Controller im Zustand "Active", Datenzyklen werden<br />
noch nicht gefahren (→ <strong>HLI</strong>_IBS_StartBus).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_Init ( CID, lpState, ibs_mode )<br />
CID: USIGN16<br />
ID <strong>des</strong> zu initialisierenden Controllers:<br />
ISASC1 ... ISASC4 : IBS PC ISA SC - Karte 1 ... 4<br />
ETHDSC1 ... ETHDSC4 : IBS ETH DSC - Controller 1 ... 4<br />
SCCOP : IBS PC ISA SC/486DX<br />
lpState:<br />
Ibs_mode:<br />
Referenz (Zeiger) auf T_<strong>HLI</strong>_STATE<br />
Auf das anwendungseigene, nicht lokale Objekt <strong>des</strong> Typs<br />
T_<strong>HLI</strong>_STATE bildet <strong>HLI</strong> den Status <strong>des</strong> INTERBUS-Systems ab.<br />
USIGN16<br />
Betriebsart <strong>des</strong> INTERBUS-Systems:<br />
IBS_STANDARD: Standard-Betriebsart (IBS_NORMAL)<br />
IBS_CONTROLLED : anwendungs-gesteuerte Betriebsart<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Initialisierung;<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis führte zur negativen Beendigung der Funktion<br />
(→ Ereignis-Co<strong>des</strong>)<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_STATE SC1; /* Global ! */<br />
...<br />
<strong>HLI</strong>RET ret;<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
ret = IBS_<strong>HLI</strong>_Init( ISASC1, &SC1, IBS_NORMAL);<br />
Delphi-Beispiel:<br />
var<br />
SC1 : T_<strong>HLI</strong>_STATE; { Global ! }<br />
...<br />
var<br />
ret : <strong>HLI</strong>RET;<br />
5626_de_02 PHOENIX CONTACT C-5
IBS PC SC <strong>HLI</strong> UM<br />
begin<br />
ret := IBS_<strong>HLI</strong>_Init( ISASC1, @SC1, IBS_NORMAL);<br />
Visual-Basic-Beispiel:<br />
Dim SC1 As T_<strong>HLI</strong>_STATE ' Global !<br />
...<br />
Dim ret As Integer<br />
ret = IBS_<strong>HLI</strong>_Init(ISASC1, SC1, IBS_NORMAL)<br />
C 2.2<br />
IBS_<strong>HLI</strong>_Init_CFG<br />
Aufgabe:<br />
Initialisiert einen INTERBUS-Controller und die zugehörige <strong>HLI</strong>-Verwaltung mit Vorgabe<br />
einer Buskonfiguration. Der Controller liest die aktuell angeschlossene Konfiguration und<br />
vergleicht diese mit der Vorgabe.<br />
Wird nur erfolgreich ausgeführt, wenn eine funktionsfähige Buskonfiguration am Controller<br />
angeschlossen ist.<br />
Nach erfolgreicher Ausführung ist der Controller im Zustand "Active", Datenzyklen werden<br />
noch nicht gefahren (→<strong>HLI</strong>_IBS_StartBus).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_Init ( CID, lpState, ibs_mode, nDevices, lpDevices )<br />
CID:<br />
lpState:<br />
Ibs_mode:<br />
USIGN16<br />
ID <strong>des</strong> zu initialisierenden Controllers:<br />
ISASC1 ... ISASC4 : IBS PC ISA SC - Karte 1 ... 4<br />
ETHDSC1 ... ETHDSC4 : IBS ETH DSC - Controller 1 ... 4<br />
SCCOP : IBS PC ISA SC/486DX<br />
Referenz (Zeiger) auf T_<strong>HLI</strong>_STATE<br />
Auf das anwendungseigene, nicht lokale Objekt <strong>des</strong> Typs T_<strong>HLI</strong>_STATE<br />
bildet <strong>HLI</strong> den Status <strong>des</strong> INTERBUS-Systems ab.<br />
USIGN16<br />
Betriebsart <strong>des</strong> INTERBUS-Systems:<br />
IBS_STANDARD: Standard-Betriebsart<br />
IBS_CONTROLLED: anwendungsgesteuerte Betriebsart<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
nDevices:<br />
lpDevices:<br />
USIGN16<br />
Anzahl der Busteilnehmer in der vorgegebenen Konfiguration<br />
Referenz (Zeiger) auf ein Feld von T_<strong>HLI</strong>_DEVICE_DATA Objekten<br />
Das nicht lokale Feld <strong>des</strong> Typs T_<strong>HLI</strong>_DEVICE_DATA der Größe nDevices<br />
ist von der Anwendung mit den Konfigurationsdaten der Busteilnehmer<br />
zu initialisieren.<br />
C-6 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Um einen Teilnehmer bereits beim Anlaufen zu deaktivieren, muss das Element<br />
auf FFFh gesetzt werden!<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Initialisierung;<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis führte zur negativen<br />
Beendigung der Funktion (→ Ereignis-Co<strong>des</strong>).<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_STATE SC1; /* Global ! */<br />
T_<strong>HLI</strong>_DEVICE_DATA BusConfig[5] = /* Global ! */<br />
{<br />
{ 1,0, ... , "Station 1" }, /* Teilnehmer 1.0 */<br />
...<br />
{ 5,0, ... , "Station 1" } /* Teilnehmer 5.0 */<br />
};<br />
...<br />
<strong>HLI</strong>RET ret;<br />
ret = IBS_<strong>HLI</strong>_Init_CFG( ISASC1, &SC1, IBS_NORMAL, 5,<br />
BusConfig );<br />
Delphi-Beispiel:<br />
var<br />
SC1 : T_<strong>HLI</strong>_STATE; { Global ! }<br />
BusConfig : array [0..4] of T_<strong>HLI</strong>_DEVICE_DATA;<br />
{ Global ! }<br />
...<br />
var<br />
ret : <strong>HLI</strong>RET;<br />
begin<br />
BusConfig[0].Segment := 1; BusConfig[0].Position := 0;<br />
...<br />
ret := IBS_<strong>HLI</strong>_Init_CFG( ISASC1, @SC1, IBS_NORMAL, 5, @BusConfig<br />
);<br />
Visual Basic-Beispiel:<br />
Dim SC1 As T_<strong>HLI</strong>_STATE ' Global !<br />
Dim BusConfig[0 to 4] As T_<strong>HLI</strong>_DEVICE_DATA ' Global !<br />
...<br />
Dim ret As Integer<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
BusConfig(0).Segment = 1<br />
BusConfig(0).Position = 0;<br />
...<br />
ret = IBS_<strong>HLI</strong>_Init_CFG( ISASC1, SC1, IBS_NORMAL, 5, BusConfig )<br />
5626_de_02 PHOENIX CONTACT C-7
IBS PC SC <strong>HLI</strong> UM<br />
C 2.3<br />
IBS_<strong>HLI</strong>_Exit<br />
Aufgabe:<br />
Setzt einen INTERBUS-Controller zurück und beendet die zugehörige <strong>HLI</strong>-Verwaltung.<br />
Der INTERBUS ist im Zustand „Stopp“, Ausgänge sind zurückgesetzt.<br />
Windows-Version:<br />
Falls das Ereignis-Fenster geöffnet ist, wird es geschlossen.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_Exit ( CID )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung;<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>).<br />
C 3<br />
C 3.1<br />
Ereignis-Management<br />
IBS_<strong>HLI</strong>_EnableEvents<br />
Aufgabe:<br />
Aktiviert bestimmte Gruppen von Ereignissen für die Meldung zur Anwendung (Ereignis-<br />
Filter). Nach Initialisierung eines Controllers sind alle Ereignis-Gruppen aktiviert.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_EnableEvents ( CID, EventGroup )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
EventGroup: USIGN16<br />
Folgende Konstanten für EventGroup sind definiert:<br />
<strong>HLI</strong>_EG_ALL: alle Ereignis-Gruppen<br />
<strong>HLI</strong>_EG_INTERNAL: interne Fehler<br />
<strong>HLI</strong>_EG_DDI: Fehler <strong>des</strong> Device-Driver-Interface<br />
<strong>HLI</strong>_EG_CTRL: Fehler <strong>des</strong> INTERBUS-Controllers<br />
<strong>HLI</strong>_EG_BUSFAULT: Bus-Fehler<br />
<strong>HLI</strong>_EG_DEVICEMSG: Meldungen der Bus-Teilnehmer<br />
<strong>HLI</strong>_EG_BUSSTATE : Änderungen <strong>des</strong> INTERBUS-Zustands<br />
<strong>HLI</strong>_EG_PCP: Ereignisse bei PCP-Kommunikation<br />
<strong>HLI</strong>_EG_APP: Anwendungs-Fehler<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
EventGroup kann auch Kombinationen von Gruppen durch<br />
bitweises Oder der Konstanten angeben.<br />
Rückgabewert:<br />
C-8 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung;<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>).<br />
C-Beispiel:<br />
/* aktiviert Ereignisse bei DDI-Fehlern und */<br />
/* Anwendungs-Fehlern: */<br />
IBS_<strong>HLI</strong>_EnableEvents( ISASC1, <strong>HLI</strong>_EG_DDI | <strong>HLI</strong>_EG_APP );<br />
Delphi-Beispiel:<br />
{ aktiviert Ereignisse bei DDI-Fehlern und AnwendungsFehlern:<br />
}<br />
IBS_<strong>HLI</strong>_EnableEvents( ISASC1, <strong>HLI</strong>_EG_DDI or <strong>HLI</strong>_EG_APP );<br />
Visual Basic -Beispiel:<br />
' aktiviert Ereignisse bei DDI-Fehlern und Anwendungs-<br />
Fehlern:<br />
Call IBS_<strong>HLI</strong>_EnableEvents( ISASC1, <strong>HLI</strong>_EG_DDI Or <strong>HLI</strong>_EG_APP<br />
);<br />
C 3.2<br />
IBS_<strong>HLI</strong>_DisableEvents<br />
Aufgabe:<br />
Deaktiviert bestimmte Gruppen von Ereignissen für die Meldung zur Anwendung (Ereignis-Filter).<br />
Nach Initialisierung eines Controllers sind alle Ereignis-Gruppen aktiviert.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_DisableEvents ( CID, EventGroup )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
EventGroup: USIGN16<br />
Folgende Konstanten für EventGroup sind definiert:<br />
<strong>HLI</strong>_EG_ALL: alle Ereignis-Gruppen<br />
<strong>HLI</strong>_EG_INTERNAL: interne Fehler<br />
<strong>HLI</strong>_EG_DDI: Fehler <strong>des</strong> Device-Driver-Interface<br />
<strong>HLI</strong>_EG_CTRL: Fehler <strong>des</strong> INTERBUS-Controllers<br />
<strong>HLI</strong>_EG_BUSFAULT: Bus-Fehler<br />
<strong>HLI</strong>_EG_DEVICEMSG: Meldungen der Bus-Teilnehmer<br />
<strong>HLI</strong>_EG_BUSSTATE: Änderungen <strong>des</strong> INTERBUS-Zustands<br />
<strong>HLI</strong>_EG_PCP: Ereignisse bei PCP-Kommunikation<br />
<strong>HLI</strong>_EG_APP: Anwendungs-Fehler<br />
EventGroup kann auch Kombinationen von Gruppen durch bitweises Oder<br />
der Konstanten angeben.<br />
Rückgabewert:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung;<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→<strong>HLI</strong>-Co<strong>des</strong>).<br />
5626_de_02 PHOENIX CONTACT C-9
IBS PC SC <strong>HLI</strong> UM<br />
C-Beispiel:<br />
/* keine Ereignisse bei Anwendungs-Fehlern: */<br />
IBS_<strong>HLI</strong>_DisableEvents( ISASC1, <strong>HLI</strong>_EG_APP );<br />
Delphi-Beispiel:<br />
{ keine Ereignisse bei Anwendungs-Fehlern: }<br />
IBS_<strong>HLI</strong>_DisableEvents( ISASC1, <strong>HLI</strong>_EG_APP );<br />
Visual-Basic -Beispiel:<br />
' keine Ereignisse bei DDI-Fehlern und Anwendungs-<br />
Call IBS_<strong>HLI</strong>_DisableEvents( ISASC1, <strong>HLI</strong>_EG_APP );<br />
Fehlern:<br />
C 3.3<br />
IBS_<strong>HLI</strong>_GetEventInfo<br />
Aufgabe:<br />
<strong>Die</strong> Funktion liefert die Daten eines aufgetretenen und in <strong>HLI</strong> zwischengespeicherten Ereignisses.<br />
Das Element EventIndication <strong>des</strong> <strong>HLI</strong>-Status-Objekts (T_<strong>HLI</strong>_STATE)<br />
zeigt die Anzahl der intern gespeicherten, noch nicht mit dieser Funktion gelesenen Ereignisse<br />
(FIFO-Prinzip).<br />
Aufruf<br />
IBS_<strong>HLI</strong>_GetEventInfo( CID, lpEvent )<br />
CID:<br />
USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpEvent: Referenz (Zeiger) auf T_<strong>HLI</strong>_EVENT_INFO<br />
<strong>Die</strong> <strong>HLI</strong>-Funktion trägt die Ereignisdaten in das referenzierte Objekt ein.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, Ereignisdaten wurden gelesen.<br />
<strong>HLI</strong>_NO_MORE_EVENT: keine weiteren Ereignisse aufgetreten.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code : ein entsprechen<strong>des</strong> Ereignis führte zur negativen Beendigung der Funktion<br />
(→ Ereignis-Co<strong>des</strong>).<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_EVENT Event;<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
if ( IBS_<strong>HLI</strong>_GetEventInfo( ISASC1, &Event ) == <strong>HLI</strong>_OKAY )<br />
... /* Ereignis auswerten */<br />
Delphi-Beispiel:<br />
var<br />
Event : T_<strong>HLI</strong>_EVENT;<br />
begin<br />
if IBS_<strong>HLI</strong>_GetEventInfo( ISASC1, @Event ) = <strong>HLI</strong>_OKAY then<br />
... { Ereignis auswerten }<br />
Visual Basic -Beispiel:<br />
Dim Event As T_<strong>HLI</strong>_EVENT<br />
C-10 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
if IBS_<strong>HLI</strong>_GetEventInfo( ISASC1, Event ) = <strong>HLI</strong>_OKAY then<br />
... ' Ereignis auswerten<br />
C 3.4<br />
IBS_<strong>HLI</strong>_GetEventText<br />
Aufgabe:<br />
<strong>Die</strong> Funktion kopiert den Klartext eines gelesenen Ereignisses in einen anwendungseigenen<br />
Zeichenspeicher.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_GetEventText( lpEvent, Language, lpTextBuffer )<br />
lpEvent:<br />
Referenz (Zeiger) auf T_<strong>HLI</strong>_EVENT_INFO<br />
Das referenzierte Objekt enthält die über IBS_<strong>HLI</strong>_GetEventInfo() gelesenen<br />
Ereignisdaten.<br />
lpTextBuffer: Referenz (Zeiger) auf einen Zeichenspeicher mit einer Min<strong>des</strong>t-Größe von<br />
256 Stringcharakter).<br />
Language: USIGN16<br />
Folgende Konstanten für Language sind definiert:<br />
<strong>HLI</strong>_DEUTSCH : deutsche Textversion<br />
<strong>HLI</strong>_ENGLISH : englische Textversion<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, Ereignistext wurde in den Zeichenspeicher geschrieben.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis führte zur negativen Beendigung der Funktion<br />
(→ Ereignis-Co<strong>des</strong>)<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_EVENT Event;<br />
char EventText[256];<br />
if ( IBS_<strong>HLI</strong>_GetEventInfo( ISASC1, &Event ) == <strong>HLI</strong>_OKAY )<br />
/* Klartext in Deutsch */<br />
IBS_<strong>HLI</strong>_GetEventText( &Event, EventText, <strong>HLI</strong>_DEUTSCH );<br />
Delphi-Beispiel:<br />
var<br />
Event : T_<strong>HLI</strong>_EVENT;<br />
EventText : array [0..255] of char;<br />
begin<br />
if IBS_<strong>HLI</strong>_GetEventInfo( ISASC1, @Event ) = <strong>HLI</strong>_OKAY then<br />
{ Klartext in Deutsch }<br />
IBS_<strong>HLI</strong>_GetEventText( @Event, pChar(@EventText) );<br />
Visual Basic -Beispiel:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Dim Event As T_<strong>HLI</strong>_EVENT<br />
5626_de_02 PHOENIX CONTACT C-11
IBS PC SC <strong>HLI</strong> UM<br />
Dim EventText As String * 255<br />
if IBS_<strong>HLI</strong>_GetEventInfo( ISASC1, Event ) = <strong>HLI</strong>_OKAY then<br />
' Klartext in Deutsch<br />
Call IBS_<strong>HLI</strong>_GetEventText( Event, EventText )<br />
C 3.5<br />
IBS_<strong>HLI</strong>_CreateLogWindow (Nur Windows-Versionen)<br />
Aufgabe:<br />
Erzeugt ein Fenster unter MS-Windows, das den aktuellen Controller-Zustand visualisiert<br />
und eine Liste der aufgetretenen Ereignisse im Klartext darstellt.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_CreateLogWindow( CID, Language, CanSetFilter )<br />
CID:<br />
Language:<br />
USIGN16<br />
ID <strong>des</strong> Controllers.<br />
USIGN16<br />
Folgende Konstanten für Language sind definiert:<br />
<strong>HLI</strong>_DEUTSCH : deutsche Textversion<br />
<strong>HLI</strong>_ENGLISH : englische Textversion<br />
CanSetFilter: <strong>HLI</strong>BOOL<br />
Wahr ( > 0): Anwender kann die Filtereinstellungen im Ereignisfenster über<br />
das Systemmenü <strong>des</strong> Fensters ändern.<br />
Falsch (0): keine Filtereinstellungen möglich<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, Ereignis-Fenster wurde erzeugt.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C-Beispiel:<br />
IBS_<strong>HLI</strong>_CreateLogWindow ( ISASC1, <strong>HLI</strong>_DEUTSCH, FALSE );<br />
Delphi-Beispiel:<br />
IBS_<strong>HLI</strong>_CreateLogWindow ( ISASC1, <strong>HLI</strong>_DEUTSCH, False );<br />
Visual Basic -Beispiel:<br />
Call IBS_<strong>HLI</strong>_CreateLogWindow ( ISASC1, <strong>HLI</strong>_DEUTSCH, False )<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-12 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 3.6<br />
IBS_<strong>HLI</strong>_CloseLogWindow (Nur Windows-Versionen)<br />
Aufgabe:<br />
Schließt das Ereignis-Fenster unter MS-Windows.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_CloseLogWindow( CID )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, Ereignis-Fenster wurde geschlossen.<br />
C 3.7<br />
IBS_<strong>HLI</strong>_LogUserEvent (Nur Windows-Versionen)<br />
Aufgabe:<br />
Schreibt einen anwendungsdefinierten Textstring in das Ereignis-Fenster.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_LogUserEvent ( CID, lpTextString, WithTimestamp )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpTextString: Referenz (Zeiger) auf den Textstring.<br />
WithTimestamp <strong>HLI</strong>BOOL<br />
Wahr ( > 0): Der Eintrag in das Ereignisfenster wird mit einem Zeitstempel<br />
versehen.<br />
Falsch (= 0): keinen Zeitstempel verwenden.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code : ein entsprechen<strong>des</strong> Ereignis führte zur negativen<br />
Beendigung der Funktion (→ Ereignis-Co<strong>des</strong>).<br />
C-Beispiel:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
IBS_<strong>HLI</strong>_LogUserEvent ( ISASC1, "Hello <strong>HLI</strong>", FALSE );<br />
Delphi-Beispiel:<br />
IBS_<strong>HLI</strong>_LogUserEvent ( ISASC1, 'Hello <strong>HLI</strong>', False );<br />
Visual Basic -Beispiel:<br />
Call IBS_<strong>HLI</strong>_LogUserEvent ( ISASC1, "Hello <strong>HLI</strong>", False )<br />
5626_de_02 PHOENIX CONTACT C-13
IBS PC SC <strong>HLI</strong> UM<br />
C 4<br />
IBS_<strong>HLI</strong>_LogAutoSave (Nur Windows-Versionen)<br />
Aufgabe:<br />
Aktiviert das Schreiben der Ereignisse in eine Datei parallel zur Ausgabe im Ereignis-Fenster.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_LogUserEvent ( CID, lpFilename, Append )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpFilename: Referenz (Zeiger) auf den Dateinamen (String).<br />
Append: <strong>HLI</strong>BOOL<br />
Wahr (> 0): Besteht die Datei bereits, werden neue Einträge an den bestehenden<br />
Inhalt angehängt.<br />
Falsch (0): <strong>Die</strong> Datei wird neu erstellt bzw. ein bestehender Inhalt gelöscht.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis führte zur negativen Beendigung der Funktion<br />
(→ Ereignis-Co<strong>des</strong>).<br />
C-Beispiel:<br />
IBS_<strong>HLI</strong>_LogAutoSave ( ISASC1, "C:\\INTERBUS.LOG", TRUE );<br />
Delphi-Beispiel:<br />
IBS_<strong>HLI</strong>_LogAutoSave ( ISASC1, 'C:\INTERBUS.LOG', True );<br />
Visual-Basic-Beispiel:<br />
Call IBS_<strong>HLI</strong>_LogAutoSave ( ISASC1, "C:\INTERBUS.LOG", True )<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-14 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 5<br />
Informations-Funktionen<br />
C 5.1<br />
IBS_<strong>HLI</strong>_GetControllerInfo<br />
Aufgabe:<br />
Daten <strong>des</strong> initialiserten Controllers (Bezeichnung, Firmware- und Hardware-Version) ermitteln.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_GetControllerInfo( CID, lpInfo )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpInfo: Referenz (Zeiger) auf T_<strong>HLI</strong>_SC_INFO<br />
<strong>Die</strong> <strong>HLI</strong>-Funktion trägt die Daten in das referenzierte Objekt ein.<br />
(→ Datentyp T_<strong>HLI</strong>_SC_INFO )<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis führte zur negativen Beendigung der Funktion<br />
(→ Ereignis-Co<strong>des</strong>).<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_SC_INFO CI;<br />
... if( IBS_<strong>HLI</strong>_ GetControllerInfo ( ISASC1, &CI ) == <strong>HLI</strong>_OKAY )<br />
printf( "Controller-Typ : %s", CI.Ident );<br />
Delphi-Beispiel:<br />
var<br />
CI : T_<strong>HLI</strong>_SC_INFO<br />
begin<br />
if IBS_<strong>HLI</strong>_ GetControllerInfo ( ISASC1, @CI ) = <strong>HLI</strong>_OKAY Then<br />
Write( 'Controller-Typ : ' + pChar(@CI.Ident) );<br />
Visual Basic -Beispiel:<br />
Dim CI As T_<strong>HLI</strong>_SC_INFO<br />
Dim S As String<br />
...<br />
If IBS_<strong>HLI</strong>_GetControllerInfo(ISASC1, CI) = <strong>HLI</strong>_OKAY Then<br />
Call <strong>HLI</strong>_GetString(CI.Ident, S)<br />
Debug.Print "Controller-Typ :", S<br />
End If<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-15
IBS PC SC <strong>HLI</strong> UM<br />
C 5.2<br />
IBS_<strong>HLI</strong>_GetBusInfo<br />
Aufgabe:<br />
Ermittelt Daten der aktiven Bus-Konfiguration.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_GetBusInfo( CID, lpInfo )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpInfo: Referenz (Zeiger) auf T_<strong>HLI</strong>_BUS_INFO<br />
<strong>Die</strong> <strong>HLI</strong>-Funktion trägt die Daten in das referenzierte Objekt ein.<br />
(→ Datentyp T_<strong>HLI</strong>_BUS_INFO )<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis führte zur negativen Beendigung der Funktion<br />
(→ Ereignis-Co<strong>des</strong>).<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_BUS_INFO BI;<br />
...<br />
If( IBS_<strong>HLI</strong>_ GetBusInfo ( ISASC1, &BI ) == <strong>HLI</strong>_OKAY )<br />
printf( "Anzahl der Busteilnehmer : %u", BI.Devices );<br />
Delphi-Beispiel:<br />
var<br />
BI : T_<strong>HLI</strong>_BUS_INFO;<br />
begin<br />
...<br />
if IBS_<strong>HLI</strong>_ GetBusInfo ( ISASC1, @BI ) = <strong>HLI</strong>_OKAY Then<br />
Write( ' Anzahl der Busteilnehmer : ' + IntToStr( BI.Devices) );<br />
Visual-Basic-Beispiel:<br />
Dim BI As T_<strong>HLI</strong>_BUS_INFO<br />
...<br />
If IBS_<strong>HLI</strong>_GetBusInfo(ISASC1, BI) = <strong>HLI</strong>_OKAY Then<br />
Debug.Print "Anzahl der Busteilnehmer :", BI.Devices<br />
End If<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C 5.3<br />
IBS_<strong>HLI</strong>_GetDeviceInfo<br />
Aufgabe:<br />
Ermittelt die Daten eines Busteilnehmers.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_GetDeviceInfo( CID, DeviceIndex, lpInfo )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
DeviceIndex: USIGN16<br />
Index in die Teilnehmerliste, beginnend bei 1 bis n<br />
( n Teilnehmer im INTERBUS)<br />
lpInfo: Referenz (Zeiger) auf T_<strong>HLI</strong>_DEVICE_INFO<br />
C-16 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
<strong>Die</strong> <strong>HLI</strong>-Funktion trägt die Daten in das referenzierte Objekt ein.<br />
(→ Datentyp T_<strong>HLI</strong>_DEVICE_INFO)<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis führte zur negativen<br />
Beendigung der Funktion (→ Ereignis-Co<strong>des</strong>).<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_DEVICE_INFO DI;<br />
...<br />
if( IBS_<strong>HLI</strong>_ GetDeviceInfo ( ISASC1, 2, &DI ) == <strong>HLI</strong>_OKAY )<br />
printf( "2. Teilnehmer hat ID-Code: %u", DI.ID_Code );<br />
Delphi-Beispiel:<br />
var<br />
DI : T_<strong>HLI</strong>_DEVICE_INFO;<br />
begin<br />
...<br />
if IBS_<strong>HLI</strong>_ GetDeviceInfo ( ISASC1, 2, @DI ) =<br />
<strong>HLI</strong>_OKAY Then<br />
Write( '2. Teilnehmer hat ID-Code: ' + IntToStr(<br />
DI.ID_Code) );<br />
Visual-Basic-Beispiel:<br />
Dim DI As T_<strong>HLI</strong>_DEVICE_INFO<br />
...<br />
If IBS_<strong>HLI</strong>_GetDeviceInfo(ISASC1, 2, DI) = <strong>HLI</strong>_OKAY<br />
Then<br />
Debug.Print "2. Teilnehmer hat ID-Code:", DI.ID_Code<br />
End If<br />
C 5.4<br />
IBS_<strong>HLI</strong>_GetDiagnosticInfo<br />
Aufgabe:<br />
Ermittelt Statistikdaten über INTERBUS-Zyklen eines Controllers.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_GetDiagnosticInfo( CID, lpInfo )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpInfo: Referenz (Zeiger) auf T_<strong>HLI</strong>_SC_DIAG<br />
<strong>Die</strong> <strong>HLI</strong>-Funktion trägt die Daten in das referenzierte Objekt ein.<br />
(→ Datentyp T_<strong>HLI</strong>_SC_DIAG )<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis führte zur negativen Beendigung der Funktion<br />
(→ Ereignis-Co<strong>des</strong>).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-Beispiel:<br />
T_<strong>HLI</strong>_SC_DIAG DI;<br />
...<br />
5626_de_02 PHOENIX CONTACT C-17
IBS PC SC <strong>HLI</strong> UM<br />
if( IBS_<strong>HLI</strong>_ GetDiagnosticInfo ( ISASC1, &DI ) ==<br />
<strong>HLI</strong>_OKAY )<br />
printf( "Fehlerhafte Zyklen: %u", DI.Cycle_Error_Count );<br />
Delphi-Beispiel:<br />
var<br />
DI : T_<strong>HLI</strong>_SC_DIAG;<br />
begin<br />
...<br />
if IBS_<strong>HLI</strong>_ GetDiagnosticInfo ( ISASC1, @DI ) =<br />
<strong>HLI</strong>_OKAY Then<br />
Write( 'Fehlerhafte Zyklen: ' + IntToStr( DI.<br />
Cycle_Error_Count) );<br />
Visual-Basic-Beispiel:<br />
Dim DI As T_<strong>HLI</strong>_SC_DIAG<br />
...<br />
If IBS_<strong>HLI</strong>_GetDiagnosticInfo(ISASC1, DI) = <strong>HLI</strong>_OKAY Then<br />
Debug.Print "Fehlerhafte Zyklen: ", DI.Cycle_Error_Count<br />
End If<br />
C 6<br />
C 6.1<br />
Registrierung von Prozessdaten-Objekten<br />
IBS_<strong>HLI</strong>_RegisterPDObject<br />
Aufgabe:<br />
Master-Funktion zur Registrierung von Prozessdaten-Objekten.<br />
(Wird von den typgebundenen Registrierungsfunktionen IBS_<strong>HLI</strong>_RegisterPDO_xx()<br />
aufgerufen)<br />
Durch die Registrierung wird eine Zuordnung einer anwendungseigenen Variable zu<br />
einem Prozessdaten-Abbild eines INTERBUS-Teilnehmers geschaffen.<br />
<strong>Die</strong> Aktualisierung der Variablen-Zustände vom INTERBUS-Teilnehmer wird durch die<br />
Prozessdaten-Management-Funktionen IBS_<strong>HLI</strong>_PD_xx() durchgeführt.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_RegisterPDObject( CID, PD_Type, Segment, Position,<br />
PDO_Type, ByteOffset, BitPosition, BitLength, lpAppVar, lp-<br />
Changed )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
PD_Type: USIGN16<br />
Datenrichtung <strong>des</strong> Objekts; folgende Konstanten sind definiert:<br />
IBS_PDO_INPUT: Eingangs-Objekt<br />
IBS_PDO_OUTPUT: Ausgangs-Objekt<br />
Segment: USIGN16<br />
Segment-Nr. <strong>des</strong> INTERBUS-Teilnehmers<br />
(log. Teilnehmer-Nummer)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Position:<br />
USIGN16<br />
Segment-Position <strong>des</strong> Teilnehmers (log. Teilnehmer-Nummer)<br />
C-18 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
PDO_Type:<br />
ByteOffset:<br />
BitPosition:<br />
BitLength:<br />
lpAppVar:<br />
USIGN16<br />
Objekt-Datentyp; folgende Konstanten sind definiert:<br />
IBS_PDO_BOOL: Boolsches (digitales) Objekt ( 1 Bit )<br />
IBS_PDO_BITSTRING: Bitstring-Objekt ( 2 ..15 Bit )<br />
IBS_PDO_BYTE: Byte-Objekt ( 8 Bit )<br />
IBS_PDO_WORD: Wort-Objekt ( 16 Bit )<br />
IBS_PDO_DWORD: Doppel-Wort-Objekt ( 32 Bit )<br />
Objekt-<strong>Datentypen</strong> nur für Signalpfade aus IBS CMD:<br />
IBS_SIG_BOOL: Boolsches (digitales) Objekt ( 1 Bit )<br />
IBS_SIG_BITSTRING: Bitstring-Objekt ( 2 ..15 Bit )<br />
IBS_SIG_BYTE: Byte-Objekt ( 8 Bit )<br />
IBS_SIG_WORD: Wort-Objekt ( 16 Bit )<br />
IBS_SIG_DWORD: Doppel-Wort-Objekt ( 32 Bit )<br />
USIGN16<br />
Byte-Offset im Prozessdatenabbild <strong>des</strong> Teilnehmers, ab dem das Objekt zugeordnet<br />
werden soll.<br />
USIGN16<br />
Nur bei BOOL- und BITSTRING-Objekten:<br />
(Start-)Bit-Position <strong>des</strong> Objekts (sonst nicht verwendet)<br />
USIGN16<br />
Nur bei BITSTRING-Objekten:<br />
Bit-Länge <strong>des</strong> Objekts (2 bis 15) (sonst nicht verwendet)<br />
Referenz (Zeiger) auf die anwendungseigene Variable, die dem Prozessdatenabbild<br />
zugeordnet werden soll.<br />
Der Typ der Variable muss mit dem angegebenen PDO_Type übereinstimmen! (siehe<br />
Kapitel 2.1.2)<br />
lpChanged: Referenz (Zeiger) auf eine anwendungseigene Variable <strong>des</strong> Typs <strong>HLI</strong>BOOL,<br />
die die Zustandsänderung <strong>des</strong> Prozessdaten-Objekts anzeigt.<br />
<strong>Die</strong>s optional, und nur bei Eingangsobjekten relevant.<br />
Bei Nicht-Verwendung ist hier eine NULL-Referenz zu übergeben.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Objekt-Registrierung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>).<br />
Anmerkung:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Bei BITSTRING - Objekten wird der Wert immer am LSB (Bit 0) ausgerichtet, unabhängig<br />
von der Lage <strong>des</strong> Objekts im Prozessdaten-Abbild <strong>des</strong> Teilnehmers.<br />
Es ist darauf zu achten, dass nach Registrierung eines Prozessdatenobjekts die zugeordnete<br />
Programm-Variable nicht ihre Gültigkeit verliert. Es wird empfohlen, nicht-lokale<br />
Variablen als Prozessdaten-Objekte zu verwenden.<br />
5626_de_02 PHOENIX CONTACT C-19
IBS PC SC <strong>HLI</strong> UM<br />
C-Beispiel:<br />
T_IBS_BOOL DigitalIn;<br />
...<br />
/* digitales Eingangs-Objekt zu Teilnehmer 2.1, Bit 3 im 2.<br />
Wort zuordnen, keine StateChanged-Variable */<br />
BS_<strong>HLI</strong>_RegisterPDObject( ISASC1, IBS_PDO_INPUT, 2, 1,<br />
IBS_PDO_BOOL, 2, 3, 1,<br />
&DigitalIn, NULL);<br />
Delphi-Beispiel:<br />
var<br />
DigitalIn : T_IBS_BOOL;<br />
..<br />
begin<br />
{ digitales Eingangs-Objekt zu Teilnehmer 2.1, Bit 3 im 2. Wort<br />
zuordnen, keine StateChanged-Variable }<br />
IBS_<strong>HLI</strong>_RegisterPDObject( ISASC1, IBS_PDO_INPUT, 2, 1,<br />
IBS_PDO_BOOL, 2, 3, 1,<br />
@DigitalIn, nil);<br />
Visual-Basic-Beispiel:<br />
Dim DigitalIn As Boolean<br />
...<br />
' digitales Eingangs-Objekt zu Teilnehmer 2.1, Bit 3<br />
' im 2. Wort zuordnen, keine StateChanged-Variable<br />
Call IBS_<strong>HLI</strong>_RegisterPDObject( ISASC1, IBS_PDO_INPUT,<br />
2, 1, IBS_PDO_BOOL, 2, 3,<br />
1, DigitalIn, Null )<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-20 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 6.2<br />
IBS_<strong>HLI</strong>_RegisterPDO_BOOL<br />
Aufgabe:<br />
Registriert ein Prozessdaten-Objekt <strong>des</strong> Typs T_IBS_BOOL (digitales Objekt).<br />
Durch die Registrierung wird eine Zuordnung einer anwendungseigenen Variablen zu<br />
einem Bit im Prozessdaten-Abbild eines INTERBUS-Teilnehmers geschaffen.<br />
<strong>Die</strong> Aktualisierung der Variablen-Zustände vom bzw. zum INTERBUS-Teilnehmer wird<br />
durch die Prozessdaten-Management-Funktionen IBS_<strong>HLI</strong>_PD_xx() durchgeführt.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_RegisterPDO_BOOL( CID, PD_Type, Segment, Position, ByteOffset, BitPosition,<br />
lpAppVar, lpChanged )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
PD_Type: USIGN16<br />
Datenrichtung <strong>des</strong> Objekts; folgende Konstanten sind definiert:<br />
IBS_PDO_INPUT: Eingangs-Objekt<br />
IBS_PDO_OUTPUT: Ausgangs-Objekt<br />
Segment: USIGN16<br />
Segment-Nr. <strong>des</strong> INTERBUS-Teilnehmers<br />
(log. Teilnehmer-Nummer)<br />
Position: USIGN16<br />
Segment-Position <strong>des</strong> Teilnehmers (log. Teilnehmer-Nummer)<br />
ByteOffset: USIGN16<br />
Byte-Offset im Prozessdaten-Abbild <strong>des</strong> Teilnehmers, ab dem das<br />
Bit-Objekt zugeordnet werden soll.<br />
BitPosition: USIGN16<br />
Bit-Position <strong>des</strong> Objekts (0 bis 15)<br />
lpAppVar: Referenz (Zeiger) auf die anwendungseigene Variable, die dem<br />
Prozessdatenabbild zugeordnet werden soll.<br />
<strong>Die</strong> Variable muss als T_IBS_BOOL deklariert sein!<br />
lpChanged: Referenz (Zeiger) auf eine anwendungseigene Variable <strong>des</strong> Typs<br />
<strong>HLI</strong>BOOL, die die Zustandsänderung <strong>des</strong> Prozessdaten-Objekts<br />
anzeigt.<br />
<strong>Die</strong>s ist optional, und nur bei Eingangsobjekten relevant.<br />
Bei Nicht-Verwendung ist hier eine NULL-Referenz zu übergeben.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : erfolgreiche Objekt-Registrierung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-21
IBS PC SC <strong>HLI</strong> UM<br />
Anmerkung:<br />
Es ist darauf zu achten, dass nach Registrierung eines Prozessdaten-Objekts die zugeordnete<br />
Programm-Variable nicht ihre Gültigkeit verliert.<br />
Es wird empfohlen, nicht-lokale Variablen als Prozessdaten-Objekte zu verwenden.<br />
C-Beispiel:<br />
T_IBS_BOOL DigitalIn;<br />
...<br />
/* digitales Eingangs-Objekt zu Teilnehmer 2.1, Bit 3<br />
im 2. Wort zuordnen, keine StateChanged-Variable */<br />
IBS_<strong>HLI</strong>_RegisterPDO_BOOL( ISASC1, IBS_PDO_INPUT, 2, 1,<br />
2, 3, &DigitalIn, NULL);<br />
Delphi-Beispiel:<br />
var<br />
DigitalIn : T_IBS_BOOL;<br />
...<br />
begin<br />
{ digitales Eingangs-Objekt zu Teilnehmer 2.1, Bit 3 im<br />
2. Wort zuordnen, keine StateChanged-Variable }<br />
BS_<strong>HLI</strong>_RegisterPDO_BOOL( ISASC1, IBS_PDO_INPUT, 2, 1,<br />
2, 3, @DigitalIn, nil);<br />
Visual-Basic -Beispiel:<br />
Dim DigitalIn As Boolean<br />
...<br />
' digitales Eingangs-Objekt zu Teilnehmer 2.1, Bit 3 im ' 2. Wort<br />
zuordnen, keine StateChanged-Variable<br />
Call IBS_<strong>HLI</strong>_RegisterPDO_BOOL( ISASC1, IBS_PDO_INPUT,<br />
2, 1, 2, 3,<br />
DigitalIn, Null )<br />
C 6.3<br />
IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING<br />
Aufgabe:<br />
Registriert eine Prozessdaten-Objekt <strong>des</strong> Typs T_IBS_BITSTRING (Bitstring-Objekt).<br />
Durch die Registrierung wird eine Zuordnung einer anwendungseigenen Variable zu n Bits<br />
im Prozessdaten-Abbild eines INTERBUS-Teilnehmers geschaffen.<br />
<strong>Die</strong> Aktualisierung der Variablen-Zustände vom bzw. zum INTERBUS-Teilnehmer wird<br />
durch die Prozessdaten-Management-Funktionen IBS_<strong>HLI</strong>_PD_xx() durchgeführt.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING( CID, PD_Type, Segment, Position,<br />
ByteOffset, BitPosition, BitLength,<br />
lpAppVar, lpChanged )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
PD_Type: USIGN16<br />
Datenrichtung <strong>des</strong> Objekts; folgende Konstanten sind definiert:<br />
IBS_PDO_INPUT: Eingangs-Objekt<br />
IBS_PDO_OUTPUT: Ausgangs-Objekt<br />
Segment: USIGN16<br />
Segment-Nr <strong>des</strong> INTERBUS-Teilnehmers (log. Teilnehmer-Nummer)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-22 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Position:<br />
ByteOffset:<br />
BitPosition:<br />
BitLength:<br />
USIGN16<br />
Segment-Position <strong>des</strong> Teilnehmers (log. Teilnehmer-Nummer)<br />
USIGN16<br />
Byte-Offset im Prozessdaten-Abbild <strong>des</strong> Teilnehmers, ab dem das<br />
Bitstring-Objekt zugeordnet werden soll.<br />
USIGN16<br />
Bit-Position (erstes Bit) <strong>des</strong> Objekts (0 bis 14)<br />
USIGN16<br />
Länge <strong>des</strong> Bitstrings (2 bis15)<br />
Bit-Position und Bit-Länge <strong>des</strong> Objekts müssen so gewählt sein, dass die Grenze von 16<br />
Bit nicht überschritten wird.<br />
lpAppVar:<br />
Referenz (Zeiger) auf die anwendungseigene Variable, die dem<br />
Prozessdaten-Abbild zugeordnet werden soll.<br />
<strong>Die</strong> Variable muss als T_IBS_BITSTRING deklariert sein!<br />
lpChanged: Referenz (Zeiger) auf eine anwendungseigene Variable <strong>des</strong> Typs<br />
<strong>HLI</strong>BOOL, die die Zustandsänderung <strong>des</strong> Prozessdatenobjekts<br />
anzeigt.<br />
<strong>Die</strong>s ist optional und nur bei Eingangsobjekten relevant.<br />
Bei Nicht-Verwendung ist hier eine NULL-Referenz zu übergeben.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : erfolgreiche Objekt-Registrierung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Bit-Position und Bit-Länge <strong>des</strong> Objekts müssen so gewählt sein, dass die Grenze von 16<br />
Bit nicht überschritten wird.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Der Wert <strong>des</strong> Objekts wird immer am LSB (Bit 0) ausgerichtet, unabhängig von der Lage<br />
<strong>des</strong> Objekts im Prozessdaten-Abbild <strong>des</strong> Teilnehmers.<br />
Es ist darauf zu achten, das nach Registrierung eines Prozessdatenobjekts die zugeordnete<br />
Programm-Variable nicht ihre Gültigkeit verliert. Es wird empfohlen, nicht-lokale Variable<br />
als Prozessdatenobjekte zu verwenden.<br />
5626_de_02 PHOENIX CONTACT C-23
IBS PC SC <strong>HLI</strong> UM<br />
C-Beispiel:<br />
T_IBS_BITSTRING AnalogIn12Bit;<br />
<strong>HLI</strong>BOOL<br />
AnalogChanged;<br />
...<br />
/* 12-Bit-Eingangs-Objekt bei Teilnehmer C.2 zu den<br />
höherwertigen Bits im 4. Wort zuordnen, mit<br />
StateChanged-Variable */<br />
IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING( ISASC1, IBS_PDO_INPUT,<br />
3, 2, 6, 4, 12,<br />
&AnalogIn12Bit,<br />
&AnalogChanged);<br />
Delphi-Beispiel:<br />
var<br />
AnalogIn12Bit : T_IBS_BITSTRING;<br />
AnalogChanged : <strong>HLI</strong>BOOL;<br />
...<br />
begin<br />
{ 12-Bit-Eingangs-Objekt bei Teilnehmer C.2 zu den<br />
höherwertigen Bits im 4. Wort zuordnen, mit<br />
StateChanged-Variable }<br />
IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING( ISASC1, IBS_PDO_INPUT,<br />
3, 2, 6, 4, 12,<br />
@AnalogIn12Bit,<br />
@AnalogChanged);<br />
Visual-Basic-Beispiel:<br />
Dim AnalogIn12Bit As Integer<br />
Dim AnalogChanged As Boolean<br />
...<br />
' 12-Bit-Eingangs-Objekt bei Teilnehmer C.2 zu den<br />
' höherwertigen Bits im 4. Wort zuordnen, mit<br />
' StateChanged-Variable<br />
Call IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING( ISASC1,<br />
IBS_PDO_INPUT, 3, 2,<br />
6, 4, 12,<br />
AnalogIn12Bit,<br />
AnalogChanged)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-24 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 6.4<br />
IBS_<strong>HLI</strong>_RegisterPDO_BYTE<br />
Aufgabe:<br />
Registriert eine Prozessdatenobjekt <strong>des</strong> Typs T_IBS_BYTE (8-Bit Objekt).<br />
Durch die Registrierung wird eine Zuordnung einer anwendungseigenen Variablen zu<br />
einem Byte im Prozessdaten-Abbild eines INTERBUS-Teilnehmers geschaffen.<br />
<strong>Die</strong> Aktualisierung der Variablen-Zustände vom bzw. zum INTERBUS-Teilnehmer wird<br />
durch die Prozessdaten-Management-Funktionen IBS_<strong>HLI</strong>_PD_xx() durchgeführt.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_RegisterPDO_BYTE( CID, PD_Type, Segment, Position,<br />
ByteOffset, lpAppVar, lpChanged )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
PD_Type: USIGN16<br />
Datenrichtung <strong>des</strong> Objekts; folgende Konstanten sind definiert:<br />
IBS_PDO_INPUT: Eingangs-Objekt<br />
IBS_PDO_OUTPUT: Ausgangs-Objekt<br />
Segment: USIGN16<br />
Segment-Nr. <strong>des</strong> INTERBUS-Teilnehmers (log. Teilnehmer-Nummer)<br />
Position: USIGN16<br />
Segment-Position <strong>des</strong> Teilnehmers (log. Teilnehmer-Nummer)<br />
ByteOffset: USIGN16<br />
Byte-Offset im Prozessdatenabbild <strong>des</strong> Teilnehmers, ab dem das Byte-Objekt<br />
zugeordnet werden soll.<br />
lpAppVar: Referenz (Zeiger) auf die anwendungseigene Variable, die dem Prozessdatenabbild<br />
zugeordnet werden soll.<br />
<strong>Die</strong> Variable muss als T_IBS_BYTE deklariert sein!<br />
lpChanged: Referenz (Zeiger) auf eine anwendungseigene Variable <strong>des</strong> Typs<br />
<strong>HLI</strong>BOOL, die die Zustandsänderung <strong>des</strong> Prozessdatenobjekts anzeigt.<br />
<strong>Die</strong> Verwendung einer solchen Variable ist optional und nur bei Eingangsobjekten<br />
relevant.<br />
Bei Nicht-Verwendung ist hier eine NULL-Referenz zu übergeben.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : erfolgreiche Objekt-Registrierung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Es ist darauf zu achten, dass nach Registrierung eines Prozessdatenobjekts die zugeordnete<br />
Programm-Variable nicht ihre Gültigkeit verliert. Es wird empfohlen, nicht-lokale Variablen<br />
als Prozessdatenobjekte zu<br />
verwenden.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-25
IBS PC SC <strong>HLI</strong> UM<br />
C-Beispiel:<br />
T_IBS_BYTE Out8;<br />
...<br />
/* Ausgangs-Byte-Objekt zu Teilnehmer 2.1, 3.Byte<br />
zuordnen */<br />
IBS_<strong>HLI</strong>_RegisterPDO_BYTE( ISASC1, IBS_PDO_OUTPUT, 2,<br />
1, 2, &Out8, NULL );<br />
Delphi-Beispiel:<br />
var<br />
Out8 : T_IBS_BYTE;<br />
...<br />
begin<br />
{ Ausgangs-Byte-Objekt zu Teilnehmer 2.1, 3.Byte<br />
zuordnen }<br />
IBS_<strong>HLI</strong>_RegisterPDO_BYTE( ISASC1, IBS_PDO_OUTPUT, 2,<br />
1, 2, @Out8, nil );<br />
Visual-Basic-Beispiel:<br />
Dim Out8 As Byte<br />
...<br />
' Ausgangs-Byte-Objekt zu Teilnehmer 2.1, 3.Byte<br />
' zuordnen<br />
Call IBS_<strong>HLI</strong>_RegisterPDO_BYTE( ISASC1, IBS_PDO_OUTPUT,<br />
2, 1, 2, Out8, Null )<br />
C 6.5<br />
IBS_<strong>HLI</strong>_RegisterPDO_WORD<br />
Aufgabe:<br />
Registriert ein Prozessdaten-Objekt <strong>des</strong> Typs T_IBS_WORD (16-Bit Objekt).<br />
Durch die Registrierung wird die Zuordnung einer anwendungseigenen Variable zu einem<br />
Wort im Prozessdaten-Abbild eines INTERBUS-Teilnehmers geschaffen.<br />
<strong>Die</strong> Aktualisierung der Variablen-Zustände vom bzw. zum INTERBUS-Teilnehmer wird<br />
durch die Prozessdaten-Management-Funktionen IBS_<strong>HLI</strong>_PD_xx() durchgeführt.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_RegisterPDO_WORD( CID, PD_Type, Segment, Position,<br />
ByteOffset, lpAppVar, lpChanged )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
PD_Type: USIGN16<br />
Datenrichtung <strong>des</strong> Objekts; folgende Konstanten sind definiert:<br />
IBS_PDO_INPUT: Eingangs-Objekt<br />
IBS_PDO_OUTPUT: Ausgangs-Objekt<br />
Segment: USIGN16<br />
Segment-Nr. <strong>des</strong> INTERBUS-Teilnehmers (log. Teilnehmer-Nummer)<br />
Position: USIGN16<br />
Segment-Position <strong>des</strong> Teilnehmers (log. Teilnehmer-Nummer)<br />
ByteOffset: USIGN16<br />
Byte-Offset im Prozessdatenabbild <strong>des</strong> Teilnehmers, ab dem das<br />
Wort-Objekt zugeordnet werden soll.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-26 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
lpAppVar:<br />
Referenz (Zeiger) auf die anwendungseigene Variable, die dem<br />
Prozessdatenabbild zugeordnet werden soll.<br />
<strong>Die</strong> Variable muss als T_IBS_WORD deklariert sein!<br />
lpChanged: Referenz (Zeiger) auf eine anwendungseigene Variable <strong>des</strong> Typs<br />
<strong>HLI</strong>BOOL, die die Zustandsänderung <strong>des</strong> Prozessdatenobjekts<br />
anzeigt. <strong>Die</strong>s ist optional, und nur bei Eingangsobjekten relevant.<br />
Bei Nicht-Verwendung ist hier eine NULL-Referenz zu übergeben.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : erfolgreiche Objekt-Registrierung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Es ist darauf zu achten, dass nach Registrierung eines Prozessdatenobjekts die zugeordnete<br />
Programm-Variable nicht ihre Gültigkeit verliert. Es wird empfohlen, nicht-lokale Variablen<br />
als Prozessdatenobjekte zu verwenden.<br />
C-Beispiel:<br />
T_IBS_WORD Out16;<br />
...<br />
/* Ausgangs-Wort-Objekt zu Teilnehmer 2.1, 4. Wort<br />
zuordnen */<br />
IBS_<strong>HLI</strong>_RegisterPDO_WORD( ISASC1, IBS_PDO_OUTPUT, 2,<br />
1, 6, &Out16, NULL );<br />
Delphi-Beispiel:<br />
var<br />
Out16 : T_IBS_WORD;<br />
...<br />
begin<br />
{ Ausgangs-Wort-Objekt zu Teilnehmer 2.1, 4.Wort zuordnen }<br />
IBS_<strong>HLI</strong>_RegisterPDO_WORD( ISASC1, IBS_PDO_OUTPUT, 2,<br />
1, 6, @Out16, nil );<br />
Visual-Basic-Beispiel:<br />
Dim Out16 As Integer<br />
...<br />
' Ausgangs-Wort-Objekt zu Teilnehmer 2.1, 4.Wort<br />
' zuordnen<br />
Call IBS_<strong>HLI</strong>_RegisterPDO_WORD( ISASC1,<br />
IBS_PDO_OUTPUT, 2, 1,<br />
6, Out16, Null )<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-27
IBS PC SC <strong>HLI</strong> UM<br />
C 6.6<br />
IBS_<strong>HLI</strong>_RegisterPDO_DWORD<br />
Aufgabe:<br />
Registriert ein Prozessdaten-Objekt <strong>des</strong> Typs T_IBS_DWORD<br />
(32-Bit Objekt).<br />
Durch die Registrierung wird die Zuordnung einer anwendungseigenen Variable zu einem<br />
Doppelwort im Prozessdaten-Abbild eines INTERBUS-Teilnehmers geschaffen.<br />
<strong>Die</strong> Aktualisierung der Variablen-Zustände vom bzw. zum INTERBUS-<br />
Teilnehmer wird durch die Prozessdaten-Management-Funktionen<br />
IBS_<strong>HLI</strong>_PD_xx() durchgeführt.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_RegisterPDO_DWORD( CID, PD_Type, Segment, Position,<br />
ByteOffset, lpAppVar, lpChanged )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
PD_Type: USIGN16<br />
Datenrichtung <strong>des</strong> Objekts; folgende Konstanten sind definiert:<br />
IBS_PDO_INPUT: Eingangs-Objekt<br />
IBS_PDO_OUTPUT: Ausgangs-Objekt<br />
Segment: USIGN16<br />
Segment-Nr. <strong>des</strong> INTERBUS-Teilnehmers<br />
(log. Teilnehmer-Nummer)<br />
Position: USIGN16<br />
Segment-Position <strong>des</strong> Teilnehmers (log. Teilnehmer-Nummer)<br />
ByteOffset: USIGN16<br />
Byte-Offset im Prozessdatenabbild <strong>des</strong> Teilnehmers, ab dem<br />
das Doppelwort-Objekt zugeordnet werden soll.<br />
lpAppVar: Referenz (Zeiger) auf die anwendungseigene Variable, die dem<br />
Prozessdatenabbild zugeordnet werden soll.<br />
<strong>Die</strong> Variable muss als T_IBS_WORD deklariert sein!<br />
lpChanged: Referenz (Zeiger) auf eine anwendungseigene Variable <strong>des</strong> Typs<br />
<strong>HLI</strong>BOOL, die die Zustandsänderung <strong>des</strong> Prozessdatenobjekts<br />
anzeigt.<br />
<strong>Die</strong>s ist optional, und nur bei Eingangsobjekten relevant.<br />
Bei Nicht-Verwendung ist hier eine NULL-Referenz zu übergeben.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : erfolgreiche Objekt-Registrierung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Es ist darauf zu achten, dass nach Registrierung eines Prozessdatenobjekts die zugeordnete<br />
Programm-Variable nicht ihre Gültigkeit verliert. Es wird empfohlen, nicht-lokale Variablen<br />
als Prozessdatenobjekte zu verwenden.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-28 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C-Beispiel:<br />
T_IBS_DWORD Out32;<br />
...<br />
/* Ausgangs-Doppelwort-Objekt zu Teilnehmer 2.1<br />
zuordnen */<br />
IBS_<strong>HLI</strong>_RegisterPDO_DWORD( ISASC1, IBS_PDO_OUTPUT, 2,<br />
1, 0, &Out32, NULL );<br />
Delphi-Beispiel:<br />
var<br />
Out32 : T_IBS_DWORD;<br />
...<br />
begin<br />
{ Ausgangs-Doppelwort-Objekt zu Teilnehmer 2.1<br />
zuordnen }<br />
IBS_<strong>HLI</strong>_RegisterPDO_DWORD( ISASC1, IBS_PDO_OUTPUT, 2,<br />
1, 0, @Out32, nil );<br />
Visual-Basic-Beispiel:<br />
Dim Out32 As Long<br />
...<br />
' Ausgangs-Doppelwort-Objekt zu Teilnehmer 2.1<br />
' zuordnen<br />
Call IBS_<strong>HLI</strong>_RegisterPDO_DWORD( ISASC1,<br />
IBS_PDO_OUTPUT, 2,<br />
1, 0, Out32, Null )<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-29
IBS PC SC <strong>HLI</strong> UM<br />
C 7<br />
<strong>HLI</strong>-Zustands-Maschine<br />
C 7.1<br />
IBS_<strong>HLI</strong>_Process<br />
Aufgabe:<br />
Bei ausschließlicher Verwendung von <strong>HLI</strong>-Funktionen zur Prozessdaten-Bearbeitung wird<br />
die <strong>HLI</strong>-interne Zustandsmaschine (INTERBUS-Kommunikation, Ereignis-Management,<br />
PCP-<strong>Die</strong>nst-Bearbeitung usw.) nicht bearbeitet (siehe auch C.1, Übersicht <strong>HLI</strong>-Funktionen).<br />
Durch den Aufruf dieser Funktion wird die Zustandsmaschine explizit bearbeitet.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_Process( CID )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C 8<br />
C 8.1<br />
Prozessdaten-Management<br />
IBS_<strong>HLI</strong>_PD_In<br />
Aufgabe:<br />
Erfasst das aktuelle Prozessdaten-Eingangs-Abbild der INTERBUS-Teilnehmer eines<br />
Controllers und aktualisiert die Zustände aller registrierten Prozessdaten-Eingangs-Objekte.<br />
<strong>Die</strong> Funktion bearbeitet nicht die Zustandsmaschine <strong>des</strong> <strong>HLI</strong>.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PD_In( CID )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: Anwender-Fehler (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-30 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 8.2<br />
IBS_<strong>HLI</strong>_PD_DeviceIn<br />
Aufgabe:<br />
Erfasst das aktuelle Prozessdaten-Eingangs-Abbild eines INTERBUS-Teilnehmer und aktualisiert<br />
die Zustände der registrierten Prozessdaten-Eingangs-Objekte dieses Teilnehmers.<br />
<strong>Die</strong> Funktion bearbeitet nicht die Zustandsmaschine <strong>des</strong> <strong>HLI</strong>.<br />
Aufruf<br />
IBS_<strong>HLI</strong>_PD_DeviceIn( CID, Segment, Position )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers<br />
Segment: USIGN16<br />
Segment-Nr. <strong>des</strong> INTERBUS-Teilnehmers (log. Teilnehmer-Nummer)<br />
Position: USIGN16<br />
Segment-Position <strong>des</strong> Teilnehmers (log. Teilnehmer-Nummer)<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: Anwender-Fehler (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C 8.3<br />
IBS_<strong>HLI</strong>_PD_Input<br />
Aufgabe:<br />
Aktualisiert den Zustand eines Prozessdaten-Eingangs-Objekts nach Erfassen <strong>des</strong> aktuellen<br />
Prozessdaten-Eingangs-Abbilds <strong>des</strong> zugeordneten INTERBUS-Teilnehmers.<br />
<strong>Die</strong> Funktion bearbeitet nicht die Zustandsmaschine <strong>des</strong> <strong>HLI</strong>.<br />
Aufruf.<br />
IBS_<strong>HLI</strong>_PD_Input( CID, lpAppVar )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpAppVar: Referenz (Zeiger) auf die anwendungseigene Variable, die als<br />
Prozessdaten-Eingangs-Objekt registriert wurde.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: Anwender-Fehler (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-Beispiel:<br />
T_IBS_WORD In16; /* registriertes Prozesdatenobjekt */<br />
...<br />
IBS_<strong>HLI</strong>_PD_In( ISASC1, &In16 ); /* In16 wird aktualisiert */<br />
Delphi-Beispiel:<br />
var<br />
In16 : T_IBS_WORD;<br />
...<br />
begin<br />
IBS_<strong>HLI</strong>_PD_In( ISASC1, @In16 ); { In16 wird aktualisiert }<br />
5626_de_02 PHOENIX CONTACT C-31
IBS PC SC <strong>HLI</strong> UM<br />
Visual-Basic-Beispiel:<br />
Dim In16 As Integer<br />
...<br />
Call IBS_<strong>HLI</strong>_PD_In( ISASC1, In16 ) ' In16 wird aktualisiert<br />
C 8.4<br />
IBS_<strong>HLI</strong>_PD_Out<br />
Aufgabe:<br />
Überträgt den Zustand aller registrierten Prozessdaten-Ausgangs-Objekte eines Controllers<br />
auf das Prozessdaten-Ausgangs-Abbild aller<br />
zugeordneten INTERBUS-Teilnehmer.<br />
Im anwendungsgesteuerten Betrieb wird der Controller durch diesen Aufruf in die Phase<br />
<strong>HLI</strong>_IBS_PREPARING_CYCLE wechseln (siehe C.8).<br />
<strong>Die</strong> Funktion bearbeitet nicht die Zustandsmaschine <strong>des</strong> <strong>HLI</strong>.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PD_Out( CID )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: Anwender-Fehler (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C 8.5<br />
IBS_<strong>HLI</strong>_PD_DeviceOut<br />
Aufgabe:<br />
Überträgt den Zustand aller registrierten Prozessdaten-Ausgangs-Objekte eines INTER-<br />
BUS-Teilnehmers auf das Prozessdaten-Ausgangs-Abbild dieses Teilnehmers.<br />
Aufruf<br />
IBS_<strong>HLI</strong>_PD_DeviceOut( CID, Segment, Position )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Segment: USIGN16<br />
Segment-Nr. <strong>des</strong> INTERBUS-Teilnehmers<br />
(log. Teilnehmer-Nummer)<br />
Position: USIGN16<br />
Segment-Position <strong>des</strong> Teilnehmers (log. Teilnehmer-Nummer)<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: Anwender-Fehler (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-32 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 8.6<br />
IBS_<strong>HLI</strong>_PD_Output<br />
Aufgabe:<br />
Überträgt den Zustand eines registrierten Prozessdaten-Ausgangs-Objekts auf das Prozessdaten-Ausgangs-Abbild<br />
<strong>des</strong>/der zugeordneten INTERBUS-Teilnehmer.<br />
<strong>Die</strong> Funktion bearbeitet nicht die Zustandsmaschine <strong>des</strong> <strong>HLI</strong>.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PD_Output( CID, lpAppVar )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpAppVar: Referenz (Zeiger) auf die anwendungseigene Variable, die als Prozessdaten-Ausgangs-Objekt<br />
registriert wurde.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Ereignis-Code: Anwender-Fehler (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C-Beispiel:<br />
T_IBS_WORD Out16; /* registriertes<br />
Prozesddatenobjekt */<br />
...<br />
IBS_<strong>HLI</strong>_PD_Out( ISASC1, &Out16 ); /* Zustand von Out16<br />
wird auf dem Bus<br />
aktualisert */<br />
Delphi-Beispiel:<br />
var<br />
Out16 : T_IBS_WORD;<br />
...<br />
begin<br />
IBS_<strong>HLI</strong>_PD_Out( ISASC1, @Out16 ); { Zustand von Out16<br />
wird auf dem<br />
Bus aktualisert }<br />
Visual-Basic-Beispiel:<br />
Dim Out16 As Integer<br />
...<br />
Call IBS_<strong>HLI</strong>_PD_Out( ISASC1, Out16 )<br />
' Zustand von Out16 wird auf dem Bus aktualisert<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-33
IBS PC SC <strong>HLI</strong> UM<br />
C 8.7<br />
IBS_<strong>HLI</strong>_ResetAllOutputs<br />
Aufgabe:<br />
Definiertes Setzen der Prozess-Ausgangsdaten aller Busteilnehmer sowie aller registrierten<br />
Prozess-Ausgangsdaten-Objekte auf Null, unabhängig vom aktuellen INTERBUS-Zustand,<br />
z.B. um im Fehlerfall einen definierten Ausgangszustand zu erhalten.<br />
<strong>Die</strong> Funktion bearbeitet nicht die Zustandsmaschine <strong>des</strong> <strong>HLI</strong>.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_ResetALLOutputs( CID )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
C 9<br />
Anwendungsgesteuerte Betriebsart<br />
<strong>Die</strong> Anwendungsgesteuerte Betriebsart steht nur bei Anschaltbaugruppen für ISA- und<br />
PCI-Bus zur Verfügung.<br />
C 9.1<br />
IBS_<strong>HLI</strong>_GetCyclePhase<br />
Aufgabe:<br />
Ermittelt die aktuelle Zyklus-Phase der synchron arbeitenden Controller bei der anwendungs-gesteuerten<br />
Betriebsart.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_GetCyclePhase( )<br />
Rückgabewert:<br />
<strong>HLI</strong>_IBS_IDLE Zustand nach abgeschlossenem Datentransfer;<br />
Prozessdatenobjekte können über die IBS_<strong>HLI</strong>_PD_x()<br />
Funktionen aktualisiert<br />
werden.<br />
<strong>HLI</strong>_IBS_PREPARING_CYCLE<br />
Phase nach Aufruf von IBS_<strong>HLI</strong>_PD_Out() Der Controller<br />
bereitet den nächsten Datenzyklus vor. Während dieser<br />
Phase sind keine weiteren Aktionen zulässig.<br />
<strong>HLI</strong>_IBS_CAN_RUN Vorbereitungsphase abgeschlossen;<br />
Der Controller ist bereit, den nächsten Datentransferzyklus zu<br />
starten<br />
→ Aufruf von IBS_<strong>HLI</strong>_RunCycle()<br />
<strong>HLI</strong>_IBS_RUN<br />
Datentransferzyklus wird gerade ausgeführt. Während dieser<br />
Phase sind keine weiteren Aktionen zulässig.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
C-34 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C-Beispiel:<br />
switch( IBS_<strong>HLI</strong>_GetCyclePhase() ) /* Phase abfragen */<br />
{<br />
case <strong>HLI</strong>_IBS_IDLE :<br />
/* Prozessdaten-Bearbeitung ... */<br />
IBS_<strong>HLI</strong>_PD_Out(ISASC1);<br />
/* .. Vorbereitung gestartet */<br />
break;<br />
case <strong>HLI</strong>_IBS_PREPARING_CYCLE :<br />
/* weiter warten ... */<br />
break;<br />
case <strong>HLI</strong>_IBS_CAN_RUN :<br />
/* jetzt Datenzyklus starten ! */<br />
IBS_<strong>HLI</strong>_RunCycle();<br />
break;<br />
case <strong>HLI</strong>_IBS_RUN :<br />
/* warten bis Datenzyklus beendet */<br />
break;<br />
}<br />
Delphi-Beispiel:<br />
case IBS_<strong>HLI</strong>_GetCyclePhase() of { Phase abfragen }<br />
<strong>HLI</strong>_IBS_IDLE : begin<br />
{ Prozessdaten-Bearbeitung ... }<br />
IBS_<strong>HLI</strong>_PD_Out(ISASC1);<br />
{ .. Vorbereitung gestartet }<br />
end;<br />
<strong>HLI</strong>_IBS_PREPARING_CYCLE :<br />
{ weiter warten ... }<br />
<strong>HLI</strong>_IBS_CAN_RUN : { jetzt Datenzyklus starten ! }<br />
IBS_<strong>HLI</strong>_RunCycle();<br />
<strong>HLI</strong>_IBS_RUN : { warten bis Datenzyklus beendet }<br />
end;<br />
Visual-Basic-Beispiel:<br />
Dim Phase As Integer<br />
Phase = IBS_<strong>HLI</strong>_GetCyclePhase() ' Phase abfragen<br />
Select Case Phase<br />
Case <strong>HLI</strong>_IBS_IDLE<br />
' Prozessdaten-Bearbeitung ...<br />
Call IBS_<strong>HLI</strong>_PD_Out(ISASC1)<br />
' .. Vorbereitung gestartet<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Case <strong>HLI</strong>_IBS_PREPARING_CYCLE<br />
' warten bis Datenzyklus beendet<br />
Case <strong>HLI</strong>_IBS_CAN_RUN<br />
' jetzt Datenzyklus starten !<br />
Call IBS_<strong>HLI</strong>_RunCycle()<br />
Case <strong>HLI</strong>_IBS_RUN<br />
' warten bis Datenzyklus beendet<br />
End Select<br />
5626_de_02 PHOENIX CONTACT C-35
IBS PC SC <strong>HLI</strong> UM<br />
C 9.2<br />
IBS_<strong>HLI</strong>_RunCycle<br />
Aufgabe:<br />
Startet den nächsten Datenzyklus der synchron arbeitenden Controller. Nur möglich, wenn<br />
IBS_<strong>HLI</strong>_GetCyclePhase() den Wert <strong>HLI</strong>_IBS_CAN_RUN zurückgibt.<br />
Aufruf.<br />
IBS_<strong>HLI</strong>_RunCycle( )<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreicher Start <strong>des</strong> Datentransfer-Zyklus<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
C 9.3<br />
IBS_<strong>HLI</strong>_RunCompleteCycle<br />
Aufgabe:<br />
Aktiviert einen kompletten Übertragungszyklus der synchron arbeitenden Controller:<br />
– die Zustände der Prozessdaten-Ausgangsobjekte werden transferiert<br />
– ein Datentransferzyklus wird gefahren<br />
– die Prozessdaten-Eingangsobjekte werden aktualisiert<br />
<strong>Die</strong> Bearbeitungszeit dieser Funktion ist abhängig von der Anzahl der synchron arbeitenden<br />
Controller sowie deren Zykluszeiten.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_RunCompleteCycle( )<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreicher Start <strong>des</strong> Datentransfer-Zyklus<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-36 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 10<br />
PCP-<strong>Die</strong>nste<br />
<strong>Die</strong> PCP-Kommunikation mit einem Teilnehmer kann nur durchgeführt werden, wenn der<br />
Teilnehmer bereit und die Verbindung aufgebaut ist.<br />
Nähere Information zu PCP siehe Anwenderhandbuch Perpherials Communication<br />
Protocol, IBS SYS PCP UM, Artikel-Nr. 2745114.<br />
Der Verbindungsaufbau und die Verbindungsüberwachung wird von <strong>HLI</strong> durchgeführt.<br />
<strong>Die</strong>s erfordert jedoch die Bearbeitung der <strong>HLI</strong>-Zustandsmaschine.<br />
C 10.1<br />
IBS_<strong>HLI</strong>_PCP_DeviceState<br />
Aufgabe:<br />
Liefert den kommunikationsbezogenen Zustand eines PCP-Teilnehmers.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_DeviceState( CID, Segment, Position )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Segment: USIGN16<br />
Segment-Nr. <strong>des</strong> PCP-Teilnehmers (log. Teilnehmer-Nummer)<br />
Position: USIGN16<br />
Segment-Position <strong>des</strong> PCP-Teilnehmers (log. Teilnehmer-Nummer)<br />
Rückgabewert:<br />
<strong>HLI</strong>_PCP_DEVICE_READY<br />
Verbindung ist aufgebaut,<br />
Teilnehmer ist kommunikationsbereit.<br />
<strong>HLI</strong>_PCP_DEVICE_NOT_INITIATED<br />
Verbindung ist noch nicht aufgebaut,<br />
Teilnehmer ist nicht kommunikationsbereit.<br />
<strong>HLI</strong> baut die Verbindung gerade auf.<br />
<strong>HLI</strong>_PCP_DEVICE_BUSY<br />
Verbindung ist aufgebaut,<br />
Teilnehmer ist kommunikationsbereit,<br />
es wird aber gerade ein <strong>Die</strong>nst vom Teilnehmer bearbeitet.<br />
<strong>HLI</strong>_PCP_DEVICE_NOT_READY<br />
Verbindung konnte nicht aufgebaut werden, Teilnehmer ist<br />
nicht kommunikationsbereit.<br />
Es sind mehrere Versuche <strong>des</strong> Verbindungsaufbaus gescheitert.<br />
Falls die Verbindung zu diesem Teilnehmer erneut aufgebaut<br />
werden soll, muss <strong>HLI</strong> über einen Aufruf von IBS_<strong>HLI</strong>_Init()<br />
bzw. IBS_<strong>HLI</strong>_Init_CFG() erneut initialisiert werden.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-37
IBS PC SC <strong>HLI</strong> UM<br />
C 10.2<br />
IBS_<strong>HLI</strong>_PCP_IdentifyRequest<br />
Aufgabe:<br />
Sendet eine Identify-<strong>Die</strong>nstanforderung an einen PCP-Teilnehmer.<br />
Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen Teilnehmer gesendet werden, wenn<br />
dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in Bearbeitung hat<br />
(→ IBS_<strong>HLI</strong>_PCP_DeviceState() ).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_IdentifyRequest( CID, lpDI )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpDI: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_DEVICE_INFO.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: <strong>Die</strong>nstanforderung erfolgreich gesendet.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Nach erfolgreich gesendeter <strong>Die</strong>nstanforderung überwacht <strong>HLI</strong> die <strong>Die</strong>nstausführung.<br />
Hierzu muss die <strong>HLI</strong>-Zustandsmaschine bearbeitet werden!<br />
Während der <strong>Die</strong>nstausführung hat das Element State <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_DEVICE_INFO Objekts den Wert <strong>HLI</strong>_PCP_SERVICE_PENDING.<br />
Nach der Bearbeitung <strong>des</strong> <strong>Die</strong>nstes erhält <strong>des</strong> Element State folgenden Wert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, die Elemente <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_DEVICE_INFO Objekts enthalten die Ident-<br />
Daten <strong>des</strong> Teilnehmers.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisse nicht<br />
erfolgreich beendet. Wenn die zugehörige Ereignis-Gruppe<br />
aktiviert ist, dann hat <strong>HLI</strong> ein Ereignis hierzu erzeugt, das nähere<br />
Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_DEVICE_INFO DI;<br />
...<br />
DI.Segment = 4; DI.Position = 2; /* Teilnehmer 4.2 */<br />
if( IBS_<strong>HLI</strong>_PCP_IdentifyRequest( ISASC1, &DI ) == <strong>HLI</strong>_OKAY )<br />
{<br />
... /* Loop */<br />
IBS_<strong>HLI</strong>_Process(ISASC1); /* Zustands-Maschine */<br />
if( DI.State != <strong>HLI</strong>_PCP_SERVICE_PENDING )<br />
if( DI.State == <strong>HLI</strong>_PCP_SERVICE_OKAY )<br />
... /* Daten bearbeiten ... */<br />
}<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-38 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Delphi-Beispiel:<br />
var<br />
DI : T_<strong>HLI</strong>_PCP_DEVICE_INFO;<br />
...<br />
DI.Segment := 4; DI.Position := 2; { Teilnehmer 4.2 }<br />
if IBS_<strong>HLI</strong>_PCP_IdentifyRequest( ISASC1, @DI ) =<br />
<strong>HLI</strong>_OKAY then<br />
begin<br />
... { Loop }<br />
IBS_<strong>HLI</strong>_Process(ISASC1); { Zustands-Maschine }<br />
if DI.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if DI.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
... { Daten bearbeiten ... }<br />
end;<br />
Visual-Basic-Beispiel:<br />
Dim DI As T_<strong>HLI</strong>_PCP_DEVICE_INFO<br />
...<br />
DI.Segment = 4<br />
DI.Position = 2 ' Teilnehmer 4.2<br />
if IBS_<strong>HLI</strong>_PCP_IdentifyRequest( ISASC1, DI ) =<br />
<strong>HLI</strong>_OKAY then<br />
... ' Loop<br />
Call IBS_<strong>HLI</strong>_Process(ISASC1) ' Zustands-Maschine<br />
if DI.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if DI.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
... ' Daten bearbeiten ...<br />
C 10.3<br />
IBS_<strong>HLI</strong>_PCP_IdentifyService<br />
Aufgabe:<br />
Sendet eine Identify-<strong>Die</strong>nstanforderung an einen PCP-Teilnehmer und wartet auf die Antwort.<br />
Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen Teilnehmer gesendet werden, wenn<br />
dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in Bearbeitung hat<br />
(→ IBS_<strong>HLI</strong>_PCP_DeviceState() ).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_IdentifyService( CID, lpDI, timeout )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpDI: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_DEVICE_INFO.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
timeout: USIGN16<br />
max. Wartezeit in Millisekunden<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-39
IBS PC SC <strong>HLI</strong> UM<br />
Rückgabewert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, die Elemente <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_DEVICE_INFO Objekts enthalten die Ident-<br />
Daten <strong>des</strong> Teilnehmers.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisses<br />
nicht erfolgreich beendet. Wenn die zugehörige Ereignis-<br />
Gruppe aktiviert ist, dann hat <strong>HLI</strong> ein Ereignis hierzu erzeugt,<br />
das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_DEVICE_INFO DI;<br />
...<br />
DI.Segment = 4; DI.Position = 2; /* Teilnehmer 4.2 */<br />
if( IBS_<strong>HLI</strong>_PCP_IdentifyService( ISASC1, &DI, 1000 )<br />
== <strong>HLI</strong>_PCP_SERVICE_OKAY )<br />
{<br />
... /* Daten bearbeiten ... */<br />
}<br />
Delphi-Beispiel:<br />
var<br />
DI : T_<strong>HLI</strong>_PCP_DEVICE_INFO;<br />
...<br />
DI.Segment := 4; DI.Position := 2; { Teilnehmer 4.2 }<br />
if IBS_<strong>HLI</strong>_PCP_IdentifyService( ISASC1, @DI, 1000 ) =<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
begin<br />
... { Daten bearbeiten ... }<br />
end;<br />
Visual-Basic-Beispiel:<br />
Dim DI As T_<strong>HLI</strong>_PCP_DEVICE_INFO<br />
...<br />
DI.Segment = 4<br />
DI.Position = 2 ' Teilnehmer 4.2<br />
if IBS_<strong>HLI</strong>_PCP_IdentifyService( ISASC1, @DI, 1000 ) =<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
... ' Daten bearbeiten ...<br />
End If<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-40 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 10.4<br />
IBS_<strong>HLI</strong>_PCP_ReadRequest<br />
Aufgabe:<br />
Sendet eine <strong>Die</strong>nstanforderung zum Lesen eines Kommunikationsobjekts (Read-Request)<br />
an einen PCP-Teilnehmer. Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen Teilnehmer<br />
gesendet werden, wenn dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in Bearbeitung<br />
hat (→ IBS_<strong>HLI</strong>_PCP_DeviceState() ).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_ReadRequest( CID, lpRD )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpRD: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index<br />
- Subindex<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : <strong>Die</strong>nstanforderung erfolgreich gesendet.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Nach erfolgreich gesendeter <strong>Die</strong>nstanforderung überwacht <strong>HLI</strong> die <strong>Die</strong>nstausführung (die<br />
<strong>HLI</strong>-Zustandsmaschine muss hierzu bearbeitet werden), das Element State <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_RW-Objekts erhält dabei den Wert <strong>HLI</strong>_PCP_SERVICE_PENDING.<br />
Nach der Bearbeitung <strong>des</strong> <strong>Die</strong>nstes erhält <strong>des</strong> Element State den folgenden Wert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, die Elemente <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_RW Objekts enthalten die Daten <strong>des</strong> gelesenen<br />
Objekts.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisse nicht<br />
erfolgreich beendet. Sofern die zugehörige Ereignis-Gruppe<br />
nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu erzeugt, das<br />
nähere Informationen zum Fehler beinhaltet (→ Ereignis-Co<strong>des</strong>).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_RW RD;<br />
...<br />
RD.Segment = 4; RD.Position = 2; /* Teilnehmer 4.2 */<br />
RD.Index = 0x5FFE; RD.Subindex = 0;<br />
if( IBS_<strong>HLI</strong>_PCP_ReadRequest( ISASC1, &RD ) ==<br />
<strong>HLI</strong>_OKAY )<br />
{<br />
.../* Loop */<br />
IBS_<strong>HLI</strong>_Process(ISASC1); /* Zustands-Maschine */<br />
if( RD.State != <strong>HLI</strong>_PCP_SERVICE_PENDING )<br />
if( RD.State == <strong>HLI</strong>_PCP_SERVICE_OKAY )<br />
... /* Daten bearbeiten ... */<br />
}<br />
5626_de_02 PHOENIX CONTACT C-41
IBS PC SC <strong>HLI</strong> UM<br />
Delphi-Beispiel:<br />
var<br />
RD : T_<strong>HLI</strong>_PCP_RW;<br />
...<br />
RD.Segment := 4; RD.Position := 2; { Teilnehmer 4.2 }<br />
RD.Index := $5FFE; RD.Subindex := 0;<br />
if IBS_<strong>HLI</strong>_PCP_ReadRequest(ISASC1, @RD) = <strong>HLI</strong>_OKAY<br />
begin<br />
... { Loop }<br />
IBS_<strong>HLI</strong>_Process(ISASC1); { Zustands-Maschine }<br />
if RD.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if RD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
... { Daten bearbeiten ... }<br />
end;<br />
Visual-Basic-Beispiel:<br />
Dim RD As T_<strong>HLI</strong>_PCP_RW<br />
...<br />
RD.Segment = 4<br />
RD.Position = 2 ' Teilnehmer 4.2<br />
RD.Index = &H5FFE<br />
RD.Subindex = 0<br />
if IBS_<strong>HLI</strong>_PCP_ReadRequest( ISASC1, RD ) = <strong>HLI</strong>_OKAY<br />
then<br />
... ' Loop<br />
Call IBS_<strong>HLI</strong>_Process(ISASC1) ' Zustands-Maschine<br />
if RD.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if RD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
... ' Daten bearbeiten ...<br />
End If<br />
C 10.5<br />
IBS_<strong>HLI</strong>_PCP_ReadService<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
then<br />
Aufgabe:<br />
Sendet eine <strong>Die</strong>nstanforderung zum Lesen eines Kommunikationsobjekts (Read-Request)<br />
an einen PCP-Teilnehmer und wartet auf die Antwort.<br />
Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen Teilnehmer gesendet werden, wenn<br />
dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in Bearbeitung hat (→<br />
IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf.<br />
IBS_<strong>HLI</strong>_PCP_ReadService( CID, lpRD, timeout )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpRD: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index<br />
- Subindex<br />
timeout: USIGN16<br />
max. Wartezeit in Millisekunden<br />
C-42 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY :<br />
Ereignis-Code:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, die Elemente <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_RW Objekts enthalten die gelesenen Daten <strong>des</strong><br />
Kommunikationsobjekts.<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisses<br />
nicht erfolgreich beendet. Sofern die zugehörige Ereignis-<br />
Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu erzeugt,<br />
das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>).<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_RW RD;<br />
...<br />
RD.Segment = 4; RD.Position = 2; /* Teilnehmer 4.2 */<br />
RD.Index = 0x5FFE; RD.Subindex = 0;<br />
if( IBS_<strong>HLI</strong>_PCP_ReadService( ISASC1, &RD, 1000 ) ==<br />
<strong>HLI</strong>_OKAY )<br />
{<br />
... /* Daten bearbeiten ... */<br />
}<br />
Delphi-Beispiel:<br />
var<br />
RD : T_<strong>HLI</strong>_PCP_RW;<br />
..<br />
RD.Segment := 4; RD.Position := 2;<br />
{ Teilnehmer4.2 }<br />
RD.Index := $5FFE; RD.Subindex := 0;<br />
if IBS_<strong>HLI</strong>_PCP_ReadService( ISASC1, @RD, 1000 ) =<br />
<strong>HLI</strong>_OKAY then<br />
begin<br />
... { Daten bearbeiten ... }<br />
end;<br />
Visual Basic-Beispiel:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Dim RD As T_<strong>HLI</strong>_PCP_RW<br />
...<br />
RD.Segment = 4<br />
RD.Position = 2 ' Teilnehmer 4.2<br />
RD.Index = &H5FFE<br />
RD.Subindex = 0<br />
if IBS_<strong>HLI</strong>_PCP_ReadService( ISASC1, RD, 1000 ) =<br />
<strong>HLI</strong>_OKAY then<br />
... ' Daten bearbeiten ...<br />
End If<br />
5626_de_02 PHOENIX CONTACT C-43
IBS PC SC <strong>HLI</strong> UM<br />
C 10.6<br />
IBS_<strong>HLI</strong>_PCP_WriteRequest<br />
Aufgabe:<br />
Sendet eine <strong>Die</strong>nstanforderung zum Schreiben eines Kommunikationsobjekts (Write-Request)<br />
an einen PCP-Teilnehmer.<br />
Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen Teilnehmer gesendet werden, wenn<br />
dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in Bearbeitung hat (→<br />
IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_WriteRequest( CID, lpRD )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpRD: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index<br />
- Subindex<br />
- Length (Nutzdatenlänge in Bytes)<br />
- Data<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : <strong>Die</strong>nstanforderung erfolgreich gesendet.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Nach erfolgreich gesendeter <strong>Die</strong>nstanforderung überwacht <strong>HLI</strong> die <strong>Die</strong>nstausführung (die<br />
<strong>HLI</strong>-Zustandsmaschine muss hierzu bearbeitet werden), das Element State <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_RW erhält dabei den Wert <strong>HLI</strong>_PCP_SERVICE_PENDING.<br />
Nach der Bearbeitung <strong>des</strong> <strong>Die</strong>nstes erhält das Element State den folgenden Wert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, Daten wurden geschrieben.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisses<br />
nicht erfolgreich beendet. Sofern die zugehörige Ereignis-<br />
Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu erzeugt,<br />
das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-44 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_RW WD;<br />
...<br />
WD.Segment = 4; WD.Position = 2; /* Teilnehmer 4.2 */<br />
WD.Index = 0x5FFA; WD.Subindex = 1;<br />
WD.Length = 2;<br />
IBS_<strong>HLI</strong>_PCPObject_SetInt16(&WD, 1, 0x1234);<br />
if( IBS_<strong>HLI</strong>_PCP_WriteRequest( ISASC1, &WD ) == <strong>HLI</strong>_OKAY )<br />
{<br />
.../* Loop */<br />
IBS_<strong>HLI</strong>_Process(ISASC1); /* Zustands-Maschine */<br />
if( WD.State != <strong>HLI</strong>_PCP_SERVICE_PENDING )<br />
if( WD.State == <strong>HLI</strong>_PCP_SERVICE_OKAY ) ... /* okay */<br />
}<br />
Delphi-Beispiel:<br />
var<br />
WD : T_<strong>HLI</strong>_PCP_RW;<br />
...<br />
WD.Segment := 4; WD.Position := 2; { Teilnehmer 4.2 }<br />
WD.Index := $5FFA; WD.Subindex := 1;<br />
WD.Length := 2;<br />
IBS_<strong>HLI</strong>_PCPObject_SetInt16(@WD, 1, $1234);<br />
if IBS_<strong>HLI</strong>_PCP_WriteRequest( ISASC1, @WD ) = <strong>HLI</strong>_OKAY<br />
then<br />
begin<br />
... { Loop }<br />
IBS_<strong>HLI</strong>_Process(ISASC1); { Zustands-Maschine }<br />
if WD.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if WD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then ... { okay }<br />
end;<br />
Visual-Basic-Beispiel:<br />
Dim WD As T_<strong>HLI</strong>_PCP_RW<br />
...<br />
WD.Segment = 4<br />
WD.Position = 2 ' Teilnehmer 4.2<br />
WD.Index = &H5FFA<br />
WD.Subindex = 1<br />
WD.Length = 2<br />
Call IBS_<strong>HLI</strong>_PCPObject_SetInt16(WD, 1, &H1234)<br />
if IBS_<strong>HLI</strong>_PCP_WriteRequest( ISASC1, WD ) = <strong>HLI</strong>_OKAY<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
then<br />
... ' Loop<br />
Call IBS_<strong>HLI</strong>_Process(ISASC1) ' Zustands-Maschine<br />
if WD.State <strong>HLI</strong>_PCP_SERVICE_PENDING then<br />
if WD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then ... ' okay<br />
End If<br />
5626_de_02 PHOENIX CONTACT C-45
IBS PC SC <strong>HLI</strong> UM<br />
C 10.7<br />
IBS_<strong>HLI</strong>_PCP_WriteService<br />
Aufgabe:<br />
Sendet eine <strong>Die</strong>nstanforderung zum Schreiben eines Kommunikationsobjekts (Write-Request)<br />
an einen PCP-Teilnehmer und wartet auf die Antwort. Eine PCP-<strong>Die</strong>nstanforderung<br />
kann nur dann an einen Teilnehmer gesendet werden, wenn dieser kommunikationsbereit<br />
ist und keinen <strong>Die</strong>nst in Bearbeitung hat (→ IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_WriteService( CID, lpRD, timeout )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpRD: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index<br />
- Sieben<strong>des</strong><br />
- Length (Nutzdatenlänge in Bytes)<br />
- Data<br />
timeout: USIGN16<br />
max. Wartezeit in Millisekunden<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY :<br />
<strong>Die</strong>nst erfolgreich bearbeitet, die Elemente <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_RW Objekts enthalten die gelesenen Daten<br />
<strong>des</strong> Kommunikationsobjekts.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisses<br />
nicht erfolgreich beendet. Sofern die zugehörige Ereignis-<br />
Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu erzeugt,<br />
das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_RW WD;<br />
<strong>HLI</strong>RET ret;<br />
...<br />
WD.Segment = 4; WD.Position = 2;<br />
/* Teilnehmer 4.2 */<br />
WD.Index = 0x5FFA; WD.Subindex = 1;<br />
WD.Length = 2;<br />
IBS_<strong>HLI</strong>_PCPObject_SetInt16(&WD, 1, 0x1234);<br />
ret = IBS_<strong>HLI</strong>_PCP_WriteService( ISASC1, &WD,<br />
1000 );<br />
Delphi-Beispiel:<br />
var<br />
WD : T_<strong>HLI</strong>_PCP_RW;<br />
ret : <strong>HLI</strong>RET;<br />
...<br />
WD.Segment := 4; WD.Position := 2; { Teilnehmer 4.2 }<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-46 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
WD.Index := $5FFA; WD.Subindex := 1;<br />
WD.Length := 2;<br />
IBS_<strong>HLI</strong>_PCPObject_SetInt16(@WD, 1, $1234);<br />
ret := IBS_<strong>HLI</strong>_PCP_WriteService( ISASC1, @WD, 1000 );<br />
Visual-Basic-Beispiel:<br />
Dim WD As T_<strong>HLI</strong>_PCP_RW<br />
Dim ret As Integer<br />
...<br />
WD.Segment = 4<br />
WD.Position = 2 ' Teilnehmer 4.2<br />
WD.Index = &H5FFA<br />
WD.Subindex = 1<br />
WD.Length = 2<br />
Call IBS_<strong>HLI</strong>_PCPObject_SetInt16(WD, 1, &H1234)<br />
ret = IBS_<strong>HLI</strong>_PCP_WriteService( ISASC1, WD, 1000 )<br />
C 10.8<br />
IBS_<strong>HLI</strong>_PCP_RegisterClientObject<br />
Aufgabe:<br />
Registriert ein Client-Objekt für Schreibanforderungen (Write-Indication) eines PCP-Teilnehmers.<br />
Solange kein Client-Objekt registriert ist, beantwortet <strong>HLI</strong> eine Schreibanforderung<br />
eines PCP-Teilnehmers negativ.<br />
Nach einer Registrierung beantwortet <strong>HLI</strong> eine Schreibanforderung <strong>des</strong> PCP-Teilnehmers<br />
positiv, setzt das Element State <strong>des</strong> registrierten Objekts auf<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY und stellt im registrierten Objekt die geschriebenen Daten<br />
zur Verfügung (setzt die Bearbeitung der <strong>HLI</strong>-Zustandsmaschine voraus).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_RegisterClientObject( CID, lpClient )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpClient: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: Registrierung erfolgreich<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Um eingegangene Schreibanforderungen zu erkennen, sollte die Anwendung nach der<br />
Registrierung und nach der Auswertung der erhaltenen Daten einer Schreibanforderung<br />
das Element State <strong>des</strong> Client-Objekts auf einen Wert ungleich<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY setzen, z.B. auf <strong>HLI</strong>_PCP_SERVICE_PENDING.<br />
5626_de_02 PHOENIX CONTACT C-47
IBS PC SC <strong>HLI</strong> UM<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_PCP_RW CD;<br />
<strong>HLI</strong>RET ret;<br />
...<br />
CD.Segment = 3; CD.Position = 1; /* Teilnehmer C.1 */<br />
ret = IBS_<strong>HLI</strong>_PCP_RegisterClientObject( ISASC1, &CD );<br />
CD.State = <strong>HLI</strong>_PCP_SERVICE_PENDING;<br />
... /* <strong>HLI</strong>-Zustandsmaschine bearbeiten */<br />
if( CD.State == <strong>HLI</strong>_PCP_SERVICE_OKAY )<br />
{ /* Schreibanforderung eingegangen */<br />
... /* CD enthält Index, Subindex, Length, Data */<br />
CD.State = <strong>HLI</strong>_PCP_SERVICE_PENDING;<br />
}<br />
Delphi-Beispiel:<br />
var<br />
CD : T_<strong>HLI</strong>_PCP_RW;<br />
ret: <strong>HLI</strong>RET;<br />
...<br />
CD.Segment := 3; CD.Position := 1; { Teilnehmer C.1 }<br />
ret := IBS_<strong>HLI</strong>_PCP_RegisterClientObject( ISASC1,<br />
@CD );<br />
CD.State := <strong>HLI</strong>_PCP_SERVICE_PENDING;<br />
... { <strong>HLI</strong>-Zustandsmaschine bearbeiten }<br />
if CD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
begin { Schreibanforderung eingegangen }<br />
... { CD enthält Index, Subindex, Length, Data }<br />
CD.State := <strong>HLI</strong>_PCP_SERVICE_PENDING;<br />
end;<br />
Visual-Basic-Beispiel:<br />
Dim CD As T_<strong>HLI</strong>_PCP_RW<br />
Dim ret As Integer<br />
...<br />
CD.Segment = 3<br />
CD.Position = 1 ' Teilnehmer C.1<br />
ret = IBS_<strong>HLI</strong>_PCP_RegisterClientObject( ISASC1, CD )<br />
CD.State = <strong>HLI</strong>_PCP_SERVICE_PENDING<br />
... ' <strong>HLI</strong>-Zustandsmaschine bearbeiten<br />
if CD.State = <strong>HLI</strong>_PCP_SERVICE_OKAY then<br />
' Schreibanforderung eingegangen }<br />
... ' CD enthält Index, Subindex, Length, Data<br />
CD.State = <strong>HLI</strong>_PCP_SERVICE_PENDING<br />
End If<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-48 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 10.9<br />
IBS_<strong>HLI</strong>_PCP_StartRequest<br />
Aufgabe:<br />
Sendet eine Programm-Start-<strong>Die</strong>nstanforderung an einen PCP-Teilnehmer (Start-Request).<br />
Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen Teilnehmer gesendet werden,<br />
wenn dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in Bearbeitung hat (→<br />
IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_StartRequest( CID, lpPRG )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpPRG: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_PRG.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index (Index <strong>des</strong> zu startenden Programms)<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: <strong>Die</strong>nstanforderung erfolgreich gesendet.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Nach erfolgreich gesendeter <strong>Die</strong>nstanforderung überwacht <strong>HLI</strong> die <strong>Die</strong>nstausführung.<br />
Hierzu muss die <strong>HLI</strong>-Zustandsmaschine bearbeitet werden!<br />
Während der <strong>Die</strong>nstausführung hat das Element State <strong>des</strong> T_<strong>HLI</strong>_PCP_PRG Objekts<br />
den Wert <strong>HLI</strong>_PCP_SERVICE_PENDING.<br />
Nach der Bearbeitung <strong>des</strong> <strong>Die</strong>nstes erhält <strong>des</strong> Element State folgenden Wert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, Teilnehmer-Programm wurde<br />
gestartet. Element PRG_State <strong>des</strong> T_<strong>HLI</strong>_PCP_PRG<br />
Objekts hat den Wert <strong>HLI</strong>_PCP_PRG_RUNNING.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisses<br />
nicht erfolgreich beendet. Sofern die zugehörige Ereignis-<br />
Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu erzeugt,<br />
das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-49
IBS PC SC <strong>HLI</strong> UM<br />
C 10.10<br />
IBS_<strong>HLI</strong>_PCP_StartService<br />
Aufgabe:<br />
Sendet eine Programm-Start-<strong>Die</strong>nstanforderung an einen PCP-Teilnehmer (Start-Request)<br />
und wartet auf die Antwort.<br />
Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen Teilnehmer gesendet werden, wenn<br />
dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in Bearbeitung hat (→<br />
IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_StartService( CID, lpPRG, timeout )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpPRG: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_PRG.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index (Index <strong>des</strong> zu startenden Programms)<br />
timeout: USIGN16<br />
max. Wartezeit in Millisekunden<br />
Rückgabewert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, Teilnehmer-Programm wurde<br />
gestartet. Element PRG_State <strong>des</strong> T_<strong>HLI</strong>_PCP_PRG<br />
Objekts hat den Wert <strong>HLI</strong>_PCP_PRG_RUNNING.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisses<br />
nicht erfolgreich beendet. Sofern die zugehörige Ereignis-<br />
Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu erzeugt,<br />
das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C 10.11<br />
IBS_<strong>HLI</strong>_PCP_StopRequest<br />
Aufgabe:<br />
Sendet eine Programm-Stopp-<strong>Die</strong>nstanforderung an einen PCP-Teilnehmer (Stopp-Request).<br />
Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen Teilnehmer gesendet werden,<br />
wenn dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in Bearbeitung hat (→<br />
IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_StopRequest( CID, lpPRG )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpPRG: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_PRG.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index (Index <strong>des</strong> zu stoppenden Programms)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-50 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: <strong>Die</strong>nstanforderung erfolgreich gesendet.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Nach erfolgreich gesendeter <strong>Die</strong>nstanforderung überwacht <strong>HLI</strong> die <strong>Die</strong>nstausführung.<br />
Hierzu muss die <strong>HLI</strong>-Zustandsmaschine bearbeitet werden!<br />
Während der <strong>Die</strong>nstausführung hat das Element State <strong>des</strong> T_<strong>HLI</strong>_PCP_PRG Objekts<br />
den Wert <strong>HLI</strong>_PCP_SERVICE_PENDING.<br />
Nach der Bearbeitung <strong>des</strong> <strong>Die</strong>nstes erhält <strong>des</strong> Element State folgenden Wert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, Teilnehmer-<br />
Programm wurde gestoppt. Element PRG_State <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_PRG Objekts hat den Wert<br />
<strong>HLI</strong>_PCP_PRG_STOPPED.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden<br />
Ereignisses nicht erfolgreich beendet. Sofern die zugehörige<br />
Ereignis-Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu<br />
erzeugt, das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
C 10.12<br />
IBS_<strong>HLI</strong>_PCP_StopService<br />
Aufgabe:<br />
Sendet eine Programm-Stopp-<strong>Die</strong>nstanforderung an einen PCP-Teilnehmer (Stopp-Request)<br />
und wartet auf die Antwort. Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen<br />
Teilnehmer gesendet werden, wenn dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in<br />
Bearbeitung hat<br />
(→ IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_StopService( CID, lpPRG, timeout )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpPRG: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_PRG.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index (Index <strong>des</strong> zu stoppenden Programms)<br />
timeout: USIGN16<br />
max. Wartezeit in Millisekunden<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Rückgabewert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, Teilnehmer-Programm wurde<br />
gestoppt. Element PRG_State <strong>des</strong> T_<strong>HLI</strong>_PCP_PRG<br />
Objekts hat den Wert <strong>HLI</strong>_PCP_PRG_STOPPED.<br />
5626_de_02 PHOENIX CONTACT C-51
IBS PC SC <strong>HLI</strong> UM<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisses<br />
nicht erfolgreich beendet. Sofern die zugehörige Ereignis-<br />
Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu erzeugt,<br />
das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C 10.13<br />
IBS_<strong>HLI</strong>_PCP_ResumeRequest<br />
Aufgabe:<br />
Sendet eine Programm-Fortsetzen-<strong>Die</strong>nstanforderung an einen PCP-Teilnehmer (Resume-Request).<br />
Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen Teilnehmer gesendet<br />
werden, wenn dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in Bearbeitung hat<br />
(→ IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_ResumeRequest( CID, lpPRG )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpPRG: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_PRG.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index (Index <strong>des</strong> zu fortzusetzenden Programms)<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : <strong>Die</strong>nstanforderung erfolgreich gesendet.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Nach erfolgreich gesendeter <strong>Die</strong>nstanforderung überwacht <strong>HLI</strong> die <strong>Die</strong>nstausführung.<br />
Hierzu muss die <strong>HLI</strong>-Zustandsmaschine bearbeitet werden!<br />
Während der <strong>Die</strong>nstausführung hat das Element State <strong>des</strong> T_<strong>HLI</strong>_PCP_PRG Objekts<br />
den Wert <strong>HLI</strong>_PCP_SERVICE_PENDING.<br />
Nach der Bearbeitung <strong>des</strong> <strong>Die</strong>nstes erhält <strong>des</strong> Element State folgenden Wert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, Teilnehmer-<br />
Programm wurde fortgesetzt. Element PRG_State <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_PRG Objekts hat den Wert<br />
<strong>HLI</strong>_PCP_PRG_RUNNING.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisses<br />
nicht erfolgreich beendet. Sofern die zugehörige Ereignis-<br />
Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu erzeugt,<br />
das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-52 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 10.14<br />
IBS_<strong>HLI</strong>_PCP_ResumeService<br />
Aufgabe:<br />
Sendet eine Programm-Fortsetzen-<strong>Die</strong>nstanforderung an einen PCP-Teilnehmer (Resume-Request)<br />
und wartet auf die Antwort. Eine PCP-<strong>Die</strong>nstanforderung kann nur dann<br />
an einen Teilnehmer gesendet werden, wenn dieser kommunikationsbereit ist und keinen<br />
<strong>Die</strong>nst in Bearbeitung hat (→ IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_ResumeService( CID, lpPRG, timeout )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpPRG: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_PRG.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index (Index <strong>des</strong> fortzusetzenden Programms)<br />
timeout: USIGN16 max. Wartezeit in Millisekunden<br />
Rückgabewert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, Teilnehmer-Programm wurde<br />
fortgesetzt. Element PRG_State <strong>des</strong> T_<strong>HLI</strong>_PCP_PRG<br />
Objekts hat den Wert <strong>HLI</strong>_PCP_PRG_RUNNING.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisses<br />
nicht erfolgreich beendet. Sofern die zugehörige Ereignis-<br />
Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu erzeugt,<br />
das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C 10.15<br />
IBS_<strong>HLI</strong>_PCP_ResetRequest<br />
Aufgabe:<br />
Sendet eine Programm-Rücksetzen-<strong>Die</strong>nstanforderung an einen PCP-Teilnehmer (Reset-<br />
Request). Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen Teilnehmer gesendet<br />
werden, wenn dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in Bearbeitung hat<br />
(→ IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_ResetRequest( CID, lpPRG )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpPRG: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_PRG.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index (Index <strong>des</strong> rückzusetzenden Programms)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-53
IBS PC SC <strong>HLI</strong> UM<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: <strong>Die</strong>nstanforderung erfolgreich gesendet.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Co<strong>des</strong>: Anwender-Fehler-Ereignis (→ Ereignis-Co<strong>des</strong>)<br />
Anmerkung:<br />
Nach erfolgreich gesendeter <strong>Die</strong>nstanforderung überwacht <strong>HLI</strong> die <strong>Die</strong>nstausführung.<br />
Hierzu muss die <strong>HLI</strong>-Zustandsmaschine bearbeitet werden!<br />
Während der <strong>Die</strong>nstausführung hat das Element State <strong>des</strong> T_<strong>HLI</strong>_PCP_PRG Objekts<br />
den Wert <strong>HLI</strong>_PCP_SERVICE_PENDING.<br />
Nach der Bearbeitung <strong>des</strong> <strong>Die</strong>nstes erhält <strong>des</strong> Element State folgenden Wert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, Teilnehmer-<br />
Programm wurde rückgesetzt. Element PRG_State <strong>des</strong><br />
T_<strong>HLI</strong>_PCP_PRG Objekts hat den Wert<br />
<strong>HLI</strong>_PCP_PRG_RESET.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden<br />
Ereignisses nicht erfolgreich beendet. Sofern die zugehörige<br />
Ereignis-Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu<br />
erzeugt, das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
C 10.16<br />
IBS_<strong>HLI</strong>_PCP_ResetService<br />
Aufgabe:<br />
Sendet eine Programm-Rücksetzen-<strong>Die</strong>nstanforderung an einen PCP-Teilnehmer (Reset-<br />
Request) und wartet auf die Antwort. Eine PCP-<strong>Die</strong>nstanforderung kann nur dann an einen<br />
Teilnehmer gesendet werden, wenn dieser kommunikationsbereit ist und keinen <strong>Die</strong>nst in<br />
Bearbeitung hat<br />
(→ IBS_<strong>HLI</strong>_PCP_DeviceState()).<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_ResetService( CID, lpPRG, timeout )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
lpPRG: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_PRG.<br />
Folgende Elemente müssen von der Anwendung initialisiert werden:<br />
- Segment (log. Teilnehmer-Nummer)<br />
- Position (log. Teilnehmer-Nummer)<br />
- Index (Index <strong>des</strong> rückzusetzenden Programms)<br />
timeout: USIGN16<br />
max. Wartezeit in Millisekunden<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-54 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Rückgabewert:<br />
<strong>HLI</strong>_PCP_SERVICE_OKAY:<br />
<strong>Die</strong>nst erfolgreich bearbeitet, Teilnehmer-Programm wurde<br />
rückgesetzt. Element PRG_State <strong>des</strong> T_<strong>HLI</strong>_PCP_PRG<br />
Objekts hat den Wert <strong>HLI</strong>_PCP_PRG_RESET.<br />
Ereignis-Code:<br />
<strong>Die</strong>nst wurde aufgrund <strong>des</strong> entsprechenden Ereignisses<br />
nicht erfolgreich beendet. Sofern die zugehörige Ereignis-<br />
Gruppe nicht deaktiviert ist, hat <strong>HLI</strong> ein Ereignis hierzu erzeugt,<br />
das nähere Informationen zum Fehler beinhaltet<br />
(→ Ereignis-Co<strong>des</strong>).<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
C 11<br />
Zugriff auf PCP-Objektdaten<br />
Bei den Schreib- und Lesediensten auf PCP-Kommunikationsobjekte wird von <strong>HLI</strong> die<br />
Übergabe von Objekten <strong>des</strong> Typs T_<strong>HLI</strong>_PCP_RW durch die Anwendung erwartet.<br />
<strong>Die</strong> Daten <strong>des</strong> Kommunikationsobjekts (Nutzdaten) werden im Element Data <strong>des</strong> übergebenen<br />
Objekts erwartet bzw. abgelegt. Da das Element Data ein Byte-Array ist, werden<br />
die Nutzdaten roh, d.h. ohne Formatierung, im MOTOROLA-Format erwartet bzw. abgelegt.<br />
Zur Erzeugung bzw. zum formatierten Zugriff auf diese Daten stellt <strong>HLI</strong> die folgenden<br />
Funktionen bereit.<br />
C 11.1<br />
IBS_<strong>HLI</strong>_PCP_LoadObjectByName<br />
Liest einen Datensatz für ein Kommunikationsobjekt aus einer Datei, die unter CMD G4<br />
(Geräte-Parametrierung) exportiert wurde. Der Datensatz wird durch seinen Namen identifiziert.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_LoadObjectByName( Filename, VarName, lpPCPObj )<br />
Filename: Name (inkl. Pfad) der Datensatz-Datei (üblicherweise *.DSC).<br />
VarName:<br />
Name <strong>des</strong> Kommunikationsobjekts, <strong>des</strong>sen Datensatz gelesen<br />
werden soll.<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt wird mit den gelesenen Daten initialisiert.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : Ausführung erfolgreich.<br />
<strong>HLI</strong>_PCP_SET_NOT_FOUND: <strong>Die</strong> angegebene Datei wurde nicht<br />
gefunden, oder der angegebene Datensatz wurde nicht gefunden.<br />
<strong>HLI</strong>_PCP_SET_INVALID: Ungültige Daten in der Datei<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-55
IBS PC SC <strong>HLI</strong> UM<br />
C 11.2<br />
IBS_<strong>HLI</strong>_PCP_LoadObjectByIndex<br />
Liest einen Datensatz für ein Kommunikationsobjekt aus einer Datei, die unter CMD G4<br />
(Geräte-Parametrierung) exportiert wurde. Der Datensatz wird durch den Index identifiziert.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_LoadObjectByName( Filename, VarName, lpPCPObj )<br />
Filename: Name (inkl. Pfad) der Datensatz-Datei (üblicherweise *.DSC).<br />
Index:<br />
Index <strong>des</strong> Kommunikationsobjekts, <strong>des</strong>sen Datensatz gelesen<br />
werden soll.<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt wird mit den gelesenen Daten initialisiert.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : Ausführung erfolgreich.<br />
<strong>HLI</strong>_PCP_SET_NOT_FOUND: <strong>Die</strong> angegebene Datei wurde nicht<br />
gefunden, oder der angegebene Datensatz wurde nicht gefunden.<br />
<strong>HLI</strong>_PCP_SET_INVALID: Ungültige Daten in der Datei<br />
C 11.3<br />
IBS_<strong>HLI</strong>_PCP_LoadObjectByEntry<br />
Liest einen Datensatz für ein Kommunikationsobjekt aus einer Datei, die unter CMD G4<br />
(Geräte-Parametrierung) exportiert wurde. Der Datensatz wird durch die Eintrags-Nummer<br />
in der Datei identifiziert.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_LoadObjectByEntry( Filename, Entry, lpPCPObj )<br />
Filename: Name (inkl. Pfad) der Datensatz-Datei (üblicherweise *.DSC).<br />
Entry:<br />
Eintrags-Nummer <strong>des</strong> Kommunikationsobjekts, <strong>des</strong>sen Datensatz gelesen<br />
werden soll, beginnend mit 1.<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt wird mit den gelesenen Daten initialisiert.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: Ausführung erfolgreich.<br />
<strong>HLI</strong>_PCP_SET_NOT_FOUND: <strong>Die</strong> angegebene Datei wurde nicht gefunden, oder der<br />
angegebene Datensatz wurde nicht gefunden.<br />
<strong>HLI</strong>_PCP_SET_INVALID: Ungültige Daten in der Datei<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C 11.4<br />
IBS_<strong>HLI</strong>_PCP_InitObject<br />
Initialisiert ein Objekt <strong>des</strong> Typs T_<strong>HLI</strong>_PCP_RW durch Vorbesetzen mit Daten für ein zu<br />
schreiben<strong>des</strong> Kommunikationsobjekt.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCP_InitObject( lpPCPObj, Segment, Position, Index, Subindex,DataType,<br />
nElements, lpData )<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW. Das referenzierte Objekt wird mit<br />
den übergebenen Daten initialisiert.<br />
C-56 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Segment: Segment (log. Teilnehmernummer) <strong>des</strong> PCP-Teilnehmers, mit dem kommuniziert<br />
werden soll.<br />
Position: Position (log. Teilnehmernummer) <strong>des</strong> PCP-Teilnehmers, mit dem kommuniziert<br />
werden soll.<br />
Index: Index <strong>des</strong> zu schreibenden Kommunikations-Objekts.<br />
Subindex: Subindex <strong>des</strong> zu schreibenden Kommunikations-Objekts.<br />
DataType: Typ der zu initialisierenden Daten. Folgende Datenformate sind definiert:<br />
<strong>HLI</strong>_POT_BYTE Octett-String (Byte-Feld)<br />
<strong>HLI</strong>_POT_INT16 INT16-Array (Wort-Feld)<br />
<strong>HLI</strong>_POT_INT32 INT32-Array (Doppelwort- Feld)<br />
<strong>HLI</strong>_POT_FLOAT Float-Array (Feld von 4-Byte-floating point)<br />
<strong>HLI</strong>_POT_STRING Null-terminierter String (Zeichen-Array)<br />
nElements: Anzahl der übergebenen Elemente vom Typ DataType.<br />
<strong>Die</strong> Gesamtgröße <strong>des</strong> Datenfelds darf 256 Bytes nicht<br />
überschreiten. <strong>Die</strong>ser Wert wird bei Strings (<strong>HLI</strong>_POT_STRING) ignoriert.<br />
lpData: Referenz (Zeiger) auf die Nutzdaten, die im unter DataType<br />
angegebenen Format (Standard-INTEL-Format) vorliegen müssen.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: Ausführung erfolgreich.<br />
<strong>HLI</strong>_EVENT_INVALID_PARA :<br />
Ungültige Daten übergeben (z.B. Feldüberschreitung, NULL-Referenzen).<br />
C 11.5<br />
IBS_<strong>HLI</strong>_PCPObject_SetInt16<br />
Schreibt einen INT16-Wert in das Nutzdatenfeld eines T_<strong>HLI</strong>_PCP_RW Objekts.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCPObject_SetInt16( lpPCPObj, Offset, Value )<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt wird mit dem übergebenen Wert initialisiert.<br />
Offset: USIGN16<br />
Zielposition im Datenfeld (Byte-Offset).<br />
Gültiger Bereich: 0 bis 254<br />
Value: USIGN16<br />
Zu schreibender Wert (Standard-INTEL-Format).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : Ausführung erfolgreich.<br />
<strong>HLI</strong>_EVENT_INVALID_PARA :<br />
Ungültige Daten übergeben (z.B. Feldüberschreitung, NULL-Referenzen).<br />
5626_de_02 PHOENIX CONTACT C-57
IBS PC SC <strong>HLI</strong> UM<br />
C 11.6<br />
IBS_<strong>HLI</strong>_PCPObject_SetInt32<br />
Schreibt einen INT32-Wert in das Nutzdatenfeld eines T_<strong>HLI</strong>_PCP_RW Objekts.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCPObject_SetInt32( lpPCPObj, Offset, Value )<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt wird mit dem übergebenen Wert initialisiert.<br />
Offset: USIGN16<br />
Zielposition im Datenfeld (Byte-Offset).<br />
Gültiger Bereich: 0 bis 252<br />
Value: USIGN32<br />
Zu schreibender Wert (Standard-INTEL-Format).<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : Ausführung erfolgreich.<br />
<strong>HLI</strong>_EVENT_INVALID_PARA:<br />
Ungültige Daten übergeben (z.B. Feldüberschreitung, NULL-Referenzen).<br />
C 11.7<br />
IBS_<strong>HLI</strong>_PCPObject_SetFloat<br />
Schreibt einen FLOAT-Wert (4-Byte-floating-point) in das Nutzdatenfeld eines<br />
T_<strong>HLI</strong>_PCP_RW Objekts.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCPObject_SetFloat( lpPCPObj, Offset, Value )<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt wird mit dem übergebenen Wert initialisiert.<br />
Offset: USIGN16<br />
Zielposition im Datenfeld (Byte-Offset).<br />
Gültiger Bereich: 0 bis 252<br />
Value: FLOAT<br />
Zu schreibender Wert (Standard-INTEL-Format).<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: Ausführung erfolgreich.<br />
<strong>HLI</strong>_EVENT_INVALID_PARA :<br />
Ungültige Daten übergeben (z.B. Feldüberschreitung, NULL-Referenzen).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-58 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 11.8<br />
IBS_<strong>HLI</strong>_PCPObject_SetString<br />
Schreibt einen Null-terminierten String in das Nutzdatenfeld eines T_<strong>HLI</strong>_PCP_RW Objekts.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCPObject_SetString( lpPCPObj, Offset, lpString )<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt wird mit dem übergebenen Wert initialisiert.<br />
Offset: USIGN16<br />
Position <strong>des</strong> zu lesenden Werts im Datenfeld (Byte-Offset).<br />
Gültiger Bereich: 0 bis (255-String-Länge)<br />
lpString: Referenz (Zeiger) auf die Null-terminierte Zeichenkette, max. Länge<br />
ist (255-Offset).<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: Ausführung erfolgreich.<br />
<strong>HLI</strong>_EVENT_INVALID_PARA :<br />
Ungültige Daten übergeben (z.B. Feldüberschreitung, NULL-Referenz).<br />
C 11.9<br />
IBS_<strong>HLI</strong>_PCPObject_GetInt16<br />
Liest einen INT16-Wert aus dem Nutzdatenfeld eines T_<strong>HLI</strong>_PCP_RW Objekts.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCPObject_GetInt16( lpPCPObj, Offset, lpValue )<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt enthält die Nutzdaten.<br />
Offset: USIGN16<br />
Position <strong>des</strong> zu lesenden Werts im Datenfeld (Byte-Offset).<br />
Gültiger Bereich: 0 bis 254<br />
lpValue: Referenz (Zeiger) auf eine anwendungseigene Variable (USIGN16), die<br />
nach Aufruf den gelesenen Wert enthält.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY : Ausführung erfolgreich.<br />
<strong>HLI</strong>_EVENT_INVALID_PARA :<br />
Ungültige Daten übergeben (z.B. Feldüberschreitung, NULL-Referenzen).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C 11.10<br />
IBS_<strong>HLI</strong>_PCPObject_GetInt32<br />
Liest einen INT32-Wert aus dem Nutzdatenfeld eines<br />
T_<strong>HLI</strong>_PCP_RW Objekts.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCPObject_GetInt32( lpPCPObj, Offset, lpValue )<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt enthält die Nutzdaten.<br />
5626_de_02 PHOENIX CONTACT C-59
IBS PC SC <strong>HLI</strong> UM<br />
Offset:<br />
USIGN16<br />
Position <strong>des</strong> zu lesenden Werts im Datenfeld (Byte-Offset).<br />
Gültiger Bereich: 0 bis 252<br />
lpValue: Referenz (Zeiger) auf anwendungseigene Variable (USIGN32),<br />
die nach Aufruf den gelesenen Wert enthält.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: Ausführung erfolgreich.<br />
<strong>HLI</strong>_EVENT_INVALID_PARA :<br />
Ungültige Daten übergeben (z.B. Feldüberschreitung, NULL-Referenzen).<br />
C 11.11<br />
IBS_<strong>HLI</strong>_PCPObject_GetFloat<br />
Liest einen FLOAT-Wert (4-Byte-floating-point) aus dem Nutzdatenfeld eines<br />
T_<strong>HLI</strong>_PCP_RW Objekts.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCPObject_GetFloat( lpPCPObj, Offset, lpValue )<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt enthält die Nutzdaten.<br />
Offset: USIGN16<br />
Position <strong>des</strong> zu lesenden Werts im Datenfeld (Byte-Offset).<br />
Gültiger Bereich: 0 bis 252<br />
lpValue: Referenz (Zeiger) auf anwendungseigene Variable (FLOAT, die nach Aufruf<br />
den gelesenen Wert enthält.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: Ausführung erfolgreich.<br />
<strong>HLI</strong>_EVENT_INVALID_PARA :<br />
Ungültige Daten übergeben (z.B. Feldüberschreitung, NULL-Referenzen).<br />
C 11.12<br />
IBS_<strong>HLI</strong>_PCPObject_GetString<br />
Liest einen Null-terminierten String aus dem Nutzdatenfeld eines T_<strong>HLI</strong>_PCP_RW<br />
Objekts.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_PCPObject_GetString( lpPCPObj, Offset, lpString, Anzahl der zu lesenden Zeichen)<br />
lpPCPObj: Referenz (Zeiger) auf T_<strong>HLI</strong>_PCP_RW.<br />
Das referenzierte Objekt enthält die Nutzdaten.<br />
Offset: USIGN16<br />
Position <strong>des</strong> zu lesenden String im Datenfeld (Byte-Offset).<br />
lpString: Referenz (Zeiger) auf den Zielbereich.<br />
Rückgabewert:<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
<strong>HLI</strong>_OKAY: Ausführung erfolgreich.<br />
<strong>HLI</strong>_EVENT_INVALID_PARA :<br />
Ungültige Daten übergeben (z.B. Feldüberschreitung, NULL-Referenz).<br />
C-60 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 12<br />
INTERBUS-<strong>Die</strong>nste<br />
C 12.1<br />
IBS_<strong>HLI</strong>_StartBus<br />
Aufgabe:<br />
Startet den Datentransfer auf dem INTERBUS.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_StartBus ( CID )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis hat zur negativen Beendigung der Funktion<br />
geführt (→ Ereignis-Co<strong>des</strong>).<br />
C 12.2<br />
IBS_<strong>HLI</strong>_StopBus<br />
Aufgabe:<br />
Stoppt den Datentransfer auf dem INTERBUS. Der Controller fährt keine Datentransferzyklen,<br />
die Zustände der Teilnehmer-Ausgänge bleiben aber erhalten.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_StopBus ( CID )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis hat zur negativen Beendigung der Funktion<br />
geführt (→ Ereignis-Co<strong>des</strong>).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C 12.3<br />
IBS_<strong>HLI</strong>_AlarmStop<br />
Aufgabe:<br />
Stoppt den Datentransfer auf dem INTERBUS (Alarm-Stopp).<br />
Der Controller fährt keine Datentransferzyklen, die Ausgänge der Teilnehmer werden zurückgesetzt.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_AlarmStop ( CID )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
5626_de_02 PHOENIX CONTACT C-61
IBS PC SC <strong>HLI</strong> UM<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis hat zur negativen<br />
Beendigung der Funktion geführt (→ Ereignis-Co<strong>des</strong>).<br />
C 12.4<br />
IBS_<strong>HLI</strong>_SwitchRemoteBus<br />
Aufgabe:<br />
Schaltet ein Fernbus-Segment ab bzw. zu.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_ SwitchRemoteBus ( CID, Segment, Switch_code )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Segment: USIGN16<br />
Logische Nummer <strong>des</strong> Segments.<br />
Switch_code: USIGN16<br />
Art <strong>des</strong> Schaltens. Folgende Konstanten sind definiert:<br />
<strong>HLI</strong>_SEGMENT_OFF: Abschalten <strong>des</strong> Segments<br />
<strong>HLI</strong>_SEGMENT_ON: Zuschalten <strong>des</strong> Segments<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis hat zur negativen Beendigung der Funktion<br />
geführt (→ Ereignis-Co<strong>des</strong>).<br />
C 12.5<br />
IBS_<strong>HLI</strong>_SwitchLocalBus<br />
Aufgabe:<br />
Schaltet ein Lokalbus-Segment ab bzw. zu.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_ SwitchLocalBus ( CID, Segment, Switch_code )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Segment: USIGN16<br />
Logische Nummer <strong>des</strong> zugehörigen Fernbus-Segments.<br />
Switch_code: USIGN16<br />
Art <strong>des</strong> Schaltens. Folgende Konstanten sind definiert:<br />
<strong>HLI</strong>_SEGMENT_OFF: Abschalten <strong>des</strong> Segments<br />
<strong>HLI</strong>_SEGMENT_ON: Zuschalten <strong>des</strong> Segments<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-62 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis hat zur negativen Beendigung der Funktion<br />
geführt (→ Ereignis-Co<strong>des</strong>).<br />
C 12.6<br />
IBS_<strong>HLI</strong>_SwitchGroup<br />
Aufgabe:<br />
Schaltet eine Gruppe bzw. Alternative ab bzw. zu.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_ SwitchLocalBus ( CID, Group, Alternative, Switch_code )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Group: USIGN16<br />
Logische Nummer der Gruppe.<br />
Alternative: USIGN16<br />
Logische Nummer der Alternative. Für Gruppen ist der Wert entweder auf 0<br />
oder auf 255 zu setzen.<br />
Switch_code: USIGN16<br />
Art <strong>des</strong> Schaltens. Folgende Konstanten sind definiert:<br />
<strong>HLI</strong>_GROUP_OFF: Abschalten der Gruppe / Alternative<br />
<strong>HLI</strong>_GROUP_ON: Zuschalten der Gruppe / Alternative<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung;<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis hat zur negativen Beendigung der Funktion<br />
geführt (→ Ereignis-Co<strong>des</strong>).<br />
C-Beispiel:<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* Alternative 4.1 abschalten ... */<br />
if( IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 1, <strong>HLI</strong>_GROUP_OFF)<br />
== <strong>HLI</strong>_OKAY )<br />
/* Alternative 4.2 zuschalten ... */<br />
ret = IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 2,<br />
<strong>HLI</strong>_GROUP_ON );<br />
Delphi-Beispiel:<br />
var<br />
ret : <strong>HLI</strong>RET;<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
{ Alternative 4.1 abschalten ... }<br />
if IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 1, <strong>HLI</strong>_GROUP_OFF) =<br />
<strong>HLI</strong>_OKAY then<br />
{ Alternative 4.2 zuschalten ... }<br />
ret := IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 2,<br />
<strong>HLI</strong>_GROUP_ON );<br />
5626_de_02 PHOENIX CONTACT C-63
IBS PC SC <strong>HLI</strong> UM<br />
Visual-Basic-Beispiel:<br />
Dim ret As Integer<br />
...<br />
' Alternative 4.1 abschalten ... }<br />
if IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 1, <strong>HLI</strong>_GROUP_OFF) =<br />
<strong>HLI</strong>_OKAY then<br />
' Alternative 4.2 zuschalten ...<br />
ret = IBS_<strong>HLI</strong>_SwitchGroup( ISASC1, 4, 2, <strong>HLI</strong>_GROUP_ON )<br />
C 13<br />
C 13.1<br />
Host-Kommunikations-Funktionen<br />
(Nur Co-Prozessor-Version)<br />
IBS_<strong>HLI</strong>_SendMessageToHost<br />
Aufgabe:<br />
Sendet eine Nachricht an das Host-System.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_SendMessageToHost( lpMsg, timeout )<br />
lpMsg: Zeiger auf T_<strong>HLI</strong>_MSG<br />
Das anwendungseigene Objekt enthält die zu sendende Nachricht.<br />
timeout: USIGN16<br />
Zeit in ms, innerhalb derer versucht wird, die Nachricht zu senden.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung;<br />
<strong>HLI</strong>_SEND_MESSAGE_TIMEOUT: Nachricht konnte innerhalb der angegebenen Zeit<br />
nicht gesendet werden, da der Device-Driver keine freie Mailbox mehr hat.<br />
Anderer: Allgemeiner Fehler <strong>des</strong> Device-Drivers<br />
Weitere Informationen siehe Treiber-Referenzhandbuch, IBS PC SC SWD UM, Artikel-<br />
Nr. 2745127.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-Beispiel:<br />
T_<strong>HLI</strong>_MSG AppMsg;<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* Message erstellen */<br />
AppMsg.Code = 0x1001 ; /* anwendungs-definiert */<br />
AppMsg.nParms = 2 ; /* nachrichtenabhängig */<br />
AppMsg.Parms[0] = 0x0001 ; /* 1.Parameter */<br />
AppMsg.Parms[1] = 0x0002 ; /* 2.Parameter */<br />
/* Senden, Timeout = 200 ms */<br />
ret = IBS_<strong>HLI</strong>_SendMessageToHost(&AppMsg, 200);<br />
C-64 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 13.2<br />
IBS_<strong>HLI</strong>_ReceiveMessageFromHost<br />
Aufgabe:<br />
Liest eine empfangene Nachricht vom Host-System.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_HOST_ReceiveMessageFromHost( lpMsg )<br />
lpMsg: Zeiger auf T_<strong>HLI</strong>_MSG<br />
Das anwendungseigene Objekt enthält nach erfolgreichem Lesen die empfangene<br />
Nachricht.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, empfangene Nachricht wurde gelesen;<br />
<strong>HLI</strong>_NO_MESSAGE_AVAILABLE: Keine Nachricht vom Host empfangen.<br />
Anderer: Allgemeiner Fehler <strong>des</strong> Device-Drivers<br />
Weitere Informationen siehe Treiber-Referenzhandbuch, IBS PC SC SWD UM, Artikel-<br />
Nr. 2745127.<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_MSG AppMsg;<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* Message empfangen ? */<br />
ret = IBS_<strong>HLI</strong>_ReceiveMessageFromHost(&AppMsg);<br />
if( ret == <strong>HLI</strong>_OKAY )<br />
/* ja, auswerten... */<br />
C 13.3<br />
IBS_<strong>HLI</strong>_ReadDataFromHost<br />
Aufgabe:<br />
Liest Daten aus dem Koppelspeicher, auf den das Host-System schreibenden Zugriff hat.<br />
Der Koppelspeicher beträgt 5120 Bytes.<br />
Aufruf<br />
IBS_<strong>HLI</strong>_ReadDataFromHost( vonOffset, nBytes, lpDestination )<br />
vonOffset: USIGN16<br />
Offset innerhalb <strong>des</strong> Koppelspeichers, ab dem gelesen werden soll.<br />
nBytes: USIGN16<br />
Anzahl zu lesender Bytes.<br />
slpDestination: Zeiger auf USIGN8<br />
Zielspeicherbereich der Anwendung für die zu kopierenden Daten.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, Daten wurden kopiert.<br />
<strong>HLI</strong>_<strong>HLI</strong>_INVALID_HOST_DATA_ACCESS: Ungültige Angaben für Offset und/oder<br />
Anzahl der Bytes. (Offset + Anzahl der Bytes) darf die Koppelspeichergröße nicht überschreiten.<br />
Anderer: Allgemeiner Fehler <strong>des</strong> Device-Drivers.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-65
IBS PC SC <strong>HLI</strong> UM<br />
Weitere Informationen siehe Treiber-Referenzhandbuch, IBS PC SC SWD UM,<br />
Artikel-Nr. 2745127.<br />
C-Beispiel:<br />
char<br />
HostData[DATA_AREA_SIZE];<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* Datenbereich ab Offset 100 lesen */<br />
ret = IBS_<strong>HLI</strong>_ReadDataFromHost(100, DATA_AREA_SIZE-100, HostData);<br />
if( ret == <strong>HLI</strong>_OKAY )<br />
/* auswerten... */<br />
C 13.4<br />
IBS_<strong>HLI</strong>_WriteDataToHost<br />
Aufgabe:<br />
Schreibt Daten in den Koppelspeicher, auf den das Host-System lesenden Zugriff hat. Der<br />
Koppelspeicher beträgt 5120 Bytes.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_WriteDataToHost( zuOffset, nBytes, lpSource )<br />
zuOffset: USIGN16<br />
Offset innerhalb <strong>des</strong> Koppelspeichers, ab dem geschrieben werden soll.<br />
nBytes: USIGN16<br />
Anzahl zu schreibender Bytes.<br />
lpSource: Zeiger auf USIGN8<br />
Quellspeicherbereich der Anwendung für die zu schreibenden Daten.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, Daten wurden kopiert.<br />
<strong>HLI</strong>_INVALID_HOST_DATA_ACCESS: Ungültige Angaben für Offset und/oder Anzahl<br />
der Bytes. (Offset + Anzahl der Bytes) darf die Koppelspeichergröße nicht überschreiten.<br />
Anderer: Allgemeiner Fehler <strong>des</strong> Device-Drivers.<br />
Weitere Informationen siehe Treiber-Referenzhandbuch, IBS PC SC SWD UM,<br />
Artikel-Nr. 2745127.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-Beispiel:<br />
char<br />
COPData[32];<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* 32 Bytes ab Offset 100 beschreiben */<br />
ret = IBS_<strong>HLI</strong>_WriteDataToHost(100, 32, COPData);<br />
C-66 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
C 14<br />
Kommunikation mit dem Co-Prozessor<br />
(Nur Win32 -Version unter Windows NT)<br />
C 14.1<br />
IBS_<strong>HLI</strong>_SendMessageToCop<br />
Aufgabe:<br />
Sendet eine Nachricht an den Co-Prozessor.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_SendMessageToCop( CID, lpMsg, timeout )<br />
CID: USIGN16<br />
ID der Anschaltbaugruppe<br />
lpMsg: Zeiger auf T_<strong>HLI</strong>_MSG<br />
Das anwendungseigene Objekt enthält die zu sendende Nachricht.<br />
timeout: USIGN16<br />
Zeit in ms, innerhalb derer versucht wird, die Nachricht zu senden.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung;<br />
<strong>HLI</strong>_SEND_MESSAGE_TIMEOUT: Nachricht konnte innerhalb der angegebenen Zeit<br />
nicht gesendet werden, da der Device-Driver keine freie Mailbox mehr hat.<br />
Anderer: Allgemeiner Fehler <strong>des</strong> Device-Drivers.<br />
Weitere Informationen siehe Treiber-Referenzhandbuch, IBS PC SC SWD UM,<br />
Artikel-Nr. 2745127.<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_MSG AppMsg;<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* Message erstellen */<br />
AppMsg.Code = 0x1001 ; /* anwendungs-definiert */<br />
AppMsg.nParms = 2 ; /* nachrichtenabhängig */<br />
AppMsg.Parms[0] = 0x0001 ; /* 1.Parameter */<br />
AppMsg.Parms[1] = 0x0002 ; /* 2.Parameter */<br />
/* Senden, Timeout = 200 ms */<br />
ret = IBS_<strong>HLI</strong>_SendMessageToCop(&AppMsg, 200);<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-67
IBS PC SC <strong>HLI</strong> UM<br />
C 14.2<br />
IBS_<strong>HLI</strong>_ReceiveMessageFromCop<br />
Aufgabe:<br />
Liest eine empfangene Nachricht vom Co-Prozessor.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_ReceiveMessageFromCop( CID, lpMsg )<br />
CID: USIGN16<br />
ID der Anschaltbaugruppe<br />
lpMsg: Zeiger auf T_<strong>HLI</strong>_MSG<br />
Das anwendungseigene Objekt enthält nach erfolgreichem Lesen die empfangene<br />
Nachricht.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, empfangene Nachricht wurde gelesen;<br />
<strong>HLI</strong>_NO_MESSAGE_AVAILABLE: Keine Nachricht vom Host empfangen.<br />
Anderer: Allgemeiner Fehler <strong>des</strong> Device-Drivers.<br />
Weitere Informationen siehe Treiber-Referenzhandbuch, IBS PC SC SWD UM,<br />
Artikel-Nr. 2745127.<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_MSG AppMsg;<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* Message empfangen ? */<br />
ret = IBS_<strong>HLI</strong>_ReceiveMessageFromCop(&AppMsg);<br />
if( ret == <strong>HLI</strong>_OKAY )<br />
/* ja, auswerten... */<br />
C 14.3<br />
IBS_<strong>HLI</strong>_WaitForMessageFromCop<br />
Aufgabe:<br />
Wartet auf eine Nachricht vom Co-Prozessor. Der aufrufende Thread wird in den Sleep-<br />
Zustand versetzt bis eine Nachricht empfangen wird oder die Timeout-Zeit abläuft.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_WaitForMessageFromCop( CID, lpMsg, timeout )<br />
CID: USIGN16<br />
ID der Anschaltbaugruppe<br />
lpMsg: Zeiger auf T_<strong>HLI</strong>_MSG<br />
Das anwendungseigene Objekt enthält nach erfolgreichem Lesen die empfangene<br />
Nachricht.<br />
timeout: USIGN16<br />
max. Wartezeit in ms.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-68 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, empfangene Nachricht wurde gelesen;<br />
<strong>HLI</strong>_NO_MESSAGE_AVAILABLE: Keine Nachricht vom Host empfangen.<br />
Anderer: Allgemeiner Fehler <strong>des</strong> Device-Drivers.<br />
Weitere Informationen siehe Treiber-Referenzhandbuch, IBS PC SC SWD UM,<br />
Artikel-Nr. 2745127.<br />
C-Beispiel:<br />
T_<strong>HLI</strong>_MSG AppMsg;<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* warten... */<br />
ret = IBS_<strong>HLI</strong>_WaitForMessageFromCop(&AppMsg);<br />
/* Message empfangen ? */<br />
if( ret == <strong>HLI</strong>_OKAY )<br />
/* ja, auswerten... */<br />
C 14.4<br />
IBS_<strong>HLI</strong>_ReadDataFromCop<br />
Aufgabe:<br />
Liest Daten aus dem Koppelspeicher, auf den der Co-Prozessor schreibenden Zugriff hat.<br />
Der Koppelspeicher beträgt 5120 Bytes.<br />
Aufruf<br />
IBS_<strong>HLI</strong>_ReadDataFromCop( CID, vonOffset, nBytes, lpDestination )<br />
CID: USIGN16<br />
ID der Anschaltbaugruppe<br />
vonOffset: USIGN16<br />
Offset innerhalb <strong>des</strong> Koppelspeichers, ab dem gelesen werden soll.<br />
nBytes: USIGN16<br />
Anzahl zu lesender Bytes.<br />
slpDestination: Zeiger auf USIGN8<br />
Zielspeicherbereich der Anwendung für die zu kopierenden Daten.<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, Daten wurden kopiert.<br />
<strong>HLI</strong>_<strong>HLI</strong>_INVALID_HOST_DATA_ACCESS: Ungültige Angaben für Offset und/oder<br />
Anzahl der Bytes. (Offset + Anzahl der Bytes) darf die Koppelspeichergröße nicht überschreiten.<br />
Anderer: Allgemeiner Fehler <strong>des</strong> Device-Drivers.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-69
IBS PC SC <strong>HLI</strong> UM<br />
Weitere Informationen siehe Treiber-Referenzhandbuch, IBS PC SC SWD UM,<br />
Artikel-Nr. 2745127.<br />
C-Beispiel:<br />
char<br />
COPData[DATA_AREA_SIZE];<br />
<strong>HLI</strong>RET ret;<br />
..<br />
/* Datenbereich ab Offset 100 lesen */<br />
ret = IBS_<strong>HLI</strong>_ReadDataFromCop(100, DATA_AREA_SIZE-<br />
100, CopData);<br />
if( ret == <strong>HLI</strong>_OKAY )<br />
/* auswerten... */<br />
C 14.5<br />
IBS_<strong>HLI</strong>_WriteDataToCop<br />
Aufgabe:<br />
Schreibt Daten in den Koppelspeicher, auf den der Co-Prozessor lesenden Zugriff hat. Der<br />
Koppelspeicher beträgt 5120 Bytes.<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_WriteDataToCop( CID, zuOffset, nBytes, lpSource )<br />
CID: USIGN16<br />
ID der Anschaltbaugruppe<br />
zuOffset: USIGN16<br />
Offset innerhalb <strong>des</strong> Koppelspeichers, ab dem geschrieben werden soll.<br />
nBytes: USIGN16<br />
Anzahl zu schreibender Bytes.<br />
lpSource: Zeiger auf USIGN8<br />
Quellspeicherbereich der Anwendung für die zu schreibenden Daten.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-70 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Funktions-Referenz<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung, Daten wurden kopiert.<br />
<strong>HLI</strong>_ <strong>HLI</strong>_INVALID_HOST_DATA_ACCESS: Ungültige Angaben für<br />
Offset und/oder Anzahl der Bytes. (Offset + Anzahl der Bytes) darf die<br />
Koppelspeichergröße nicht überschreiten.<br />
Anderer: Allgemeiner Fehler <strong>des</strong> Device-Drivers.<br />
Weitere Informationen siehe Treiber-Referenzhandbuch, IBS PC SC SWD UM,<br />
Artikel-Nr. 2745127.<br />
C-Beispiel:<br />
char<br />
CopData[32];<br />
<strong>HLI</strong>RET ret;<br />
...<br />
/* 32 Bytes ab Offset 100 beschreiben */<br />
ret = IBS_<strong>HLI</strong>_WriteDataToCop(100, 32, COPData);<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT C-71
IBS PC SC <strong>HLI</strong> UM<br />
C 15<br />
Steuerungs-Überwachung<br />
C 15.1<br />
IBS_<strong>HLI</strong>_ActivateWatchdog<br />
Watchdog-Überwachung ist nur bei den Controllern IBS PC ISA SC/xx möglich.<br />
Aufgabe:<br />
Aktiviert den HOST-Watchdog <strong>des</strong> INTERBUS-Controllers. Nach Aktivierung muss die Anwendung<br />
zyklisch, d.h. innerhalb der eingestellten Auslösezeit, die interne Zustandsmaschine<br />
<strong>des</strong> <strong>HLI</strong> bearbeiten (siehe Anhang C.1), da dadurch der Watchdog getriggert wird.<br />
Bei Ausbleiben der Triggerung innerhalb der eingestellten Auslösezeit setzt der Controller<br />
alle Prozessdatenausgänge am Bus zurück. <strong>HLI</strong> meldet ein entsprechen<strong>des</strong> Ereignis (Ereignis-Co<strong>des</strong>).<br />
Das Ereignisfenster triggert den Watchdog!<br />
Aufruf:<br />
IBS_<strong>HLI</strong>_ActivateWatchdog( CID, timeout )<br />
CID: USIGN16<br />
ID <strong>des</strong> Controllers.<br />
Timeout: USIGN16<br />
Konstante zur Bestimmung der Auslösezeit <strong>des</strong> Watchdog:<br />
<strong>HLI</strong>_WDT_8<br />
Timeout = 8.2 ms<br />
<strong>HLI</strong>_WDT_16<br />
Timeout = 16.4 ms<br />
<strong>HLI</strong>_WDT_32<br />
Timeout = 32.8 ms<br />
<strong>HLI</strong>_WDT_65<br />
Timeout = 65.5 ms<br />
<strong>HLI</strong>_WDT_131<br />
Timeout = 131.1 ms<br />
<strong>HLI</strong>_WDT_262<br />
Timeout = 262.1 ms<br />
<strong>HLI</strong>_WDT_524<br />
Timeout = 524.3 ms<br />
<strong>HLI</strong>_WDT_1048 Timeout = 1048.6 ms<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Ausführung.<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>).<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
C-72 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Klassendefinition<br />
D <strong>HLI</strong>-Klassendefinition<br />
Für die objektorientierte Programmierung unter C++ und Delphi definiert <strong>HLI</strong> eine Klasse<br />
TIbsController, die alle Controller-abhängigen <strong>HLI</strong>-Funktionen als Methoden bereitstellt<br />
( "Wrapper-Klasse").<br />
<strong>Die</strong> Controller-Initialisierung wird dabei gesondert durchgeführt (s.u.).<br />
Für die Klassenmethoden gilt folgende Konvention:<br />
– <strong>Die</strong> Namen der Methoden entsprechen den korrespondierenden <strong>HLI</strong>-Funktionen, wobei<br />
das Präfix "IBS_<strong>HLI</strong>_" entfällt.<br />
Beispiel :<br />
<strong>HLI</strong>-Funktion: IBS_<strong>HLI</strong>_GetControllerInfo()<br />
Methode: GetControllerInfo()<br />
– Der jeweils erste Parameter CID (Controller-ID) einer <strong>HLI</strong>-Funktion entfällt bei der entsprechenden<br />
Klassen-Methode, da einer Klasseninstanz durch den Konstruktor automatisch<br />
eine Controller-ID zugeordnet ist.<br />
Folgende Tabelle zeigt die Methoden von TIbsController und die zugeordneten <strong>HLI</strong>-<br />
Funktionen:<br />
Tabelle D-1<br />
Methoden und zugehörige <strong>HLI</strong>-Funktionen<br />
Methode<br />
De-Initialisierung:<br />
Exit<br />
Ereignis-Funktionen:<br />
EnableEvents<br />
DisableEvents<br />
GetEventInfo<br />
GetEventText<br />
CreateLogWindow<br />
EnableLogEvents<br />
DisableLogEvents<br />
CloseLogWindow<br />
LogUserEvent<br />
LogAutoSave<br />
Informations-Funktionen:<br />
GetControllerInfo<br />
CheckBusConfiguration<br />
GetBusInfo<br />
GetDeviceInfo<br />
GetDiagnosticInfo<br />
Zustands-Maschine:<br />
Process<br />
Prozessdaten-Management:<br />
PD_Input<br />
<strong>HLI</strong>-Funktion<br />
IBS_<strong>HLI</strong>_Exit<br />
IBS_<strong>HLI</strong>_EnableEvents<br />
IBS_<strong>HLI</strong>_DisableEvents<br />
IBS_<strong>HLI</strong>_GetEventInfo<br />
IBS_<strong>HLI</strong>_GetEventText<br />
IBS_<strong>HLI</strong>_CreateLogWindow<br />
IBS_<strong>HLI</strong>_EnableLogEvents<br />
IBS_<strong>HLI</strong>_DisableLogEvents<br />
IBS_<strong>HLI</strong>_CloseLogWindow<br />
IBS_<strong>HLI</strong>_LogUserEvent<br />
IBS_<strong>HLI</strong>_LogAutoSave<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
IBS_<strong>HLI</strong>_GetControllerInfo<br />
IBS_<strong>HLI</strong>_CheckBusConfiguration<br />
IBS_<strong>HLI</strong>_GetBusInfo<br />
IBS_<strong>HLI</strong>_GetDeviceInfo<br />
IBS_<strong>HLI</strong>_GetDiagnosticInfo<br />
IBS_<strong>HLI</strong>_Process<br />
IBS_<strong>HLI</strong>_PD_Input<br />
5626_de_02 PHOENIX CONTACT D-1
IBS PC SC <strong>HLI</strong> UM<br />
Tabelle D-1<br />
Methoden und zugehörige <strong>HLI</strong>-Funktionen<br />
Methode<br />
<strong>HLI</strong>-Funktion<br />
PD_Output<br />
IBS_<strong>HLI</strong>_PD_Output<br />
PD_DeviceIn<br />
IBS_<strong>HLI</strong>_PD_DeviceIn<br />
PD_DeviceOut<br />
IBS_<strong>HLI</strong>_PD_DeviceOut<br />
PD_In<br />
IBS_<strong>HLI</strong>_PD_In<br />
PD_Out<br />
IBS_<strong>HLI</strong>_PD_Out<br />
ResetAllOutputs<br />
IBS_<strong>HLI</strong>_ResetAllOutputs<br />
Gesteuerter Betrieb:<br />
GetCyclePhase<br />
RunCycle<br />
RunCompleteCycle<br />
Prozessdaten-Objekt-<br />
Registrierung<br />
RegisterPDObject<br />
IBS_<strong>HLI</strong>_GetCyclePhase<br />
IBS_<strong>HLI</strong>_RunCycle<br />
IBS_<strong>HLI</strong>_RunCompleteCycle<br />
IBS_<strong>HLI</strong>_RegisterPDObject<br />
RegisterPDO_BOOL<br />
IBS_<strong>HLI</strong>_RegisterPDO_BOOL<br />
RegisterPDO_BITSTRING<br />
IBS_<strong>HLI</strong>_RegisterPDO_BITSTRING<br />
RegisterPDO_BYTE<br />
IBS_<strong>HLI</strong>_RegisterPDO_BYTE<br />
RegisterPDO_WORD<br />
IBS_<strong>HLI</strong>_RegisterPDO_WORD<br />
RegisterPDO_DWORD<br />
IBS_<strong>HLI</strong>_RegisterPDO_DWORD<br />
UnregisterPDObject<br />
IBS_<strong>HLI</strong>_UnregisterPDObject<br />
PCP-<strong>Die</strong>nste:<br />
PCP_DeviceState<br />
PCP_ReadRequest<br />
PCP_ReadService<br />
PCP_WriteRequest<br />
PCP_WriteService<br />
PCP_IdentifyRequest<br />
PCP_IdentifyService<br />
PCP_RegisterClientObject<br />
PCP_StartRequest<br />
PCP_StartService<br />
PCP_StopRequest<br />
PCP_StopService<br />
PCP_ResumeRequest<br />
PCP_ResumeService<br />
PCP_ResetRequest<br />
PCP_ResetService<br />
IBS_<strong>HLI</strong>_PCP_DeviceState<br />
IBS_<strong>HLI</strong>_PCP_ReadRequest<br />
IBS_<strong>HLI</strong>_PCP_ReadService<br />
IBS_<strong>HLI</strong>_PCP_WriteRequest<br />
IBS_<strong>HLI</strong>_PCP_WriteService<br />
IBS_<strong>HLI</strong>_PCP_IdentifyRequest<br />
IBS_<strong>HLI</strong>_PCP_IdentifyService<br />
IBS_<strong>HLI</strong>_PCP_RegisterClientObject<br />
IBS_<strong>HLI</strong>_PCP_StartRequest<br />
IBS_<strong>HLI</strong>_PCP_StartService<br />
IBS_<strong>HLI</strong>_PCP_StopRequest<br />
IBS_<strong>HLI</strong>_PCP_StopService<br />
IBS_<strong>HLI</strong>_PCP_ResumeRequest<br />
IBS_<strong>HLI</strong>_PCP_ResumeService<br />
IBS_<strong>HLI</strong>_PCP_ResetRequest<br />
IBS_<strong>HLI</strong>_PCP_ResetService<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
D-2 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Klassendefinition<br />
Tabelle D-1<br />
Methoden und zugehörige <strong>HLI</strong>-Funktionen<br />
Methode<br />
<strong>HLI</strong>-Funktion<br />
Steuerung <strong>des</strong> INTERBUS:<br />
ActivateWatchdog<br />
IBS_<strong>HLI</strong>_ActivateWatchdog<br />
StartBus<br />
IBS_<strong>HLI</strong>_StartBus<br />
StopBus<br />
IBS_<strong>HLI</strong>_StopBus<br />
AlarmStop<br />
IBS_<strong>HLI</strong>_AlarmStop<br />
SwitchRemoteBus<br />
IBS_<strong>HLI</strong>_SwitchRemoteBus<br />
SwitchLocalBus<br />
SwitchGroup<br />
IBS_<strong>HLI</strong>_SwitchLocalBus<br />
IBS_<strong>HLI</strong>_SwitchGroup<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT D-3
IBS PC SC <strong>HLI</strong> UM<br />
D 1<br />
C++<br />
D 1.1<br />
Der Konstruktor zur Initialisierung ohne<br />
Konfigurationsvorgabe<br />
Aufgabe:<br />
Instanziert ein Objekt der Klasse TIbsController für eine Controller-Initialisierung ohne<br />
Konfigurationsvorgabe. Mit den übergebenden Werten werden private Eigenschaften initialisiert.<br />
Es erfolgt noch kein Zugriff auf den Controller.<br />
Syntax:<br />
MS-DOS-Version:<br />
– TIbsController(Controller_id, mode)<br />
Windows-Version:<br />
– TIbsController(Controller_id, mode, use_log)<br />
Controller_ID:<br />
mode:<br />
use_log:<br />
USIGN16<br />
ID <strong>des</strong> INTERBUS-Controllers, für den dieses Objekt instanziert<br />
wird.<br />
USIGN16<br />
Betriebsart <strong>des</strong> INTERBUS-Systems:<br />
IBS_STANDARD:Standard-Betriebsart<br />
IBS_CONTROLLED: anwendungsgesteuerte Betriebsart<br />
USIGN16 (nur Windows-Version)<br />
Konstante, die die Erzeugung <strong>des</strong> Ereignisfensters bestimmt:<br />
NO_LOG: kein Ereignisfenster<br />
LOG_ENGLISH:<br />
Ereignisfenster mit englischem Text<br />
LOG_ENGLISH_NO_FC:<br />
Ereignisfenster mit englischem Text, Benutzer<br />
kann Ereignisfilter nicht einstellen.<br />
LOG_DEUTSCH:<br />
Ereignisfenster mit deutschem Text<br />
LOG_ENGLISH_NO_FC:<br />
Ereignisfenster mit deutschem Text, Benutzer<br />
kann Ereignisfilter nicht einstellen.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
D-4 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Klassendefinition<br />
D 1.2<br />
Der Konstruktor zur Initialisierung mit<br />
Konfigurationsvorgabe<br />
Aufgabe:<br />
Instanziert ein Objekt der Klasse TIbsController für eine Controller-Initialisierung mit<br />
Konfigurationsvorgabe. Mit den übergebenden Werten werden private Eigenschaften initialisiert.<br />
Es erfolgt noch kein Zugriff auf den Controller.<br />
Syntax:<br />
MS-DOS-Version:<br />
– TIbsController(Controller_id, mode, nDevices, lpDevices )<br />
Windows-Version:<br />
– TIbsController(Controller_id, mode, nDevices, lpDevices, use_log )<br />
Controller_ID:<br />
mode:<br />
nDevices:<br />
lpDevices:<br />
USIGN16<br />
ID <strong>des</strong> INTERBUS-Controllers, für den dieses Objekt instanziert<br />
wird.<br />
USIGN16<br />
Betriebsart <strong>des</strong> INTERBUS-Systems:<br />
IBS_STANDARD: Standard-Betriebsart<br />
IBS_CONTROLLED : anwendungsgesteuerte Betriebsart<br />
USIGN16<br />
Anzahl der Busteilnehmer in der vorgegebenen Konfiguration<br />
Referenz (Zeiger) auf ein Feld von<br />
T_<strong>HLI</strong>_DEVICE_DATA Objekten.<br />
Das nicht lokale Feld <strong>des</strong> Typs T_<strong>HLI</strong>_DEVICE_DATA der Größe nDevices ist von der<br />
Anwendung mit den Konfigurationsdaten der Busteilnehmer zu initialisieren.<br />
use_log:<br />
USIGN16 (nur Windows-Version)<br />
Konstante, die die Erzeugung <strong>des</strong> Ereignisfensters bestimmt:<br />
NO_LOG : kein Ereignisfenster<br />
LOG_ENGLISH: Ereignisfenster mit englischemText<br />
LOG_ENGLISH_NO_FC: Ereignisfenster mit englischem Text,<br />
Benutzer kann Ereignisfilter nicht einstellen.<br />
LOG_DEUTSCH: Ereignisfenster mit deutschem Text<br />
LOG_DEUTSCH_NO_FC: Ereignisfenster mit deutschem Text,<br />
Benutzer kann Ereignisfilter nicht einstellen.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT D-5
IBS PC SC <strong>HLI</strong> UM<br />
D 1.3<br />
Initialisierung<br />
<strong>Die</strong> Initialisierung <strong>des</strong> INTERBUS-Controllers erfolgt durch Aufruf der Methode Initialize(),<br />
die abhängig von der Objekt-Instanzierung die <strong>HLI</strong>-Standard-Initialisierung<br />
IBS_<strong>HLI</strong>_Init() oder die Initialisierung mit Konfigurationsvorgabe<br />
IBS_<strong>HLI</strong>_Init_CFG() aufruft. Bei erfolgreicher Initialisierung werden weitere Informationen<br />
abgefragt (siehe Public-Eigenschaften).<br />
Syntax:<br />
<strong>HLI</strong>RET TIbsController.Initialize(void);<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Initialisierung;<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (<strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis führte zur negativen Beendigung der Funktion<br />
(→ Ereignis-Co<strong>des</strong>).<br />
D 1.4<br />
Destruktor<br />
Der Destruktor ~TIbsController() de-initialisiert einen INTERBUS-Controller,<br />
bevor das Objekt entfernt wird. Der Aufruf der Methode Exit() ist somit nicht zwingend<br />
erforderlich.<br />
D 1.5<br />
Public-Eigenschaften<br />
Nach dem erfolgreichem Aufruf der Methode Initialize() enthalten folgende Eigenschaften<br />
gültige Werte :<br />
– State: T_<strong>HLI</strong>_STATE Controller-Status<br />
(siehe <strong>HLI</strong>-<strong>Datentypen</strong>)<br />
– Info: T_<strong>HLI</strong>_SC_INFO Hard- und Firmware-Info<br />
(siehe <strong>HLI</strong>-<strong>Datentypen</strong>)<br />
– Bus: T_<strong>HLI</strong>_BUS_INFO Bus-Daten (siehe <strong>HLI</strong>-<strong>Datentypen</strong>)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
D-6 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Klassendefinition<br />
D 2<br />
Delphi<br />
D 2.1<br />
Der Konstruktor zur Initialisierung ohne<br />
Konfigurationsvorgabe<br />
Aufgabe:<br />
Instanziert ein Objekt der Klasse TIbsController für eine Controller-Initialisierung ohne<br />
Konfigurationsvorgabe. Mit den übergebenden Werten werden private Eigenschaften initialisiert.<br />
Es erfolgt noch kein Zugriff auf den Controller.<br />
Syntax:<br />
TIbsController.Create( Controller_id, mode, use_log )<br />
Controller_ID:<br />
mode:<br />
use_log:<br />
USIGN16<br />
ID <strong>des</strong> INTERBUS-Controllers, für den dieses Objekt instanziert<br />
wird.<br />
USIGN16<br />
Betriebsart <strong>des</strong> INTERBUS-Systems:<br />
IBS_STANDARD: Standard-Betriebsart<br />
IBS_CONTROLLED : anwendungsgesteuerte Betriebsart<br />
USIGN16<br />
Konstante, die die Erzeugung <strong>des</strong> Ereignisfensters bestimmt:<br />
NO_LOG: kein Ereignisfenster<br />
LOG_ENGLISH: Ereignisfenster mit englischem Text<br />
LOG_ENGLISH_NO_FC: Ereignisfenster mit englischem<br />
Text, Benutzer kann Ereignisfilter nicht einstellen.<br />
LOG_DEUTSCH: Ereignisfenster mit deutschem Text<br />
LOG_DEUTSCH_NO_FC: Ereignisfenster mit deutschem<br />
Text, Benutzer kann Ereignisfilter nicht einstellen.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT D-7
IBS PC SC <strong>HLI</strong> UM<br />
D 2.2<br />
Der Konstruktor zur Initialisierung mit<br />
Konfigurationsvorgabe<br />
Aufgabe:<br />
Instanziert ein Objekt der Klasse TIbsController für eine Controller-Initialisierung mit<br />
Konfigurationsvorgabe. Mit den übergebenden Werten werden private Eigenschaften initialisiert.<br />
Es erfolgt noch kein Zugriff auf den Controller.<br />
Syntax:<br />
TIbsController.Create_CFG( Controller_id, mode, nDevices, lpDevices, use_log )<br />
Controller_ID:<br />
mode:<br />
nDevices:<br />
lpDevices:<br />
use_log:<br />
USIGN16<br />
ID <strong>des</strong> INTERBUS-Controllers, für den dieses Objekt instanziert<br />
wird.<br />
USIGN16<br />
Betriebsart <strong>des</strong> INTERBUS-Systems:<br />
IBS_STANDARD: Standard-Betriebsart<br />
IBS_CONTROLLED: anwendungsgesteuerte Betriebsart<br />
USIGN16<br />
Anzahl der Busteilnehmer in der vorgegebenen Konfiguration<br />
Referenz (Zeiger) auf ein Feld von T_<strong>HLI</strong>_DEVICE_DATA<br />
Objekten.<br />
Das nicht lokale Feld <strong>des</strong> Typs T_<strong>HLI</strong>_DEVICE_DATA der Größe nDevices ist von der<br />
Anwendung mit den Konfigurationsdaten der Busteilnehmer zu initialisieren.<br />
USIGN16<br />
Konstante, die die Erzeugung <strong>des</strong> Ereignisfensters bestimmt:<br />
NO_LOG : kein Ereignisfenster<br />
LOG_ENGLISH: Ereignisfenster mit englischem Text<br />
LOG_ENGLISH_NO_FC: Ereignisfenster mit englischem<br />
Text, Benutzer kann Ereignisfilter nicht einstellen.<br />
LOG_DEUTSCH: Ereignisfenster mit deutschem Text<br />
LOG_DEUTSCH_NO_FC: Ereignisfenster mit deutschem<br />
Text, Benutzer kann<br />
Ereignisfilter nicht einstellen.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
D-8 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Klassendefinition<br />
D 2.3<br />
Initialisierung <strong>des</strong> INTERBUS-Controllers<br />
<strong>Die</strong> Initialisierung <strong>des</strong> INTERBUS-Controllers erfolgt durch Aufruf der Methode Initialize(),<br />
die abhängig von der Objekt-Instanzierung die <strong>HLI</strong>-Standard-Initialisierung<br />
IBS_<strong>HLI</strong>_Init() oder die Initialisierung mit Konfigurationsvorgabe,<br />
IBS_<strong>HLI</strong>_Init_CFG() aufruft. Bei erfolgreicher Initialisierung werden weitere Informationen<br />
abgefragt (siehe Public-Eigenschaften).<br />
Syntax:<br />
TIbsController.Initialize: <strong>HLI</strong>RET;<br />
Rückgabewert:<br />
<strong>HLI</strong>_OKAY: erfolgreiche Initialisierung<br />
Allgemeiner Fehler-Code: negative Funktionsausführung (→ <strong>HLI</strong>-Co<strong>des</strong>)<br />
Ereignis-Code: ein entsprechen<strong>des</strong> Ereignis führte zur negativen Beendigung der Funktion<br />
(→ Ereignis-Co<strong>des</strong>).<br />
D 2.4<br />
INTERBUS-Controller deinitialisieren<br />
Der Destruktor TIbsController.Destroy de-initialisiert einen<br />
INTERBUS-Controller, bevor das Objekt entfernt wird. Der Aufruf der Methode Exit()<br />
ist somit nicht zwingend erforderlich.<br />
D 2.5<br />
Public-Eigenschaften<br />
Nach erfolgreichem Aufruf der Methode Initialize() enthalten folgende Eigenschaften<br />
gültige Werte :<br />
– State: T_<strong>HLI</strong>_STATE Controller-Status (siehe <strong>HLI</strong>-<strong>Datentypen</strong>)<br />
– Info: T_<strong>HLI</strong>_SC_INFO Hard- und Firmware-Info (siehe <strong>HLI</strong>-<strong>Datentypen</strong>)<br />
– Bus: T_<strong>HLI</strong>_BUS_INFO Bus-Daten (siehe <strong>HLI</strong>-<strong>Datentypen</strong>)<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT D-9
IBS PC SC <strong>HLI</strong> UM<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
D-10 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Co<strong>des</strong><br />
E<br />
<strong>HLI</strong>-Co<strong>des</strong><br />
E 1<br />
Positive Funktions-Ausführung<br />
Bei erfolgreicher Ausführung einer <strong>HLI</strong>-Funktion gibt diese den Wert 0 zurück. Konstanten-<br />
Definition hierfür ist:<br />
0 hex <strong>HLI</strong>_OKAY / <strong>HLI</strong>_OK<br />
E 2<br />
Allgemeine Fehler-Co<strong>des</strong><br />
Folgende Co<strong>des</strong> werden von <strong>HLI</strong>-Funktionen bei negativer Ausführung zurückgegeben,<br />
ohne dass damit eine Ereignis-Erzeugung verbunden ist:<br />
FF01 hex<br />
FF02 hex<br />
FF04 hex<br />
FF05 hex<br />
<strong>HLI</strong>_ACCESS_DENIED<br />
(nur unter Multitasking-Systemen)<br />
Funktions-Ausführung abgewiesen, da der aufrufende Prozess nicht der besitzende<br />
Prozess für diese Controller-ID ist.<br />
Besitzender Prozess ist der Prozess, der das <strong>HLI</strong> für diese Controller-ID initialisiert.<br />
<strong>HLI</strong>_INVALID_CID<br />
Es wurde eine ungültige Controller-ID an die <strong>HLI</strong>-Funktion übergeben (siehe<br />
Anhang C.2).<br />
<strong>HLI</strong>_NO_LOG_WINDOW<br />
Rückgabewert von IBS_<strong>HLI</strong>_LogAutoSave(): Das Ereignis-Fenster<br />
ist noch nicht erzeugt worden. Erzeugen Sie erst das<br />
Ereignisfenster mit IBS_<strong>HLI</strong>_CreateLogWindow().<br />
<strong>HLI</strong>_LOGFILE_OPEN_ERROR<br />
Rückgabewert von IBS_<strong>HLI</strong>_LogAutoSave()<br />
Fehler beim Öffnen/Erstellen der Datei.<br />
Überprüfen Sie den angegebenen Dateinamen.<br />
<strong>HLI</strong>_NO_MORE_EVENT<br />
Rückgabewert von IBS_<strong>HLI</strong>_GetEventInfo()<br />
Es liegt kein weiteres Ereignis vor.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
FF21 hex<br />
FF31 hex<br />
FF32 hex<br />
<strong>HLI</strong>_MSG_TOO_LONG (Nur Co-Prozessor-Version)<br />
Nachricht zum Senden an den HOST enthält zu viele Parameter.<br />
<strong>HLI</strong>_INVALID_HOST_DATA_ACCESS<br />
(Nur Co-Prozessor-Version)<br />
Ungültiger Offset oder zu große Datenlänge für Lesen / Schreiben von<br />
HOST-Daten angegeben.<br />
5626_de_02 PHOENIX CONTACT E-1
IBS PC SC <strong>HLI</strong> UM<br />
FF33 hex<br />
<strong>HLI</strong>_NO_MESSAGE_AVAILABLE<br />
(Nur Co-Prozessor-Version)<br />
Rückgabewert von IBS_<strong>HLI</strong>_HOST_ReceiveMessage():<br />
keine Nachricht empfangen.<br />
FF34 hex<br />
FF41 hex<br />
FF42 hex<br />
<strong>HLI</strong>_SEND_MESSAGE_TIMEOUT<br />
(Nur Co-Prozessor-Version)<br />
Rückgabewert von IBS_<strong>HLI</strong>_HOST_SendMessage():<br />
Nachricht konnte innerhalb der Timeout-Zeit nicht gesendet werden, da keine<br />
freie Mailbox zu Verfügung stand.<br />
<strong>HLI</strong>_PCP_SET_NOT_FOUND<br />
Rückgabewert von IBS_<strong>HLI</strong>_PCP_LoadObjectxx():<br />
Datei oder Datensatz konnte nicht gefunden werden.<br />
<strong>HLI</strong>_PCP_SET_INVALID<br />
Rückgabewert von IBS_<strong>HLI</strong>_PCP_LoadObjectxx():<br />
Datensatz enthält ungültige Daten.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
E-2 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Co<strong>des</strong><br />
E 3<br />
INTERBUS-Zustands-Co<strong>des</strong><br />
<strong>Die</strong> INTERBUS-Zustands-Co<strong>des</strong> werden dem Element BusState <strong>des</strong> Statusobjekts vom<br />
Typ T_<strong>HLI</strong>_STATE zugewiesen (siehe Kapitel 2.3).<br />
0001 hex <strong>HLI</strong>_IBS_READY<br />
INTERBUS-Controller ist bereit, es ist aber keine aktive Konfiguration vorhanden.<br />
0002 hex <strong>HLI</strong>_IBS_ACTIVE<br />
Der INTERBUS-Controller verfügt über eine aktive Konfiguration, der Datentransfer<br />
ist aber noch nicht gestartet worden.<br />
0003 hex <strong>HLI</strong>_IBS_RUN<br />
Bus läuft - Datentransferzyklen werden gefahren<br />
Anwendungsgesteuerte Betriebsart: Bus ohne Fehler, nicht im Stopp.<br />
0004 hex <strong>HLI</strong>_IBS_IDLE<br />
(Nur anwendungsgesteuerte Betriebsart)<br />
Zustand nach abgeschlossenem Datentransfer; Prozessdaten können gelesen<br />
und gesetzt werden.<br />
0005 hex <strong>HLI</strong>_IBS_PREPARING_CYCLE<br />
(Nur anwendungsgesteuerte Betriebsart)<br />
Phase nach Setzen der Ausgangsdaten. Der Controller bereitet den nächsten<br />
Datenzyklus vor.<br />
Keine weiteren Aktionen zulässig während dieses Zustands.<br />
0006 hex <strong>HLI</strong>_IBS_CAN_RUN<br />
(Nur anwendungsgesteuerte Betriebsart)<br />
Der Controller ist bereit, den nächsten Datentransferzyklus zu<br />
starten.<br />
F001 hex<br />
<strong>HLI</strong>_IBS_STOPPED<br />
Bus wurde kontrolliert gestoppt - Datentransferzyklen werden nicht gefahren.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
F002 hex<br />
<strong>HLI</strong>_IBS_DETECT<br />
Der INTERBUS-Controller diagnostiziert den Bus nach einem Übertragungsfehler<br />
- es werden keine Datentransferzyklen<br />
gefahren.<br />
F003 hex<br />
F004 hex<br />
<strong>HLI</strong>_IBS_BUS_FAIL<br />
Busfehler ist aufgetreten. Detect-Phase ist beendet - Datentransferzyklen<br />
werden nicht gefahren.<br />
<strong>HLI</strong>_IBS_CONTROLLER_FAIL<br />
Der Controller hat einen internen Fehlerzustand. Der Bus ist nicht betriebsbereit.<br />
5626_de_02 PHOENIX CONTACT E-3
IBS PC SC <strong>HLI</strong> UM<br />
E 4<br />
Zustands-Co<strong>des</strong> für PCP-Teilnehmer<br />
<strong>Die</strong> Zustands-Co<strong>des</strong> für PCP-Teilnehmer werden von der Funktion<br />
IBS_<strong>HLI</strong>_PCP_DeviceState() zurückgeliefert und geben Auskunft über die Kommunikationsbereitschaft<br />
<strong>des</strong> Teilnehmers.<br />
0 hex <strong>HLI</strong>_PCP_DEVICE_READY<br />
Teilnehmer ist kommunikationsbereit.<br />
F012 hex<br />
F013 hex<br />
F014 hex<br />
<strong>HLI</strong>_PCP_DEVICE_NOT_INITIATED<br />
<strong>Die</strong> Verbindung zum Teilnehmer ist durch <strong>HLI</strong> noch nicht aufgebaut worden,<br />
aber in Bearbeitung. Der Verbindungsaufbau kann je nach Busaufbau und<br />
Teilnehmerzahl eine gewisse Zeit in Anspruch nehmen.<br />
<strong>HLI</strong>_PCP_DEVICE_BUSY<br />
<strong>Die</strong> Verbindung zum Teilnehmer ist aufgebaut, es ist aber gerade ein <strong>Die</strong>nst<br />
in Bearbeitung.<br />
<strong>HLI</strong>_PCP_DEVICE_NOT_READY<br />
Der Teilnehmer ist nicht kommunikationsbereit. Das Gerät hat sich am Bus<br />
nicht als bereit gemeldet oder ist momentan nicht aktiv am Bus.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
E-4 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Co<strong>des</strong><br />
E 5<br />
Zustands-Co<strong>des</strong> für PCP-<strong>Die</strong>nste<br />
<strong>Die</strong> Zustands-Co<strong>des</strong> für PCP-<strong>Die</strong>nste werden dem Element State der PCP-<strong>Die</strong>nst-Objekte<br />
vom Typ T_<strong>HLI</strong>_PCP_DEVICE_INFO, T_<strong>HLI</strong>_PCP_RW und<br />
T_<strong>HLI</strong>_PCP_PRG zugewiesen.<br />
0 hex <strong>HLI</strong>_PCP_SERVICE_OKAY<br />
<strong>Die</strong>nst erfolgreich ausgeführt.<br />
0001 hex <strong>HLI</strong>_PCP_SERVICE_PENDING<br />
<strong>Die</strong>nst ist in Bearbeitung - keine weiteren <strong>Die</strong>nstanforderungen<br />
zulässig.<br />
PCP-<strong>Die</strong>nst-Co<strong>des</strong><br />
<strong>Die</strong> PCP-<strong>Die</strong>nst-Co<strong>des</strong> werden als Parameter bei PCP-Ereignissen<br />
verwendet und kennzeichnen den Typ <strong>des</strong> <strong>Die</strong>nstes, bei dem das Ereignis erzeugt wurde.<br />
0001 hex <strong>HLI</strong>_PCP_SERVICE_READRead-Request<br />
0002 hex <strong>HLI</strong>_PCP_SERVICE_WRITEWrite-Request<br />
0003 hex <strong>HLI</strong>_PCP_SERVICE_IDENTIFY Identify-Request<br />
0004 hex <strong>HLI</strong>_PCP_SERVICE_STARTStart-Request<br />
0005 hex <strong>HLI</strong>_PCP_SERVICE_STOPStop-Request<br />
0006 hex <strong>HLI</strong>_PCP_SERVICE_RESUMEResume-Request<br />
0007 hex <strong>HLI</strong>_PCP_SERVICE_RESETReset-Request<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
5626_de_02 PHOENIX CONTACT E-5
IBS PC SC <strong>HLI</strong> UM<br />
E 6<br />
Ereignis-Co<strong>des</strong><br />
Ereignis-Co<strong>des</strong> werden von <strong>HLI</strong>-Funktionen zurückgegeben, wenn bei der Funktionsausführung<br />
ein Ereignis aufgetreten ist und dies zur negativen Funktions-Beendigung geführt<br />
hat. Weiterhin werden die Ereignisse (sofern nicht deaktiviert) der Anwendung über das<br />
Element EventIndication <strong>des</strong> Statusobjekts vom Typ T_<strong>HLI</strong>_STATE gemeldet,<br />
und können mit IBS_<strong>HLI</strong>_GetEventInfo() ausgelesen werden.<br />
Im Folgenden werden die Ereignisse nach ihrem Code ( Element Code <strong>des</strong> Typs<br />
T_<strong>HLI</strong>_EVENT) gelistet und beschrieben.<br />
0101 hex <strong>HLI</strong>_EVENT_MEMORY_FAULT<br />
Wird gemeldet, wenn nicht genügend Speicher-Ressourcen zur<br />
Verfügung stehen.<br />
Parameter: keine Bedeutung<br />
0102 hex <strong>HLI</strong>_EVENT_OS_FAULT<br />
Wird gemeldet, wenn ein Betriebssystem-Aufruf durch <strong>HLI</strong> fehlerhaft beendet<br />
wurde.<br />
Parameter: keine Bedeutung<br />
0201 hex <strong>HLI</strong>_EVENT_DDI_NOT_AVAILABLE<br />
Das Device-Driver-Interface ist nicht installiert bzw. gestartet.<br />
Weitere Informationen zur Installation, Eigenschaften und Funktionsumfang siehe<br />
Treiber-Referenzhandbuch für PC-Anschaltbaugruppen, IBS PC SC SWD UM, Artikel-<br />
Nr. 2745127.<br />
Parameter:<br />
keine Bedeutung<br />
0202 hex <strong>HLI</strong>_EVENT_DDI_ERROR<br />
Fehler beim Aufruf einer Funktion <strong>des</strong> Device-Driver-Interface (DDI).<br />
1. Parameter: Fehler-Code <strong>des</strong> DDI<br />
Weitere Informationen siehe Treiber-Referenzhandbuch für PC-Anschaltbaugruppen,<br />
IBS PC SC SWD UM, Artikel-Nr. 2745127.<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
0203 hex <strong>HLI</strong>_EVENT_NO_RIGHTS<br />
Das <strong>HLI</strong> hat keine Rechte zum Zugriff auf den INTERBUS-Controller. Eine<br />
andere Anwendung (z.B. IBS CMD G4) hat die Rechte angefordert.<br />
Beenden Sie alle Anwendungen, die auf den Controller zugreifen.<br />
Parameter : keine Bedeutung<br />
0204 hex <strong>HLI</strong>_EVENT_FW_CNF_TIMEOUT<br />
Zeitüberschreitung beim Warten auf die Confirmation (<strong>Die</strong>nst-Bestätigung)<br />
eines INTERBUS-Firmware-Kommandos.<br />
E-6 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Co<strong>des</strong><br />
Überprüfen Sie die Einstellungen <strong>des</strong> Device-Drivers, insbesondere den<br />
eingestellten IRQ. Eine ausbleibende Confirmation deutet meist darauf hin,<br />
dass ein vom Controller ausgelöster Interrupt vom HOST-System nicht bedient<br />
wird.<br />
1. Parameter: Code der erwarteten Confirmation<br />
0205 hex <strong>HLI</strong>_EVENT_FW_CNF_ERROR<br />
Negative Confirmation (Kommando-Bestätigung) eines INTERBUS-Firmware-Kommandos.<br />
Eventuell treten Inkompatibilitäten zwischen verschiedenen Firmware-Versionen<br />
auf. Bitte wenden Sie sich an PHOENIX-CONTACT.<br />
1. Parameter: <strong>Die</strong>nst-Code (Confirmation)<br />
2. Parameter: Fehler-Code der negativen Bestätigung<br />
0206 hex <strong>HLI</strong>_EVENT_HOST_DDI_ERROR<br />
(Nur bei Anwendungen für die IBS PC ISA SC/486DX/I_T)<br />
Fehler beim Aufruf einer Funktion <strong>des</strong> Device-Driver-Interface (DDI) für die<br />
Kommunikation mit dem Host-System.<br />
1. Parameter: Fehler-Code <strong>des</strong> DDI<br />
Weitere Informationen siehe Treiber-Referenzhandbuch für PC-Anschaltbaugruppen,<br />
IBS PC SC SWD UM, Artikel-Nr. 2745127.<br />
0401 hex <strong>HLI</strong>_EVENT_CONTROLLER_FAIL<br />
Der Controller ist im Fehler-Zustand nach Selbst-Check.<br />
Bitte kontaktieren Sie Phoenix Contact.<br />
Parameter: keine Bedeutung<br />
0402 hex <strong>HLI</strong>_EVENT_SYSTEM_FAIL<br />
Der Controller meldet das SysFail-Bit.<br />
Weitere Informationen siehe Treiber-Referenzhandbuch für PC-Anschaltbaugruppen,<br />
IBS PC SC SWD UM, Artikel-Nr. 2745127.<br />
<strong>Die</strong>s ist z.B. nach dem Auslösen der Watchdog der Fall.<br />
Falls dieser Fehlerzustand durch <strong>HLI</strong> nicht aufgehoben werden kann, kontaktieren<br />
Sie bitte Phoenix Contact.<br />
Parameter: keine Bedeutung<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
0403 hex <strong>HLI</strong>_EVENT_WATCHDOG_ACTIVE<br />
<strong>HLI</strong> hat nach dem Initialisieren <strong>des</strong> Controllers erkannt, dass der Watchdog<br />
zuvor ausgelöst hat.<br />
<strong>Die</strong> Watchdog wird von <strong>HLI</strong> automatisch zurückgesetzt.<br />
Parameter: keine Bedeutung<br />
0404 hex <strong>HLI</strong>_EVENT_WATCHDOG_SHUT<br />
5626_de_02 PHOENIX CONTACT E-7
IBS PC SC <strong>HLI</strong> UM<br />
<strong>HLI</strong> hat erkannt, dass der Watchdog ausgelöst hat.<br />
<strong>Die</strong> Ausgänge der Teilnehmer sind zurückgesetzt.<br />
Parameter: keine Bedeutung<br />
0801 hex <strong>HLI</strong>_EVENT_LOCATED_BUS_ERROR<br />
Es ist ein Busfehler aufgetreten und lokalisiert worden . Der INTERBUS<br />
fährt keine Datenzyklen mehr. Der Fehlerort ist angegeben. Nach Beheben<br />
<strong>des</strong> Fehlers kann durch IBS_<strong>HLI</strong>_StartBus() der Datentransfer wieder<br />
gestartet werden.<br />
1. Parameter: Bus-Segment-Nummer <strong>des</strong> fehlerhaft gemeldeten<br />
Teilnehmers (logische Teilnehmer-Nummer)<br />
2. Parameter: Teilnehmer-Position im Segment (logische<br />
Teilnehmer-Nummer)<br />
C. Parameter: zusätzliche Fehlerinformation.<br />
Weitere Informationen siehe Anwenderhandbuch <strong>Die</strong>nste und Fehlermeldungen der<br />
Firmware, IBS SYS FW G4 UM, Artikel-Nr. 2745130.<br />
0802 hex <strong>HLI</strong>_EVENT_UNLOCATED_BUS_ERROR<br />
Es ist ein Busfehler aufgetreten und nicht lokalisert worden . Der INTERBUS<br />
fährt keine Datenzyklen mehr.Der Fehlerort konnte vom INTERBUS-Controller<br />
nicht ermittelt werden. Versuchen Sie, durch<br />
IBS_<strong>HLI</strong>_StartBus() den Datentransfer wieder zu starten.<br />
1. Parameter: zusätzliche Fehler-Information.<br />
Weitere Informationen siehe Anwenderhandbuch <strong>Die</strong>nste und Fehlermeldungen der<br />
Firmware, IBS SYS FW G4 UM, Artikel-Nr. 2745130.<br />
0803 hex <strong>HLI</strong>_EVENT_INVALID_DATA_CYCLE<br />
(Nur anwendungsgesteuerte Betriebsart)<br />
Datenzyklus ist fehlerhaft beendet worden.<br />
1001 hex <strong>HLI</strong>_EVENT_DEVICE_ERROR<br />
Teilnehmer meldet Peripherie-Fehler.<br />
1. Parameter: Bussegment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
1002 hex <strong>HLI</strong>_EVENT_DEVICE_MAU<br />
Teilnehmer meldet schlechte Übetragungsqualität<br />
1. Parameter: Bussegment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
1003 hex <strong>HLI</strong>_EVENT_DEVICE_RECONFIG<br />
Rekonfigurations-Anforderung eines Teilnehmers<br />
1. Parameter: Bussegment-Nummer<br />
E-8 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Co<strong>des</strong><br />
2. Parameter: Teilnehmer-Position<br />
2001 hex <strong>HLI</strong>_EVENT_BUS_START<br />
INTERBUS Datentransfer wurde gestartet.<br />
Parameter: keine Bedeutung<br />
2002 hex <strong>HLI</strong>_EVENT_BUS_STOP<br />
INTERBUS Datentransfer wurde durch die Anwendung gestoppt.<br />
Parameter: keine Bedeutung<br />
2003 hex <strong>HLI</strong>_EVENT_ALARM_STOP<br />
INTERBUS Datentransfer wurde durch die Anwendung gestoppt. <strong>Die</strong> Ausgänge<br />
der Teilnehmer wurden rückgesetzt (Alarm-Stop).<br />
Parameter: keine Bedeutung<br />
2004 hex <strong>HLI</strong>_EVENT_RB_SEGMENT_OFF<br />
Fernbus-Segment mit der entsprechenden Nummer wurde abgeschaltet<br />
1. Parameter: Nummer <strong>des</strong> abgeschalteten Bussegments<br />
2005 hex <strong>HLI</strong>_EVENT_RB_SEGMENT_ON<br />
Fernbus-Segment-Nummer wurde zugeschaltet<br />
1. Parameter: zugeschaltetes Bussegment-Nummer<br />
2006 hex <strong>HLI</strong>_EVENT_LB_SEGMENT_OFF<br />
Lokalbus-Segment mit der entsprechenden Nummer wurde abgeschaltet<br />
1. Parameter: Nummer <strong>des</strong> abgeschalteten Bussegments<br />
2007 hex <strong>HLI</strong>_EVENT_LB_SEGMENT_ON<br />
Lokalbus-Segment mit der entsprechenden Nummer wurde zugeschaltet<br />
1. Parameter: Nummer <strong>des</strong> zugeschalteten Bussegments<br />
2008 hex <strong>HLI</strong>_EVENT_GROUP_OFF<br />
Gruppe oder Alternative wurde abgeschaltet.<br />
1. Parameter: Gruppen-Nummer<br />
2. Parameter: Alternative<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
2009 hex <strong>HLI</strong>_EVENT_GROUP_ON<br />
Gruppe oder Alternative wurde zugeschaltet.<br />
1. Parameter: Gruppen-Nummer<br />
2. Parameter: Alternative<br />
200A hex<br />
<strong>HLI</strong>_EVENT_BUS_WARNING<br />
Der INTERBUS Controller hat eine Warnung wegen schlechter<br />
Übetragungsqualität gesendet.<br />
Parameter: keine Bedeutung<br />
4001 hex <strong>HLI</strong>_EVENT_PCP_LOCAL_ABORT<br />
5626_de_02 PHOENIX CONTACT E-9
IBS PC SC <strong>HLI</strong> UM<br />
(<br />
Der Controller hat die Verbindung zu einem PCP-Teilnehmer abgebaut.<br />
1. Parameter: Bus-Segment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
C. Parameter: Reason-Code<br />
D. Parameter: Abort-Detail<br />
Weitere Informationen zu den Angaben Reason_Code und Abort_Detail siehe<br />
Anwenderhandbuch Perpherials Communication Protocol, IBS SYS PCP G4 UM,<br />
Artikel-Nr. 2745114.<br />
4002 hex <strong>HLI</strong>_EVENT_PCP_REMOTE_ABORT<br />
<strong>Die</strong> Verbindung zu einem PCP-Teilnehmer wurde durch den<br />
Teilnehmer abgebaut.<br />
1. Parameter: Bussegment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
C. Parameter: Reason-Code<br />
D. Parameter: Abort-Detail<br />
4003 hex <strong>HLI</strong>_EVENT_PCP_RECONNECTED<br />
Weitere Informationen zu den Angaben Reason_Code und Abort_Detail siehe<br />
Anwenderhandbuch Perpherials Communication Protocol, IBS SYS PCP G4 UM,<br />
Artikel-Nr. 2745114.<br />
<strong>Die</strong> Verbindung zu einem PCP-Teilnehmer konnte wieder aufgebaut werden.<br />
1. Parameter: Bussegment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
4004 hex <strong>HLI</strong>_EVENT_PCP_NOT_READY<br />
<strong>Die</strong> Verbindung zu einem PCP-Teilnehmer konnte nicht aufgebaut werden,<br />
der Teilnehmer ist nicht bereit oder die Übertragungsqualität läßt keinen<br />
Verbindungsaufbau zu.<br />
1. Parameter: Bus-Segment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
C. Parameter: Reason-Code<br />
D. Parameter: Abort-Detail<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Weitere Informationen zu den Angaben Reason_Code und Abort_Detail siehe<br />
Anwenderhandbuch Perpherials Communication Protocol, IBS SYS PCP G4 UM,<br />
Artikel-Nr. 2745114.<br />
4005 hex <strong>HLI</strong>_EVENT_PCP_SERVICE_FAILED<br />
Eine <strong>Die</strong>nstanforderung wurde von einem PCP-Teilnehmer negativ beantwortet.<br />
1. Parameter: Bussegment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
E-10 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Co<strong>des</strong><br />
C. Parameter: <strong>Die</strong>nst-Code (siehe Kapitel 5.5)<br />
D. Parameter: Err_Class<br />
Weitere Informationen zu den Angaben Reason_Code und Abort_Detail siehe<br />
Anwenderhandbuch Perpherials Communication Protocol, IBS SYS PCP G4 UM,<br />
Artikel-Nr. 2745114.<br />
4006 hex <strong>HLI</strong>_EVENT_PCP_SERVICE_REJECTED<br />
Eine <strong>Die</strong>nstanforderung wurde von einem PCP-Teilnehmer<br />
abgewiesen.<br />
1. Parameter: Bus-Segment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
C. Parameter: <strong>Die</strong>nst-Code (siehe 5.5)<br />
D. Parameter: Reject_Code<br />
Weitere Informationen zu den Angaben Reason_Code und Abort_Detail siehe<br />
Anwenderhandbuch Perpherials Communication Protocol, IBS SYS PCP G4 UM,<br />
Artikel-Nr. 2745114.<br />
4007 hex <strong>HLI</strong>_EVENT_PCP_SERVICE_TIMEOUT<br />
Eine <strong>Die</strong>nstanforderung wurde von einem PCP-Teilnehmer<br />
während der eingestellten Wartezeit nicht bearbeitet<br />
(siehe IBS_<strong>HLI</strong>_PCP_xxService() ).<br />
1. Parameter: Bus-Segment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
C. Parameter: <strong>Die</strong>nst-Code (siehe 5.5)<br />
8001 hex <strong>HLI</strong>_EVENT_NO_VALID_CFG<br />
<strong>Die</strong> aufgerufene Funktion kann nicht ausgeführt werden, da der<br />
Controller über keine gültige Konfiguration verfügt.<br />
Parameter: keine Bedeutung<br />
8002 hex <strong>HLI</strong>_EVENT_NULL_POINTER<br />
Eine ungültige Referenz (NULL-Zeiger) wurde an eine <strong>HLI</strong>-Funktion übergeben.<br />
Parameter: keine Bedeutung<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
8003 hex <strong>HLI</strong>_EVENT_INVALID_PARA<br />
Ein ungültiger Parameter wurde an eine <strong>HLI</strong>-Funktion übergeben.<br />
Parameter: keine Bedeutung<br />
8004 hex <strong>HLI</strong>_EVENT_UNKNOWN_DEVNO<br />
Ein unbekannte Teilnehmer-Nummer wurde an eine <strong>HLI</strong>-Funktion übergeben.<br />
1. Parameter: übergebene Bussegment-Nummer<br />
2. Parameter: übergebene Teilnehmer-Position<br />
5626_de_02 PHOENIX CONTACT E-11
IBS PC SC <strong>HLI</strong> UM<br />
8005 hex <strong>HLI</strong>_EVENT_INVALID_IDCODE<br />
Ein unbekannter ID-Code eines Teilnehmers wurde an eine<br />
<strong>HLI</strong>-Funktion übergeben.<br />
1. Parameter: Unbekannter ID-Code<br />
8006 hex <strong>HLI</strong>_EVENT_NO_PCP_DEVICE<br />
Es wurde ein PCP-<strong>Die</strong>nst für einen nicht PCP-fähigen Teilnehmer angefordert.<br />
1. Parameter: übergebene Bussegment-Nummer<br />
2. Parameter: übergebene Teilnehmer-Position<br />
8008 hex <strong>HLI</strong>_EVENT_UNKNOWN_GROUP<br />
Eine unbekannte Gruppen-Nummer oder Alternative wurde an eine <strong>HLI</strong>-<br />
Funktion übergeben.<br />
1. Parameter: Gruppen-Nummer<br />
2. Parameter: Alternative<br />
8009 hex <strong>HLI</strong>_EVENT_NO_INPUT_DEVICE<br />
Es wurde versucht, ein Prozessdaten-Eingangsobjekt auf einen<br />
Teilnehmer zu registrieren, der keine Eingangsdaten bereitstellt.<br />
1. Parameter: übergebene Bussegment-Nummer<br />
2. Parameter: übergebene Teilnehmer-Position<br />
800A hex<br />
800B hex<br />
<strong>HLI</strong>_EVENT_NO_OUTPUT_DEVICE<br />
Es wurde versucht, ein Prozessdaten-Ausgangsobjekt auf einen Teilnehmer<br />
zu registrieren, der keine Ausgangsdaten bereitstellt.<br />
1. Parameter: übergebene Bussegment-Nummer<br />
2. Parameter: übergebene Teilnehmer-Position<br />
<strong>HLI</strong>_EVENT_TOO_MANY_PDOS<br />
<strong>Die</strong> Maximalzahl registrierter Prozessdatenobjekte für diesen Teilnehmer<br />
wurde überschritten. <strong>Die</strong> Registrierung wurde abgewiesen.<br />
1. Parameter: übergebene Bussegment-Nummer<br />
2. Parameter: übergebene Teilnehmer-Position<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
800C hex<br />
800D hex<br />
<strong>HLI</strong>_EVENT_INVALID_PDO_TYPE<br />
Es wurde ein ungültiger PD-Objekt-Typ an die Prozessdaten-Registrierungsfunktion<br />
übergeben.<br />
(siehe Anhang C.5, IBS_<strong>HLI</strong>_RegisterPDObject() )<br />
Parameter: keine Bedeutung<br />
<strong>HLI</strong>_EVENT_INVALID_PDO_SIZE<br />
Fehler bei der Registrierung eines Prozessdaten-Objekts:<br />
<strong>Die</strong> Angaben für Byte-Offset und Objekt-Länge überschreiten die Länge <strong>des</strong><br />
Teilnehmer-Prozessdatenbereichs.<br />
1. Parameter: übergebene Bussegment-Nummer <strong>des</strong><br />
Zielteilnehmers<br />
2. Parameter: übergebene Position <strong>des</strong> Zielteilnehmers<br />
E-12 PHOENIX CONTACT 5626_de_02
<strong>HLI</strong>-Co<strong>des</strong><br />
800E hex<br />
<strong>HLI</strong>_EVENT_INVALID_PDO_POINTER<br />
Es wurde eine ungültige Referenz auf ein registriertes Prozessdaten-Objekt<br />
an IBS_<strong>HLI</strong>_UnregisterPDObject() übergeben.<br />
1. Parameter: High-Word der Referenz (Zeiger)<br />
2. Parameter: Low-Word der Referenz (Zeiger)<br />
800F hex<br />
<strong>HLI</strong>_EVENT_INVALID_SYNCH_OP<br />
(Nur anwendungsgesteuerte Betriebsart)<br />
<strong>Die</strong> aktuelle Zyklusphase der synchron arbeitenden Controller läßt die Ausführung<br />
der aufgerufenen Funktion nicht zu.<br />
Parameter: keine Bedeutung<br />
8010 hex <strong>HLI</strong>_EVENT_IBS_NOT_RUNNING<br />
<strong>Die</strong> augerufene Funktion kann nicht ausgeführt werden, da der Datentransfer<br />
<strong>des</strong> INTERBUS nicht aktiv ist.<br />
Parameter: keine Bedeutung<br />
8011 hex <strong>HLI</strong>_EVENT_IBS_DETECTING<br />
<strong>Die</strong> aufgerufene Funktion kann nicht ausgeführt werden, da der Controller<br />
den Datentransfer nach einem Busfehler gestoppt hat und den Bus diagnostiziert<br />
(DETECT-Phase).<br />
Parameter: keine Bedeutung<br />
8012 hex <strong>HLI</strong>_EVENT_DEVICE_NOT_INITIATED<br />
Eine <strong>Die</strong>nstanforderung an einen PCP-Teilnehmer kann nicht bearbeitet<br />
werden, da die Verbindung zum Teilnehmer noch nicht aufgebaut ist.<br />
1. Parameter: Bussegment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
8013 hex <strong>HLI</strong>_EVENT_DEVICE_BUSY<br />
Eine <strong>Die</strong>nstanforderung an einen PCP-Teilnehmer kann nicht bearbeitet<br />
werden, da bereits ein <strong>Die</strong>nst in Bearbeitung ist.<br />
1. Parameter: Bussegment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
8014 hex <strong>HLI</strong>_EVENT_DEVICE_NOT_READY<br />
Eine <strong>Die</strong>nstanforderung an einen PCP-Teilnehmer kann nicht bearbeitet<br />
werden, da der Teilnehmer nicht bereit ist.<br />
1. Parameter: Bussegment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
8021hex<br />
<strong>HLI</strong>_EVENT_CFG_INVALID_DEVNO<br />
Aufruf von IBS_<strong>HLI</strong>_Init_CFG(): Ungültige Teilnehmernummer in der Liste<br />
der Teilnehmerdaten.<br />
1. Parameter: Bussegment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
3. Parameter: Position der ungültigen Teilnehmer-Nummer in der Liste<br />
5626_de_02 PHOENIX CONTACT E-13
IBS PC SC <strong>HLI</strong> UM<br />
8021hex<br />
8022hex<br />
8023hex<br />
8024hex<br />
8031hex<br />
8032hex<br />
<strong>HLI</strong>_EVENT_CFG_INVALID_DEVNO<br />
Aufruf von IBS_<strong>HLI</strong>_Init_CFG(): Ungültige Teilnehmernummer in der Liste<br />
der Teilnehmerdaten.<br />
1. Parameter: Bussegment-Nummer<br />
2. Parameter: Teilnehmer-Position<br />
3. Parameter: Position der ungültigen Teilnehmer-Nummer in der Liste<br />
<strong>HLI</strong>_EVENT_CFG_INVALID_IDCODE<br />
Aufruf von IBS_<strong>HLI</strong>_Init_CFG(): Ungültiger Ident- oder Längencode eines<br />
Teilnehmers in der Liste der Teilnehmerdaten.<br />
1. Parameter: Identcode<br />
2. Parameter: Längencode<br />
3. Parameter: Position <strong>des</strong> ungültigen Ident- oder Längenco<strong>des</strong><br />
in der Liste<br />
<strong>HLI</strong>_EVENT_CFG_INVALID_LEVEL<br />
Aufruf von IBS_<strong>HLI</strong>_Init_CFG() : Ungültige Teilnehmerebene in der Liste<br />
der Teilnehmerdaten.<br />
1. Parameter: ungültige Teilnehmerebene<br />
2. Parameter: Position der ungültigen Teilnehmerebenen in der Liste<br />
<strong>HLI</strong>_EVENT_CFG_INVALID_GROUP<br />
Aufruf von IBS_<strong>HLI</strong>_Init_CFG(): Ungültige Gruppen-/Alternativen-Nummer<br />
eines Teilnehmers in der Liste der Teilnehmerdaten.<br />
1. Parameter: Gruppen-Nummer<br />
2. Parameter: Alternativen-Nummer<br />
3. Parameter: Position <strong>des</strong> ungültigen Eintrags in der Liste<br />
<strong>HLI</strong>_EVENT_ACTION_NOT_ALLOWED<br />
<strong>Die</strong> Funktion zum Steuern <strong>des</strong> Buses ist zur Zeit nicht erlaubt.<br />
Parameter: keine Bedeutung<br />
<strong>HLI</strong>_EVENT_CANNOT_ACTIVATE_CFG<br />
Aufruf von IBS_<strong>HLI</strong>_StartBus(): Ein Fehler ist beim Aktivieren der Buskonfiguration<br />
aufgetreten.<br />
1. Parameter: Fehler-Code <strong>des</strong> <strong>Die</strong>nstes 0710hex,<br />
ACTIVATE_CONFIGURATION_REQUEST<br />
2. Parameter: Zusätzliche Fehler-Informationen<br />
online<strong>com</strong>ponents.<strong>com</strong><br />
Weitere Informationen zum 2. Parameter siehe Anwenderhandbuch <strong>Die</strong>nste und Fehlermeldungen<br />
der Firmware, IBS SYS FW G4 UM, Artikel-Nr. 2745130.<br />
E-14 PHOENIX CONTACT 5626_de_02