Sönke Schlüter
Level-1
- Beiträge
- 7
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Guten Abend,
dies ist mein erster Beitrag.
Nach einiger Zeit steige ich nun wieder ins Programmieren ein. Früher konnte ich relativ einfach mit Softing OPC die Kommunikation zu meinen SPS ermöglichen.
Jetzt bin ich aktuell dabei mich in AGLink einzuarbeiten und habe mir ein erstes kleines Beispiel mit Hilfe der Anleitungen geschrieben.
Allerdings erhalte ich immer in dieser Zeile result = opc.agl.Symbolic_ReadMixEx(readwritestructures)
folgende Fehlermeldung:
22.11.2019 17:18:11 Fehler in Sub: Polling in Zeile: 283
Message:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Stacktrace:
bei Accon.AGLink.Converter.ToGcHandle(SymbolicRW[] buffer)
bei Accon.AGLink.AGL4.Symbolic_ReadMixEx(Int32 connNr, SymbolicRW[] symbolicRW, Int32& sError, Int32 timeout)
bei Accon.AGLink.AGLink4Tia.Symbolic_ReadMixEx(SymbolicRW[] symbolicRw, Int32& sError, Int32 timeout)
bei Accon.AGLink.AGLink4Tia.Symbolic_ReadMixEx(SymbolicRW[] symbolicRw)
bei XXXXXX\frm_haupt.vb:Zeile 283.
Es klappt alles bis zu der entsprechenden Zeile. SPS-Nummer wird ausgelesen. TIA-Symbole werden vom PLC gelesen etc.
Der aus meinen Augen relevante Code-Teil sieht wie folgt aus:
Wäre super, wenn ein Erfahrener mir helfen könnte
Vielen Dank und viele Grüße,
Sönke
dies ist mein erster Beitrag.
Nach einiger Zeit steige ich nun wieder ins Programmieren ein. Früher konnte ich relativ einfach mit Softing OPC die Kommunikation zu meinen SPS ermöglichen.
Jetzt bin ich aktuell dabei mich in AGLink einzuarbeiten und habe mir ein erstes kleines Beispiel mit Hilfe der Anleitungen geschrieben.
Allerdings erhalte ich immer in dieser Zeile result = opc.agl.Symbolic_ReadMixEx(readwritestructures)
folgende Fehlermeldung:
22.11.2019 17:18:11 Fehler in Sub: Polling in Zeile: 283
Message:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Stacktrace:
bei Accon.AGLink.Converter.ToGcHandle(SymbolicRW[] buffer)
bei Accon.AGLink.AGL4.Symbolic_ReadMixEx(Int32 connNr, SymbolicRW[] symbolicRW, Int32& sError, Int32 timeout)
bei Accon.AGLink.AGLink4Tia.Symbolic_ReadMixEx(SymbolicRW[] symbolicRw, Int32& sError, Int32 timeout)
bei Accon.AGLink.AGLink4Tia.Symbolic_ReadMixEx(SymbolicRW[] symbolicRw)
bei XXXXXX\frm_haupt.vb:Zeile 283.
Es klappt alles bis zu der entsprechenden Zeile. SPS-Nummer wird ausgelesen. TIA-Symbole werden vom PLC gelesen etc.
Der aus meinen Augen relevante Code-Teil sieht wie folgt aus:
Try
opc = New progparas With {
.verbose = True,
.agl = AGL4ConnectionFactory.CreateTiaInstance(0, 0, 1)
}
Dim result As Integer
opc.agl.Connect()
Dim out As String = ""
opc.agl.ReadMLFBNr(out)
MsgBox("SPS-Nummer:" & out)
'Laden der Symbole von der SPS
Dim rootNodeHandle As IntPtr
rootNodeHandle = IntPtr.Zero
'result = AGL4.Symbolic_LoadAGLinkSymbolsFromFile("C:\Best-Ablage\test.agl", paras.roothandle)
result = AGL4.Symbolic_LoadAGLinkSymbolsFromPLC(opc.project, opc.roothandle)
If result = AGL4.AGL40_SUCCESS Then
MsgBox("erfolgreich geladen")
Else
MsgBox("Fehler beim laden : " & result)
MsgBox(AGL4.GetErrorMsg(result, "unbekannter Fehler"))
End If
Dim symbols(9) As String
symbols(0) = "PLC.Blocks.DB_Programmdaten.Dat_Satz_Nr_P2"
symbols(1) = "PLC.Blocks.DB_Programmdaten.Dat_Satz_Nr_P2"
symbols(2) = "PLC.Blocks.DB_Programmdaten.Dat_Satz_Nr_P2"
symbols(3) = "PLC.Blocks.DB_Programmdaten.Dat_Satz_Nr_P3"
symbols(4) = "PLC.Blocks.I_DB_Stueckzahl.Sp_Flanke_Istwert"
symbols(5) = "PLC.Blocks.DB_Programmdaten.Dat_Satz_Nr_P2"
symbols(6) = "PLC.Blocks.DB_Programmdaten.Dat_Satz_Nr_P2"
symbols(7) = "PLC.Blocks.DB_Programmdaten.Dat_Satz_Nr_P2"
symbols(8) = "PLC.Blocks.DB_Programmdaten.Dat_Satz_Nr_P2"
symbols(9) = "PLC.Blocks.DB_Programmdaten.Dat_Satz_Nr_P2"
Dim readwritestructures(symbols.Length) As AGL4.SymbolicRW
Dim errorposition As Integer = 0
For i = 0 To symbols.Length - 1
result = AGL4.Symbolic_CreateAccessByPath(opc.roothandle, symbols(i), readwritestructures(i).AccessHandle, errorposition)
If result <> AGL4.AGL40_SUCCESS Then
Dim errormsg As String = ""
AGL4.GetErrorMsg(result, errormsg)
MsgBox("Symbol " & i & " error:" & errormsg & " position " & errorposition)
End If
Next
Dim buffersize As Integer = 0
For i = 0 To symbols.Length - 1
result = AGL4.Symbolic_GetAccessBufferSize(readwritestructures(i).AccessHandle, buffersize)
If result <> AGL4.AGL40_SUCCESS Then
Dim errormsg As String = ""
AGL4.GetErrorMsg(result, errormsg)
MsgBox("buffersizeerror:" & errormsg)
End If
Dim buffer(buffersize - 1) As Byte
MsgBox("i: " & i & " Buffersize:" & buffersize)
readwritestructures(i).Buffer = buffer
readwritestructures(i).BufferLen = buffersize
Next
result = opc.agl.Symbolic_ReadMixEx(readwritestructures)
If result <> AGL4.AGL40_SUCCESS Then
Dim errormsg As String = ""
AGL4.GetErrorMsg(result, errormsg)
MsgBox("readmixex:" & errormsg)
End If
Dim valuetype As AGL4.ValueType
valuetype = AGL4.ValueType.UNDEFINED
For i = 4 To 4 ' symbols.Length - 1 'Achtung, ich will bewusst nur Symbol 4 im ersten Schritt lesen
result = AGL4.Symbolic_GetAccessElementValueType(readwritestructures(i).AccessHandle, valuetype)
If result <> AGL4.AGL40_SUCCESS Then
Dim errormsg As String = ""
AGL4.GetErrorMsg(result, errormsg)
MsgBox("Symbol " & i & " errorelement valuetype:" & errormsg)
End If
Dim systemtype As AGL4.SystemType
systemtype = AGL4.SystemType.UNDEFINED
'For i = 4 To 4 'symbols.Length - 1
result = AGL4.Symbolic_GetAccessElementSystemType(readwritestructures(i).AccessHandle, systemtype)
If result <> AGL4.AGL40_SUCCESS Then
Dim errormsg As String = ""
AGL4.GetErrorMsg(result, errormsg)
MsgBox("Symbol " & i & " errorelement systemtype:" & errormsg)
End If
Dim accessbufferelementcount As Integer = 0
result = AGL4.Symbolic_GetAccessBufferElementCount(readwritestructures(0).AccessHandle, accessbufferelementcount)
MsgBox("buffersize:" & buffersize)
MsgBox("systemtype:" & systemtype)
MsgBox("valuetype:" & valuetype)
For j = 0 To accessbufferelementcount
Select Case valuetype
Case AGL4.ValueType.UINT8
Dim value As Byte
value = 0
result = AGL4.Symbolic_GetAccessBufferUInt8(readwritestructures(i).AccessHandle, readwritestructures(i).Buffer, readwritestructures(i).BufferLen, j, value)
MsgBox(j & ": " & value)
End Select
Next
Next
Catch ex As Exception
fehler(ex, "Polling")
End Try
Wäre super, wenn ein Erfahrener mir helfen könnte
Vielen Dank und viele Grüße,
Sönke