AGLink -> S7 1500 Zugriff auf Variablen

Zuviel Werbung?
-> Hier kostenlos registrieren
In VBA muss man Variablen ja nicht extra allocieren.
Aber ich habe es jetzt nach einigem Suchen und Probieren gefunden: für AGLink gibt es speziell AGL_malloc.

Jetzt wird zwar ein Wert gelesen. Es ist aber nicht der, der in der Steuerung steht. Vor allem ist der Wert bei jedem Lesen anders. Grrr.
Beim langsamen Debuggen funktioniert es. Scheint also ein Zeitproblem zu sein. Aber es werden schon alle Funktionen nacheinander aufgerufen und auch erst, nachdem ein "positiver" return-Wert zurückkommt.
Das Suchen und Probieren geht weiter...



P.S. Die API Referenz ist leider nicht sehr ausführlich. Die beschreibt nur die Definition und nicht die Verwendung. Und auch die interaktive Hilfe ist keine Hilfe, da an vielen Stellen einfach nicht mehr aktuell. Da fehlen Parameter... Auch die mitgelieferten Beispiele haben schon ein paar Jahre auf dem Buckel und taugen nicht wirklich als Referenz, wenn man neue Features wie symbolischen Zugriff nutzen will. Da ist leider sehr viel Probieren notwendig. Und das kostet viel Zeit... :(
Leider trübt diese schwache Dokumentation das sonst wirklich tolle Produkt.
 

Anhänge

  • SymbolicRW.png
    SymbolicRW.png
    2,9 KB · Aufrufe: 12
Zuletzt bearbeitet:
Für VBA gibt es die ausführlichen TIA Beispiele: "AGL5 TIA Erste Schritte.xlsm" und "AGL5_TIA_WriteVars.xlsm". Falls es damit nicht klappt, einfach den Code (das Projekt, docm bzw xlsm nur über download da bei uns sonst geblockt) an mich schicken. Wir schauen dann nach, woran es liegen kann.
Im API-Guide gibt es keinen Code für VBA nur für VB.net.
Falls in der Doku etwas fehlt, bitte genaue Info an mich senden, damit wir das korrigieren können.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch eine Frage:

Ich habe jetzt vor dem Aufruf von AGL_Symbolic_GetAccessBufferUInt16 testweise eine Wartezeit von 1 Sek. eingebaut. Damit kann der Wert aus der Steuerung recht zuverlässig gelesen werden. Ohne diese Wartezeit werden immer irgendwelche (falschen) Werte gelesen. Da scheint also irgendwas noch nicht "fertig" zu sein. Alle Aufrufe der vorhergehenden Funktionen passieren sequentiell und erst nach Prüfung der Return-Wertes.

Wartezeit ist Mist. Deshalb, wie kann man prüfen, ob und wann mit AGL_Symbolic_GetAccessBufferUInt16 Werte gelesen werden können?
 
Mit welcher Funktion und mit welchen Parametern werden die Daten von der STeuerung gelesen? Bei einem synchronen Lesen kann sofort nach Rückkehr aus der Lesefunktion auf den Puffer zugegriffen werden. Im Falle eines asynchronen Lesens muss das Ende der Lesefunktion abgewartet werden. Bitte mir einfach ein komplettes Codebeispiel schicken, in dem das Problem auftritt.
 
Zurück
Oben