SoftSPS, OPC Eingänge/Ausgänge direkt abfragen

xcompile

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

mein bisheriger Stand ist, dass Eingänge/Ausgänge über OPC durch Exportieren der Symboltabelle zugänglich gemacht werden können.

Frage:
Ist es möglich die Symboltabelle zu umgehen und direkt auf die Schnittstellen mittels z.B. E 0.3 oder A0.1 zuzugreifen(über OPC)?

Vielen Dank für Anregungen oder Hinweise.

Systemdaten:

STEP 7 Version V5.4 + SP5
WinLC RTX V 4.4
CP1616-CP1640
ET200S
OPC Server V7.0
 
Es ist immer möglich DIREKT (ohne Symbole) auf die Ein/und Ausgänge zuzugreifen. Dann musst du aber wissen wie diese genau angegeben werden müssen. Die Syntax ist bei jedem Herrsteller anders.

Das steht aber im Handbuch des OPC Server. Müsste ungefähr so sein:
"S7:[Verbindungsname]EB0" (für Eingangsbyte 0)
"S7:[Verbindungsname]AX3.2" (für Ausgangsbit 2 im 3. Ausgangsbyte)

Den Verbindungsnamen musst du mit dem ersetzen was du in NetPro tatsächlich projektiert hast.

 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meine Frage war vermutlich ein bisschen zu offen formuliert.
Kann es sein, dass dieses Vorgehen lediglich bei OPC, nicht aber bei OPC UA funktioniert?
Über OPC UA ist es mir bisher nur gelungen durch Nutzen der Symbolik an die Daten der angeschlossenen Sensoren zu kommen.
Ich dachte Verbindungsnahme + Eingang/Ausgang(also S7:[verbindung]EB0) würden als NodeId interpretiert werden(analog zu dem Symbolnamen). Das scheint so ohne weiteres aber nicht zu funktionieren.
 
Das ist nicht ganz richtig. Auch bei OPC UA kannst du DIREKT Adressen angeben und musst nicht die Symbolik verwenden. Allerdings "versteht" der UA Server eine andere Syntax, die ähnlich der ANY-Pointer anfgebaut ist.

Bei UA gibt es sogenannte Namespaces, eine ItemID (oder besser gesagt NodeID wie man bei UA sagt) ist nur innerhalb ihres Namespaces eindeutig. Der SimaticNET OPC UA Server unterstützt insgesamt 4 Namespaces:

NS 0 (das ist der standard UA Namensraum der durch die OPC Foundation definiert wurde)
NS 1 ("S7COM" das sind direkte Adressen in der "alten" COMpatiblen Syntax)
NS 2 ("S7" das sind direkte Adresen in der neuen ANY-Pointer Syntax, die viel schneller ist als die "alte")
NS 3 ("SYM" das sind die symbolischen Adressen aus der ATI Datei)

OPC UA gibt es erst seit OPC Server V8.0 soweit ich weiß.
 
Das ist nicht ganz richtig. Auch bei OPC UA kannst du DIREKT Adressen angeben und musst nicht die Symbolik verwenden. Allerdings "versteht" der UA Server eine andere Syntax, die ähnlich der ANY-Pointer anfgebaut ist.
Ich habe mir hier http://spsforen.de/showthread.php?t=32881 das Beispiel für den Zugriff angeschaut, wo sucht man am besten nach Dokumentation für diese angepasste ANY-Pointer Syntax? Durch try and error konnte ich keinen Weg finden um z.B. Daten von einem Sensor abzufragen welcher an PEW 516 angeschlossen ist. Wenn ich über OpcScout oder ähnliche Clients durch die Hierarchie Browse bekomme ich im S7 Zweig/Namespace keine Werte. Im SYM Zweig bekomm ich die exportierte Symboltabelle.


Bei UA gibt es sogenannte Namespaces, eine ItemID (oder besser gesagt NodeID wie man bei UA sagt) ist nur innerhalb ihres Namespaces eindeutig. Der SimaticNET OPC UA Server unterstützt insgesamt 4 Namespaces:

NS 0 (das ist der standard UA Namensraum der durch die OPC Foundation definiert wurde)
NS 1 ("S7COM" das sind direkte Adressen in der "alten" COMpatiblen Syntax)
NS 2 ("S7" das sind direkte Adresen in der neuen ANY-Pointer Syntax, die viel schneller ist als die "alte")
NS 3 ("SYM" das sind die symbolischen Adressen aus der ATI Datei)
Die Namespaces sind bei mir etwas anderst verteilt aber alle soweit vorhanden(laut Namespace Array).

OPC UA gibt es erst seit OPC Server V8.0 soweit ich weiß.
In einigen Quellen hab ich gelesen, dass der OPC Server V8.0 Erweiterungen mitbringt wie z.B. Alarms & Events. Die Basisfunktionalität für Security und DataAccess bringt der 7er schon mit. Lässt sich auch separat aktivieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du mit OPC UA (Scout V10) in den Knoten "S7:" reinbrowst und in "VerbindungsNamen", und dann in "blocks" und anschließend in das Objekt "pi" dort findest du einen Ordner "templates" da stehen die (fast) fertigen Nodes drin.

Dein PEW0 gibt es auch. Bei mir ist des Namespaceindex="3", IdentifierType="string", Identifier="Verbindung_1.pi.0,w" (ANY-Pointer Syntax)

Und JA, du hast recht, da muss ich mich korrigieren:
CD2008 = "schon mit OPC UA, aber nur DataAccess Profil und nur für S7 Protokoll, alle 32Bit Win OS"
CD2010 = "mit OPC UA für S7 und auch für PNIO Protokoll, zusätzlich zum DA Profil auch Alarms&Condition Profil für S7 Protokoll, leider nur für Win7-32Bit"
CD2011 = "hoffentlich für alle OS 32 und 64 Bit"
 
Vielen Dank erstmal für die ausführliche Hilfe :)

Wenn du mit OPC UA (Scout V10) in den Knoten "S7:" reinbrowst und in "VerbindungsNamen", und dann in "blocks" und anschließend in das Objekt "pi" dort findest du einen Ordner "templates" da stehen die (fast) fertigen Nodes drin.
Die Templates gibt es bei mir nicht, allerdings hat es funktioniert das PEW 516 abzufragen wie du meintest mit
Code:
s7-verbindung_1.pi.516,w
Kann ich über die ANY-Pointer Syntax auch direkt auf die Bit Ebene also z.B. E 0.1 zugreifen? Hatte analog zu dem PEW Beispiel mal folgendes probiert um auf das Eingangsbyte zuzugreifen
Code:
s7-verbindung_1.i.0,b => ok
s7-verbindung_1.i.0.1,b => nicht ok, funktioniert auch nicht
Wobei das ja nicht ganz richtig ist, da ich ein Bit testen möchte und kein Byte.
Meine momentane Lösung ist eben das ganze Byte einzulesen und programmatisch zu testen welche Bit's gesetzt sind.
 
Versuch mal mit
Code:
s7-verbindung_1.pi.516,x3
Die Syntax ist ungefähr so:
<VerbindungsName>.<Datenbereich>.<ByteOffset>,<Datentyp><BitNummer>,<Anzahl>

VerbindungsName="S7-Verbindung_1"
Datenbereich="pi" (für ProzessEingang) oder "DB5" (für Datenbaustein #5)
ByteOffset="10" (für das 10. Byte in dem Datenbereich)
Datentyp="b" (Byte) oder "x" (Bit) oder "w" (Word)
Bitnummer="3" (0..7 sind möglich, geht aber nur bei Datentyp "x")
Anzahl="20" (für ein Array)
 
Zuletzt bearbeitet:
Zurück
Oben