# Kompletten DB "en bloc" auslesen via OPC



## Olav (31 Oktober 2006)

Hallo, allerseits!

Ich habe mal eine Frage zur OPC-Kommunikation...

Ich schreibe gerade an einem Pflichtenheft für eine Visualisierung, die über OPC und TCP/IP mit einer S7-317 kommunizieren soll. 

Ich habe mehrere DB`s, in denen ich jeweils etwa 45 direkt hintereinander angeordnete STRING-Variablen (die ja jeweils ein ARRAY darstellen) auslesen möchte. Muß ich nun jeden String als Item anmelden, was ja pro DB (und ich habe 10 bis 15 davon...) 45 Items darstellt? Oder kann ich die Daten auch "in einem Rutsch" auslesen und dann in C# auseinanderdividieren? 
Ich denke mal, 15 mal 500 Byte auszulesen ist ökonomischer, sprich schneller, als 675 mal 10 Bytes...

Als OPC-Server haben wir übrigens bisher INAT und IBH im Einsatz.

Gruß,

Olav


----------



## Rainer Hönle (31 Oktober 2006)

Ich kann hier nur für unseren OPC-Server reden: Wie die Variablen definiert sind ist bei uns egal. Der Server fasst die Items intelligent zusammen und optimiert die Leszugriffe selbständig. Deshalb einfach als einzelne Strings anfragen.


----------



## Olav (31 Oktober 2006)

Hallo, Herr Hönle!

Vielen Dank erstmal für Ihre Antwort! Ich muß aber nochmal nachhaken:

Ich muß aber trotzdem jeden einzelnen String als Item anmelden (lassen), oder?
Das Problem ist, daß ich hier z.B. beim INAT-Server das Problem hatte, daß dieser selbst Arrays aufgelöst hat und - im Extremfall - jedes Bit als eigenes Item ansprechen wollte. Bei einem Array mit [300] x [32] Bits kommen dann schon einige Items zusammen... Diese alle beim OPC-Server anzumelden dauerte dann ein wenig zu lange... ;-)
OK, bei den Strings sind es nur etwa 650 Items. Tritzdem wäre es eben "schöner", den DB auch komplett ansprechen zu können.

Gruß,
Olav


----------



## Rainer Hönle (2 November 2006)

Es macht Sinn, die Strings als einzelne Items anzumelden. Dann kann der OPC-Server sich um die Besonderheiten (1. Byte = MaxLänge, 2. Byte = AktLänge) kümmern. Wenn das Ganze als Array of Bytes angelegt wird, dann muss man sich selbst um diese Dinge kümmern und entsprechende Typwandlungen im Client durchführen.


----------



## Olav (2 November 2006)

Nun, die Umwandlung traue ich meinem C#-Programmierer schon zu, der ist ziemlich fit in diesen Dingen 

Allerdings besteht die SPS-Seite schon, also auch der DB, den ich auslesen möchte. Da möchte ich aus Kompatibilitätsgründen auch nichts ändern, läuft schon auf einigen Anlagen so... 
Und in diesem DB habe ich ja eben diese 45 String-Arrays angelegt...

Die Frage ist einfach, ob ich einen Datenbaustein prinzipiell "als Ganzes" - oder auch nur einen fest definierten Teil - per OPC auslesen kann, ohne Rücksicht auf die in der SPS projektierten Datentypen und -strukturen... 

MfG,

Olav


----------



## Rainer Hönle (3 November 2006)

Idealerweise wird die Datenstruktur im DB ebenso in OPC abgebildet. Wenn man weiß was man tut, kann man dies auch anderst machen. Aber wehe wenn dann Änderungen am SPS-Programm und den Datenstrukturen vorgenommen werden. Dann kann die Fehlersuche sehr zeitaufwändig werden.


----------

