Ich habe versucht mit den Testprogrammen direkt zu WinCC zu verbinden .Bei WinCC Items anzulegen nach der OPC.SimaticNET variante funktioniert leider nicht so richtig . Der Fehlercode sagte aus Itemname nicht verfügbar . Man kann aber die direkten Itemnamen der Variablen aus dem WinCC Projekt benutzen um Werte auszulesen . Vieleicht hat ja jemand mit WinCC schon mal experimentiert ? Ich werde dies mal in der kommenden Woche weiter versuchen .
Code: Alles auswählen
Procedure test()
; Read Items WinCC 6.2
; OPC Server verbinden
Debug "OPC Server verbinden"
;*Server = OpcConnect("OPC.SimaticNET", "")
*Server = OpcConnect("OPCServer.WinCC", "")
Debug GetErrorString(*Server, OpcGetLastError())
If *Server = 0
ProcedureReturn 0
EndIf
Debug "Init Shutdown"
*Shutdown = OpcInitShutdown(*Server)
If *shutdown = 0
Debug GetErrorString(*Server, OpcGetLastError())
Else
Debug "Setze MyCallback"
OpcSetShutdownCallBack(*shutdown, @MyCallback())
EndIf
Debug "Fertig."
; Gruppe anlegen
Debug "Gruppe anlegen"
*Group = OpcAddGroup(*Server, "S7_Group")
Debug *Group
Debug GetErrorString(*Server, OpcGetLastError())
If *Group = 0
ProcedureReturn 0
EndIf
; Items anlegen
Debug "Items anlegen"
*item1 = OpcAddItem(*Group, "", "testo") ;############# Hier die in WinCC definierte Variable wählen
Debug GetErrorString(*Server, OpcGetLastError())
Debug "Fertig."
; wait for plc
Debug "PLC Verbinung püfen"
value1.l
quality.l
Repeat
r1 = OpcReadWord(*item1, @value1, @quality)
If r1
Debug GetErrorString(*Server, r1)
OpcRelease(*server)
End
EndIf
If quality = #OPC_QUALITY_GOOD
Break
Else
count + 1
If count > 10
OpcRelease(*Server)
Debug "PLC Offline"
End
EndIf
EndIf
ForEver
Debug "Fertig."
Delay(1000)
; item lesen
value1.l
quality.l
While exit = 0
r1 = OpcReadWord(*item1, @value1, @quality)
If r1
Debug GetErrorString(*Server, r1)
Else
Debug "Item 1 gelesen: " + Str(value1) + " Qulity: " + GetQualityText(quality)
EndIf
Delay(2000)
Wend
; Server beenden - Intern werden automatisch die Gruppen gelöscht (OpcRemoveGroup(...))
Debug "Beenden Server"
r1 = OpcReleaseShutdown(*shutdown)
r1 = OpcRelease(*Server)
Debug "Fertig"
EndProcedure