# OPC UA (Unified Architecture) Server für S7- Steuerungen



## Indi.An-er (8 Januar 2010)

Guten Tag,
  Ich möchte Sie auf diesem Wege auf unseren OPC UA (Unified Architecture) Server für S7- Steuerungen aufmerksam machen.
Es handelt sich um einen der ersten OPC-UA-Server der für S7-Steuerungen verfügbar ist.

  Der OPC-Server ist eine standardisierte Software-Schnittstelle zur herstellerunabhängigen Kommunikation in der Automatisierungstechnik, und  basiert auf der neuesten OPC-Spezifikation „OPC UA“ der OPC Foundation.
OPC Unified Architecture (kurz OPC UA) unterscheidet sich erheblich von den vorherigen Spezifikationen und umgeht die Bindung an COM/DCOM.

*Softwaremerkmale:*


lauffähig unter 32 und 64bit Betriebssystemen
der OPC UA Server läuft als Dienst
Kommunikation über sichere, verschlüsselte      Verbindungen möglich
Implementiert unter .NET Framework 3.5
  Der OPC UA Server S7 ist eine Komponente um Daten aus einer S7 (200er, 300er , 400er Baureihe) oder S7-kompatiblen CPU (z.B. VIPA 100V/200V/300V/300S) auszulesen oder zu schreiben.
Interne Routinen sind auf High-Performance-Zugriffe optimiert.

*Lieferumfang:*


OPC UA Server als Dienst
Discovery Server als Dienst
Diagnoseclient
Aktivitätsmonitor
Verwaltungstools für Steuerungen und Items
 
Die Auslieferung der Anwendung erfolgt auf einem USB-Stick, die Installation der Dienste erfolgt automatisch. Ein Setup im herkömmlichen Sinne ist nicht mehr erforderlich, der Indi.An OPC UA Server ist als "mobile Anwendung" somit nicht mehr an einen PC gebunden.





​ 
*Kommunikationmöglichkeiten (je nach CPU):*
  Serieller MPI-Adapter, Serieller PPI-Adapter, MPI-Adapter USB (über virtuellen seriellen Port), Ethernet TCP/IP (über CP243, CP343, CP443), Green Cable (nur unterstützende Vipa-CPUs)
Alle beschriebenen Kommunikationswege sind gleichzeitig möglich und werden von der Lizenz abgedeckt.

Mit im Lieferumfang enthalten sind Tools zur Verwaltung des Dienstes und der Konfiguration der angeschlossenen Steuerungen.

*Demoversion:*
Für Testzwecke existiert eine Demoversion, die hier heruntergeladen werden kann. Diese Testversion verfügt über keine funktionellen Einschränkungen, ist aber auf eine Laufzeit von 72 Stunden begrenzt und muss dann neu gestartet werden.

  [FONT=&quot]Gerne möchte ich Sie dazu einladen, die Testversion mit vollem Leistungsumfang unter http://indi-an.de/index.php?option=com_content&view=article&id=82&catid=2&Itemid=90 herunterzuladen und ausführlich zu testen. 

*Vorabankündigung:*
In den nächsten Tagen werden wir ein OPC UA Clienttoolkit zur Verfügung stellen, welches den .NET-Entwickler in die Lage versetzt, komfortabel auf OPC-UA-Server zugreifen zu können. 
 [/FONT]


----------



## arnold (18 Januar 2010)

*Protokolle des OPC UA Servers*

Mit Interesse habe ich Ihre Bekanntmachung gelesen. Eine kurze Frage zu den Übertragungsprotokollen: welche Protokolle werden unterstützt?

 Mit freundlichen Grüßen,

 arnold


----------



## Indi.An-er (18 Januar 2010)

Hallo,
in unserem OPC-UA-Server sind die beiden von der OPC-Foundation spezifizierten Protokolle implementiert, die da wären:


binäre Übertragung per TCP-Port ( opc.tcp: )
Übertragung per Webservice ( http: )
Beide Übertragungswege haben bestimmte Vor-und Nachteile, welche auch noch einmal bei Wikipedia aufgeführt sind. http://de.wikipedia.org/wiki/OPC_Unified_Architecture#Protokolle


----------



## RoWi (19 Februar 2010)

Guten Tag Indi.An-er,

ich habe mir Ihre Demo-Version heruntergeladen. Über ein MPI (USB) Kabel möchte ich ein verbindung zu einer S7-314 aufnehmen. Bei der Portauswahl habe ich nicht herausgefunden, wie ich die USB Schnittstelle (virtueller serieller Port) an meinem LapTop anspreche. Könnten Sie mir bitte eine Hinweis geben, welche Einstellungen ich vornehmen müßte?


----------



## Indi.An-er (19 Februar 2010)

Hallo,
ich hoffe die Frage richtig verstanden zu haben.
Beim Ansprechen von USB-Adaptern wird davon ausgegangen, dass dieser einen Treiber mitführt welcher bei der Installation eine virtuelle serielle Schnittstelle installiert. Diese neue Com-Schnittstelle sollte dann auch im Gerätemanager auftauchen und sich dann auch ansprechen und auswählen lassen. Weitere Einstellungen an der Com-Schnittstelle brauchen dann nicht vorgenommen werden, weil der OPC-Server diese Einstellungen sowiso übersteuert.
Sollte es weitere Fragen geben antworte ich gerne..


----------



## RoWi (19 Februar 2010)

Hallo 
Wenn ich unter 'Devices' MPI seriell anwähle und mit meinem Siemens MPI Kabel am USB Eingang angeschlossen bin, was wähle ich dann aus. COM1...4?


----------



## Indi.An-er (19 Februar 2010)

Hallo,
es muss ja nach Einstecken des USB-Adapters ein neuer Com-Port im Gerätemanager auftauchen. Diesen dann bitte benutzen. Notfall einmal den Adapter abziehen, und mal schauen welcher Com-Port jetzt verschwunden ist. 
Voraussetzung ist natürlich dass  Ihr USB-Adapter überhaupt einen virtuellen Seriellen Comport erzeugt. Nicht alle machen das....


----------



## RoWi (19 Februar 2010)

Jetzt redenn wir möglicherweise aneinander vorbei, also ich habe zur Programmierung ein SIEMENS PC Adapter USB 6ES7 972-0CB20-0XA0 mit welchem ich über den SIMATIC Manager auf die S7 zugreife und die Ein- und Ausgänge beobachten kann. Dies würde ich nun gern an einen OPC geben. Das SIEMENS-Kabel hat einen Treiber für den USB Eingang und produziert somit glaube ich keinen virtuellen COM Anschluss. Auf dem  Rechner ist die 'PG/PC Schnittstelle' auf 'S7ONLINE (Step7) PC Adapter(MPI) gesetzt.


----------



## Gerhard Bäurle (19 Februar 2010)

RoWi schrieb:


> wie ich die USB Schnittstelle (virtueller serieller Port) an meinem LapTop anspreche.



Das hörte sich ja so an, als hättest Du eine virtuellen COM-Port ...



RoWi schrieb:


> ... SIEMENS PC Adapter USB 6ES7 972-0CB20-0XA0 mit welchem ich über den SIMATIC Manager auf die S7 zugreife ...



Der macht keinen Umweg über die serielle Schnittstelle, sondern wird 
von der S7-Software direkt unterstützt. Hat deswegen auch keinen
virtuellen Treiber.


----------



## Indi.An-er (19 Februar 2010)

Hallo,
ein Zugang über S7ONLINE ist mit dem OPC-Server im jetzigen Ausbaustand nicht möglich. Wir verweisen auf Adapter welche eine virtuelle Com-Schnittstelle erzeugen. Es ist allerdings geplant den OPC-Server auch mit dieser Funktionalität ausszustatten, im Moment ist es aber leider noch nicht möglich. Bedaure im Moment keine bessere Antwort geben zu können... :neutral:


----------



## RoWi (19 Februar 2010)

Schönen Dank für die Antwort, schade :neutral: aber auch ein Lichtblick für die Zukunft.
Dann werde ich mich auf eine ander OPC Suche machen.


----------



## thomass5 (19 Februar 2010)

Hallo,

ist eigentlich schon eine Anbindung an die S7 1200 angedacht?

Thomas


----------



## Indi.An-er (22 Februar 2010)

Hallo,
ja angedacht schon, momentan aber (noch) nicht umgesetzt. Der Punkt befindet sich aber gerade in der Umsetzung.


----------



## steiner964 (29 Oktober 2010)

Hallo Indianer,

ich habe mir die Demo des S7 UA Servers runtergeladen und zwei Ethernet Verbindungen angelegt (Devices.ini). Eine geht zu einer 300ter und eine zu einer 400ter. In beiden habe ich jeweils einen Datenbaustein mit 1000 DWords angelegt. Nun versuche ich diese zu lesen und zu beschreiben.

Beim Anlegen der Items (Items.ini) habe ich einige Probleme. 

In der Datei gibt es ein Beispiel "DB204=DB204.DINT6" aber wenn ich mit dem kleinen Oberflächentool eine Variable in einem DB anlege, ist zwischen Bausteinnummer und Datentyp KEIN Punkt "." Wie ist es denn nun richtig?

Weiterhin habe ich den Datentyp DWORD verwendet, allerdings ist der UA Datentyp trotzdem ein "Int32" und nicht wie ich erwartet hatte ein "UInt32". Dadurch bekomme ich bei Schreiben auf diese Variable einen Fehler "TypeMissmatch". Wie lege ich ein UInt32 an?

Gibt es eine Möglichkeit Ordner und Unterordner anzulegen, oder müssen alle Variablen "flach" unterhalb des Section-Names liegen?

Das Lesen zur 400ter funktioniert, kommt mir aber sehr langsam vor, gibt es eine Möglichkeit die Geschwindigkeit zu verbessern, vermutlich habe ich etwas falsch konfiguriert? 


```
[SPS_400_TCP]
IpZielstation=192.168.172.3
IpPort=102
Slot=3
Rack=0
Intervall=1000
Lesezugriff=1
Schreibzugriff=1
Typ=1
Kommunikation=3
```
Was bedeutet der "Intervall" Parameter? Ist das der Pollzyklus zur Steuerung? Über UA bekomme ich auch RevisedSamplingInterval = 1 ms zurück, aber tatsächlich kommen die Daten nur alle 1000ms.

Schreiben klappt nur wenn ich die Variablen "einzelnd" beschreibe, wenn ich mehrere Nodes gleichzeitig schreibe bleibt es hängen und ich muss mich neu verbinden. 

Wäre schön wenn mir jemand antworten könnte, denn preislich ist das ja eine echt schöne Alternative.


----------



## Indi.An-er (4 November 2010)

Hallo steiner964,
anbei möchte ich meine Antwort senden:



steiner964 schrieb:


> Hallo Indianer,
> 
> ich habe mir die Demo des S7 UA Servers runtergeladen und zwei Ethernet Verbindungen angelegt (Devices.ini). Eine geht zu einer 300ter und eine zu einer 400ter. In beiden habe ich jeweils einen Datenbaustein mit 1000 DWords angelegt. Nun versuche ich diese zu lesen und zu beschreiben.
> 
> ...



Der Punkt dient hauptsächlich der Übersichtlichkeit, der eingebaute Parser sollte die Syntax auch ohne auflösen können. Wir werden das prüfen und die Dokumentation entsprechend anpassen.



steiner964 schrieb:


> Weiterhin habe ich den Datentyp DWORD verwendet, allerdings ist der UA Datentyp trotzdem ein "Int32" und nicht wie ich erwartet hatte ein "UInt32". Dadurch bekomme ich bei Schreiben auf diese Variable einen Fehler "TypeMissmatch". Wie lege ich ein UInt32 an?



Nach aktuellem Stand scheint es bei dem Mapping der Datentypen auf den UA-Datentyp ein Unstimmigkeit zu geben, dadurch wird der Datentyp DWORD in den Eigenschaften als INT32 geführt und führt zu der genannten Fehlermeldung. Wir werden eine neue Version des OPC-Servers erstellen und veröffentlichen.



steiner964 schrieb:


> Gibt es eine Möglichkeit Ordner und Unterordner anzulegen, oder müssen alle Variablen "flach" unterhalb des Section-Names liegen?



In der aktuellen Version sind nur flache Hierarchien möglich, die Möglichkeit einer Strukturierung mittels Ordnern ist für eine der nächsten Release vorgesehen.



steiner964 schrieb:


> Das Lesen zur 400ter funktioniert, kommt mir aber sehr langsam vor, gibt es eine Möglichkeit die Geschwindigkeit zu verbessern, vermutlich habe ich etwas falsch konfiguriert?
> 
> 
> ```
> ...



Der Intervall ist die Zeit, in der die Veröffentlichung der Daten erfolgt - das Lesen aus der Steuerung erfolgt in einem schnelleren Takt.



steiner964 schrieb:


> Schreiben klappt nur wenn ich die Variablen "einzelnd" beschreibe, wenn ich mehrere Nodes gleichzeitig schreibe bleibt es hängen und ich muss mich neu verbinden.



Das Problem ist momentan nicht bekannt, wir werden versuchen es in unserer Testumgebung nachstellen und testen.



steiner964 schrieb:


> Wäre schön wenn mir jemand antworten könnte, denn preislich ist das ja eine echt schöne Alternative.



Ich hoffe, die Fragen zufriedenstellend beatworten zu können.
Schöne Grüße aus Bremen


----------



## steiner964 (4 November 2010)

Vielen Dank für die Antworten !



> Das Problem ist momentan nicht bekannt, wir werden versuchen es in unserer Testumgebung nachstellen und testen.


Mein Testszenario sieht folgendermaßen aus:
S7-416 mit 443-1 Advanced 
in der 416 gibt es einen DB1 mit 1000 DWORD Variablen, die ich in der "items.ini" folgendermaßen konfiguriert habe:

```
MyInteger0=DB1DINT0
MyInteger1=DB1DINT4
MyInteger2=DB1DINT8
MyInteger3=DB1DINT12
usw.
```
Mit einem UA-Client lese ich in einem Aufruf alle 1000 Nodes, in einem weiteren Test schreibe ich alle 1000 Nodes. Ich messe die Zeit vom Aufruf bis zum Eintreffen der Response. Laut meiner Messung dauert ein einziger Leseaufruf, mit immerhin 4k Nutzdaten, ca. 9,8 Sekunden. Schreiben habe ich bisher noch nicht hingekriegt.


----------

