Traeger Industry Components GmbH

© by TIS

IP-S7-LINK



Per TCP/IP an die SIMATIC S7 über HMI/PG Protokoll (RFC1006)
Dokumentation zur Version 1.76

  • S7-1500
  • S7-1200
  • S7-300/400/200
  • !Logo
  • WIN AC RTX
  • VIPA S7
  • Jede S7-kompatible SPS
  • MS-Windows Desktop XP/7/8/10 32/64-Bit
  • alle MS-Windows Server 32/64-Bit
  • Windows CE
  • alle Linux 32/64-Bit
  • Embedded Linux 32/64Bit x86/ARM
  • C/C++
  • VB
  • Delphi
  • Excel
  • Access
  • PHP und andere
  • C#/VB.Net - dafür empfehlen wir unser IPS7LnkNet.Advanced Framework, in purem C# entwickelt

Das Tool ist in purem C/C++ Code entwickelt. Es lässt sich so auf jede beliebige Plattform / Architektur mit geringstem Aufwand portieren. Release Notes

Windows

  • C/C++, Delphi VB etc.:
    • die DLL ins Verzeichnis des Programms oder ins Systemverzeichnis kopieren
  • PHP
    • Die Extension ips7lnk_php.dll in das Extensionverzeichnis der PHP-Installation kopieren
    • Über PHP.ini oder im Programm selbst dafür sorgen, dass das Modul geladen wird

php.ini: extension = ips7lnk_php.dll

     im Programm: ld ('ips7lnk_php.dll');

Linux

  • C/C++ und andere
    • Die o.Datei zu Ihrem Programm linken oder ein .so erzeugen
  • PHP unter Linux
    • Die Extension ips7lnk_php.so in das Extensionverzeichnis der PHP-Installation kopieren
    • Über PHP.ini oder im Programm selbst dafür sorgen, dass das Modul geladen wird

php.ini: extension = ips7lnk_php.so

    im Programm: ld ( ́ips7lnk_php.so’);


IP-S7-LINK realisiert die Anbindung eines PC an Industrial Ethernet der SIMATIC S7.
Die Library ist für die verschiedene Programmiersprachen, Betriebssystem, Architekturen und Plattformen verfügbar.
Das Tool ist in purem C/C++ Code entwickelt. Es lässt sich so auf jede beliebige Plattform / Architektur mit geringstem Aufwand portieren. Die Library stellt die notwendigen Funktionen zur Kommunikation bereit.
Die Verbindung zur SPS wird von IP-S7-LINK eigenständig kontrolliert und im Fehlerfall automatisch wieder hergestellt.
Zur Kopplung wird nur die IP-Adresse der SPS / CP sowie der Steckplatz der CPU im SPS- Rack benötigt.
Sofort können Merker, Eingänge, Ausgänge, Datenbausteine, SPS-Zeit etc. gelesen und geschrieben werden.

Bitte beachten Sie: Die Funktionen werden mit der Standard Socket-Schnittstelle ausgeführt, was zur Folge hat, dass die Funktion erst nach Erfüllung der Aufgabe zum Aufrufer zurückkehrt.

Zum asynchronen Betrieb rufen Sie diese Funktionen einfach von einem separaten Thread aus auf, welcher für die Kommunikation des Systems zuständig ist. Folgende Funktionen stehen zur Verfügung:

IPS7Open / IPS7OpenPG / IPS7OpenS7200

Funktionen im Detail

Name Name (PHP) Beschreibung / Zweck
IPS7Open ips7_open zur Initialisierung der Verbindung, dort wird nur Speicher vorbereitet. Beim ersten Aufruf der Lese- oder Schreibfunktionen wird die TCP/IP-Verbindung automatisch gestartet.
Die Verbindung wird über den OP-Kanal hergestellt.
IPS7OpenPG ips7_openpg Ab Version 1.17, zur Initialisierung der Verbindung, dort wird nur Speicher vorbereitet. Beim ersten Aufruf der Lese- oder Schreibfunktionen wird die TCP/IP-Verbindung automatisch gestartet.
Die Verbindung wird über den PG-Kanal hergestellt.
IPS7OpenS7200 ips7_opens7200 Ab Version 1.21, zur Initialisierung der Verbindung, dort wird nur Speicher vorbereitet. Beim ersten Aufruf der Lese- oder Schreibfunktionen wird die TCP/IP-Verbindung automatisch gestartet.
Die Verbindung wird zu einer S7-200 hergestellt.

Aufrufparameter

Nr Datentyp PHP-Datentyp Name Funktion
1 32-Bit Pointer auf C-Stringstring IPAdr IP-Adresse der SPS im Format: xxx.xxx.xxx.xxx.
Beispiel: „192.169.0.100“
2 32-Bit unsigned long Rack Nummer des Rack’s, in dem die SPS-CPU gesteckt ist. Die Zählung beginnt mit „0„. Normalerweise 0. Bei S7-200 egal
3 32-Bit unsigned long Slot Nummer des Steckplatzes der CPU beginnend mit „1“, normalerweise „2„ Bei S7-300-400 oder „1“ bei S7-1200/1500. Bei S7-200 egal
4 32-Bit unsigned long RxTimeout Timeout in Millisekunden für Warten auf TCP/IP-Paket von der SPS, 0 bedeutet Standardeinstellung = 500 ms
5 32-Bit unsigned long TxTimeout Timeout in Millisekunden für Senden eines TCP/IP-Paketes an die SPS, 0 bedeutet Standardeinstellung = 500 ms
6 32-Bit unsigned long ConTimeout Timeout in Millisekunden für Warten auf Verbindungsaufbau mit SPS, 0 bedeutet Standardeinstellung = 5000 ms muss bei Bedarf verlängert werden

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7Open (LPCTSTR IPAdr, DWORD Rack, DWORD Slot, 
          DWORD RxTimeout, DWORD TxTimeout, DWORD ConnectTimeout);      
 
extern long WINAPI
IPS7OpenPG (LPCTSTR IPAdr, DWORD Rack, DWORD Slot, 
            DWORD RxTimeout, DWORD TxTimeout, DWORD ConnectTimeout);  
 
extern long WINAPI 
IPS7OpenS7200 (LPCTSTR IPAdr, DWORD Rack, DWORD Slot, 
               DWORD RxTimeout, DWORD TxTimeout, DWORD ConnectTimeout);

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7Open (IPAdr : PChar; Rack : LongWord; Slot : LongWord; 
   RxTimeout : LongWord; TxTimeout : LongWord ; ConnectTimeout : LongWord) : LongInt; 
   stdcall; external 'IPS7LNK.DLL';      
 
FUNCTION
IPS7OpenPG (IPAdr : PChar; Rack : LongWord; Slot : LongWord; 
   RxTimeout : LongWord; TxTimeout : LongWord ; ConnectTimeout : LongWord) : LongInt; 
   stdcall; external 'IPS7LNK.DLL';      
 
FUNCTION
IPS7OpenS7200 (IPAdr : PChar; Rack : LongWord; Slot : LongWord; 
   RxTimeout : LongWord; TxTimeout : LongWord ; ConnectTimeout : LongWord) : LongInt; 
   stdcall; external 'IPS7LNK.DLL';

Visual Basic Funktionsdeklaration

Declare Function IPS7Open& Lib "IPS7LNK.dll" (ByVal IPAdr As String, _
                                              ByVal Rack&, ByVal Slot&, _
                                              ByVal RxTimeout&, _
                                              ByVal TxTimeout&, _
                                              ByVal ConnectTimeout&)

IPS7OpenEx

Name Name (PHP) Beschreibung / Zweck
IPS7OpenEx ips7_openex Ab Version 1.23, zur Initialisierung der Verbindung, dort wird nur Speicher vorbereitet. Beim ersten Aufruf der Lese- oder Schreibfunktionen wird die TCP/IP-Verbindung automatisch gestartet.
Es können durch die Wahl der Parameter OP/PG S7200 oder auch Verbindungen über ein Subnetz hergestellt werden.

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit pointer auf C-String string IPAdr IP-Adresse der SPS im Format: xxx.xxx.xxx.xxx.
Beispiel: 192.169.0.100
2 32-Bit unsigned long Rack Nummer des Rack’s, in dem die SPS-CPU gesteckt ist. Die Zählung beginnt mit „0“. Normalerweise 0. Bei S7-200 egal
3 32-Bit unsigned long Slot Nummer des Steckplatzes der CPU beginnend mit „1„, normalerweise „2“ bei S7-300-400 oder „1“ bei S7-1200/1500. Bei S7-200 egal
4 32-Bit unsigned long SubNet-Id Subnetz-ID, wenn über ein Subnet zugegriffen werden soll. In der Step-S7 Software wird die Adresse z.B. so dargestellt: 0035 – 0001, geben Sie dann 0x00350001 an.
Wird nur bei AccessMode 10 oder 11 verwendet
5 32-Bit unsigned long DstMPIAdr Ziel-MPI-Adresse, wenn über ein Subnetz die Verbindung aufgebaut werden soll. Siehe AccessMode 10 und 11!
6 32-Bit unsigned long AccessMode Art des Zugriffs:
0 = OP-Verbindung zur durch Rack und Slot angegebene CPU aufbauen
1 = PG-Verbindung zur durch Rack und Slot angegebene CPU aufbauen
2 = Verbindung zu einer S7-200 über gesteckten TCP/IP-CP
3 = Verbindung einer Siemens-Logo-SPS (ab 1.60.78)
4 = Verbindung über den Kanal „Sonstige“ (ab 1.60.79)
10 = OP-Verbindung über Subnetz, welches an der durch Rack und Slot angegebene CPU angeschlossen ist aufbauen, Subnet-Id und DstMPI Adresse sind anzugeben
11 = PG-Verbindung über Subnetz, welches an der durch Rack und Slot angegebene CPU angeschlossen ist aufbauen, SubnetId und DstMPI Adresse sind anzugeben
20 = Verbindung zu S5-LAN++. Die Konvertierung der Realwerte erfolgt dann auch bei MultiRead-Zugriffen
7 32-Bit unsigned long RxTimeout Timeout in Millisekunden für Warten auf TCP/IP-Paket von der SPS, 0 bedeutet Standardeinstellung = 500 ms
8 32-Bit unsigned long TxTimeout Timeout in Millisekunden für Senden eines TCP/IP-Paketes an die SPS, 0 bedeutet Standardeinstellung = 500 ms
9 32-Bit unsigned long ConTimeout Timeout in Millisekunden für Warten auf Verbindungsaufbau mit SPS, 0 bedeutet Standardeinstellung = 5000 ms ( 5sec.) muss bei Bedarf verlängert werden.

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7OpenEx (LPCTSTR IPAdr, DWORD Rack, DWORD Slot, 
            DWORD SubNetId, DWORD DstMPIAdr, DWORD AccessMode, 
            DWORD RxTimeout, DWORD TxTimeout, DWORD ConnectTimeout);    

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7OpenEx (IPAdr : PChar; Rack : LongWord; Slot : LongWord; 
            SubNetId : LongWord; DstMPIAdr : LongWord;	AccessMode : LongWord;
            RxTimeout : LongWord; TxTimeout : LongWord ; ConnectTimeout : LongWord) : LongInt; 
			stdcall; external 'IPS7LNK.DLL';   

Visual Basic Funktionsdeklaration

Declare Function IPS7OpenEx& Lib "IPS7LNK.dll" (ByVal IPAdr As String, _
                                                ByVal Rack&, ByVal Slot&, _
                                                ByVal SubNetId&, ByVal DstMPIAdr&, ByVal AccessMode&, _
                                                ByVal RxTimeout&, _
                                                ByVal TxTimeout&, _
                                                ByVal ConnectTimeout&)

IPS7OpenExWithTSAP

Arbeitet wie IPS7OpenEx. Jedoch bietet diese Funktion die Möglichkeit, den LocalTSAP und RemoteTSAP anzugeben. So ist es möglich eine beliebige Verbindung zur SPS mit freier TSAP-Wahl zu verwenden. Die Länge der TSAPs ist auf 2 Byte festgelegt. Dies kann z.B. für die Verbindung mit einer Logo8 Anwednung finden. Dort kann der TSAP für den Kanal festgelegt werden.
Beispiel: Wenn in der SPS vorgegeben ist.

  • eigner TSAP: 00.02 → RemoteTSAP[0] = 0x00; RemoteTSAP[1] = 0x02;
  • fremder TSAP: 00.03 → LocalTSAP[0] = 0x00; LocalTSAP[1] = 0x03;

Also beachten: Local / Remote bezieht sich auf die Sichtweise zum Partner.

Name Name (PHP) Beschreibung / Zweck
IPS7OpenExWithTSAP ips7_openexwithtsap

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit pointer auf C-String string IPAdr IP-Adresse der SPS im Format: xxx.xxx.xxx.xxx.
Beispiel: 192.169.0.100
2 32-Bit unsigned long Rack Nummer des Rack’s, in dem die SPS-CPU gesteckt ist. Die Zählung beginnt mit „0„. Normalerweise 0. Bei S7-200 egal
3 32-Bit unsigned long Slot Nummer des Steckplatzes der CPU beginnend mit „1“, normalerweise „2„ bei S7-300-400 oder „1“ bei S7-1200/1500. Bei S7-200 egal
4 32-Bit unsigned long SubNet-Id Subnetz-ID, wenn über ein Subnet zugegriffen werden soll. In der Step-S7 Software wird die Adresse z.B. so dargestellt: 0035 – 0001, geben Sie dann 0x00350001 an.
Wird nur bei AccessMode 10 oder 11 verwendet
5 32-Bit unsigned long DstMPIAdr Ziel-MPI-Adresse, wenn über ein Subnetz die Verbindung aufgebaut werden soll. Siehe AccessMode 10 und 11!
6 32-Bit unsigned long AccessMode Art des Zugriffs:
0 = OP-Verbindung zur durch Rack und Slot angegebene CPU aufbauen
1 = PG-Verbindung zur durch Rack und Slot angegebene CPU aufbauen
2 = Verbindung zu einer S7-200 über gesteckten TCP/IP-CP
3 = Verbindung einer Siemens-Logo-SPS (ab 1.60.78)
4 = Verbindung über den Kanal „Sonstige“ (ab 1.60.79)
10 = OP-Verbindung über Subnetz, welches an der durch Rack und Slot angegebene CPU angeschlossen ist aufbauen, Subnet-Id und DstMPI Adresse sind anzugeben
11 = PG-Verbindung über Subnetz, welches an der durch Rack und Slot angegebene CPU angeschlossen ist aufbauen, SubnetId und DstMPI Adresse sind anzugeben
20 = Verbindung zu S5-LAN++. Die Konvertierung der Realwerte erfolgt dann auch bei MultiRead-Zugriffen
7 32-Bit unsigned long RxTimeout Timeout in Millisekunden für Warten auf TCP/IP-Paket von der SPS, 0 bedeutet Standardeinstellung = 500 ms
8 32-Bit unsigned long TxTimeout Timeout in Millisekunden für Senden eines TCP/IP-Paketes an die SPS, 0 bedeutet Standardeinstellung = 500 ms
9 32-Bit unsigned long ConTimeout Timeout in Millisekunden für Warten auf Verbindungsaufbau mit SPS, 0 bedeutet Standardeinstellung = 5000 ms ( 5sec.) muss bei Bedarf verlängert werden.
10 pointer auf BYTE Array der Länge 2 BYTE * LocalTSAP
11 pointer auf BYTE Array der Länge 2 BYTE * RemoteTSAP

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7OpenExWithTSAP (LPCTSTR IPAdr, DWORD Rack, DWORD Slot, 
            DWORD SubNetId, DWORD DstMPIAdr, DWORD AccessMode, 
            DWORD RxTimeout, DWORD TxTimeout, DWORD ConnectTimeout, BYTE *LocalTSAP, BYTE *RemoteTSAP;    

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7OpenExWithTSAP (IPAdr : PChar; Rack : LongWord; Slot : LongWord; 
            SubNetId : LongWord; DstMPIAdr : LongWord;	AccessMode : LongWord;
            RxTimeout : LongWord; TxTimeout : LongWord ; ConnectTimeout : LongWord; LocalTSAP :PBYTE, RemoteTSAP :PBYTE ) : LongInt; 
			stdcall; external 'IPS7LNK.DLL';   

Visual Basic Funktionsdeklaration

Declare Function IPS7OpenExWithTSAP& Lib "IPS7LNK.dll" (ByVal IPAdr As String, _
                                                ByVal Rack&, ByVal Slot&, _
                                                ByVal SubNetId&, ByVal DstMPIAdr&, ByVal AccessMode&, _
                                                ByVal RxTimeout&, _
                                                ByVal TxTimeout&, _
                                                ByVal ConnectTimeout&, _
                                                LocalTSAP as Byte, _
                                                RemoteTSAP as Byte, _
                                                )

Return Werte

Return-Werte

Wert Fehlerbeschreibung Bedeutung
>= 0 Alles OK Der Returnwert ist die Referenznummer für diese Verbindung und muss bei allen anderen Funktionen als Eingangsparameter Ref verwendet werden
-2 Keine Ressourcen mehr frei Maximale Anzahl an verfügbaren Verbindungen erreicht
-10 AccessMode nicht möglich (ab 1.23) wenn eine unzulässige Nummer für AccessMode angegeben wird. Siehe IPS7OpenEx

IPS7Close

Dient zur Deinitialisierung der Verbindung, Speicher wird freigegeben und die TCP/IP-Verbindung wird getrennt.

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit Wert unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7Close (long Ref);

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7Close (Ref : LongInt) : LongInt; stdcall; 
external 'IPS7LNK.DLL';    

Visual Basic Funktionsdeklaration

Declare Function IPS7Close& Lib "IPS7LNK.dll" (ByVal Ref&)
Return-Wert
Die Funktion liefert einen 32-Bit Wert mit Vorzeichen als Return-Wert mit folgender Bedeutung:
Wert Fehlerbeschreibung Bedeutung/Reaktion
0 alles OK Speicher wieder freigegeben und Verbindung, wenn vorhanden, geschlossen
-3 Mit der angegebenen Referenznummer wurde kein IPS7Open durchgeführt Haben Sie IPS7Open aufgerufen?
-99 Die Referenznummer ist ungültig
-30 nur PHP Die Anzahl oder der Typ der übergebenen Parameter ist falsch
-31 nur PHP Die interne Konvertierung der Daten konnte nicht durchgeführt werden, z.B. wurde ein String übergeben, wo long notwendig ist

IPS7Connect

Führt einen explizierten Verbindungsaufbau zur SPS aus. Ab Version 1.35! Damit kann ohne Lese/Schreibauftrag die Verbindung zur SPS hergestellt werden.

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7Connect (long Ref);

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7Connect (Ref : LongInt) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';

Return-Werte

Wert Fehlerbeschreibung
1 Verbindung wurde hergestellt
⇐ 0 Verbindung konnte nicht hergestellt werden. Die genaue Bedeutung finden Sie bei den Return-Werten für die Lese- / Schreibfunktionen

IPS7GetConnectStatus

Prüft den TCP/IP Verbindungsstatus zur SPS.

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung

C/C++ Funktionsdeklaration

extern long WINAPI 
IPS7GetConnectStatus (long Ref); 

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7GetConnectStatus ( Ref : LongInt) : LongInt;  
  stdcall; external 'IPS7LNK.DLL';

Visual Basic Funktionsdeklaration

Declare Function IPS7GetConnectStatus& Lib "IPS7LNK.dll" (ByVal Ref&)

Return-Werte

Wert Fehlerbeschreibung
1 Verbindung wurde hergestellt und besteht
⇐ 0 Verbindung ist unterbrochen. Evtl. IPS7Connect, Lese- oder Schreibfunktion aufrufen

IPS7SetKeepAlive

Ab V 1.35! Setzt individuelle TCP/IP KeepAlive Zeiten für die mit Ref angegebene Verbindung. Muss nur verwendet werden, wenn die Standardwerte nicht gelten sollen.
Sie sollten diese Funktion unmittelbar nach dem „Open“- Aufruf ausführen.

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung
2 32-bit unsigned long AliveTime Findet innerhalb der Zeit AliveTime (ms) kein Datenverkehr auf der TCP/IP-Verbindung statt, so wird ein KeepAlive-Telegram gesendet, um die Verbindung zu prüfen. Wird bei dieser Prüfung ein Fehler festgestellt, sendet der IP-Stack innerhalb der Zeit AliveInterval (ms) ein nächstes KeepAlive-Telegram. Dies wird einige male innerhalb der Zeit AliveInterval wiederholt (Win 6mal). War der Vorgang nicht erfolgreich, wird die Verbindung beendet
3 32-bit unsigned long AliveInterval Das Intervall in ms, in welchem KeepAlive-Telegramme wiederholt werden. Dieses wird aktiv, wenn ein Fehler beim Senden / Empfangen eines KeepAlive-Telegramms aufgetreten ist

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7SetKeepAlive (long Ref, DWORD AliveInterval, DWORD AliveTime);

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7SetKeepAlive (Ref : LongInt; AliveInterval : Longword; AliveTime : Longword) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';

Visual Basic Funktionsdeklaration

Declare Function IPS7SetKeepAlive& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal AliveInterval&, ByVal AliveTime&)

Return-Werte

Wert Fehlerbeschreibung
0 Setzen der Werte war erfolgreich
< 0 Das Setzen der Keep-Alive-Zeit konnte nicht ausgeführt werden

IPS7SetTCPPort

Standardmässig wird der TCP/IP-Port 102 (RFC 1006) verwendet. Mit IPS7SetTCPPort lässt sich dieser verändern. Sie sollten diese Funktion unmittelbar nach dem „Open“- Aufruf ausführen.

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung
2 32-Bit unsigned long Port Die Nummer des neuen TCP/IP-Ports 1 - 65565

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7SetTCPPort (long Ref, unsigned long Port);

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7SetTCPPort (Ref : LongInt, Port : LongWord) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';    

Return-Werte

Wert Fehlerbeschreibung Bedeutung/Reaktion
0 alles OK Speicher wieder freigegeben und Verbindung, wenn vorhanden, geschlossen
-3 Mit der angegebenen Referenznummer wurde kein IPS7Open durchgeführt Haben Sie IPS7Open aufgerufen?
-99 Die Referenznummer ist ungültig
-30 nur PHP Die Anzahl oder der Typ der übergebenen Parameter ist falsch
-31 nur PHP Die interne Konvertierung der Daten konnte nicht durchgeführt werden, z.B. wurde ein String übergeben, wo long notwendig ist

IPS7GetSockErr

Name Name (PHP) Beschreibung / Zweck
IPS7GetSockErr ips7_getsockerr Liefert den letzten Socket-Fehler zurück

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7GetSockErr (long Ref);

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7GetSockErr (Ref : LongInt) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';

Visual Basic Funktionsdeklaration

Declare Function IPS7GetSockErr& Lib "IPS7LNK.dll" (ByVal Ref&)

Return-Werte

Wert Fehlerbeschreibung Bedeutung / Reaktion
0 alles OK Es liegt kein Fehler an
-3 Mit der angegebenen Referenznummer wurde kein IPS7Open durchgeführt Haben Sie IPS7Open aufgerufen?
-99 Die Referenznummer ist ungültig
Sonstige Socketerror Erklärung siehe Liste unterhalb

IP-S7-LINK stellt für jeden Datentyp eine Funktionen zum Lesen und Schreiben bereit.
Die Datenyp-Funktionen unterscheiden sich in den Aufrufparametern. Im Folgenden sind die Methoden mit gleichen Parametern in Gruppen zusammengefasst.

Byte

Name Name (PHP) Beschreibung/Zweck
IPS7RdB ips7_rdb bytweise lesen (E,A,P,M,DB)
IPS7WrB ips7_wrb byteweise schreiben (E,A,P,M,DB,Z)

Word

Name Name (PHP) Beschreibung/Zweck
IPS7RdW ips7_rdw wortweise lesen (E,A,P,M,DB)
IPS7RdPlcW ips7_rdplcw wortweise lesen (E,A,P,M,DB)
jedoch Startadresse nach SPS-Adressierung
damit ein Zugriff auf ungerade Startadressen möglich ist
IPS7WrW ips7_wrw wortweise schreiben (E,A,P,M,DB,Z)
IPS7WrPlcW ips7_wrplcw wortweise schreiben (E,A,P,M,DB,Z) jedoch Startadresse nach SPS-Adressierung, (ab 1.17) damit ist ein Zugriff auf ungerade Startadressen möglich ist

DWord

Name Name (PHP) Beschreibung/Zweck
IPS7RdDW ips7_rddw doppelwortweise lesen (E,A,P,M,DB,T)
IPS7WrDW ips7_wrdw doppelwortweise schreiben (E,A,P,M,DB,T)

Real

Name Name (PHP) Beschreibung/Zweck
IPS7RdReal ips7_rdreal Real (Fließpunktzahl) lesen (E,A,P,M,DB))
IPS7WrReal ips7_wrreal Real (Fließpunktzahl) schreiben (E,A,P,M,DB))

LInt

Name Name (PHP) Beschreibung/Zweck
IPS7RdLInt ips7_rdlint LInt (64 Bit) lesen (E,A,P,M,DB)
IPS7WrLInt ips7_wrlint LInt (64 Bit) schreiben (E,A,P,M,DB)

LUInt

Name Name (PHP) Beschreibung/Zweck
IPS7RdULInt ips7_rdulint ULInt (64 Bit) lesen (E,A,P,M,DB)
IPS7WrULInt ips7_wrulint ULInt (64 Bit) schreiben (E,A,P,M,DB)

String

Name Name (PHP) Beschreibung/Zweck
IPS7RdString ips7_rdstring String lesen (E,A,P,M,DB)
Startadresse nach SPS-Adressierung
1.Byte mögliche Länge
2. Byte tatsächliche Länge
ab 3. Byte Daten
(Bsp. Adresse: DB0.DBB0, ab DB0.DBB2 stehen die tatsächlichen Daten).
IP-S7-LINK liest mögliche Länge des Strings aus
→ kürzt auf tatsächliche Länge
→ fügt NULL-CHAR ('\0') am Ende hinzu
IPS7WrString ips7_wrstring String schreiben (E,A,P,M,DB)
Startadresse nach SPS-Adressierung.
Länge vom übergebenen String wird ermittelt und beim Schreiben des Inhaltes gleich mitgeschrieben.
Achtung! Definieren Sie Ihren Datenbereich groß genug,
damit es zu keiner Überschreibung vorhandener Prozessdaten kommen kann

Aufrufparameter

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung
2 32-Bit unsigned long Typ Die Auswahl des Speicherbereichs in der SPS (DB, Eingang, Ausgang, Merker), welcher bearbeitet werden soll:
'D' = 68 dez. steht für Datenbaustein
'E' = 69, dez. steht für Eingänge
'A' = 65 dez. steht für Ausgänge
'M' = 77 dez. steht für Merker
'P' = 80 dez. steht für Peripherie
'T' = 84 dez. steht für Timer (nur mit Doppelwortfunktionen möglich). Die Timer werden in der SPS mit Zeitbasis und Wert im BCD-Format gespeichert. Um dieses Format sofort im PC verarbeiten zu können, führt der Treiber eine automatische Konvertierung in Millisekunden durch. Das kleinst mögliche Raster ist 10 ms. Beim Schreiben in die SPS wählt der Treiber automatisch eine passende Zeitbasis. Dabei kann es zu Rundungen kommen. Der Zeitbereich geht von 0 bis 9990000 ms
'Z' = 90 dez. steht für Zähler (nur mit Wortfunktionen möglich). Auch die Zähler sind in der SPS BCD-Codiert abgelegt. Die Zählerwerte reichen von 0 – 999
3 32-Bit unsigned 32-Bit Wert unsignedDBNr Datenbausteinnummer, diese wird nur beim Typ 'D' verwendet. Ansonsten steht dort der Wert „0“
4 32-Bit unsigned 32-Bit Wert unsigned Ab Erstes Wort bzw. Byte ab dem gelesen bzw. geschrieben werden soll.
Bei Wortoperationen Startwort
Bei Byte, Doppelwort und Realfunktionen Startbyte
Bei Timer oder Zähler ist dies die Nummer des ersten Elements, welches gelesen werden soll
5 32-Bit unsigned 32-Bit Wert unsigned Anz Anzahl der Einheiten (Byte, Worte, Doppelworte Real, oder Einheiten, z.B. Timer), die gelesen bzw. geschrieben werden sollen
6 32-Bit Pointer mixed Buffer Die Adresse auf den Quell- bzw. Zielspeicher im PC.
Bei den Wortfunktionen ist dies ein Zeiger auf ein Feld von 16-Bit breiten Worten
Bei den Bytefunktionen ist das eine Adresse auf ein Feld mit 8-Bit breiten Bytes
Bei Doppelwort Zeiger auf Long
Bei Real Zeiger auf einen Double
Hinweis für PHP:
Bei PHP geben Sie hier die Referenz einer Variablen an
Bemerkung zu ips7_rdplcw, ips7_rdw, ips7_rddw, ips7_rdreal }} Aufruf z.B.: &Result = ips7_rdplcw ($Ref, ord („M“), 0, 6,5, &$W);
Werden mehr als 1 Element gelesen, so wird die Variable in ein Array vom Typ long bzw. double umgewandelt. Wird nur ein Wert gelesen und die Variable ist kein Array, wird der Wert als long gespeichert
Ist die Variable bereits ein Array und es wird nur ein Wert gelesen, so wird das Ergebnis im ersten Element des Array abgelegt. Doppelworte (ips7_rddw) werden grundsätzlich mit Vorzeichen verarbeitet (signed)
7 ———long (optional) bSigned bei ipss7_rdplcw, ips7_rdw, ips7_wrplcw, ips7_wrdw
bLong bei ips7_rdb
Hinweis für PHP: ips7_rdplcw, ips7_rdw, ips7_wrplcw, ips7_wrdw
Optional kann bestimmt werden, ob die Werte als signed oder unsigned 16-Bit-Integer gelesen werden sollen. Wird der Parameter nicht angegeben, wird grundsätzlich mit Vorzeichen gearbeitet (signed). Wir der Parameter übergeben gilt:
0 = ohne Vorzeichen (signed)
1 = mit Vorzeichen \\Außerdem stehen für eine nachträgliche Konvertierung einzelner Werte die Funktionen ips7_i2w und ips7_w2i zu Verfügung. Näheres finden Sie dort.ips7_rdbIps7_rdb speichert das Ergebnis grundsätzlich als string. Wollen Sie jedoch die Werte einfach als Array ansprechen, so können Sie mit bLong = 1 das Ergebnis als long.Array ablegen lassen.

Bitte beachten beim Wortweisen Zugriff

Beim wortweisen Zugriff prüfen Sie bitte, ob Sie die Anfangsadresse nach SPS-Syntax verwenden möchten oder aber die rechnerisch korrekte.
Je nachdem müssen Sie IPS7RdPlcW oder IPS7RdW bzw. IPS7WrPlcW oder IPS7RdW verwenden.

Der PC und die SPS haben verschiedene Adressierungsarten. In der S7 ist der Speicherbereich byteweise orientiert. So adressieren Sie aus der Sicht des SPS-Programmierers mit MW 0 das MB0 und MB1, mit MW1 aber das MB1 und MB2. Sie sehen, dass sich MW0 und MW1 im MB1 überschneiden.
Vor der Version 1.17 war es nur möglich auf gerade Startadressen mit den Wortfunktionen zuzugreifen. Ab V 1.17 ist mit den Funktionen S7RdPlcW und S7WrPlcW ein Zugriff auf ungerade Startadressen möglich. Wollen Sie nun MW 1 lesen, so wie der SPS-Programmierer das sieht rufen Sie auf:
IPS7RdPlcW (Ref, 'M', 0, 1, 1, WortBuffer); !!! Beachten Sie das bei Wortoperationen mit S7RdW und S7WrW!!!
Beispiel für Merker. Dies gilt auch für Eingänge, Ausgänge und Datenworte. Die Wortadressierung in der SPS belegt jeweils folgende Bytes:

Wortadresse zugeordnete Bytes
MW0 MB 0 und MB 1
MW1 MB 1 und MB 2
MW2 MB 2 und MB 3

Sie sehen, dass es bei Verwendung von ungeraden Wortadressen zu einer Doppelbelegung kommen kann. Deshalb unterstützen die Wortfunktionen (IPS7RdW und IPS7WrW) nur den Zugriff auf gerade Wortadressen. Dies bedeutet, dass die Start-Wort-Nr im Treiber immer mit 2 multipliziert wird. Diese Methode erlaubt zu dem ein einfaches Abbild des SPS-Speichers in den PC. Also ein Wortschritt im PC sind 16 Bit im PC und 16 Bit in der SPS. Beispiel:
WORD Buf[64];
Der Aufruf IPS7RdW (Ref, Typ, DBNr, 0, 5, Buf) hat folgende Wirkung:

PC SPS
Buf[0] DW 0
Buf[1] DW 2
Buf[2] DW 4

Sie müssen also die Start-Wortnummer halbieren, um im PC richtig zugreifen zu können. Dies gilt auch für Datenbausteine –> Ungerade Wortadressen der SPS können nicht wortweise gelesen oder geschrieben werden.
Wollen Sie trotzdem auf ungerade Startadressen adressieren verwenden Sie die Funktionen S7RdPlcW und S7WrPlcW.

Zusatzfunktionen für PHP

long ips7_w2i(mixed Buffer,long Count);
Konvertiert unsigned 16-Bit - Werte in signed 16-Bit Werte

long ips7_i2w(mixed Buffer, long Count);
Konvertiert signed 16-Bit - Werte in unsigned 16-Bit Werte

Parameter Beschreibung / Zweck
Buffer Referenz auf die long Werte (Array) oder den long Wert, der konvertiert werden soll
Count Anzahl der Werte

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7RdW (long Ref, DWORD Typ, DWORD DBNr, DWORD AbWort, DWORD WortAnz, LPWORD Buffer) ;
 
extern long WINAPI // 1.17
IPS7RdPlcW (long Ref, DWORD Typ, DWORD DBNr, DWORD AbWort, DWORD WortAnz, LPWORD Buffer) ;
 
extern long WINAPI
IPS7RdB (long Ref, DWORD Typ,  DWORD DBNr, DWORD Ab, DWORD Anz, LPBYTE Buffer);
 
extern long WINAPI
IPS7WrW (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPWORD Buffer);
 
extern long WINAPI // 1.17
IPS7WrPlcW (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPWORD Buffer);
 
extern long WINAPI
IPS7WrB (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPBYTE Buffer);
 
extern long WINAPI
IPS7RdDW (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPDWORD Buffer);
 
extern long WINAPI
IPS7WrDW (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPDWORD Buffer);
 
extern long WINAPI
IPS7RdReal (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, double *Buffer);
 
extern long WINAPI
IPS7WrReal (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, double *Buffer);
 
extern long WINAPI
IPS7RdULInt (long Ref, DWORD Typ, DWORD DBNr, DWORD Start, DWORD Cnt, UINT64 *Buffer) ;
 
extern long WINAPI 
IPS7WrULInt (long Ref, DWORD Typ, DWORD DBNr, DWORD Start, DWORD Cnt, UINT64 *Buffer) ;
 
extern long WINAPI
IPS7RdLInt (long Ref, DWORD Typ, DWORD DBNr, DWORD Start, DWORD Cnt, INT64 *Buffer);
 
extern long WINAPI
IPS7WrLInt (long Ref, DWORD Typ, DWORD DBNr, DWORD Start, DWORD Cnt, INT64 *Buffer);

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7RdW (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  AbWort : Longword; WortAnz : Longword;  Buffer : PWORD)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7RdPlcW (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  AbWort : Longword; WortAnz : Longword;  Buffer : PDWORD)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7RdB (Ref : LongInt; Typ : Longword;  DBNr: Longword;
  Ab : Longword;  Anz : Longword; Buffer: PBYTE) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7WrW (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  AbWort : Longword; WortAnz : Longword; Buffer : PWORD)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7WrPlcW (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  AbWort : Longword; WortAnz : Longword;  Buffer : PDWORD)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7WrB (Ref : LongInt; Typ : Longword;  DBNr: Longword;
  Ab : Longword;  Anz : Longword; Buffer : PBYTE) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7RdDW (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  AbWort : Longword; WortAnz : Longword;  Buffer : PDWORD)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7WrDW (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  AbWort : Longword; WortAnz : Longword;  Buffer : PDWORD)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7RdReal (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  AbWort : Longword; WortAnz : Longword;  Buffer : PDOUBLE)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7WrReal (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  AbWort : Longword; WortAnz : Longword;  Buffer : PDOUBLE)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 

Visual Basic Funktionsdeklaration

Declare Function IPS7RdW& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Integer)
 
Declare Function IPS7RdPlcW& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Integer)
 
Declare Function IPS7RdB& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Byte)
 
Declare Function IPS7WrW& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Integer)
 
Declare Function IPS7WrW& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Integer)
 
Declare Function IPS7WrB& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Byte)
 
Declare Function IPS7RdDW& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Long)
 
Declare Function IPS7WrDW& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Long)
 
Declare Function IPS7RdReal& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Double)
 
Declare Function IPS7WrReal& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Double)

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7RdStr (long Ref, DWORD Typ, DWORD DBNr, DWORD Start, DWORD Cnt, LPSTR Buffer);
 
extern long WINAPI
IPS7WrStr (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, LPSTR Buffer);

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7RdStr (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  Start : Longword; Cnt : Longword;  Buffer : ANSISTRING)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7WrStr (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  Ab : Longword; Buffer : ANSISTRING)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';

Visual Basic Funktionsdeklaration

Declare Function IPS7RdStr& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal Start&, ByVal Cnt&, Wert As String)
 
Declare Function IPS7WrStr& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal Ab&, Wert As String)

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung
2 32-Bit unsigned long Typ Die Auswahl des Speicherbereichs in der SPS (DB, Eingang, Ausgang, Merker), welcher bearbeitet werden soll:
'D' = 68 dez. steht für Datenbaustein
'E' = 69, dez. steht für Eingänge
'A' = 65 dez. steht für Ausgänge
'M' = 77 dez. steht für Merker
'P' = 80 dez. steht für Peripherie
3 32-Bit unsigned long DBNr Datenbausteinnummer, diese wird nur beim Typ 'D' verwendet. Ansonsten steht dort der Wert „0„
4 32-Bit unsigned long Ab Byte Adresse z.B. M 10.0, dann steht hier 10. Beachten Sie hier den Unterschied zwischen IPS7RdW und IPS7RdPlcW bzw. IPS7WrW und IPS7WrPlcW. Siehe weiter unten!
5 32-Bit unsigned long Bit BitNr muss zwischen 0 und 7 liegen, z.B. bei M5.4 steht hier 4
6 32-Bit Adresse mixedBuffer Dieser Parameter ist nur für IPS7RdBit
Die Adresse auf den Zielspeicher im PC. Zeiger auf ein Byte. Wenn bBit gesetzt ist Inhalt 1 sonst 0.
Beispiel: lese M 6.5
BYTE W;
IPS7RdBit (Ref, 'M', 0, 6,5 & W);
Hinweis für PHP:
Bei PHP geben Sie als hier die Referenz einer Variablen an:
ips7_rdbit (Ref, ord („M“), 0, 6,5, & $W);
Diese Variable wird automatisch in einen „long“ konvertiert. Verwenden Sie daher eine Variable, die sonst noch nicht verwendet wurde. Der Zustand des Bit’s (0 oder 1) ist somit als long gespeichert

C/C++ Funktionsdeklaration

<code c>
extern long WINAPI
IPS7RdBit (long Ref, DWORD Typ, DWORD DBNr, DWORD Byte, DWORD Bit, LPBYTE Buffer);
 
extern long WINAPI
IPS7SetBit (long Ref, DWORD Typ, DWORD DBNr, DWORD Byte, DWORD Bit);
 
extern long WINAPI
IPS7ResetBit (long Ref, DWORD Typ, DWORD DBNr, DWORD Byte, DWORD Bit); 

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7RdBit (Ref : LongInt; Typ : Longword;  DBNr: Longword;
           ByteNr : Longword;  BitNr : Longword; Buffer: PBYTE) : LongInt; 
		   stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7SetBit (Ref : LongInt; Typ : Longword;  DBNr: Longword;
            ByteNr : Longword;  BitNr : Longword) : LongInt; 
			stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7ResetBit (Ref : LongInt; Typ : Longword;  DBNr: Longword;
            ByteNr : Longword;  BitNr : Longword) : LongInt; 
			stdcall; external 'IPS7LNK.DLL';

Visual Basic Funktionsdeklaration

Declare Function IPS7RdBit& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal ByteNr&, ByVal BitNr&, Wert As Byte)
 
Declare Function IPS7SetBit& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal ByteNr&, ByVal BitNr&)
 
Declare Function IPS7ResetBit& Lib "IPS7LNK.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal ByteNr&, ByVal BitNr&)

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7RdULInt (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  Start : Longword; Cnt : Longword;  Buffer : UInt64)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7WrULInt (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  Start : Longword; Cnt : Longword;  Buffer : UInt64)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
FUNCTION
IPS7RdLInt (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  Start : Longword; Cnt : Longword;  Buffer : Int64)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7WrLInt (Ref : LongInt; Typ : Longword; DBNr : Longword; 
  Start : Longword; Cnt : Longword;  Buffer : Int64)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';

Erläuterungen zu PHP
In PHP sind die Variablen grundsätzlich keinem festen Datentyp zugeordnet. Die Bestimmung des Datentyps übernimmt deshalb das Erweiterungsmodul. Grundsätzlich gilt: Die Ziel- bzw. Quellvariable für den Lese / Schreibpuffer (=Parameter 6), muss als Referenz übergeben werden. Also das „&“ – Zeichen verwenden. Z.B. $Res = ips7_rdplcw ($Ref, ord („M“), 0, 0, 2, &$Werte);
Werte[0] ist MW0
Werte[1] ist MW2
Da es in PHP keine 16-Bit-Werte gibt, werden die 16-Bit-Daten als long gespeichert. Die Wortfunktionen speichern das Ergebnis in einem long-Array, wird nur eine Einheit gelesen, so wird das Ergebnis als einzelner long gespeichert, wenn die Variable noch kein Array ist. Das Lesen- und Schreiben von Worten (16 Bit) geschieht grundsätzlich mit Vorzeichen. D.h. der Wert wird als 16-Bit integer interpretiert. Sollen die Werte als vorzeichenloser 16-Bit-Wert (unsigned) behandelt werden, beachten Sie dann den optionalen Parameter 7 (bSigned). Die Bytefunktionen speichern das Ergebnis grundsätzlich als string. Wollen Sie jedoch die Werte einfach als long Array ansprechen, so können Sie mit bLong = 1 das Ergebnis als long Array ablegen lassen.

Bit

Name Name(PHP) Beschreibung/Zweck
IPS7RdBit ips7_rdbit ein Bit lesen SPS (E,A,P,M,DB)
IPS7SetBit ips7_setbit ein Bit setzen (E,A,P,M,DB)
IPS7ResetBit ips7_resetbit ein Bit zurücksetzen in der SPS (E,A,P,M,DB)

Lesen gemischter Datenbereiche

IPS7RdMulti

Name Name (PHP) Beschreibung / Zweck
IPS7RdMulti ips7_rdmulti Führt einen gemischten Readauftrag aus. Für die Aufträge wird eine Liste/Array von Records / Structs des Typs „IPS7_RQ_MULTI„ ausgefüllt und der Funktion übergeben. Die Funktion sortiert und bündelt diese Aufträge und führt diese optimiert aus.
ACHTUNG!
Die Lesereihenfolge ist eine andere als die Reihenfolge der übergeben Liste

IPS7RdMulti führt automatisch eine Datenkonvertierung zwischen S7 und PC durch. Die Konvertierung ist mit dem Datentyp-Casting in der Programmiersprache zu vergleichen. Die Bitbreite des Datentyps im PC muss gleich oder größer als der in der SPS sein.
Der Aufrufer hat einen entsprechend großen Zielbereich zur Verfügung zu stellen.
Das heißt: Sollen z.B. zwei 16-Bit Werte (gesamt 32 Bit) gelesen und in Doublewerte (64 Bit) im PC konvertiert werden, so müssen im PC auch zwei Doublewerte (insgesamt also 128 Bit) bereit gestellt werden.

Die Konvertierung sieht aus wie im Beispiel:

Wert in der SPS Wert im PC
6 6.0
1 1.0

Die Auswahl der SPS- und PC-Datentypen erfolgt im Requestauftrag. Codiert über Konstanten wie im Folgendem beschrieben.

IPS7RdMultiCalcPacketCnt

Name Name (PHP) Beschreibung / Zweck
IPS7RdMultiCalcPacketCnt ips7_rdmulticalcpacketcnt Der Returnwert ist die Anzahl der benötigten Kommunikationspakete , die zum Lesen aller Multiread-Aufträge benötigt werden. Damit kann geprüft werden, ob alle gewünschten Variablen an einem Stück gelesen werden können. Dies ist der Fall, wenn der Returnwert == 1. Bitte den Returnwert beachten:
>= 0 die Anzahl der Pakete
< 0 es ist ein Fehler aufgetreten, Auswertung wie unten

Return Werte

Return-Werte Read/Write

Bei Verwendung der Funktion IPS7RdMulti ist der Returnwert im Strukt-Element „Res“ gespeichert.
Wert Fehlerbeschreibung Reaktion
0 Alles OK Daten auswerten
2 Baustein oder Datenbereich existiert nicht, z.B. Zugriff auf DB, der nicht vorhanden oder zu klein ist Überprüfen, ob der gewünschte Datenbereich in der SPS vorhanden ist
-1 Zeitüberlauf, gewünschte SPS offensichtlich nicht oder nicht mehr vorhanden Einfach weitere Schreib- und Leseaufträge absetzen der Treiber baut die Verbindung automatisch auf. Evtl. die Timeoutzeiten insbesondere die Connect-Timeoutzeit verlängern
-2 Die maximale Anzahl (256) der möglichen Verbindungen ist erreicht Unnötige Verbindungen schließen
-3 Kann bei Close auftreten. Mit der angegebenen Referenz wurde kein Open ausgeführt Überprüfen Sie Ihren Quellcode, ob die Variable für die Referenz nicht überschrieben wurde. Oder es wurde für diese Referenz bereits ein Close ausgeführt
-5 Allgemeiner Fehler Prüfen ob Netzwerk richtig im PC installiert ist: TCP/IP aktiviert? Winsocket installiert?
-6 Ziel-CPU nicht gefunden Rack oder Steckplatznummer falsch. Es ist keine Verbindung zu diesem Steckplatz mehr frei. Im CP Konfiguration prüfen
-7 Socketfehler aufgetreten IPS7GetSockErr aufrufen und Fehler auswerten
-8 Speicherfehler angeforderter Speicher im PC ist nicht verfügbar
-9 Bereichsüberschreitung z.B. Timer > 9990000 ms
-10 Gewünschter Datentyp nicht erlaubt oder wird nicht unterstützt Prüfen, ob der Code für Datentyp in Ordnung ist
-11 Der angegebene PC-Datentyp ist den angegebenen SPS- Datenbereich nicht möglich Das kann z.B. vorkommen, wenn auf Zähler zugegriffen werden soll und der PC-Datenbereich als BYTE angegeben wird. Abhilfe: Datenbereich im PC ändern
-20 Der angegebene Speicher im PC ist zu klein (z.B. Array ist zu klein), kann nur bei .net oder PHP auftreten Datenbereich im PC vergrössern bzw. richtig anpassen
-21 Nur .Net!Für diese Instanz der Klasse wurde schon einmal ein Open ausgeführt Evtl. Close aufrufen
-31 Nur bei MultiRead: PC und S7-Datentyp stehen falscher Relation z.B. PC = BYTE SPS = Wort PC-Datenbereich anpassen
-32 Nur bei MultiRead: S7 liefert falsche Anzahl Daten für den angegeben Datentyp
-88 Nur bei MultiRead: Der entsprechende Auftrag wurde noch nicht bearbeitet
-99 Die Referenznummer ist ungültig Haben Sie IPS7Open aufgerufen?
4660 Demozeit ist abgelaufen Vollversion erwerben

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7RdMulti (long Ref, IPS7_RQ_MULTI *pRqList, DWORD Cnt);
 
extern long WINAPI
IPS7RdMultiSimplex (long Ref, IPS7_RQ_MULTI *pRqList, DWORD Cnt); // 1.36
 
extern long WINAPI
IPS7RdMultiBuffered (long Ref, IPS7_RQ_MULTI_BUFFERED *pRqList, DWORD Cnt); // 1.40
 
extern long WINAPI
IPS7RdMultiGetData (long Ref, IPS7_RQ_MULTI_BUFFERED *pRq, void *pData); // 1.40
 
extern long WINAPI
IPS7RdMultiCalcPacketCnt (long Ref, IPS7_RQ_MULTI *pRqList, DWORD Cnt);

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7RdMulti (Ref : LongInt; pRqList : PIPS7_RQ_MULTI; Cnt : Longword)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7RdMultiSimplex (Ref : LongInt;  pRqList : PIPS7_RQ_MULTI; Cnt : Longword) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7RdMultiBuffered (Ref : LingInt; pRqList : IPS7_RQ_MULTI_BUFFERED; Cnt : LongWord) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
FUNCTION
IPS7RdMultiGetData (Ref : LongInt; pRq : IPS7_RQ_MULTI_BUFFERED; pData : Pointer) : LongInt;
  stdcall; external 'IPS7LNK.DLL';   
 
FUNCTION
IPS7RdMultiCalcPacketCnt (Ref : LongInt; pRqList : Pointer; Cnt : Longword;) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
 
Der Aufbau des Request Records/Structs für IPS7RdMulti
Name Typ Beschreibung / Zweck
DataArea 32-Bit
unsigned
Die Auswahl des Speicherbereichs in der SPS (DB, Eingang, Ausgang, Merker), welcher bearbeitet werden soll:
D = 68 dez. steht für Datenbaustein
E = 69 dez. steht für Eingänge
A = 65 dez. steht für Ausgänge
M = 77 dez. steht für Merker
T = 84 dez. steht für Timer
(nur mit Doppelwortfunktionen möglich)
Die Timer werden in der SPS mit Zeitbasis und Wert im BCD-Format gespeichert. Um dieses Format sofort im PC verarbeiten zu können, führt der Treiber eine automatische Konvertierung in Millisekunden durch. Das kleinst mögliche Raster ist 10 ms. Beim schreiben in die SPS wählt der Treiber automatisch eine passende Zeitbasis. Dabei kann es zu Rundungen kommen. Der Zeitbereich geht von 0 bis 9990000 ms
Z = 90 dez. steht für Zähler
Auch die Zähler sind in der SPS BCD-Codiert abgelegt. Die Zählerwerte reichen von 0 – 999
DataType 32-Bit
unsigned
Datentyp in der SPS
Name Wert SPS-Datentyp / Bitbreite
IPS7_BIT 0 Ein Bit / Boolean
IPS7_BYTE 1 Byte (8Bit)
IPS7_WORD 2 WORD 16 Bit unsigned integer (ohne Vorzeichen)
IPS7_INT 3 INT 16 Bit signed (mit Vorzeichen)
IPS7_DWORD 4 DWORD 32 Bit unsigned integer (ohne Vorzeichen)
IPS7_DINT 5 long 32 Bit signed integer (mit Vorzeichen)
IPS7_REAL 6 S7Real
IPS7_TIMER 7 Timer in der S7
IPS7_COUNTER 8 Zähler in der S7
IPS7_LINT 9 INT 64 Bit signed integer (mit Vorzeichen)
IPS7_ULINT 10 UINT 64 Bit unsigned integer (ohne Vorzeichen)
DBNr 32-Bit
unsigned
Datenbausteinnummer, diese wird nur beim Typ 'D' verwendet. Ansonsten steht dort der Wert 0
Cnt 32-Bit
unsigned
Anzahl der Datenelemente, die gelesen/geschrieben werden sollen
Start 32-Bit
unsigned
Startbyte in der SPS
StartBit 32-bit
unsigned
Die Nummer des ersten Bits in der SPS, Werte (0 – 7), wird nur bei Bit-Zugriffen verwendet, ansonsten 0
PCDataType 32-Bit
unsigned
Datentyp im PC
Name Wert Datentyp in der SPS
PC_BYTE 0 Byte (8 Bit)
PC_WORD16 1 16 Bit unsigned integer
PC_INT16 2 16 Bit signed integer
PC_WORD32 3 32 Bit unsigned integer
PC_INT32 4 32 Bit signed integer
PC_FLOAT 5 32 Bit Fließpunktzahl im PC (float)
PC_DOUBLE 6 64 Bit Fließpunktzahl im PC (double)
PC_WORD64 7 64 Bit unsigned integer
PC_INT64 8 64 Bit signed integer
Result 32-Bit
unsigned
Ergebnis für diesen Auftrag. Die einzelnen Werte finden Sie weiter unten bei der Beschreibung: Return-Wert für Read/Writefunktionen
UserData_0 32-Bit
unsigned
Dieser Eintrag kann vom Aufrufer verwendet werden, um eigene Informationen aufzurufen. Der Wert wird vom Treiber weder ausgewertet noch verändert. Damit könnten z.B. Zusatzinformationen über die Eigenschaften der Variable im PC abgelegt werden
UserData_1 32-Bit
unsigned
Data 32-Bit
Pointer
Der eigentliche Zeiger auf den Speicherbereich im PC für diesen Auftrag
pUserData 32-Bit
Pointer
wie UserData_0 und UserData_1, jedoch als Pointer

IPS7RdMulti Beispiel C/C++

   // kleine Funktion zur Initialiesierung eines einzelnen Requests
   void InitRq (IPS7_RQ_MULTI *pRq, long DataArea, long DataType, long PcDataArea,
                long DBNr, long Start, long StartBit, long Cnt, void *pData)
   { 
     pRq->DataArea = DataArea;
     pRq->DataType = DataType; 
     pRq->DBNr = DBNr;
     pRq->Cnt = Cnt;
     pRq->Start = Start; 
     pRq->StartBit = StartBit; 
     pRq->PcDataType = PcDataArea; 
     pRq->Data = pData;
   }
 
   void DemoRdMulti (int Ref) 
   {
      int EBits[64];
      BYTE EBytes[64];
 
      WORD MWords[32];
      WORD DB10Words [150];
 
      double DB10WordsAsDouble [150]; 
      float DB20RealAsFloat [60]; 
 
      LONG32 TimerAsInt [10];
      int Cnt = 10; 
 
      int Res;
      IPS7_RQ_MULTI Rq[10] ; // Max. 10 Aufträge; 
 
      memset (Rq, 0, sizeof (Rq));
      Cnt = 0;
 
      // lese ab E 4.0 32 Bit
      InitRq (&Rq[Cnt++], ‘E’, IPS7_BIT, PC_BYTE, 0, 4, 0, 32, EBits); 
 
      // lese ab EB0 20 Byte und lege diese ab [20] ab
      InitRq (&Rq[Cnt++], ‘E’, IPS7_BYTE, PC_BYTE, 0, 0, 0, 20, &EBytes[20]); 
 
      //lese ab MB 20 10 Worte
      InitRq (&Rq[Cnt++], ‘M’, IPS7_WORD, PC_WORD16, 0, 20, 0, 1, MWords); 
 
      //lese DB10 ab Datenbyte 0 150 Worte
      InitRq (&Rq[Cnt++], ‘D’, IPS7_WORD, PC_WORD16, 10, 0, 0, 150, DB10Words); 
 
      //lese DB20 ab Datenbyte 0 150 Worte lege diese aber als double im PC ab
      InitRq (&Rq[Cnt++], ‘D’, IPS7_WORD, PC_DOUBLE, 10, 0, 0, 150, DB10WordsAsDouble); 
 
      //lese DB20 ab Datenbyte 6 60 Realwerte und lege diese als Floatwerte im PC ab
      InitRq (&Rq[Cnt++], ‘D’, IPS7_REAL, PC_FLOAT, 10, 6, 0, 60, DB20RealAsFloat);
 
      //lese ab Timer 5 10 Timer und lege diese als int ab
      InitRq (&Rq[Cnt++], ‘T’, IPS7_TIMER, PC_WORD32, 0, 5, 0, 10, TimerAsInt); // T5 10 Timer
      Res = IPS7RdMulti(Ref, Rq, Cnt);
 
      for (int i = 0; i < Cnt; i++) 
      {
         if (Rq[i].Result == 0) // alles in Ordnung 
         {
             //.. Daten auswerten und verarbeiten
         } 
         else 
         {
              // Fehler auswerten
         } 
      }
      }
   }

IPS7ReadDiagBuffer

Name Name (PHP) Beschreibung/Zweck
IPS7ReadDiagBuffer Auslesen des Diagnosebuffers

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung
2 S7_EVENTENTRY Pointer mixed pEvent Pointer auf die Struktur des Events, siehe oben. Daten werden größenmäßig aneinander gereit geschrieben (16-Bit Word, 8-Bit Priority …)
3 32-Bit MaxEvents Anzahl der maximal auszulesenden Events
4 32-Bit pRxEventCnt Pointer auf die tatsächliche Anzahl ausgelesener Events

C/C++ Funktionsdeklaration

typedef struct {

BYTE Year;
BYTE Month;
BYTE Day;
BYTE Hour;
BYTE Minute;
BYTE Second;
BYTE Centisecond;
BYTE Millisecond;

} S7_TIMESTAMP;

typedef struct {

WORD EventId;
BYTE Priority;
BYTE OBNr;
BYTE Reserved[2];
BYTE Info1[2];
BYTE Info2[4];
S7_TIMESTAMP Time;
const char *Text;

} S7_EVENTENTRY;

extern long WINAPI IPS7ReadDiagBuffer(long Ref, S7_EVENTENTRY *pEvent, int MaxEvents, int *pRxEventCnt); </code>

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7ReadDiagBuffer (Ref : LongInt; pEvent : Pointer; MaxEvents : Int; 
  pRxEventCnt : Pointer;)  : LongInt; 
  stdcall; external 'IPS7LNK.DLL';

IPS7GetPLCTime

Name Name (PHP) Beschreibung / Zweck
IPS7GetPLCTime ips7_getplctime Liest die Systemzeit der SPS

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung
2 32-Bit Pointer
auf 32 Bit Wert
long Year Pointer auf den 32 Bit Wert für das Jahr (nach lesen steht dort z.B. 2012)
2 32-Bit Pointer
auf 32 Bit Wert
long Month Pointer auf den 32 Bit Wert für das Monat (1-12)
2 32-Bit Pointer
auf 32 Bit Wert
long Day Pointer auf den 32 Bit Wert für den Tag (1 -31)
2 32-Bit Pointer
auf 32 Bit Wert
long Hour Pointer auf den 32 Bit Wert für die Stunde (0 – 23)
2 32-Bit Pointer
auf 32 Bit Wert
long Min Pointer auf den 32 Bit Wert für die Minuten (0 – 59)
2 32-Bit Pointer
auf 32 Bit Wert
long Sec Pointer auf den 32 Bit Wert für die Sekunden (0-59)
2 32-Bit Pointer
auf 32 Bit Wert
long Ms Pointer auf den 32 Bit Wert für die Millisekunden ( 0-999)

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7GetPLCTime (long Ref, long *pYear, long *pMonth, long *pDay, 
                 long *pHour, long *pMin, long *pSec, long *pMs); // 1.54

Delphi / Pascal Funktionsdeklaration

{ -- Version 1.54 --}
FUNCTION
IPS7GetPLCTime (Ref : LongInt; pYear : PLongInt; pMonth : PLongInt; pDay : PLongInt; 
                 pHour : PLongInt; pMin : PLongInt; pSec : PLongInt; pMs : PLongInt) : LongInt;
stdcall; external 'IPS7LNK.DLL';

Es gelten dieselben Return-Werte wie für die Lese/Schreibfunktionen!

IPS7SetPLCTime

Name Name (PHP) Beschreibung / Zweck
IPS7SetPLCTime ips7_setplctime Setzte die Systemzeit der SPS

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit Wert long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung
2 32-Bit Wert long Year 32 Bit Wert für das Jahr (1999 – 21xx)
2 32-Bit Wert long Month 32 Bit Wert für das Monat (1-12)
2 32-Bit Wert long Day 32 Bit Wert für den Tag (1 -31)
2 32-Bit Wert long Hour 32 Bit Wert für die Stunde (0 – 23)
2 32-Bit Wert long Min 32 Bit Wert für die Minuten (0 – 59)
2 32-Bit Wert long Sec 32 Bit Wert für die Sekunden (0-59)
2 32-Bit Wert long Ms 32 Bit Wert für die Millisekunden ( 0-999)

C/C++ Funktionsdeklaration

long WINAPI
IPS7SetPLCTime (long Ref, long Year, long Month, long Day, 
  long Hour, long Min, long Sec, long Ms); // 1.54

Delphi / Pascal Funktionsdeklaration

{ -- Version 1.54 --}
FUNCTION
IPS7SetPLCTime (Ref : LongInt; Year : LongInt; Month : LongInt; Day : LongInt;
  Hour : LongInt; Min : LongInt; Sec : LongInt; Ms : LongInt) : LongInt;
stdcall; external 'IPS7LNK.DLL';

Es gelten dieselben Return-Werte wie für die Lese/Schreibfunktionen!

IPS7GetPLCName

IPS7GetModuleName

IPS7GetPlantIdName

IPS7GetCopyrightEntry

IPS7GetModuleSNr

IPS7GetModuleTypeName

IPS7GetMMCSNr

IPS7GetLocationDesignation

IPS7GetOEMId

In der SPS stehen verschiedene Systeminformationen zur Verfügung. Die meisten jedoch erst ab FW 2.2 der S7. Folgende Informationen können in einem String empfangen werden.

Name Name (PHP) Beschreibung / Zweck
IPS7GetPLCName ips7_getplcname Liest den Namen der SPS
IPS7GetModuleName ips7_getmodulename Liest den Namen der Baugruppe (z.B CPU 315-2 DP/PN - Test)
IPS7GetPlantIdName ips7_getplantidname Liest den Anlagenamen der SPS
IPS7GetCopyrightEntry ips7_getcopyrightentry Liest den Copyright Eintrag der SPS
IPS7GetModuleSNr ips7_getmodulesnr Liest die Seriennummer der SPS
IPS7GetModuleTypeName ips7_getmoduletypename Liest den Baugruppentyp der SPS (z.B CPU 315-2 DP/PN)
IPS7GetMMCSNr ips7_getmmcsnr Liest die Seriennummer der MMC
IPS7GetLocationDesignation ips7_getlocationdesignation Liest die Ortsbeschreibung in der SPS
IPS7GetOEMId ips7_getoemid Liest die OEM-ID der CPU

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung
2 32-Bit Pointer
auf C-String
string strInfo Pointer auf den String, der die Info erhalten soll. Muss mindestens 64 Zeichen aufnehmen können

C/C++ Funktionsdeklaration

extern long WINAPI
IPS7GetPLCName(long Ref, char *Str); 
 
extern long WINAPI
IPS7GetModuleName(long Ref, char *Str); // 1.55
 
extern long WINAPI
IPS7GetPlantIdName(long Ref, char *Str); // 1.55
 
extern long WINAPI
IPS7GetCopyrightEntry(long Ref, char *Str); // 1.55
 
extern long WINAPI
IPS7GetModuleSNr(long Ref, char *Str); // 1.55
 
extern long WINAPI
IPS7GetModuleTypeName(long Ref, char *Str); // 1.55
 
extern long WINAPI
IPS7GetMMCSNr(long Ref, char *Str); // 1.55
 
extern long WINAPI
IPS7GetOEMId(long Ref, char *Str); // 1.55
 
extern long WINAPI
IPS7GetLocationDesignation (long Ref, char *Str); // 1.55

Delphi / Pascal Funktionsdeklaration

{ -- Version 1.55--}
FUNCTION
IPS7GetPLCName(Ref : LongInt; Str : PAnsiChar) : LongInt;
  stdcall; external 'IPS7LNK.DLL'; 
 
{ -- Version 1.55 --}
FUNCTION
IPS7GetModuleName(Ref : LongInt; Str : PAnsiChar) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
{ -- Version 1.55 --}
FUNCTION
IPS7GetPlantIdName(Ref : LongInt; Str : PAnsiChar) : LongInt;
  stdcall; external 'IPS7LNK.DLL';
 
{ -- Version 1.55 --}
FUNCTION
IPS7GetCopyrightEntry(Ref : LongInt; Str : PAnsiChar) : LongInt;
  stdcall; external 'IPS7LNK.DLL';
 
{ -- Version 1.55 --}
IPS7GetModuleSNr(Ref : LongInt; Str : PAnsiChar) : LongInt;
  stdcall; external 'IPS7LNK.DLL';
 
{ -- Version 1.55 --}
FUNCTION
IPS7GetModuleTypeName(Ref : LongInt; Str : PAnsiChar) : LongInt;
  stdcall; external 'IPS7LNK.DLL';
 
{ -- Version 1.55 --}
FUNCTION
IPS7GetMMCSNr(Ref : LongInt; Str : PAnsiCHar) : LongInt; 
  stdcall; external 'IPS7LNK.DLL';
 
{ -- Version 1.55 --}
FUNCTION
IPS7GetOEMId(Ref : LongInt; Str : PAnsiChar) : LongInt;
  stdcall; external 'IPS7LNK.DLL';
 
{ -- Version 1.55 --}
FUNCTION
IPS7GetLocationDesignation (Ref : LongInt; Str : PAnsiChar) : LongInt;
  stdcall; external 'IPS7LNK.DLL';

Es gelten die selben Return-Werte wie für die Lese/Schreibfunktionen!

IPS7GetDBLen

Ab Version 1.78

Name Name (PHP) Beschreibung / Zweck
IPS7GetDBLen Liest die Datenbausteinlänge der übergebenen Datenbausteinnummer aus.

Aufrufparameter

Nr Datentyp Datentyp (PHP) Name Funktion
1 32-Bit unsigned long Ref Die Referenz der Verbindung, welche mit IPS7Open generiert wurde. Dient zur internen Identifikation der Verbindung
2 32-Bit unsingend long DBNr gewünschte Datenbausteinnummer

C/C++ Funktionsdeklaration

extern long WINAPI 
IPS7GetDBLen(long Ref, unsigned long DBNr);

Delphi / Pascal Funktionsdeklaration

FUNCTION
IPS7GetDBLen(Ref : LongInt, DBNr : LongWord) : LongInt;
  stdcall; external 'IPS7LNK.DLL';

Return-Werte Read/Write

Wert Fehlerbeschreibung Bedeutung/Reaktion
> 0 ausgelesene Datenbausteinlänge
-35 Datenbaustein existiert nicht Datenbausteinnummer prüfen
-36 Funktion wird nicht von der SPS unterstützt
Es gelten die selben Return-Werte wie für die Lese/Schreibfunktionen!

C/C++

 unsigned char ByteBuffer[512];  
 unsigned short int WordBuffer[512]; 
 
 //Aufruf der Bytefunktion z.B. Lese DB 10, ab DW0, 10 Worte  
 IPS7RdW (Ref,'D',10, 0, 10, WordBuffer);
 
 //Aufruf der Bytefunktion z.B. Lese MB 0 , 10 Bytes  
 IPS7RdB (Ref,'M' ,0, 0, 10, ByteBuffer); 

Nach erfolgreichem Aufruf gilt:

PC = SPS
WordBuffer[0] = DB10.DBW0
WordBuffer[1] = DB10.DBW2
WordBuffer[2] = DW10.DBW4
ByteBuffer[0] = MB 0
ByteBuffer[1] = MB 1

Delphi

  ByteBuffer array [0..511] of Byte; 
  WordBuffer array [0..511] of Word;  
 
  //Aufruf der Wortfunktion z.B. Lese DB 10, ab DW0, 10 Worte  
  IPS7RdW (Ref, LongWord ('D'), 10, 0, 10, @WordBuffer[0]);  
 
  //Aufruf der Bytefunktion z.B. Lese MB 0 , 10 Bytes 
  IPS7RdB (Ref,'M' ,0, 0, 10, @ByteBuffer[0]); 

VB

  Dim ByteBuffer (0 to 511) as Byte; 
  Dim WordBuffer (0..511) as Word; 
 
  //Aufruf der Wortfunktion z.B. Lese DB 10, ab DW0, 10 Worte
  IPS7RdW (Ref, 68, 10, 0, 10, WordBuffer(0)) 
 
  //Aufruf der Bytefunktion z.B. Lese MB 0 , 10 Bytes
  IPS7RdB (Ref, 77, 0, 0, 10, ByteBuffer(0)); 
 

Nach erfolgreichem Aufruf gilt:

PC = SPS
WordBuffer[0] = DB10.DBW0
WordBuffer[1] = DB10.DBW2
WordBuffer[2] = DW10.DBW4
ByteBuffer[0] = MB 0
ByteBuffer[1] = MB 1

Release Notes