pure840d: kann man den deltalogic OPC-Server erweitern?

LowLevelMahn

Level-1
Beiträge
766
Reaktionspunkte
90
Zuviel Werbung?
-> Hier kostenlos registrieren
Mein Projektname: pure840d (Ziel: HMI-Advance freie Steuerung der 840D)

ich habe über die Konfiguration des HMI-Advance die Information wo die NC/PLC Daten der 840D zu finden sind

das Mapping besteht aus einem Namen (z.B. /bag/state/opmode) dem typ (word, byte, bit,..., string, uint16, ... ca. 20 Typen) und der genauen Position (Datablock,Area,...)

jetzt würde ich gerne die HMI-Konfiguration in eine DeltaLogic-OPC-Server konforme Form bringen sod. ich die Variablen über diesen Weg benutzen kann

meine Frage:
-ist der OPC-Server so konfigurierbar? wie frei?
-gibt es dafür Dokumentation
-gibt es eine Trial-Version

LowLevelMahn
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja schon geschaut

ich finde in der AgLink Doku keine bezüge zur Endianess - aus der NCDDE-Konfiguration kommen
ca. 8 Typen Big der Rest Little Endian - und dazwischen noch irgendwelche Stringbuffer (gesammt 24 verschiedene Typen)

und diese Angaben beziehen sich auf die NCK-Daten welche erst durch den NCDDE-Service ihre bedeutung erhalten

und soweit ich das sehen kann werden die Daten auch nicht über die Formatsangabe im PDU header beschrieben sondern
werden erst durch das Mapping des NCDDE-Servers erzeugt (alles F9 Byte-Streams)

aber mal schauen was der OPC server so kann

ciao LowLevelMahn
 
eine kleine Umschreibung

Beschreibung von 2 NC DDE-Variabeln aus der NCDDE-Konfiguration

NC
Array
(
[ddename] => /Nck/MachineAxis/name
[protokoll_handler] => 200
[zeitueberwachung] => 10
[parameter] => Array
(
[bereich] => 0
[einheit] => channel(1)
[spalte] => 9
[zeile] => 1
[bausteintyp] => 74h -> 116d
[cnmm-adresse] => /NC
[datenformat] => -32 -> ET String(32)
[zyklus_basis] => 0 -> 100ms
[base_count] => 11
)
)

NC
Array
(
[ddename] => /Channel/ProgramInfo/progName
[protokoll_handler] => 200
[zeitueberwachung] => 10
[parameter] => Array
(
[bereich] => 2
[einheit] => channel(1)
[spalte] => 3
[zeile] => 1
[bausteintyp] => 7dh -> 125d
[cnmm-adresse] => /NC
[datenformat] => -32 -> ET String(32)
[zyklus_basis] => 0 -> 100ms
[base_count] => 11
)
)

Beispiel-Paket
---

SCP_receive
handle: 0
timeout: 0
data_len: 320
buffer:
....P_......@........P..........................................
................2.............................../_N_MPF0........
................................................................
................................................................
................... X...........................................

00 00 00 00 50 5F 00 02 00 00 00 02 40 07 03 00 F0 00 00 F0 00 50 00 00 00 00 00 00 00 00 00 00
00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 07 00 00 00 00 00 0C 00 DA 00 01 12 08 12 02
01 1B 00 00 00 00 FF 09 00 D6 00 04 FF 09 00 A0 2F 5F 4E 5F 4D 50 46 30 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 09 00 20 58 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 09 00 02 01 00 FF 09 00 02 03 00

result: 0
---

"/N_MPF0" -> /Channel/ProgramInfo/progName
"X" -> /Nck/MachineAxis/name

auf der Benutzerseite werden die Variablen noch z.B. mit Kanal-Nummer und Index/Spalte ergänzt

also z.B. /Channel/ProgramInfo/progName[u1] - Programmname im ersten Kanal
oder /Nck/MachineAxis/name[u1,2] - Zweite Achse im ersten Kanal

PLC Daten werden z.b. so beschrieben

Array
(
[ddename] => /Plc/DataBlock/Byte
[protokoll_handler] => 200
[zeitueberwachung] => 10
[parameter] => Array
(
[string] => "84 0 0 # /PLC 11 0 1"
[bausteintyp] => 84h -> 132d
[datenformat] => 11 -> BE 16-Bit unsigned
[zyklus_basis] => 0 -> 100ms
[base_count] => 1
)
)

/Plc/Datablock/Byte[c200,10] -> Datblock 200, Byte 10
und das send/receive-Paket sieht so aus wie der gewohnte Area 84h Zugriff

anderes Beispiel:

Array
(
[ddename] => /Channel/Parameter/rpa
[protokoll_handler] => 200
[zeitueberwachung] => 10
[parameter] => Array
(
[bereich] => 2
[einheit] => channel(1)
[spalte] => 1
[zeile] => 2
[bausteintyp] => 15h -> 21d
[cnmm-adresse] => /NC
[datenformat] => 5 -> LE String nullterm.
[zyklus_basis] => 0 -> 100ms
[base_count] => 11
)
)

ist so eine Art Rechenregister /Channel/Parameter/rpa[u1,200]
wird als String transportiert (Little Endian String nullterm.) enthält
aber einen Double-Wert

werde versuchen meinen Trace-Analyzer so zu verbiegen das er eine Zuordnung zwischen s7onlinx.dll trace und diesen Variablen herstellen kann

LowLevelMahn
 
Zurück
Oben