Einzelnen Beitrag anzeigen
  #2  
Alt 14.03.2013, 15:58:14
Datta90 Datta90 ist offline
Anfänger
 
Registriert seit: Mar 2013
Alter: 30
Beiträge: 11
AW: Schreiben auf Simatic.net OPC Server (SOAP XML) polymorphes Attribut

Habe noch was interessantes gefunden. Im Netz hat jemand das selbe Problem und darauf antwortete jemand:
Zitat:
In OPC kennt man 2 Datentypen für eine Variable
1) den Canonical Data Type
2) den Requested Data Type

Der kanonische Datentyp ist der "Urdatentyp" den eine Variable besitzt. Eine Lichtschranke hätte beispielsweise den kanonischen Datentyp "Boolean", das liegt in der "Natur" einer Lichtschranke. Ein "S7:[Verb1]DB1,W4,1" ist ein Word (VT_UI2) im Datenbaustein 1 ab der Byteoffsettadresse 4, dessen cannonical DT ist "VT_UI2". Wenn auf diese Adresse ein Symbol gelegt wird z.B. "MeineTemperaturImKessel2" dann hat auch das Symbol den cannonical Datatype VT_UI2 (16 Bit unsigned integer)

Ein OPC Client kann nun beim Hinzufügen der Variable zu einer Gruppe (AddItems) angeben dass der Server diese Variable bitte in einem anderen Datentyp liefern soll. Der Requested Data Type könnte also beispielsweise als String (VT_Bstr) angefordert werden. Nun wird der Server jedes mal wenn er die Variable an den Client sendet dessen Wert konvertieren und als String liefern. Umgekehrt muss der Client beim Schreiben den Wert als String angeben. Viele Clients, die Daten in der Oberfläche in z.B. "TextBox" anzeigen, machen das so, denn dann kann der Wert direkt zugewiesen werden. Das funktioniert rückwärts (beim Schreiben) aber nur dann wenn der String auch in einen VT_UI2 konvertierbar ist. Wenn du also den Wert "klaus" auf die Variable schreibst dann würde es nicht konvertierbar sein. Auch "-12" würden nicht klappen oder "65536".

Ein spezifikationskonformer OPC Server muss alle Konvertierungen entsprechend der Windowsfunktion "VariantChangeType" beherrschen. Wird bei AddItems der Requested Data Type mit VT_Empty (0) angegeben, dann liefert der Server die Variable in ihrem Cannonical Data Type, das ist bei den vielen Clients auch der Default.

Also prüfe zunächst wie die Variable bei AddItems angefordert wird, anschließend prüfe wie die Variable vom Client tatsächlich geschrieben wird. Bei "fertigen" Clients dessen Code man nicht hat, ist das nätürlich schwer. Da bleibt dann nur noch der Trace "Data" des Servers, um zu sehen was wirklich passiert.
So richtig schlau werde ich daraus aber auch nicht. Wie soll ich jetzt meinen Value in welchen Typ konvertieren?! Oo
Mit Zitat antworten