goto english

 

PC-S7-MPI-LINK

 

Datenkopplung

 

PC – SIMATIC

 

S7 200/300/400

 

mit

PC-MPI/PPI-Adapter

 

 

Version 1.34
Vorausetzungen:

Betriebssystem: MS-Windows 95,98 , 2000 oder NT 4.0

Hardware: PC-MPI-Adapter an RS232 des PC
SPS: Simatic S7 300/400 mit  MPI-Schnittstelle

 

Vorausetzungen/ Einschränkung der Demoversion und Schulversion:

Die Demoversion läuft ca. 10 Minuten, dann wird der Fehler 4660 von den Funktionen zurückgeliefert.

Die Schulversion läßt nur den Zugriff auf  Merker und DB10 zu. Ansonster liefert der Treiber den Fehler –10.
Die Demoprogramme wurden mit folgenden Programmen erzeugt:
MSVC 6.0 , Excel 2000,  Delphi 5.0 , Visual Basic 6.0

 

Lieferumfang:
Auf der Lieferdiskette / CD finden Sie folgende Dateien

Hauptverzeichnis

 

PCS7EASY.htm

diese Datei – Dokumentation

Changes.Txt

Datei über Fehlerbeseitigung

 

Verzeichnis ´C´

Dateien für C / C++

PCS7EASY.H

Header-Datei für C / C++

PCS7EASY.DLL

Treiber DLL

PCS7EASY.LIB

Lib-Datei zum Linken mit C++

ES7DEMO.DSP

Projektdatei für Visual C++ V 6.00

ES7DEMO.C

Beispielprogramm in ´C´ einer Konsolenapplikation

ES7DEMO.EXE

EXE-Datei der C-Demo

 

Verzeichnis ´Delphi´

Dateien für Delphi

PCS7EASY.PAS

Delphi-Header TPU im Quellcode

PCS7EASY.DLL

Treiber DLL

ES7DEMO.exe

EXE-Datei der Delphidemo

ES7DEMO.cfg

ES7DEMO.dof

ES7DEMO.dpr

ES7DEMO.res

PCS7EASY.dcu

main.dcu

main.dfm

main.pas

OEM.BMP

Delphi - Projektdateien

 

Verzeichnis VisualBasic

Dateien für Visual Basic

PCS7EASY.DLL

Treiber DLL, Achtung: Für Visual Basic und Excel diese Datei ins Windowsverzeichnis kopieren !

PCS7EASY.BAS

Header / Moduldatei für Visual Basic

ES7DEMO.EXE

EXE-Datei der VB-Demo

ES7DEMO.FRM
ES7DEMO.FRX
ES7DEMO.VBP
ES7DEMO.VBW

Visual Basic Projektdateien

 

Verzeichnis Excel

Dateien für Excel

PCS7EASY.DLL

Treiber DLL, Achtung: Für Visual Basic und Excel diese Datei ins Windowsverzeichnis kopieren !

PCS7EASY.BAS

Header/Moduldatei für Visualbasic

ES7DEMO.XLS

Excel-Datei mit Makro für Demo

 

 

Funktionsweise:

PC-S7-LINK ist eine DLL für MS-Windows (95/98/200 oder NT 4.0), welche die Anbindung eines PC an die MPI-Schnittstelle der SIMATCI S7 von Siemens ermöglicht. Der PC wird über die RS 232 mittels des PC-MPI-Adapters direkt mit der MPI-Schnittstelle der SPS verbunden. Mit einfachen Funktionen kann der Anwender schnell  mit C, C++, Delphi, Visual Basic oder auch Excel auf die Daten SPS’en im Netz zugreifen. Zur Kopplung wird nur die MPI-Adresse der SPS benötigt. Sofort kann auf Merker. Eingänge, Ausgänge und auch Datenbausteine der SPS lesend oder auch schreiben zugegriffen werden.

 


Funktionsbeschreibung im Detail:

Bitte beachten Sie: Die Funktionen werden mit der Standard RS232 -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 System zuständig ist

Folgende Funktionen stehen zur Verfügung:

 

Funktionen zur Initialisierung:

 

Funktion

Beschreibung / Zweck

ES7Open

ES7OpenEx

Dient zur Initialisierung der seriellen Schnittstelle. Es findet an dieser Stelle keine Prüfung statt, ob die SPS vorhanden ist

Achtung: Beim ersten Aufruf der Lese- oder Schreibfunktionen wird, die MPI-Verbindung automatisch gestartet.

Weiter hin wird geprüft, ob Baudrate und lokale MPI-Adresse mit einem eventuell vorausgeführten „ES7Open“ identisch sind.

Um auf mehrere SPS im selben MPI-Bus zugreifen zu können muss für jede SPS ein „ES7Open“ ausgeführt  werden. Jedoch mit entsprechender  SPS-MPI-Adresse

 

Aufrufparameter:

Nr.

Speicherbreite

Bezeichnung

Funktion

1

32-Bit-Wert ohne Vorzei.

Com

Nummer der seriellen Schnittstelle:

0 = COM1

1 = COM2 ..

2

32-Bit Wert ohne Vorzei.

SPSMPIAdr

MPI-Adresse der SPS, welche über diese Verbindung angesprochen werden soll

3

32-Bit Wert ohne Vorzei.

LocalMPIAdr

Die MPI-Adresse des PC-MPI-Kabels am PC

4

32-Bit Wert ohne Vorzei.

Baud

Baudrate mit  welcher zwischen PC und SPS kommuniziert werden soll. Unterstütz werden;

9600, (nur S7 200) 19200, oder 38400

5

32-Bit Wert ohne Vorzei.

SPSTyp

200 = S7 200 (hier bitte PPI-Kabel verwenden)

ungleich 200 -> SPS ist 300 oder 400 -> MPI-Adapter verrwenden

6

32-Bit Wert ohne Vorzei.

MPIBaud

nur ES7OpenEx

Baudrate auf MPI-Bus ( ab V 1.25)

0 = 187,5 kBit/s

1 = 19,2 kBit/s

2 = 1,5 Mbit/s

alle andere Werte = 187 kBit/s

Funktion

Beschreibung / Zweck

 

ES7OpenMPILan

Verbindet mit dem MPI-LAN (Ethernetadapter). Ansonsten werden dieselben Operationen durchgeführt wie bei ES7Open. Die Funktionen unterscheiden sich jedoch im Aufruf. Aufrufparameter beachten!

Zudem gibt es u.U. andere Rückgabewerte.

 

 

Aufrufparameter:

Nr.

Speicherbreite

Bezeichnung

Funktion

1

Zeiger auf „0“-terminierte Zeichenkette (C-String, 32-Bit Zeiger

IPAdr

IP-Adresse des MPI-LAN-Adapters  im Format: x.x.x.x. Beispiel: 192.169.0.100

2

32-Bit Wert ohne Vorzei.

RxTimeout

Timeout in Millisekunden für Warten auf TCP/IP-Paket von MPI-LAN 0 bedeutet Standardeinstellung = 5000 ms

3

32-Bit Wert ohne Vorzei.

TxTimeout

Timeout in Millisekunden für Senden eines  TCP/IP-Paketes an MPI-LAN 0 bedeutet Standardeinstellung = 5000 ms

4

32-Bit Wert ohne Vorzei.

ConnectTimeout

Timeout in Millisekunden für Warten auf Verbindungsaufbau mit MPI-LAN

0 bedeutet  Standardeinstellung = 5000 ms ( 5sec.)

muss bei Bedarf verlängert werden.

5

32-Bit Wert ohne Vorzei.

SPSMPIAdr

MPI-Adresse der SPS, welche über diese Verbindung angesprochen werden soll

6

32-Bit Wert ohne Vorzei.

LocalMPIAdr

Die MPI-Adresse des PC-MPI-Kabels am PC

7

32-Bit Wert ohne Vorzei.

SPSTyp

200 = S7 200 (hier bitte PPI-Kabel verwenden)

ungleich 200 -> SPS ist 300 oder 400 -> MPI-Adapter verrwenden

8

32-Bit Wert ohne Vorzei.

MPIBaud

Baudrate auf MPI-Bus ( ab V 1.25)

0 = 187,5 kBit/s

1 = 19,2 kBit/s

2 = 1,5 Mbit/s

alle andere Werte = 187 kBit/s

 

 


Rückgabewert:

Die Funktionen liefert einen 32-Bit Wert mit Vorzeichen als Rückgabewert mit folgender Bedeutung:

Wert

Fehlerbeschreibung

Bedeutung

> 0

alles OK

Die Rückgabe ist die Referenznummer für diese Verbindung und muss bei allen anderen Funktionen als Eingangsparameter Ref verwendet werden

-1

Keine Resourcen mehr frei. 

Maximale Anzahl an verfügbaren Verbindungen erreicht.

-2

Falsche Baudrate angegeben

Die Schnittstelle ist bereits geöffnet, jedoch wurde eine andere Baudrate angegeben  als bei einem frührem ES7Open.

-3

Falsche lokale MPI-Adresse

Die Schnittstelle ist bereits geöffnet, jedoch wurde eine andere lokale MPI-Adresse angegeben  als bei einem frührem ES7Open.

-4

Schnittstelle nicht vorhanden

Die angegebene Schnittstelle ist im System entweder nicht vorhanden oder wird bereits von einer anderen Anwendung verwendet.

-5

allgemeiner Fehler

 

-6

kein Speicher für internen IP-Pool vorhanden

Die Anzahl der maximal verfügbaren MPI-LAN – Verbindungen ist bereits erreicht.

-7

IP-Adresse fehlerhaft

Das Format der IP-Adresse ist Fehlerhaft.

 


 

Funktion

Beschreibung / Zweck

ES7Close

Schließt die durch Ref gekennzeichnete Verbindung, Gegebenenfalls wird hier auch die serielle Schnittstelle geschlossen

 

Aufrufparameter:

Nr.

Speicherbreite

Bezeichnung

Funktion

1

32-Bit Wert ohne Vorzei.

Ref

Die Referenz der Verbindung, welche mit ES7Open generiert wurde. Dient zur internen Identifikation der Verbindung

 

Rückgabewert:

Die Funktionen liefert einen 32-Bit Wert mit Vorzeichen als Rückgabewert mit folgender Bedeutung:

Wert

Fehlerbeschreibung

Bedeutung / Reaktion

0

alles OK

Speicher wieder freigegeben und Verbindung, wenn vorhanden geschlossen

-1

Mit der angegebenen Referenznummer wurde kein ES7Open durchgeführt

Haben Sie ES7Open aufgerufen ?.

-99

Die Referenznummer ist ungültig

------------------------

 


Funktionen zum Lesen und Schreiben

Funktion

Beschreibung / Zweck

ES7RdW

wortweise lesen aus der SPS (E,A,M, DB, C )

ES7RdB

byteweise lesen aus der SPS (E,A,M)

ES7WrW

wortweise schreiben in die SPS (E,A,M, DB, C )

ES7WrB

byteweise schreiben in die SPS ((E,A,M)

ES7RdDW

doppelwortweise lesen aus der SPS (A,M,DB,T)

ES7WrDW

doppelwortweise schreiben in die SPS (A,M,DB,T)

ES7RdReal

Real (Fließpunktzahl) lesen (E,A,M, DB )

ES7WrReal

Real (Fließpunktzahl) schreiben (E,A,M, DB )

 

Aufrufparameter:

Die Lese- und Schreibfunktionen besitzen die selben Eingangparameter:

Nr.

Speicherbreite

Bezeichnung

Funktion

1

32-Bit Wert ohne Vorzei.

Ref

Die Referenz der Verbindung, welche mit ES7Open generiert wurde. Dient zur internen Identifikation der Verbindung

2

32-Bit Wert ohne Vorzei.

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

´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. Werden aber für den PC ins Binärformat konvertiert. Die Zählerwerte reichen von 0 – 999.

3

32-Bit Wert ohne Vorzei.

DBNr

Datenbausteinnummer, diese wird nur beim Typ ´D´ verwendet. Ansonsten steht dort der Wert „0“

4

32-Bit Wert ohne Vorzei.

Ab

Bei Wortoperationen Startwort, bei Byte-Funktionen Startbyte. Bei Doppelwortfunktionen StartNr (Timer) bzw. StartByte ! Bei Timer oder Zähler ist dies die Nummer des ersten Elements, welches gelesen werden soll.

5

32-Bit Wert ohne Vorzei.

Anz

Anzahl der Einheiten (Byte, Worte, Doppelworte Real, oder Einheiten, z.B. Timer ), die gelesen bzw. geschrieben werden sollen.

6

32-Bit Adresse

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.

 

Funktionen zum Bit-Lesen, Setzen und Rücksetzten

Funktion

Beschreibung / Zweck

ES7RdBit

ein Bit lesen SPS (E,A,M, DB )

ES7SetBit

ein Bit setzen lesen aus der SPS (E,A,M,DB)

ES7ResetBit

ein Bit zurücksetzen in der SPS (E,A,M,DB )

 

Aufrufparameter:

Die Lese- und Schreibfunktionen besitzen die selben Eingangparameter:

Nr.

Speicherbreite

Bezeichnung

Funktion

1

32-Bit Wert ohne Vorzei.

Ref

Die Referenz der Verbindung, welche mit IS7Open generiert wurde. Dient zur internen Identifikation der Verbindung

2

32-Bit Wert ohne Vorzei.

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

3

32-Bit Wert ohne Vorzei.

DBNr

Datenbausteinnummer, diese wird nur beim Typ ´D´ verwendet. Ansonsten steht dort der Wert „0“

4

32-Bit Wert ohne Vorzei.

Ab

Byte Adresse z.B. M 10.0, dann steht hier 10.

5

32-Bit Wert ohne Vorzei.

Bit

BitNr muss zwischen 0 und 7 liegen. z.B. bei M5.4 steht hier 4.

6

32-Bit Adresse

Buffer

Dieser Parameter ist nur für EPS7RdBit. Die Adresse auf den  Zielspeicher im PC. Zeiger auf ein Byte. Wenn bBit gestzt ist Inhalt 1 sonst 0.

Beispiel: lese M 6.5

BYTE W;

IPS7RdBit (Ref, ´M`, 0, 6,5 & W);

 

 

Rückgabewert:

Die Funktionen liefert einen 32-Bit Wert mit Vorzeichen als Rückgabewert mit folgender Bedeutung:

Wert

Fehlerbeschreibung

Reaktion

0

alles OK

Daten auswerten

-1

Zeitüberlauf, gewünschte SPS offensichtlich nicht oder nicht mehr vorhanden

Einfach weitere Schreib- und Leseaufträge absetzten der Treiber baut die Verbindung automatisch auf.

 

Wert

Fehlerbeschreibung

Reaktion

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.                                   

-10

Gewünschter Datentyp nicht erlaubt oder wird nicht unterstützt.                                   

Prüfen, ob der Code für Datentyp in Ordnung ist.  Verwenden Sie die Schullizenz ? Dann sind nur Merker und DB10 zulässig !                                 

-5

Allgemeiner Fehler                                

----------------------------

-8

Speicherfehler

angeforderter Speicher im PC ist nicht verfügbar

-9

Bereichsüberschreitung

z.B Timer > 9990000 ms

Zähler > 999

-99

Die Referenznummer ist ungültig

Haben Sie ES7Open aufgerufen ?

4660

Demozeit ist abgelaufen

Vollversion erwerben


!!! Beachte bei Wortoperationen !!!             

Beispiel für Merker. Dies gilt auch für Eingänge Ausgänge und Datenworte                                 

Die Wortadressierung in der SPS  belegt jeweils folgende Bytes.                 

Worteadresse

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 (ES7RdW und ES7WrW) 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  ES7RdW (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.


Programmbeispiele:

a) Aufruf von C oder C++ aus:

                   unsigned char ByteBuffer[512];

                   unsigned short int WordBuffer[512];

                   // Aufruf der Bytefunktion z.B. Lese DB 10, ab DW0, 10 Worte
                   ES7RdW (Ref, ´D´, 10, 0, 10, WordBuffer);
                   // Aufruf der Bytefunktion z.B. Lese MB 0 , 10 Bytes
                   ES7RdB (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

 

 

b) Aufruf von Delphi aus:

                   ByteBuffer array [0..511] of Byte;

                   WordBuffer array [0..511] of Word;

                   // Aufruf der Wortfunktion z.B. Lese DB 10, ab DW0, 10 Worte
                   ES7RdW (Ref, LongWord (´D´), 10, 0, 10, @WordBuffer[0]);
                   // Aufruf der Bytefunktion z.B. Lese MB 0 , 10 Bytes
                   ES7RdB (Ref, ´M´, 0, 0, 10, @ByteBuffer[0]);

 


c) Aufruf von Visual Basic aus:

                   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
                   ES7RdW (Ref, 68, 10, 0, 10, WordBuffer(0))
                   // Aufruf der Bytefunktion z.B. Lese MB 0 , 10 Bytes
                   ES7RdB (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

 

 


Funktionsdeklarationen:
C-Header:

long WINAPI

ES7Open (DWORD  Com, DWORD SPSMPIAdr, DWORD LocalMPIAdr, DWORD Baud, DWORD SPSTyp);

 //---------------------------

long WINAPI

ES7Close (long Ref);

//---------------------------

long WINAPI

ES7RdW (long Ref, DWORD Typ, DWORD DBNr, DWORD AbWort, DWORD WortAnz,

     LPWORD Buffer) ;

//---------------------------

long WINAPI

ES7RdB (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPBYTE Buffer);

//---------------------------

long WINAPI

ES7WrW (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPWORD Buffer);

//---------------------------

long WINAPI

ES7WrB (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPBYTE Buffer);

//---------------------------

 

long WINAPI

ES7GetMPIMembers (long Ref, LPWORD Teiln) ;

//---------------------------

long WINAPI

ES7RdBit (long Ref,  DWORD Typ, DWORD DBNr, DWORD Byte, DWORD Bit, LPBYTE Buffer);

 

long WINAPI

ES7SetBit (long Ref, DWORD Typ, DWORD DBNr, DWORD Byte, DWORD Bit);

 

long WINAPI

ES7ResetBit (long Ref, DWORD Typ, DWORD DBNr, DWORD Byte, DWORD Bit);

 

long WINAPI

ES7RdReal (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, double *Buffer);

 

long WINAPI

ES7WrReal (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, double *Buffer);

 

long WINAPI

ES7RdDW (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPDWORD Buffer);

 

long WINAPI

ES7WrDW (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPDWORD Buffer);

 

 

Visual Basic – Header:

Declare Function

ES7Open& Lib "PCS7EASY.dll" (ByVal Com&, ByVal SPSMPIAdr&, _

                                              ByVal LocalMPIAdr&, ByVal Baud&, ByVal SPSTyp&)

‘---------------------------

Declare Function

ES7Close& Lib "PCS7EASY.dll" (ByVal Ref&)

‘---------------------------

Declare Function

ES7RdW& Lib "PCS7EASY.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, _

 ByVal WortAnz&, Wert As Integer)

‘---------------------------

Declare Function

ES7RdB& Lib "PCS7EASY.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, _

                                                   ByVal WortAnz&, Wert As Byte)

‘---------------------------

Declare Function

ES7WrW& Lib "PCS7EASY.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, _

                                                    ByVal WortAnz&, Wert As Integer)

‘---------------------------

Declare Function

ES7WrB& Lib "PCS7EASY.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, _

                                                  ByVal WortAnz&, Wert As Byte)

‘---------------------------

Declare Function ES7RdBit& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal ByteNr&, ByVal BitNr&, Wert As Byte)

‘---------------------------

 

Declare Function ES7SetBit& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal ByteNr&, ByVal BitNr&)

‘---------------------------

 

Declare Function ES7ResetBit& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal ByteNr&, ByVal BitNr&)

‘---------------------------

 

Declare Function ES7RdReal& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Double)

‘---------------------------

 

Declare Function ES7WrReal& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Double)

‘---------------------------

 

Declare Function ES7RdDW& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Long)

‘---------------------------

 

Declare Function ES7WrDW& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Long)

‘---------------------------

 

 

Delphi-Header:

unit PCS7EASY;

 

TYPE PWORD =  ^WORD;

TYPE PBYTE =  ^BYTE;

 

FUNCTION

ES7Open (Com :LongWord; SPSMPIAdr : LongWord; LocalMPIAdr : LongWord; Baud : LongWord;

SPSTyp : LongWord) : LongInt; stdcall; external 'PCS7EASY.DLL';     

(* ------------------------- *) 

FUNCTION

ES7Close (Ref : LongInt) : LongInt; stdcall; external 'PCS7EASY.DLL';     

(* ------------------------- *)

FUNCTION

ES7RdW (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword;

WortAnz : Longword;  Buffer : PWORD)  : LongInt; stdcall; external 'PCS7EASY.DLL';

(* ------------------------- *)

 

FUNCTION

ES7RdrB (Ref : LongInt; Typ : Longword;  DBNr: Longword;

          Ab : Longword;  Anz : Longword; Buffer: PBYTE) : LongInt; stdcall; external 'PCS7EASY.DLL';

(* ------------------------- *)

 

FUNCTION

ES7WrW (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword;

WortAnz : Longword; Buffer : PWORD)  : LongInt; stdcall; external 'PCS7EASY.DLL';

(* ------------------------- *)

FUNCTION

ES7WrB (Ref : LongInt; Typ : Longword;  DBNr: Longword;

         Ab : Longword;  Anz : Longword; Buffer: PBYTE) : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

EPS7RdBit (Ref : LongInt; Typ : Longword;  DBNr: Longword;

           ByteNr : Longword;  BitNr : Longword; Buffer: PBYTE) : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

ES7SetBit (Ref : LongInt; Typ : Longword;  DBNr: Longword;

            ByteNr : Longword;  BitNr : Longword) : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

ES7ResetBit (Ref : LongInt; Typ : Longword;  DBNr: Longword;

            ByteNr : Longword;  BitNr : Longword) : LongInt; stdcall; external 'PCS7EASY.DLL';

FUNCTION

ES7RdDW (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword; WortAnz : Longword;  Buffer : PDWORD)  : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

ES7WrDW (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword; WortAnz : Longword;  Buffer : PDWORD)  : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

ES7RdReal (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword; WortAnz : Longword;  Buffer : PDOUBLE)  : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

ES7WrReal (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword; WortAnz : Longword;  Buffer : PDOUBLE)  : LongInt; stdcall; external 'PCS7EASY.DLL';

 

 

implementation

 

begin

end.

 

Beispiel für Visual-Basic im Excel-Demoprogramm

 

Dim Ref As Long

Dim Buf(0 To 512) As Integer

Dim Res As Long

Dim Com As Long

Dim LocalMPIAdr As Long

Dim SPSMPIAdr As Long

Dim Baud As Long

Dim SPSTyp As Long

Dim DBNr As Long

 

 

 

Private Sub CommandButton1_Click()

DBNr = Tabelle1.Cells(14, 3) 'DBNr aus Tabelle übernehmen

Com = Tabelle1.Cells(11, 3) - 1 'ComNr übernehmen

Baud = Tabelle1.Cells(11, 5) 'Baudrate übernehmen

LocalMPIAdr = Tabelle1.Cells(12, 3) 'lokale MPI-Adresse übernehmen

SPSMPIAdr = Tabelle1.Cells(12, 5) 'SPS MPI-Adresse übernehmen

SPSTyp = Tabelle1.Cells(13, 3) 'SPS-Typ

 

Ref = ES7Open(Com, SPSMPIAdr, LocalMPIAdr, Baud, SPSTyp)

 

If Ref >= 0 Then ' Ref muß >= 0 sein

Res = ES7RdW(ByVal Ref, 68, DBNr, 0, 10, Buf(0))

  If Res = 0 Then

  Tabelle1.Cells(13, 5) = "Lesen OK"

     For i = 0 To 9

      Tabelle1.Cells(i + 16, 3) = Buf(i)

    Next i

  Else

   Tabelle1.Cells(13, 5) = Res

   If Res = -1 Then

     Tabelle1.Cells(13, 5) = "Kabel oder SPS nicht vorhanden"

   End If

   If Res = -2 Then

     Tabelle1.Cells(13, 5) = "Keine Resourcen mehr frei"

   End If

   If Res = -3 Then

     Tabelle1.Cells(13, 5) = "Referenz war nicht geöffnet"

   End If

   If Res = 2 Then

     Tabelle1.Cells(13, 5) = "DB zu klein oder nicht vorhanden"

   End If

   If Res = -5 Then

     Tabelle1.Cells(13, 5) = "allgemeiner Fehler"

   End If

   If Res = -10 Then

     Tabelle1.Cells(13, 5) = "Datentyp falsch"

   End If

   If Res = -99 Then

     Tabelle1.Cells(13, 5) = "Referenznummer falsch"

   End If

   If Res = 4660 Then

     Tabelle1.Cells(13, 5) = "Demozeit abgelaufen"

   End If

    For i = 0 To 9

      Tabelle1.Cells(i + 16, 3) = "Fehler"

    Next i

  End If

  Res = ES7Close(Ref)

 

  Ref = -1

Else

  Tabelle1.Cells(13, 5) = Ref

  If Ref = -1 Then

    Tabelle1.Cells(13, 5) = "keine Resourcen frei!"

  End If

  If Ref = -2 Then

    Tabelle1.Cells(13, 5) = "falsche Baudrate"

  End If

  If Ref = -3 Then

    Tabelle1.Cells(13, 5) = "lokale MPI-Adr falsch"

  End If

  If Ref = -4 Then

    Tabelle1.Cells(13, 5) = "COM nicht vorhanden"

  End If

 


(english)

PC-S7-MPI-LINK

 

data link

 

PC – SIMATIC

 

S7 200/300/400

 

with
PC-MPI-Adapter

or

PC-PPI-Adapter

 

 

Version 1.26

Requirement:

Operating system: MS-Windows 95,98 , 2000 or NT 4.0

Hardware: PC-MPI-Adapter on RS232 of the PC
PLC: Simatic S7 300/400 with  MPI-Interface

 

Requirement / restriction of demo version and school version:

The demo version runs about 10 minutes, then the error 4660 is returned by the functionsd.

In the version for school  there is only reading and writing to flags and DB 10 permitted.

The demo programs have been generated with the following development kits:
MSVC 6.0 , Excel 2000,  Delphi 5.0 , Visual Basic 6.0

 

Files on disk / directory structure:

Main directory

 

PCS7EASY.htm

documentation in german / english

Changes.Txt

documentation about changes

 

Directory ´C´

Files for C / C++

PCS7EASY.H

header-filei for C / C++

PCS7EASY.DLL

driver DLL

PCS7EASY.LIB

lib-file for linking with C/C++

ES7DEMO.DSP

project file for Visual C++ V 6.00

ES7DEMO.C

example program for ´C´ of  console application

ES7DEMO.EXE

EXE-file of C-demo

 

Directory ´Delphi´

Files for Delphi

PCS7EASY.PAS

Delphi-Header TPU in source code

PCS7EASY.DLL

driver DLL

ES7DEMO.exe

EXE-file for Delphi demo

ES7DEMO.cfg

ES7DEMO.dof

ES7DEMO.dpr

ES7DEMO.res

PCS7EASY.dcu

main.dcu

main.dfm

main.pas

OEM.BMP

Delphi – project files

 

Directory VisualBasic

Files for Visual Basic

PCS7EASY.DLL

Driver DLL, ATTENTION: for Visual Basic und Excel, please copy this file to the  Windows system directory!

PCS7EASY.BAS

header / modul file for Visual Basic

ES7DEMO.EXE

EXE-File for VB  demo

ES7DEMO.FRM
ES7DEMO.FRX
ES7DEMO.VBP
ES7DEMO.VBW

Visual Basic project files

 

Directory Excel

files for Excel

PCS7EASY.DLL

Driver DLL, ATTENTION: for Visual Basic und Excel, please copy this file to the  Windows system directory!

ES7DEMO.XLS

Excel file with VB script code

 

 

Mode of operation:

PC-S7-LINK is a DLL for MS-Windows (95/98/200 or NT 4.0), which allows a PC to communicate with a SIMATIC-S7 (200/300/400) over the PC-MPI adapter cable over the RS232 interface of the PC.

The way is: PC --à PC-MPI-Adapter à MPI-BUS

With Very simple functions the user is able to use the DLL in C, C++, Delphi, Visual Basic, Excel or any othe program language for Windows. For the connection with the PLC you only need the  MPI-address of the PLC. Now you can read and write flags, inputs, outputs and also datablocks.

 


The functions in detail:

Please consider: the functions take use of the standard Windows-RS232-interface routines. The consequence is that the function returns only after completion to the caller. for asynchronious operation you have to call the DLL-functions from a separate thread, which handles the communictaion for your application.

The following functions ar part of the DLL:

 

Functions for initializing:

 

Function

Description / Purpose

ES7Open

ES7OpenEx

Is used to initialize the serial interface. Note: No check is made wether the PLC ist here. This check is made by the read/write-funtions.

ES7Open ckecks wethter the baudrate and local MPI-address witha called „ES7Open“ before is the same.

To connect with more than one PLC ind the same MPI-bus, ther must be called  „ES7Open“ for every PLC with the the MPI-address of the PLC.

 

Calling parameter:

No.

Memory width

Designation

Function

1

32-bit value unsigned

Com

number of serial interface:

0 = COM1

1 = COM2 ..

2

32-bit value unsigned

PLCMPIAdr

MPI-address of the PLC, with which should be communicate with this connection

3

32-bit value unsigned

LocalMPIAdr

MPI-Address of the PC-MPI-adapter at the PC

4

32-bit value unsigned

Baud

daudrate between PC an PC/MPI-adapter, supported rates:

9600 (only S7 200), 19200, 38400, 57600 and 115200

5

32-bit value unsigned

PLCTyp

200 = S7 200 (please use PPI-cable or our own PC/MPI-Adapter)

not equal 200 -> PLC is S7 300 or S7 400

6

32-bit value unsigned

MPIBaud

only for

ES7OpenEx

Baudrate on  MPI-Bus (  V 1.25)

0 = 187,5 kBit/s

1 = 19,2 kBit/s

2 = 1,5 Mbit/s

other values = 187 kBit/s

 


 

Function

Description / Purpose

ES7OpenMPILan

Take connection with MPI-LAN (ethernet adapter) over TCP/IP. The operations are quiet the same as with function ‚ES7Open’. But note the calling parameters are different. An there are addional return values.

 

Calling parameter:

No.

Memory width

Designation

Function

1

pointer to a null terminated string

IPAddr

IP-address of the MPI-LAN- adapter in the format x.x.x.x. e.g.: 192.169.0.100

2

32-bit value unsigned.

RxTimeout

Timeout in milliseconds for waiting on the TCP/IP receiving packages.  0 means the default value of  5000 ms

3

32-bit value unsigned

TxTimeout

Timeout in milliseconds for waiting on the TCP/IP sedningpackages.  0 means the default value of  5000 ms

4

32-bit value unsigned

ConnectTimeout

Timeout in milliseconds for waiting on the TCP/IP connection.  0 means the default value of  5000 ms

1

32-bit value unsigned

Com

number of serial interface:

0 = COM1

1 = COM2 ..

2

32-bit value unsigned

PLCMPIAdr

MPI-address of the PLC, with which should be communicate with this connection

2

32-bit value unsigned

PLCMPIAdr

MPI-address of the PLC, with which should be communicate with this connection

3

32-bit value unsigned

LocalMPIAdr

MPI-Address of the PC-MPI-adapter at the PC

4

32-bit value unsigned

Baud

daudrate between PC an PC/MPI-adapter, supported rates:

9600 (only S7 200), 19200, 38400, 57600 and 115200

5

32-bit value unsigned

PLCTyp

200 = S7 200 (please use PPI-cable or our own PC/MPI-Adapter)

not equal 200 -> PLC is S7 300 or S7 400

6

32-bit value unsigned

MPIBaud

only for

ES7OpenEx

Baudrate on  MPI-Bus (  V 1.25)

0 = 187,5 kBit/s

1 = 19,2 kBit/s

2 = 1,5 Mbit/s

other values = 187 kBit/s


Return value:

The functions return a 32-bit signed value with following meaning:

Value

error description

meaning

> 0

everything is  Okay

The return is the reference number for this connection and must be used with all other functions for the parameter Ref.

-1

No more resources free. 

Max. number of available connections achieves.

-2

Bad baudrate indicated

The interface is already opened, however another baudrate was

indicated than for an earlier call of ES7Open.

-3

bad local MPI-Address indicated

The interface is already opened, however another local MPI-address was indicated than for an earlier call of ES7Open.

-4

interface not available

The indicated interface is either missing in the system or is already used by another application.

-5

general error

 

-6

 no memory for internal IP pool available

The maximize count of available MPI-LAN-connection has been reached before.

-7

IP address bad

The format of the IP address is bad.

 


 

Function

Description / Purpose

ES7Close

The connection indicated by Ref closes, here also the serial interface

is closed if necessary

 

Calling parameter:

No.

Memory width

Designation

Function

1

32-bit value unsigned

Ref

The reference of the connection, which was generated with ES7Open. Serves the connection for the internal identification.

 

Return value:

The functions return a 32-bit signed value with following meaning:

Value

error description

Meaning / reaction

0

everything is  Okay

Memory again approved and connection, if available closed

-1

With the indicated reference number no ES7Open was executed

You called ES7Open?

-99

The reference number is invalid

------------------------

 


Functions for reading and writing

Function

Description / Purpose

ES7RdW

word orientated read from the PLC (I, O,F,DB, C)

ES7RdB

byte orientated read from the PLC (I, O,F,DB, C)

ES7WrW

word orientated write from the PLC (I, O,F,DB, C)

ES7WrB

byte orientated write from the PLC (I, O,F,DB, C)

ES7RdDW

double word orientated read from the PLC (T, O, F, DB)

ES7WrDW

double word orientated write to PLC (T, O,F, DB)

ES7RdReal

real (floating pointl) read from PLC (I, O, F, DB)

ES7WrReal

real (floating point) write to PLC (I, O, F, DB)

 

Calling parameter:

The reading and writeing functions possess the same input parameters:

No.

Memory width

Designation

Function

1

32-bit value unsigned

Ref

The reference of the connection, which was generated with ES7Open. Serves the connection for the internal identification

2

32-bit value unsigned

Typ

Select the memory area of the  PLC (DB, I, O, F, T, C), welcher bearbeitet werden soll:

´D´ = 68 dec. means Datablock

´I´ = 73 dec, or ‘E’ = 69 dec., dec. means inputs

´O´ = 79 dec. or ‘A’ = 65dec. means outputs
´F´ = 70 dec. means flags

‘C’ = 67 dec. means counter

only with word functions . The counters ar BCD-coded in the PLC. But the driver takes the conversion in binary format for you. So you can user values from 0 .. 999 (binary reading and writing)

‘T’  = 84 dec. means timer

(only double word functions)

The timer are stored as BCD-values in the PLC including the base of time. The driver converts this value to a binary format in milliseconds.  The smallest timebase is 10 ms. If writing timers the driver chooses itself the best base of time. Note: there could be rounding problems! Look at your PLC-guide the timer format. The range of the time is 0 to 9990000 ms

3

32-bit value unsigned

DBNo

Datablock number, this is used only with the type ‘D’.  Otherwise there is the value 0?

4

32-bit value unsigned

Start

With word operations start word, with byte functions start byte. With double word or floating point operations this is the start byte !

For timer and counter this is the number of the first element to be read

5

32-bit value unsigned

Cnt

Number of units (byte or words, dwords or reals), which should be read or written.

6

32-bit Address

Buffer

The Address on the source or target memory in the PC.  With the word functions this is a pointer on a field of 16-Bit broad words, with the byte functions is an address on a field with 8-bits spreads bytes.

 

functions to read set and reset a single bit (BOOLEAN)

Name

function

ES7RdBit

read one bit from PLC (I,O,F,DB)

ES7SetBit

set one bit in the PLC (I,O,F,DB)

ES7ResetBit

reset one bit in the PLC (I,O,F,DB)

 

Calling parameter:

The reading and writeing functions possess the same input parameters:

No.

Memory width

Designation

Function

1

32-bit value unsigned

Ref

The reference of the connection, which was generated with ES7Open. Serves the connection for the internal identification

2

32-bit value unsigned

Typ

Select the memory area of the  PLC (DB, I, O, F), welcher bearbeitet werden soll:

´D´ = 68 dec. means Datablock

´I´ = 73 dec, or ‘E’ = 69 dec., dec. means inputs

´O´ = 79 dec. or ‘A’ = 65dec. means outputs
´F´ = 70 dec. means flags

3

32-bit value unsigned

DBNo

Datablock number, this is used only with the type ‘D’.  Otherwise there is the value 0?

4

32-bit value unsigned

ByteAddr

address of the byte  e.g. F 10.0 the value is 10 in this case.

5

32-bit value unsigned

Bit

Bit number must be between 0 and 7 e.g. F 5.4 the value is 4 in this case.

6

32-Bit address Adresse

Buffer

This Parameter is onyl required for EPS7RdBit. This is adresse to the destination memory in the PC a pointer to a BYTE.  Ait this point you get the vylue of the Bit 1 or 0.

e.g.: read  F 6.5

BYTE W;

EPS7RdBit (Ref, ´F, 0, 6,5, & W);

 

 

Return value:

The function supplies a 32-Bit signed value as return value with he following meaning:

Value

error description

reaction

0

all Okay

Data analyse

-1

Timeout, desired PLC obviously not or no longer available

Simply further writing and reading jobs issued the driver build the

connection automatically on.

 

Value

error description

reaction

2

Data block or data area does not exist, e.g. to access to "DB", which are too small or missing.

check if the requested data exists in PLC                                 

-10

Desired data type illegally or is not supported.                                  

check if code for datatype is okay.

Are you yousing the school version of the DLL ? You can only use Flag or DB 10.                                   

-5

General error                               

----------------------------

-8

memory allocation error

requested memory in PC is not available

-9

data range  error

e.g.  Timer > 9990000 ms

Counter > 999

-99

With the indicated reference number no ES7Open was executed

You called ES7Open?

4660

demo time is over

please order the full version

 

Consider with word operations!!!

Example for flags. This applies also to inputs of outputs and data block items the word

addressing into the PLC occupied the following in each case bytes.                

word address

assigned bytes

FW0

FB 0 und FB 1

FW1

FB 1 und FB 2

FW2

FB 2 und FB 3


You see that it can come when using odd word addresses to a duplicate.

Therefore the word functions (ES7RdW and ES7WrW) supports only the

access to even word addresses. This means that the start word number in the

driver is always multiplied by 2.  This method allaows to a simple image of

the PLC memory into the PC thus a word step in the PC 16 bits in the

PC and 16 bits are permitted in the PLC. Example:

WORD Buf[64];                

The call  ES7RdW (Ref, Typ, DBNr, 0, 5, Buf) has the following effect:

PC

PLC

Buf[0]

DW 0

Buf[1]

DW 2

Buf[2]

DW 4

You must bisect thus the start word number, in order to be able to

access in the PC correctly.  This applies also to data blocks !!  --> odd word addresses  of the PLC cannot be read or written word orientated.
program examles:

a) call from C oor C++ :

                   unsigned char ByteBuffer[512];

                   unsigned short int WordBuffer[512];

                   // call of the word function e.g. read DB 10, from DW0, 10 words
                   ES7RdW (Ref, ´D´, 10, 0, 10, WordBuffer);
                   // call of the byte function e.g. read MB , from MB0, 10 bytes
                   ES7RdB (Ref, ´M´, 0, 0, 10, ByteBuffer);

After the successfully call it applies:

PC

=

PLC

WordBuffer[0]

=

DB10.DBW0

WordBuffer[1]

=

DB10.DBW2

WordBuffer[2]

=

DW10.DBW4

ByteBuffer[0]

=

MB 0

ByteBuffer[1]

=

MB 1

 

b) call form Delphi:

                   ByteBuffer array [0..511] of Byte;

                   WordBuffer array [0..511] of Word;

                   // call of the word function e.g. read DB 10, from DW0, 10 words
                   ES7RdW (Ref, LongWord (´D´), 10, 0, 10, @WordBuffer[0]);
                   // call of the byte function e.g. read MB , from MB0, 10 bytes
                   ES7RdB (Ref, ´M´, 0, 0, 10, @ByteBuffer[0]);


c) call from Visual Basic:

                   Dim ByteBuffer (0 to 511) as  Byte;

                   Dim WordBuffer (0..511) as  Word;

                   // call of the word function e.g. read DB 10, from DW0, 10 words
                   ES7RdW (Ref, 68, 10, 0, 10, WordBuffer(0))
                   // call of the byte function e.g. read MB , from MB0, 10 bytes
                   ES7RdB (Ref, 77, 0, 0, 10, ByteBuffer(0));

After the successfully call it applies:

PC

=

PLC

WordBuffer[0]

=

DB10.DBW0

WordBuffer[1]

=

DB10.DBW2

WordBuffer[2]

=

DW10.DBW4

ByteBuffer[0]

=

MB 0

ByteBuffer[1]

=

MB 1

 

 


Function declarations:
C-Header:

long WINAPI

ES7Open (DWORD  Com, DWORD SPSMPIAdr, DWORD LocalMPIAdr, DWORD Baud, DWORD SPSTyp);

//---------------------------

 

long WINAPI

ES7OpenEx (DWORD  Com, DWORD SPSMPIAdr, DWORD LocalMPIAdr, DWORD Baud, DWORD SPSTyp, DWORD MPIBaud);

 

 //---------------------------

long WINAPI

ES7Close (long Ref);

//---------------------------

long WINAPI

ES7RdW (long Ref, DWORD Typ, DWORD DBNr, DWORD AbWort, DWORD WortAnz,

     LPWORD Buffer) ;

//---------------------------

long WINAPI

ES7RdB (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPBYTE Buffer);

//---------------------------

long WINAPI

ES7WrW (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPWORD Buffer);

//---------------------------

long WINAPI

ES7WrB (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPBYTE Buffer);

//---------------------------

 

long WINAPI

ES7GetMPIMembers (long Ref, LPWORD Teiln) ;

//---------------------------

long WINAPI

ES7RdBit (long Ref,  DWORD Typ, DWORD DBNr, DWORD Byte, DWORD Bit, LPBYTE Buffer);

 

long WINAPI

ES7SetBit (long Ref, DWORD Typ, DWORD DBNr, DWORD Byte, DWORD Bit);

 

long WINAPI

ES7ResetBit (long Ref, DWORD Typ, DWORD DBNr, DWORD Byte, DWORD Bit);

 

long WINAPI

ES7RdReal (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, double *Buffer);

 

long WINAPI

ES7WrReal (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, double *Buffer);

 

long WINAPI

ES7RdDW (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPDWORD Buffer);

 

long WINAPI

ES7WrDW (long Ref, DWORD Typ, DWORD DBNr, DWORD Ab, DWORD Anz, LPDWORD Buffer);

 

 

Visual Basic – Header:

Declare Function

ES7Open& Lib "PCS7EASY.dll" (ByVal Com&, ByVal SPSMPIAdr&, _

                                              ByVal LocalMPIAdr&, ByVal Baud&, ByVal SPSTyp&)

‘---------------------------

Declare Function

ES7OpenEx& Lib "PCS7EASY.dll" (ByVal Com&, ByVal SPSMPIAdr&, _

                                              ByVal LocalMPIAdr&, ByVal Baud&, ByVal SPSTyp&, _

                                              ByVal MPIBaud&)

‘---------------------------

Declare Function

ES7Close& Lib "PCS7EASY.dll" (ByVal Ref&)

‘---------------------------

Declare Function

ES7RdW& Lib "PCS7EASY.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, _

 ByVal WortAnz&, Wert As Integer)

‘---------------------------

Declare Function

ES7RdB& Lib "PCS7EASY.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, _

                                                   ByVal WortAnz&, Wert As Byte)

‘---------------------------

Declare Function

ES7WrW& Lib "PCS7EASY.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, _

                                                    ByVal WortAnz&, Wert As Integer)

‘---------------------------

Declare Function

ES7WrB& Lib "PCS7EASY.dll" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, _

                                                  ByVal WortAnz&, Wert As Byte)

‘---------------------------

Declare Function ES7RdBit& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal ByteNr&, ByVal BitNr&, Wert As Byte)

‘---------------------------

 

Declare Function ES7SetBit& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal ByteNr&, ByVal BitNr&)

‘---------------------------

 

Declare Function ES7ResetBit& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal ByteNr&, ByVal BitNr&)

‘---------------------------

 

Declare Function ES7RdReal& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Double)

‘---------------------------

 

Declare Function ES7WrReal& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Double)

‘---------------------------

 

Declare Function ES7RdDW& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Long)

‘---------------------------

 

Declare Function ES7WrDW& Lib "PCS7EASY.DLL" (ByVal Ref&, ByVal Typ&, ByVal DBNr&, ByVal AbWort&, ByVal WortAnz&, Wert As Long)

‘---------------------------

 

 

Delphi-Header:

unit PCS7EASY;

 

TYPE PWORD =  ^WORD;

TYPE PBYTE =  ^BYTE;

 

FUNCTION

ES7Open (Com :LongWord; SPSMPIAdr : LongWord; LocalMPIAdr : LongWord; Baud : LongWord;

SPSTyp : LongWord) : LongInt; stdcall; external 'PCS7EASY.DLL';     

(* ------------------------- *) 

FUNCTION

ES7OpenEx (Com :LongWord; SPSMPIAdr : LongWord; LocalMPIAdr : LongWord; Baud : LongWord;

SPSTyp : LongWord; MPIBaud : LongWord) : LongInt; stdcall; external 'PCS7EASY.DLL';     

(* ------------------------- *) 

 

FUNCTION

ES7Close (Ref : LongInt) : LongInt; stdcall; external 'PCS7EASY.DLL';     

(* ------------------------- *)

FUNCTION

ES7RdW (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword;

WortAnz : Longword;  Buffer : PWORD)  : LongInt; stdcall; external 'PCS7EASY.DLL';

(* ------------------------- *)

 

FUNCTION

ES7RdrB (Ref : LongInt; Typ : Longword;  DBNr: Longword;

          Ab : Longword;  Anz : Longword; Buffer: PBYTE) : LongInt; stdcall; external 'PCS7EASY.DLL';

(* ------------------------- *)

 

FUNCTION

ES7WrW (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword;

WortAnz : Longword; Buffer : PWORD)  : LongInt; stdcall; external 'PCS7EASY.DLL';

(* ------------------------- *)

FUNCTION

ES7WrB (Ref : LongInt; Typ : Longword;  DBNr: Longword;

         Ab : Longword;  Anz : Longword; Buffer: PBYTE) : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

EPS7RdBit (Ref : LongInt; Typ : Longword;  DBNr: Longword;

           ByteNr : Longword;  BitNr : Longword; Buffer: PBYTE) : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

ES7SetBit (Ref : LongInt; Typ : Longword;  DBNr: Longword;

            ByteNr : Longword;  BitNr : Longword) : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

ES7ResetBit (Ref : LongInt; Typ : Longword;  DBNr: Longword;

            ByteNr : Longword;  BitNr : Longword) : LongInt; stdcall; external 'PCS7EASY.DLL';

FUNCTION

ES7RdDW (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword; WortAnz : Longword;  Buffer : PDWORD)  : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

ES7WrDW (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword; WortAnz : Longword;  Buffer : PDWORD)  : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

ES7RdReal (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword; WortAnz : Longword;  Buffer : PDOUBLE)  : LongInt; stdcall; external 'PCS7EASY.DLL';

 

FUNCTION

ES7WrReal (Ref : LongInt; Typ : Longword; DBNr : Longword; AbWort : Longword; WortAnz : Longword;  Buffer : PDOUBLE)  : LongInt; stdcall; external 'PCS7EASY.DLL';

 

 

implementation

 

begin

end.