06.05.2014 Aufrufe

B Die Datentypen des HLI - Onlinecomponents.com

B Die Datentypen des HLI - Onlinecomponents.com

B Die Datentypen des HLI - Onlinecomponents.com

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!