-> Hier kostenlos registrieren
Hallo,
ich probiere gerade die AGLink-Bibliothek von Deltalogic aus und möchte Daten aus einem optimierten Baustein aus einer S7-1500 auslesen. Numerische Werte funktionieren auch, aber an Strings scheitere ich momentan noch. Ich habe mir das Beispiel (AGL5 TIA Erste Schritte.xlsm) genommen. Dort ist folgende Code-Stelle:
zum Auslesen eines Strings. Das liefert aber nur die Länge des Strings und nicht den Inhalt (da müsste 'hallo1' stehen):
Was mich dabei wundert: valueSTRING8 wird als Long definiert, aber die Funktion AGL_Symbolic_GetAccessBufferString8 erwartet an dieser Stelle den Typ String. Aber auch ein Ändern des Typs in String liefert nur den ersten Buchstaben.
Irgendwas ist da noch falsch...
P.S. In C# muss man an dieser Stelle ein entsprechend großes Array übergeben und dann funktioniert das auch. Aber in VBA wird da kein Array akzeptiert.
ich probiere gerade die AGLink-Bibliothek von Deltalogic aus und möchte Daten aus einem optimierten Baustein aus einer S7-1500 auslesen. Numerische Werte funktionieren auch, aber an Strings scheitere ich momentan noch. Ich habe mir das Beispiel (AGL5 TIA Erste Schritte.xlsm) genommen. Dort ist folgende Code-Stelle:
Code:
Case ValueType_t.eVALUETYPE_STRING8 Dim string_sizeSTRING8 As Long
string_sizeSTRING8 = 0
RetVal = AGL_Symbolic_GetAccessStringSize(RWStruct.AccessHandle, string_sizeSTRING8)
If RetVal <> AGL40_SUCCESS Then
docSTart = docSTart + 1
Call ausgabe(docSTart, AGL_GetVBErrorMsg(RetVal))
End If
Dim buffer_size As Long
Dim CharCount As Long
buffer_size = string_sizeSTRING8 + 1
Dim valueSTRING8 As Long
valueSTRING8 = (buffer_size)
CharCount = 0
RetVal = AGL_Symbolic_GetAccessBufferString8(RWStruct.AccessHandle, RWStruct.Buffer, RWStruct.BufferLen, _
elementIndex, valueSTRING8, buffer_size, CharCount)
If RetVal = AGL40_SUCCESS Then
docSTart = docSTart + 1
Call ausgabe(docSTart, "Value" & elementIndex & " (String8): " & valueSTRING8)
Else
docSTart = docSTart + 1
Call ausgabe(docSTart, AGL_GetVBErrorMsg(RetVal))
End If
Code:
AGL_Symbolic_GetAccessElementValueType is calledSuccess
AGL_Symbolic_GetAccessElementSystemType is called
Success
AGL_Symbolic_GetAccesBufferElementCount is called
Success
Value0 (String8): 7
Was mich dabei wundert: valueSTRING8 wird als Long definiert, aber die Funktion AGL_Symbolic_GetAccessBufferString8 erwartet an dieser Stelle den Typ String. Aber auch ein Ändern des Typs in String liefert nur den ersten Buchstaben.
Irgendwas ist da noch falsch...
P.S. In C# muss man an dieser Stelle ein entsprechend großes Array übergeben und dann funktioniert das auch. Aber in VBA wird da kein Array akzeptiert.

Zuletzt bearbeitet: