# AGLink 4 -> Read/WriteMixEX im VBA



## amtek (4 März 2011)

Es geht um kleines Befehl wie im Titel steht.

bisher hab ich oft mit AGLink 3.7  bearbeitet/hergestellt,
diesmal muss ich wegen Windows 7 umstellen auf AGLink 4.4 
und die ich ein kleines problem den schon Woche bekämpfen muss....

Verbindung mit SPS hab ich dank aus PDF und Demos mit Excel-VisualBasic zusammen gestellt, lief wunderbar.

bis auf Befehl ReadMixEx
ich vermute mal auf falsche Parameter den ich keine Beispiele dafür finde und müsste eine von DB ca 2000 Byte laden ins VBA Speicher.


```
With Struct
      
      
        .BitNr = 1
        .DBNr = 111
        .Offset = 0
        .OpAnz = 1847
        .OpArea = AREA_DATA
        .OpType = TYP_BYTE
        .Result = 0
        .Value = VarPtr(Daten(0))
    
    End With
    
    RetVal = AGL_ReadMixEx(0, Struct, 0, Timeout, 0)
```
Die RetVal ergibt immer ein Wert -1048575

Die Strukturen hab ich aus AGLink API Guide hergestellt.
Wo die Fehler liegt, ist im Struktur oder Parameter vom AGL_ReadMixEx(xxxx)

Wäre dankbar wenns ihr hilft oder Tipp macht, oder auch ne Link wo Beispiele gibt.


----------



## Rainer Hönle (4 März 2011)

Der Fehlercode kann mittels der Funktion AGL_GetErrorMsg in Klartext gewandelt werden. 
Ansonsten geht auch Folgendes: den Wert hexadezimal darstellen und in der Definitionsdatei (z.B. AGL_Defines.Bas etc) nach der Bedeutung suchen.

-1048575 = 0xFFF00001 = AGL40_PARAMETER_ERROR = Parameterfehler beim Funktionsaufruf

In diesem Fall sind mehrere Fehler enthalten.
1. Der erste Parameter beim Funktionsaufruf ist der Verbindungshandle. Dieser wird von AGL_PLCConnect geliefert und muss hier verwendet werden. Der fixe Eintrag von 0 kann unter bestimmten Umständen funktionieren, wird es aber normalerweise nicht
2. Im dritten Parameter wird die Anzahl der Strukturen, die zu bearbeiten sind, erwartet. Auch hier steht hart eine 0. Im konkreten Fall sollte hier eine 1 stehen.
3. Welchen Wert hat Timeout? Wenn dieser nicht initialisiert ist und somit 0 enthält, wird der Aufruf asynchron verarbeitet. Dies führt unter VBA sicher zu Problemen. Wenn dann lieber eine 1 (= synchroner Aufruf mit Standardtimeout) oder den tatsächlich gewünschten Timeoutwert verwenden.

Wenn der API-Guide installiert ist, dann sind ja auch alle Beispiele installiert. Einfach dort einmal die VB-Beispiele (nicht .net) ansehen.


----------



## amtek (1 Juni 2011)

in den letzten zeit war ich viel unterwegs...

die probierte ich heute aus mit dieser tipps und hats sofort geklappt...

danke danke vielmals...:s12:


----------

