String von C# über OPC zu S7, Längenproblem

3DA

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kollegen,

habe bereits das Forum durchforstet, aber nichts passendes gefunden.
habe folgendes "Problem":

Zunächst mal foglende Konfiguration:

- S7 CPU-315 2PN/DP

- OPC Server IBH

- C# Programm von einem externen Programmierer

Ich habe mit OPC-Server und TCP/IP Telgrammverbindung schon einige Projekte realisiert, bin jetzt aber auf ein neues unerwartetes Problem gestoßen.
Zwischen der S7 und der C# Anwendung gibt es in meinem aktuellen Projekt das erste mal Strings, die von der C# Anwendung über den OPC-Server an die SPS kommen.

Nun ist ja bekanntlich String nicht gleich S7-String, da dort ja noch diese 2 Bytes für max. Länge/tatsächliche Länge vorweg gestelt sind.
Die C# Anwendung schickt mir jetzt einen "normalen" String, der natürlich auch in mein Datenfeld des S7 Strings geschrieben wird aber natürlich nicht die tatsächliche Länge.
Gibt es da einen Trick/Möglichkeit das ganze seitens C# oder von mir aus auch S7 auf einfachem Wege zu realisieren?!

Vielen Dank im Voraus für Eure Beiträge

Grüße
Lars
 
Hallo,
so wie ich das sehe hast du 2 Möglichkeiten :
- das C-Programm stellt dem eigentlichen Nutzdaten-String die beiden Header-Bytes als Charakter vor.
- Du nimmst die Daten als Array_of_Byte entgegen, scannst nach Empfang nach dem String-Ende (bei C wird m.E. der String mit Chr(0) terminiert) und generierst dir daraus die beiden Header-Bytes.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn es über einen OPC Server geht, solltest du dieses Problem nicht haben. Der OPC Server ist dafür "verantwortlich". Im OPC Server gibt es einen VT_BSTR einen VariantTyp. Wenn der OPC Server mit einer S7 Steuerung spricht MUSS er das für die S7-Steuerung entsprechend aufbereiten und für den S7 String die beiden "Führungsbytes" mit Gesamt-Länge und Benutzte-Länge entsprechend befüllen.

Das klappt natürlich nur dann wenn es in der S7 auch tatsächlich ein S7-String ist und kein Byte-Array. Ich habe das mit dem Simatic OPC Server probiert und es klappt einwandfrei. Könnte mir vorstellen das dies beim "Reverse-Engineering" mancher OPC Drittherrsteller "vergessen" wurde, übrigens nicht nur String sondern gerne auch VT_DATE, denn die Datumsformate einer S7 sind noch schräger als die Strings (ich sag nur: TOD und Teufel).

Um sicher zu gehen empfehle ich daher immer zu prüfen ob der eingesetzte OPC Server:
a) spezifikationskonform getestet wurde
b) bei diesem Test alle Datentypen verwendet worden sind.

Die Ergebnisse eines solchen Tests sind "öffentlich" einsehbar bei der OPC Foundation:
http://www.opcfoundation.org/Products/ProductVendors.aspx

Hersteller auswählen, Produkt auswählen und Testergebniss anzeigen lassen "Test Result" in grün ganz unten auf der Seite.
 
Zurück
Oben