SoftPlcNet.dll

| ALPHA-VISION® SoftPlc7

# SoftPlcNet.dll

## 1. Allgemeines

In der SoftPlcNet.dll befindet sich die gesamte Funktionalität, die die Kommunikation zwischen mehreren SoftPlc7 ermöglicht. So wie originale SIMATIC S7 können SoftPlc7 Daten untereinander austauschen. Die dabei verwendeten Systemfunktionen müssen durch Hochsprachen-Funktionen ersetzt werden. Folgende AG-AG-Kommunikations-Bausteine werden von der SoftPlc7 unterstützt:

Baustein | Funktionsname | Send/Recv-Schnittstelle | SHM-Schnittstelle | UDP-Schnittstelle | Default-Ersetzung in der SoftPlc7
--- | --- | --- | --- | --- | ---
FC 5 | AG_SEND | ja | ja | ja | nein
FC 6 | AG_RECV | ja | ja | ja | nein
FC 50 | AG_LSEND | ja | ja | ja | nein
FC 60 | AG_LRECV | ja | ja | ja | nein
SFB 12 | BSEND | ja | ja | ja | ja
SFB 13 | BRCV | ja | ja | ja | ja
SFB 14 | GET | ja | ja | nein | ja
SFB 15 | PUT | ja | ja | nein | ja
SFB 22 | STATUS | ja | ja | nein | ja
SFB 23 | USTATUS | ja | ja | nein | ja

Prinzipiell kann jede (S)FC und jeder (S)FB durch eine beliebige Hochsprachen-Funktion mit passenden Parametern ersetzt werden, die Einstellungen dazu werden in der SoftPlc7.ini-Datei vorgenommen. Wenn dort allerdings Einträge fehlen, werden bei Systemfunktionsbausteinen (SFB) als Defaultwerte die Standard-Funktionen in der SoftPlcNet.dll verwendet. Die Funktionen FC 5, 6, 50 und 60 werden nicht automatisch durch DLL-Aufrufe ausgetauscht, da sie nicht unbedingt den AG_...-Funktionen entsprechen müssen, in diesem Fall muss manuell ein Eintrag gemacht werden.

## 2. Konfiguration

Um eine Kommunikation zwischen den SoftPlc7 zu ermöglichen, müssen für jedes AG die Verbindungen zu anderen AG in Erfahrung gebracht und für die SoftPlc7 projektiert werden. Die Daten hierzu und auch alle weiteren sind in der SoftPlcNet.ini-Datei einzutragen, diese liegt immer im Arbeitsverzeichnis der SoftPlc7. Alle möglichen Einträge und deren genaue Syntax werden unten erläutert.
Bei den Verbindungen muss noch unterschieden werden, ob die standardmäßige Send/Recv-Schnittstelle, die spezielle SHM-Schnittstelle oder die UDP-Schnittstelle verwendet wird.
Um die Send/Recv-Schnittstelle nutzen zu können, muss zuvor "ISO Ind. Ethernet" als benutzte Schnittstelle parametriert werden, etwa über den Menüpunkt "Extras->PG/PC-Schnittstelle einstellen..." im SIMATIC Manager.

Sektion/ Eintrag | Beschreibung | Default
--- | --- | ---
[Startup]
Window | Gibt an, ob ein Info- und Meldefenster geöffnet werden soll: 0: Fenster wird nicht geöffnet. 1: Fenster wird geöffnet. | 0
[Settings]
SR-Entrypoint | Zugriffspunkt der Verbindungsprojektierung. | ""
LAddr | Baugruppenadresse entsprechend der Projektierung innerhalb des SIMATIC Managers. Der Wert wird als hexadezimale Zahl interpretiert. | 0
AG-Typ | AG-Typ-Nummer, z.B. 300, 318, 400, 416 usw. | 400
SR-Entrypoint<n> (1 <= n <= 4) | 4 Zugriffspunkte für die Hardwareverbindungen. | (Eintrag von SR-Entrypoint)
LAddr<n> (1 <= n <= 4) | 4 Baugruppenadressen für die Hardwareverbindungen entsprechend der Projektierung innerhalb des SIMATIC Managers. Der Wert wird als hexadezimale Zahl interpretiert. | (Eintrag von LAddr)
[SR-Connections]
Count | Anzahl der Verbindungen. | 99

Conn_<n>

Für die Send/Recv-Schnittstelle:
(<lokale Conn-Id> ; <MAC-Adresse> ; <lokaler TSAP> ; <remoter TSAP> ; <Verbindungsaufbau> ; <LAddr-Index> ; <ServerConn>)

Für die SHM-Schnittstelle:
(<lokale Conn-Id> ; <remote Conn-Id> ; AG<lokale AG-Nummer> ; AG<remote AG-Nummer> ; <Verbindungsaufbau> ; <LAddr-Index>; ; <remote LAddr>)

Für die UDP-Schnittstelle:
(<lokale Conn-Id> ; UDP=[<lokale IP-Adresse>:]<remote IP-Adresse> ; <lokaler Port> ; <remoter Port> ; ; <LAddr-Index>)

Bedeutung:

""

lokale Conn-Id | Adressierungsparameter ID des lokalen AG
remote Conn-Id | Adressierungsparameter ID des remoten AG
MAC-Adresse | MAC-Adresse des remoten AG
lokaler TSAP | Transport Service Access Point des lokalen AG
remoter TSAP | Transport Service Access Point des remoten AG
lokale AG-Nummer | Instanz-Nummer des lokalen AG (->SoftPlc7.ini)
remote AG-Nummer | Instanz-Nummer des remoten AG (->SoftPlc7.ini)
lokaler Port | Der lokale Port ist der Port, unter dem UDP-Pakete geschickt werden.
remoter Port | Der remote Port ist der Port, an den die UDP-Pakete geschickt werden.
Verbindungsaufbau | SHM-Schn.: "n" oder "N" bedeutet ohne Quittungsverkehr, sonst mit Quittungsverkehr Send/Recv-Schn.: "p" oder "P" bedeutet passiver Verbindungsaufbau, sonst aktiv
LAddr-Index | Der Index gibt an, welche Hardware-Verbindung und damit welche LAddr<n> verwendet wird.
ServerConn | "1" bedeutet Server-Verbindung, sonst normale Verbindung; wichtig für GET, PUT, STATUS und USTATUS.
remote LAddr | LAddr des Ziel-AG. Ist der Eintrag leer, wird LAddr= 0 angenommen. (s.u. Redundanz)
lokale IP-Adresse | Die lokale IP-Adresse ist die Adresse, auf die sich die Socket-Funktion "bind" bezieht. Der Parameter (mit Doppelpunkt) kann weggelassen werden, als Adresse wird dann 0.0.0.0 (= INADDR_ANY) genommen.
remote IP-Adresse | Die remote IP-Adresse ist die Ziel-Adresse, an die das UDP-Paket gesendet wird. Zulässig ist der gesamte Adressraum. Die IP-Adresse 255.255.255.255 wird als BROADCAST erkannt. Möglich sind auch Multicast-Adressen im Bereich von 224.0.1.0 bis 239.255.255.255.
UDPMaxPacketCountRead | Maximale Anzahl der gelesenen UDP-Pakete, die pro Verbindung im Puffer gesammelt werden können. | 1024
[Run]
Trace | Gibt an, ob alle möglichen Debug-Ausgaben in eine Datei geschrieben werden sollen. 0: Es wird keine Datei geschrieben. 1: Eine Datei namens "SoftPlcNet_<AG-Nummer>.log" wird im Arbeitsverzeichnis der SoftPlc7 erzeugt. | 0
InfoMask | Gibt eine Bitmaske an, die festlegt, welche Meldungen im Fenster ausgegeben werden dürfen. Der Wert "-1" bewirkt, dass alle Ausgaben erscheinen. | 0
ListBox | Gibt an, ob Meldungen grundsätzlich im Fenster erscheinen dürfen. | 0
[Interface]
SendReceive | Name einer DLL, die die Send/Recv-Schnittstelle befriedigt. | s7_sr.dll
SharedMemory | Name einer DLL, die die SHM-Schnittstelle befriedigt. | schshm.dll

Die Send/Recv-Schnittstelle wird verwendet, um ISO-on-TCP-Verbindungen zwischen den SoftPlc7 aufzubauen.

Die SHM-Schnittstelle ist kundenspezifisch und steht nicht allgemein zur Verfügung. Es wird für jedes gesendete Paket ein Shared-Memory-Bereich allokiert und anderen SoftPlc7 zugänglich gemacht.

Nach dem Einspielen eines Snapshots werden alle Verbindungen zurückgesetzt.

## 3. Server-Verbindungen

Im Gegensatz zu den Funktionen AG_(L)SEND, AG_(L)RECV oder BSEND, BRCV müssen die Funktionen GET, PUT, STATUS und USTATUS intern teilweise asynchron abgearbeitet werden. Es gibt im remoten AG keinen Aufruf, der einem AG_(L)RECV oder BRCV entspricht. Eingehende Telegramme werden in zyklischen Abständen, d.h. in jedem TimeSlice, ausgewertet und Rücktelegramme erzeugt. Im lokalen AG wird entsprechend auf diese Telegramme reagiert, ebenfalls einmal pro TimeSlice. Um diese Serverfunktionalität anzustoßen, muss dazu in der SoftPlc7.ini-Datei in der Sektion [Plugin-Functions] folgender Eintrag hinzugefügt werden:

Func1=SoftPlcNet,ProcessSharedMemory (falls die SharedMemory-Schnittstelle verwendet wird)

bzw. Func1=SoftPlcNet,ProcessSendRecv (falls die Send/Recv-Schnittstelle verwendet wird)

Die gleichzeitige Verwendung dieser beiden Schnittstellen ist möglich, die Nummer nach dem Schlüsselwort "Func" muss natürlich angepasst werden.
Bei der UDP-Schnittstelle werden derzeit noch keine Server-Verbindungen unterstützt.

Bei der Send/Recv-Schnittstelle muss bei solchen Server-Verbindungen bei beiden AG in der SoftPlcNet.ini-Datei die Verbindung durch ServerConn=1 als solche gekennzeichnet werden.

## 4. P_SND_RK und P_RCV_RK

Für die Simulation eines CP341 werden HLL-Funktionen "P_RCV_RK" und "P_SND_RK" zur Verfügung gestellt, um die Funktionsbausteine FB 7 und FB 8 aus der SIMATIC-Bibliothek "CP Ptp" nachzubilden. Von den möglichen Treibern wird ausschließlich der ASCII-Treiber unterstützt. Es werden keine Leitungstreiber manipuliert (RTS/CTS), das Ende eines Telegramms wird über eine einstellbare Zeichenverzugszeit erkannt.
Die Kommunikation erfolgt über die RS-232-Schnittstelle; für die Verwendung der RS-485-Schnittstelle (2-Draht) kann ein Schnittstellenkonverter zwischen PC und remotem Gerät geschaltet werden. Dieser muss so konfiguriert werden, dass als Schnittstelle RS-485 2-Draht und als Betriebsart selbststeuernd eingestellt ist.
Um die Funktionen für die SoftPlc7 zu aktivieren, sind folgende INI-Einstellungen vorzunehmen:

1. In der SoftPlc7.ini-Datei:

[HLL-Functions]
FB7=SoftPlcNet,P_RCV_RK
FB8=SoftPlcNet,P_SND_RK

2. In der SoftPlcNet.ini-Datei:

Sektion/ Eintrag | Beschreibung | Default
--- | --- | ---
[Startup]
ComDriverCount | Anzahl der verwendeten CP 341. | 0
[ComDriver<n>] für n=1,2,...
ComPort | Verwendeter COM-Port. Mögliche Werte: 1 - 4 für COM1 - COM4. | 1
LAddr | LAddr auf dem CP. Die Angabe ist hexadezimal. | 0
DelayTime | Zeichenverzugszeit, hängt auch von der Baudrate ab. | 4
MaxTeleCount | Maximale Anzahl gepufferter Telegramme (1-250). | 250
PreventOverwriting | Gibt an, ob ein Überschreiben alter Telegramme verhindert werden soll. Mögliche Werte: 0 (nur für MaxTeleCount = 1) und 1 | 1
BaudRate | Verwendete Baudrate. Mögliche Werte: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 76800 | 9600
DataBits | Verwendete Anzahl der Datenbits. Mögliche Werte: 7, 8 | 8
StopBits | Verwendete Anzahl der Stopbits. Mögliche Werte: 1, 2 | 1
Parity | Verwendete Parität. Mögliche Werte: N, O, E für None, Odd, Even | E

Alle Werte werden auf Korrektheit überprüft und gegebenenfalls in die gültige Wertemenge abgebildet.

## 5. Diagnose

Über den Menüpunkt "Extras->Verbindungen..." gelangt man in ein Dialogfenster, in dem die Parameter aller von der SoftPlc7 instanziierten Verbindungen eingesehen werden können. In letzten zwei Spalten werden dabei jeweils die seit Programmstart gesendeten bzw. empfangenen Bytes angezeigt und während des Dialogs aktualisiert. Weitere Diagnose-Möglichkeiten sind in Vorbereitung.

## 6. Redundanz

Unter Verwendung der SHM-Schnittstelle können in der SoftPlc7 auch redundante Verbindungen geschaffen werden. Beispiel:
CPU1 und CPU2 haben jeweils 2 CP mit den Adressen 0x1000, 0x1100 (CPU1) und 0x2000, 0x2100 (CPU2). Es sollen Daten redundant mit Hilfe der FC50 von CPU1 nach CPU2 geschickt werden. Ein Konfiguration in der SoftPlc7 könnte dann folgendermaßen aussehen:

Einstellungen für CPU1:
[Settings]
LAddr1=1000
LAddr2=1100
[SR-Connections]
Conn_1=(1; 2; AG1; AG2; n; 1; ; 2000)
Conn_2=(1; 2; AG1; AG2; n; 2; ; 2100)

Einstellungen für CPU2:
[Settings]
LAddr1=2000
LAddr2=2100
[SR-Connections]
Conn_1=(1; 2; AG2; AG1; n; 1; ; 1000)
Conn_2=(1; 2; AG2; AG1; n; 2; ; 1100)

Pakete, die in der CPU1 über AG_LSEND(ID=1, LADDR=W#16#1000) geschickt werden, werden in der CPU2 dann über AG_LRECV(ID=2, LADDR=W#16#2000) empfangen.
Analog werden Pakete, die in der CPU1 über AG_LSEND(ID=1, LADDR=W#16#1100) geschickt werden, in der CPU2 über AG_LRECV(ID=2, LADDR=W#16#2200) empfangen.

Werden Pakete über eine Verbindung geschickt, bei der eine remote LAddr <> 0 angegeben ist, wird dieses auf Empfangsseite nur von solchen Verbindungen akzeptiert, bei denen entweder kein LAddr-Index angegeben ist oder bei denen dieser Index genau die "remote LAddr" spezifiziert.
Pakete, die über eine Verbindung ohne spezifische remote LAddr (d.h. LAddr=0) geschickt werden, werden auf Empfangsseite von jeder Verbindung akzeptiert, bei der schon die lokale Conn-Id passt.

Wenn die Funktionen GET, PUT, STATUS und USTATUS für redundante Kommunikation mit Angabe einer remoten LAddr verwendet werden sollen, müssen entsprechende Server-Verbindungen projektiert werden, die auf diese LAddr verweisen.
Bei den CFB BSEND und BRCV werden die remoten LAddr nicht ausgewertet, die Eindeutigkeit wird über die R_ID hergestellt.