SoftPlc7-OPC Server

| ALPHA-VISION® SoftPLC7 OPC Server

## 1. Registrierung

Bevor der SoftPlc7 OPC Server eingesetzt werden kann, muss dieser registriert werden. Dies kann über die Kommandozeile "SoftPlc7OPCServer.exe -regserver" erreicht werden. Eine Alternative ist, auf dem Desktop eine Verknüpfung zu erzeugen und als Parameter "-regserver" einzutragen.
Eine Deregistrierung erfolgt über den Parameter "-unregserver".

## 2. Einstellungen in der SoftPlc7

Damit eine angebundene SoftPlc7 den SoftPlc7 OPC Server zyklisch mit aktuellen Werten versorgt, ist in der SoftPlc7 noch eine Einstellung vorzunehmen: In der Sektion [HLL-Functions] der jeweiligen SoftPlc7.ini-Datei muss der Eintrag "PY0,0=SoftPlc7OPCServerDll,DoDataExchangeUDP" stehen.

## 3. Zusammensetzung von OPC-Items

Die genaue Syntax für OPC-Items lautet: SoftPLC7:[<Instanznummer>]<Bereich><Typ><Offset>,<Anzahl>

Vor dem Doppelpunkt steht eine Kennung, die das OPC-Item als SoftPLC7-Item definiert, Groß- und Kleinschreibung spielt dabei keine Rolle. Die eckigen Klammern definieren keinen optionalen Parameter, sondern müssen mit angegeben werden. Die darin stehende <Instanznummer> ist die Instanznummer der SoftPlc7. Innerhalb eines Projektes können bis zu 99 Instanzen auf mehreren PCs verteilt laufen. Diese Instanzen müssen eindeutig durchnummeriert sein (01…99) und über ein LAN untereinander kommunizieren können. Der OPC Server selbst kann auch auf einem dieser PCs laufen.
Nach der Instanznummer folgt die Definition des Operanden innerhalb dieser Instanz, aufgeteilt in Bereich, Typ, Offset und Anzahl. Folgende Bereiche und Typen sind bei der Beschreibung eines OPC-Items möglich:

<Bereich> | Beschreibung | Bemerkung
--- | --- | ---
DB<nr>, | Datenbaustein mit der Nummer <nr> | Ist der Datenbaustein mit der Nummer <nr> nicht vorhanden, ist das Item BAD.
M | Merker | Unabhängig vom CPU-Typ sind immer 16 KByte adressierbar.
E | Eingang | Unabhängig von der Länge des definierten Prozessabbildes sind 16 KByte adressierbar.
A | Ausgang | Unabhängig von der Länge des definierten Prozessabbildes sind 16 KByte adressierbar.
PE | Peripherieeingang | Unabhängig von den tatsächlich belegten Peripheriebytes sind immer 16 KByte adressierbar.
PA | Peripherieausgang | Unabhängig von den tatsächlich belegten Peripheriebytes sind immer 16 KByte adressierbar.

< Typ> | Beschreibung | <Offset> | <Anzahl>
--- | --- | --- | ---
B BYTE CHAR | Byte (unsigned) | <Byteindex des ersten Bytes> | <Anzahl der Bytes>
W WORD INT | Wort (signed) | <Byteindex des ersten Wortes> | <Anzahl der Worte>
D DWORD DINT | Doppelwort (signed) | <Byteindex des ersten Doppelwortes> | <Anzahl der Doppelworte>
REAL | 32Bit-Gleitpunktzahl | <Byteindex der ersten Gleitpunktzahl> | <Anzahl der Gleitpunktzahlen>
X | Bit | <Byteindex des Bits>.<Bitnummer (0..7)> | 1

Bemerkungen:

1. Das durch <Offset> und <Anzahl> adressierte Element muss innerhalb der Bereichslänge liegen.
2. Die VARIANT-Typen für signed 8 Bit, unsigned 16 Bit und unsigned 32 Bit werden von der MFC nicht vollständig unterstützt,
   deshalb werden in diesem Zusammenhang andere passende Datentypen für CHAR, W(ORD) und D(WORD) verwendet.
3. Bei Bitoperanden ist nur die Anzahl=1 erlaubt.

## 4. Synonyme

Alternativ können auch Synonyme verwendet werden, um das Präfix "SoftPLC7:[nn]" des OPC-Itemnamen zu formen.
Synonyme werden in der SoftPlc7OPCServer.ini-Datei in der Sektion [OPC-Items] angegeben, diese Datei befindet sich immer im selben Verzeichnis wie die Applikation SoftPlc7OPCServer.exe.
Das Format einer Synonymdefinition lautet: GewünschterText = Ersatztext
Um zum Beispiel ein OPC-Item in der Form "S7:[Regelung3] MB0,1" anstatt "SoftPLC7:[15] MB0,1" angeben zu können, sind folgende Einträge nötig:
[OPC-Items] S7=SoftPLC7
[OPC-Items] Regelung3=15
Die alte Namensgebung bleibt weiterhin gültig.

## 5. Beispiele

OPC Item | Beschreibung
--- | ---
SoftPLC7:[01]DB60,B10,11 | Aus der Instanz 01 werden aus dem DB60 11 Bytes ab Index 10 gelesen.
SoftPLC7:[01]DB60,REAL20,4 | Aus der Instanz 01 werden aus dem DB60 4 Gleitpunktzahlen ab Index 20 gelesen.
SoftPLC7:[01]DB10,X20.5,1 | Aus der Instanz 01 wird aus dem DB10 das Bit 5 aus dem Byte 20 gelesen.
SoftPLC7:[02]EX20.5,1 | Aus der Instanz 02 wird das Eingangsbit 20.5 gelesen.
SoftPLC7:[03]PEDWORD20,2 | Aus der Instanz 03 werden aus dem Peripherieeingang die Doppelworte 20 und 24 gelesen.

## 6. Ausgaben im Fenster

In der Projektierungsphase ist es hilfreich, wenn bei bestimmten Aktionen Meldungen ausgegeben werden. Dazu muss die Umgebungsvariable SOFTPLC7_OPCSERVER_DEBUG auf den Wert TRUE gesetzt werden.
Die Meldung "Trying to create <OPC-Item>...OK" wird ausgegeben, wenn ein neues OPC-Item neu angelegt wird. Der Zusatz (found) bedeutet, dass das Item schon angelegt war und nur noch auf das alte zugegriffen wird.
Bei Schreibzugriffen erscheint der Text "Write request on <OPC-Item>: Value=<Wert>".
Im laufenden Betrieb sollten die Meldungen wieder unterdrückt werden, um die Performance beim Hochfahren zu verbessern. Die Umgebungsvariable muss dazu auf den Wert FALSE gesetzt oder einfach gelöscht werden.

## 7. Log-Datei

Die Ausgaben können auch wahlweise/zusätzlich in eine Datei mit dem Namen "SoftPlc7OpcServer.err" geschrieben werden. Die Umgebungsvariable SOFTPLC7_DEBUG_FILE wird dazu auf die maximale Dateilänge dieser Logdatei gesetzt. Ist der Wert=0, wird keine Datei erzeugt. Es wird eine Länge von 10 MB empfohlen.

## 8. IP-Adressen

Normalerweise werden SoftPlc7OPCServer, SoftPlc7 und OPC-Clients in einem LAN eingesetzt, wobei die Applikationen auf verschiedenen Rechnern laufen. Damit die UDP-Kommunikation auch auf einem einzelnen Rechner aufrecht erhalten werden kann, müssen folgende Einträge vorgenommen werden:
1. [Settings] RemoteAddr=127.0.0.1 in der SoftPlc7OPCServer.ini-Datei.
2. [OPC] RemoteAddr=127.0.0.1 in der SoftPlc7.ini-Datei einer jeden angebundenen SoftPlc7.

Um zu vermeiden, dass die Sockets bei der Funktion "bind" den gesamten Adressraum belegen, kann eine spezielle lokale IP-Adresse gewählt werden:
[Settings] LocalAddr=<IP-Adresse> in der SoftPlc7OPCServer.ini-Datei.