Sie sind auf Seite 1von 16

OPC Beispiele für ProTool/Pro

OPC Server – OPC Clients (EXCEL, VB-Programm)

Verbindung eines ProTool/Pro OPC-Servers mit OPC-Clients


(Excel/VB-EXE)

Konfiguration
ProTool/Pro V.5.2/SP2
EXCEL 2000 bzw. Visual Basic Entwicklungsumgebung V.6 für VB-Programm

Windows NT 4.0/SP6 oder Windows 2000/SP1

1. Lieferumfang
Datei Inhalt Vorraussetzungen
Dokumentation.doc diese Dokumentation Microsoft Word 97/2000
OPCServer.fwd ProTool/Pro OPC Server Siemens ProTool/Pro RT 5.2 SP2
OPC-Client.xls Excel OPC Client Microsoft Excel 2000
OPCClient.exe Visual Basic OPC Client

2. Betriebssystem-Einstellungen
 Mindestvorraussetzungen: WinNT 4.0 SP5 oder Win2000 SP1
 ProTool/Pro muß auch auf dem Client-Rechner installiert sein!

 Die COM/DCOM-Konfiguration ist im Betriebssystem einzustellen. Dies ist mittels 'dcomcnfg' auf
Server als auch auf Client Seite für die Kommunikation zu konfigurieren (Näheres im Anhang).
 Für den Einsatz von OPC mit ProTool/Pro und OPC Clients ist die „Siemens OPC DLL“ nötig. Diese
wird bei der Standard-Installation von ProTool/Pro automatisch installiert und registriert. Sollte diese
jedoch nicht vorhanden sein, muß folgendermaßen vorgegangen werden.
Es ist die Bibliothek 'sopcdaauto.dll' im System zu registrieren. Rufen Sie unter Ausführen folgenden
Befehl auf:
'regsvr32 sopcdaauto.dll'.

Tips:
Funktioniert die Kommunikation nicht, können folgende Versuche unternommen werden:
- die Bibliothek deregistrieren und erneut zu registrieren. (Deregistrieren mit dem Befehl: 'regsvr32 -u
sopcdaauto.dll')
- Excel 2000 bzw. das komplette Office-Paket (Office 2000) neu installieren.
- Es hilft sicherlich, wenn auf dem Rechner möglichst wenig andere Programme installiert sind.

13.11.2019, SW/GG Seite 1 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)

3. Programm-Beschreibungen

3.1. Allgemeines
Beiliegend sind drei Programme.
Zum einen der ProTool/Pro OPC-Server, zum anderen die OPC-Clients; eine Excel-Datei und ein
VisualBasic-Programm.

Bei den Clients ist ein sogenannter Node-Name einzutragen. Dies kann entweder eine IP-Adresse (z.B.
192.168.0.80) oder ein Rechnername sein. (z.B. ‚NB1207‘ oder ‚NB1207.siemens.de‘) Es ist die Adresse
bzw. der Name des Rechners, auf dem der Server läuft.

3.2. ProToolPro OPC-Server

Für das Ausführen des OPC-Servers ist die ProTool/Pro Runtime Version 5.2 SP2 nötig.
Der OPC-Server wird automatisch durch den Programmaufruf (OPCServer.fwd) gestartet.
Es existieren sechs Variablen (VAR_1 bis VAR_6). Die ersten vier sind ganzzahlige Werte, VAR_5 und VAR_6
sind Texte. Der Schieberegler repräsentiert VAR_1.
Ist ein OPC-Client verbunden ändern sich die Variablen beim Client automatisch, sobald man eine Eingabe im
Server mit der Eingabetaste abschließt. (bzw. den Schieberegler ändert)

13.11.2019, SW/GG Seite 2 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)

3.3. EXCEL-Dokument mit Verbindung zu ProTool/Pro (EXCEL – Client)


Für das Ausführen dieses OPC-Clients (OPC-Client.xls) ist Excel 2000 nötig.
Nach dem Öffnen des Excel-Dokuments wird der Benutzer gefragt, ob er Makros aktivieren will. Dies ist
unbedingt zu tun.
In dem EXCEL-Dokument selbst finden Sie in kurzen Schritten die nötigen Einzelschritte aufgeführt. Die
farbigen Zellen sind entsprechend zu prüfen bzw. anzupassen. Die grüne/rote Zelle gibt den aktuellen Status der

Verbindung an.
Nachdem man den Node-Namen (siehe auch 3.1. Allgemeines) angegeben hat, „verbindet“ man den Client mit
dem Server (dieser muß selbstverständlich gestartet sein), indem man die Schaltfläche „Start Client“ drückt.
Ändert man nun einen der Werte im unteren Teil des Arbeitsblattes (Zellen C13 – C18), wird dieser Wert
automatisch an den OPC-Server übertragen. Diese Kommunikation funktioniert selbstverständlich auch in die
entgegengesetzte Richtung. Bevor man das Excel-Dokument und den Server beendet, stoppt man noch den
Client, indem man die Schaltfläche „Stop Client“ drückt.

13.11.2019, SW/GG Seite 3 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)

3.4. Visual Basic-Client


Nach dem Starten des Programms (OPC-Client.xls) muß man noch den Node-Namen (siehe auch 3.1.
Allgemeines) eingeben.

Um den Client zu Starten (der Server muß selbstverständlich laufen) drückt man die Schaltfläche „Start“.
Nun kann man die Werte der Variablen verändern; die Synchronisation mit dem OPC-Server erfolgt
automatisch.
Bevor man den Client schließt oder den Server beendet, stoppt man den Client , indem man die
Schaltfläche „Stop“ drückt.

13.11.2019, SW/GG Seite 4 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)

4. Programmierung

4.1. ProTool/Pro
Unter dem Menüpunkt 'Zielsystem' -> 'Einstellungen' ist die Option 'OPC-Server' anzuwählen.

4.2. Excel 2000


Hier wird die „Programiersprache“ Visual Basic for Applications verwendet.
Die Beschreibung der verwendeten Makros finden Sie in den Anlagen. Hier werden auch einige Aussagen
zum Error Handling gemacht.
Um die OPC-Funktionen verwenden zu können muß man in der Progrmmierumgebung (Alt-F11) unter
Extras -> Verweise eine Programmbibliothek einbinnden. Diese heißt „Siemens OPC DAAutomation 2.0“
mit dem Dateinamen „SOPCDaAuto.dll“.
(OPC-Client.xls)

4.3. Visual Basic 6.0


Die Excel-Makros sind weitgehend für die Routinen unter Visual Basic übertragbar. Die Feldangaben
müssen durch Variablen ersetzt werden, und eine grafische Aufbereitung für die Anzeige der aktuellen
Daten wird mittels der VB-Mittel umgesetzt.
Um die OPC-Funktionen verwenden zu können muß man unter Pojekt -> Verweise eine
Programmbibliothek einbinnden. Diese heißt „Siemens OPC DAAutomation 2.0“ mit dem Dateinamen
„SOPCDaAuto.dll“.
Die Bemerkungen zum Error Handling gelten auch für Visual Basic.
Die Quellen findet man im Verzeichnis VisualBasic (OPCClient.vbw)

13.11.2019, SW/GG Seite 5 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)

Anlagen

Microsoft Excel als Client  Makros


 Beispiel-Code für die Makros :

Option Explicit 'Variablennamen müssen eindeutig sein

Option Base 1 'Indizes beginnen bei 1 (nicht 0)

Dim WithEvents MyOPCServer As OPCServer 'OPCServer-Objekt wird definiert

Dim MyOPCGroupColl As OPCGroups 'OPCGroups-Objekt wird definiert

Dim WithEvents MyOPCGroup As OPCGroup 'OPCGroup-Objekt wird definiert

Dim MyOPCItemColl As OPCItems 'OPCItems-Objekt wird definiert

Dim MyOPCItem As OPCItem 'OPCItem-Objekt wird definiert

Dim ClientHandles(1 To 6) As Long

Dim ServerHandles() As Long

Dim Values(1 To 6) As Variant

Dim Errors() As Long

Dim ItemIDs(1 To 6) As String

Dim ServerName As String

Dim NodeName As String

Dim GroupName As String

Dies sind die Deklarationen der benötigten Variablen.


Für ClientHandles, Values und ItemIDs ist die gewünschte Anzahl der zu synchronisierenden Variablen
zu setzten. (hier im Beispiel: sechs Variable)
OPC ist hierarchisch wie folgt aufgebaut:
OPCServer -> OPCGroups -> OPCGroup -> OPCItems -> OPCItem

13.11.2019, SW/GG Seite 6 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)

Sub StartClient()

'Connect to Server, create Groups, items etc.

'On Error GoTo ErrorHandler 'sollte eigentlich verwendet werden!

ClientHandles(1) = 1
ClientHandles(2) = 2
ClientHandles(3) = 3
ClientHandles(4) = 4
ClientHandles(5) = 5
ClientHandles(6) = 6

ServerName = Range("A2").Value

GroupName = Range("C2").Value

NodeName = Range("B2").Value

ItemIDs(1) = Range("A6").Value
ItemIDs(2) = Range("A7").Value
ItemIDs(3) = Range("A8").Value
ItemIDs(4) = Range("A9").Value
ItemIDs(5) = Range("A10").Value
ItemIDs(6) = Range("A11").Value

'----------- Get an instance of the OPC server


Set MyOPCServer = New OPCServer

MyOPCServer.Connect ServerName, NodeName

Set MyOPCGroupColl = MyOPCServer.OPCGroups

'----------- Set the default active state for adding groups


MyOPCGroupColl.DefaultGroupIsActive = True

'----------- Add our group to the Collection


Set MyOPCGroup = MyOPCGroupColl.Add(GroupName)

Set MyOPCItemColl = MyOPCGroup.OPCItems

'----------- Add one item, ServerHandles are returned


MyOPCItemColl.AddItems 6, ItemIDs, ClientHandles, ServerHandles, Errors

'----------- A group that is subscribed receives asynchronous notifications


MyOPCGroup.IsSubscribed = True

Range("E2").Value = "Client on"


Range("F2").Value = CStr(MyOPCServer.LastUpdateTime)
Range("G2").Value = MyOPCItemColl.Count
Range("H2").Value = MyOPCServer.ServerState

Exit Sub

ErrorHandler:

MsgBox "Error: " & Err.Description, vbCritical, "ERROR"

End Sub

13.11.2019, SW/GG Seite 7 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)

Sub StopClient()

'----------- Release the Group and Server objects

If (Range("H2").Value <> 1) Then Exit Sub

MyOPCGroupColl.RemoveAll

'----------- Disconnect from the server and clean up

MyOPCServer.Disconnect

Set MyOPCItemColl = Nothing

Set MyOPCGroup = Nothing

Set MyOPCGroupColl = Nothing

Set MyOPCServer = Nothing

Range("E2").Value = "Client off"


Range("H2").Value = 0

End Sub

Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles()


As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)

'------------ Ereignis wird ausgeloest, wenn sich Daten am Server ändern


'es wird jeweils nur ein Item abgefragt. es wird angenommen, daß sich nur eines gleichzeitig ändert
If ClientHandles(1) = 1 Then Range("B6").Value = ItemValues(1)
If ClientHandles(1) = 2 Then Range("B7").Value = ItemValues(1) 'wenn nur 2. Item sich geändert hat
If ClientHandles(1) = 3 Then Range("B8").Value = ItemValues(1) 'etc.
If ClientHandles(1) = 4 Then Range("B9").Value = ItemValues(1)
If ClientHandles(1) = 5 Then Range("B10").Value = ItemValues(1)
If ClientHandles(1) = 6 Then Range("B11").Value = ItemValues(1)

'If NumItems > 1 Then Range("B7").Value = ItemValues(2) 'Bedingung, wenn sich erstes Item ändert ist 2.Value nicht
bekannt

Range("F2").Value = CStr(MyOPCServer.LastUpdateTime)

End Sub

Das Ereignis MyOPCGroup_DataChange wird ausgelöst, wenn sich 'etwas' in der Gruppe 'MyOPCGroup'
geändert hat. Die Bedingung, daß nur auf eine geänderte Variable abgefragt wird, wurde aus
anwendertechnischen Gründen realisiert.

13.11.2019, SW/GG Seite 8 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

'------------ Ereignis wird ausgeloest, wenn sich Daten in Arbeitsblatt ändern


If Range("H2").Value = 0 Then Exit Sub 'Abbruch falls nicht verbunden
'Abbruch falls sich nicht einer der Variablen-Werte geändert hat
If (Target <> Range("B6")) And (Target <> Range("B7")) And (Target <> Range("B8")) And (Target <> Range("B9"))
And (Target <> Range("B10")) And (Target <> Range("B11")) Then Exit Sub ' wenn nicht Werte geändert -> exit

Values(1) = Range("B6").Value
Values(2) = Range("B7").Value
Values(3) = Range("B8").Value
Values(4) = Range("B9").Value
Values(5) = Range("B10").Value
Values(6) = Range("B11").Value

MyOPCGroup.SyncWrite 6, ServerHandles, Values, Errors 'Werte im Synchron-Modus auf Server schreiben


End Sub

Das Ereignis Worksheet_Change wird sofort ausgelöst, wenn sich etwas am Excel-Arbeitsblatt ändert. Es
werden dann alle Variablen zum OPC-Server übertragen.
 Die Programmierung kann noch um umfangreiche Fehlerprüfungen ergänzt werden, aber um die
Grundzüge des OPC zu zeigen ist dieses Beispiel ausreichend
 Um die Werte zu lesen oder zu schreiben gibt es grunsätzlich zwei Möglichkeiten:
Synchron und
Asynchron.
Im Beispiel wird synchron geschrieben und asynchron gelesen.

Error Handling (Excel & Visual Basic)


 Es kann zunächst generell ein allgemeines Eror Handling realisiert werden.
Dabei wird in jeder Routine (Sub) ein „On Error GoTo ErrorHandler“ gesetzt.
Am Ende der Routine wird dann diese Sprungmarke „ErrorHandler:“ eingefügt. Dabei genügt es in den
meisten Fällen eine Messagebox mit der Fehlermeldung auszugeben.
(siehe Beispiel ist in den Exel-Macros)

 Eine zusätzliche Möglichkeit gibt es, wenn man spezielle Fehler abfangen will, um sie speziell zu
behandeln. Es geben z.B. alle Methoden des Objektes OPCServer einen Array von „Errors“ zurück. Dies
sind Werte vom Typ long, die dann mittels der Funktion GetErrorString in einen Text umgewandelt werden
können. Dies kann auch mit anderen Objekten (OPCGroup,OPCGroup,OPCItems etc.) umgesetzt werden.

 Im folgenden eine Liste mit allen Fehlern, die bei OPCServer auftreten können:
OPCInvalidHandle, OPCBadType, OPCPublic, OPCBadRights, OPCUnknownItemID, OPCInvalidItemID,
OPCInvalidFilter, OPCUnknownPath, OPCRange, OPCDuplicateName, OPCUnsupportedRate,
OPCClamp, OPCInuse, OPCInvalidConfig, OPCNotFound, OPCInvalidPID

 Die genaue Beschreibung findet man in der Beschreibung „Data Access Automation Interface Standard“ der
OPC Foundation (Dokument liegt bei).

13.11.2019, SW/GG Seite 9 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)

DCOM-Einstellungen

Die Einstellungen der DCOM-Schnittstelle mit dem Tool „dmcnfg“ von Windows NT wird ausführlich im
Kommunikationshandbuch von ProTool/Pro im Kapitel 10 beschrieben.

Die Abbildungen verdeutlichen die Einstellungen, die gemacht werden müssen für die beiden Partner.

Wichtig!!
Die Einstellungen für die Rechte sind entweder, wie auf den Abbildungen, für "jeden" zu vergeben, oder explizit,
für den Benutzer auf dem lokalen und entfernten Rechner.
Dies gilt sowohl für Benutzer unter „Arbeitsgruppen“ als auch für Benutzer in Domänen.

Die wichtigsten Einstellungen sind im folgenden noch einmal zusammengefasst.

Standardeigenschaften:

13.11.2019, SW/GG Seite 10 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)
Auswahl des OPC-Servers: „OPC.SimaticHMI.PTPro“

Allgemeine Einstellungen

13.11.2019, SW/GG Seite 11 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)
Standort-Einstellungen:

Benutzter-Identität:

13.11.2019, SW/GG Seite 12 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)
Sicherheits-Einstellungen:

13.11.2019, SW/GG Seite 13 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)
Endpunkte:

13.11.2019, SW/GG Seite 14 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)
Allgemeine Standard-Sicherheits-Berechtigungen:

DCOM Sicherheitsfunktionen

Die bisher dargestellten Einstellungen bieten nur geringe Sicherheit. Die Sicherheiten lassen sich noch wie folgt
verstärken:

13.11.2019, SW/GG Seite 15 von 16


OPC Beispiele für ProTool/Pro
OPC Server – OPC Clients (EXCEL, VB-Programm)
 Anstatt die Berechtigungen für „Jeder“ einzurichten, kann man sich auf Server- und auf Client-Seite 2
Benutzer einrichten. Die Benutzter müssen auf beiden Rechnern identische Namen und Passwörter haben.
Dann richtet man nur für diese beiden Benutzer die Sicherheitseinstellungen ein. (auf dem Client und dem
Server!)
 Anstelle einer Arbeitsgruppe kann man eine Domäne verwenden. Das erhöht die Sicherheit, da die Benutzer
exakt die gleichen sind. Das lokale einrichten der Benutzter entfällt hierbei selbstverständlich.
 Die Authentifizierungsstufe (auf der Seite „Allgemein“ des OPC-Servers) kann man auf „verbinden“ oder
noch höher stellen.
 In einer Domäne kann man eine Benutzergruppe für einen OPC-Server anlegen. Dann integriert man diese
Gruppe in die Sicherheitseinstellungen der entsprechenden „dcomcnfg“-Einstellungen für den OPC-Server.
So können die Benutzer von verschiedenen Client-Rechnern auf den Server zugreifen.

DCOM Error-Handling

Auch für DCOM gibt es ein Error-Handling. Dazu folgende Hinweise und ein Beispiel:

Error Handling (aus OPC DCOM White Paper von R. C. Harrison)


When OPC Client-Server calls are remoted, all of the RPC_E_* error codes must be considered possible returns
from method calls. The following may be done to indicate the need for a client to completely reconnect to a
server:

// Check if the facility code of the returned HRESULT is of type RPC


if (FACILITY_RPC == HRESULT_FACILITY(hr))
{
if (RPC_E_DISCONNECTED == hr)
{
// Need to reconnect (i.e. Call CoCreateInstance)
}
}

Question: What is the proper way for a client to determine that a server has failed and what should it do
when this does happen?
Background: The failure can occur at any time (i.e. during any method). If such a failure does occur the
client will need to reconnect to the server.
Resolution: For each interface method call, it’s return value should be checked for error as indicated above.
Note that Release() does not have to be called on all interface pointers in this case, as (a) the connection has been
lost and such calls will not go through and (b) the server object will be garbage collected eventually (six
minutes) as mentioned earlier.
Note, do not use QueryInterface() as a 'ping' mechanism because a QueryInterface() for the same IID is cached
and never goes remote, and proxies are not automatically updated of server status. Instead use a call such as
IOPCServer->GetStatus().

13.11.2019, SW/GG Seite 16 von 16

Das könnte Ihnen auch gefallen