# AGL4DotNET.dll wird nicht gefunden



## lorgarn (25 April 2013)

Hallo zusammen,
ich hoffe ich schreibe hier in den richtigen Bereich. Ich muß in der nächsten Wochen von einem PC aus mit einer SPS reden. Das Programm dazu schreibe ich selbst, hoffe ich. Mein Kontaktmensch hat mir ne Menge input gegeben, wie eine SPS funktioniert, die verschiedenen Register die zyklisch gefüllt und gelesen werden, etc. Jetzt stellt sich mir die Frage, wie ich programmatisch mit der Maschine reden kann. Es gibt eine Programmbibliothek mit namen AGLink. Auf der Seite des Hersteller findet sich nichtmal eine einzige Zeile Dokumentation dazu. Ich habe den Quellcode eines vergangenen Projektes, der Mensch, der das umgesetzt hat ist leider auch nicht mehr verfügbar hier im Haus. Ich habe die dazugehörige dll (AGL4DotNET.dll) und kann diese auch in ein C# Programm einbinden in VisualStudio, jedenfalls kommt das ganze heile durch den Kompiler. Ausführen kann ich das Programm dann aber nicht, weil es mit einer DllNotFoundException aussteigt. Laut FileWalker ist wird die dll gefunden und referenziert.

Gibt es in der Richtung nen Ansatzpunkt? Brauche ich eine 64bit Version der dll auf einer 64-Bit Maschine? Hat irgendwer IRGENDWELCHE DOKU, wie man die Funktionen der Bibliothek nutzen kann?

Jegliche Hilfe ist mehr als Willkommen

Mit freundlichem Gruß
Lorgarn


----------



## Jochen Kühner (25 April 2013)

Also wenn du AGLink bei Deltalogic lädst ist da eine Doku und Beispiele dabei (Details)
Ansonsten kann Ich dir auch noch meine ToolBox Lib vorschlagen (https://siemensplctoolboxlib.codeplex.com/) diese ist auch zur Kommunikation mit Siemens PLC's gedacht und OpenSource!


----------



## Rainer Hönle (25 April 2013)

Die komplette Doku mit allen Beispiele befindet sich bei *ACCON-AGLink* unter dem Download-Tab. AGL4DotNET.DLL referenziert übrigens noch eine weitere DLL, die AGLink40.DLL. Diese muss ebenfalls vorhanden und im Pfad sein. Wenn der Compiler auf 32-Bit eingestellt ist, dann genügt eine 32-Bit-DLL, ist er im Automatikmodus, dann braucht er die 64-Bit-DLL von ACCON-AGLink.


----------



## lorgarn (26 April 2013)

Hm ja, hm ja,
die Doku auf der Webseite ist von 2005, die dort beschriebenen Files und DLLs decken sich namentlich nicht mit meinen. Ich entnehme dem aber, daß es offenbar so eine Art installationsmedium gegeben haben muß, inklusive Test- und Beispielprogrammen. Ich werde danach hier wohl nochmal fahnden müssen. 

Ich habe eine kompilierte DLL eines Programms, daß hier schon jemand vor mir im Betrieb implementiert hat und offenbar ein paar Funktionen kapselt. Damit kann ich ein erstes Testprogramm erzeugen das zumindest die Anmeldung schonmal ausführt, auch wenn es an der Stelle aussteigt, weil ich 2 Phantasie-Integer übergebe. Kriegt man es irgendwie hin, eine SPS auf dem PC zu Simulieren? Ich habe schonmal etwas gesucht aber nichts gefunden bisher. 

Jochen, Dein Projekt sieht interessant aus, aber mir fehlt offenbar eine Menge Basiswissen was SPS Programmierung angeht. Ich finde eine Menge Tools in den Sourcen aber die eigentliche Kapselung der DLL sehe ich nicht. Die Doku ist auch komplett leer, gibts nen Readme oder so?

Gruß
Lorgarn


----------



## Rainer Hönle (26 April 2013)

Auf welcher Webseite? Die Dateien im Download sind vom 22.03.2013. Einfach die Demo herunterladen und installieren. Dann sind auch die aktuellen Dokus dabei. Zum Thema SPS auf dem PC simulieren: einfach mal bei *ACCONtrol* nachschauen. Auch hier gibt es unter Downloads eine Demoversion.


----------



## Jochen Kühner (26 April 2013)

lorgarn schrieb:


> Jochen, Dein Projekt sieht interessant aus, aber mir fehlt offenbar eine Menge Basiswissen was SPS Programmierung angeht. Ich finde eine Menge Tools in den Sourcen aber die eigentliche Kapselung der DLL sehe ich nicht. Die Doku ist auch komplett leer, gibts nen Readme oder so?
> 
> Gruß
> Lorgarn



Doku gibts leider keine, aber viele Beispielprogramme....

Hie rmal ein Codeausschnitt:

konfigurieren einer Verbindung:

```
[COLOR=#000000][FONT=Consolas]Configuration.ShowConfiguration([/FONT][/COLOR][COLOR=#A31515][FONT=Consolas]"SimpleCSharpDemonstrationConnection"[/FONT][/COLOR][COLOR=#000000][FONT=Consolas], [/FONT][/COLOR][COLOR=blue][FONT=Consolas]true[/FONT][/COLOR][COLOR=#000000][FONT=Consolas]);[/FONT][/COLOR]
```

lesen eine Variablen:

```
[COLOR=#000000][FONT=Consolas]myConn = [/FONT][/COLOR][COLOR=blue][FONT=Consolas]new[/FONT][/COLOR][COLOR=#000000][FONT=Consolas] PLCConnection([/FONT][/COLOR][COLOR=#A31515][FONT=Consolas]"SimpleCSharpDemonstrationConnection"[/FONT][/COLOR][COLOR=#000000][FONT=Consolas]); 
myConn.Connect();
[/FONT][/COLOR][COLOR=blue][FONT=Consolas]var[/FONT][/COLOR][COLOR=#000000][FONT=Consolas] tag = [/FONT][/COLOR][COLOR=blue][FONT=Consolas]new[/FONT][/COLOR][COLOR=#000000][FONT=Consolas] PLCTag("DB8.DBD4"); 
[/FONT][/COLOR][COLOR=#000000][FONT=Consolas]myConn.ReadValue(tag);[/FONT][/COLOR]
```


----------



## lorgarn (29 April 2013)

Nochmals Danke für die Beiträge. Es tut mir leid, daß ich so viel dumme Fragn stelle, aber das Thema ist komplett neu für mich. Und wie das im Berufsleben nun mal so ist, hat mein Vorgänger, der schon mal soetwas ähnliches gemacht hat, kein Wort dazu aufgeschrieben.

Die ACControl Maschine bekomme ich zum laufen. Allerdings bekomme ich sie unter Windows 7 nicht dazu, daß in der Installationsanleitung erwähnte LAN Device anzulegen. Da in der Anleitung auch nur steht, daß dies bei der Installation automatisch passiert und sich dabei offenbar nur auf Win XP bezieht, bin ich da gerade erwas ratlos. 
Desweiteren besteht immernoch mein Ursprungsproblem. Um auf die Maschine zuzugrifen, müßte ich die AGLink.dll benutzen, die ich in einem VisualStudioproket laden und einbinden kann, aus der ich Funktionen in einem eigenen Programm benutzen und das ganze auch kompilieren kann, aber beim Ausführen immer wieder auf eine DllNotFound Exception stoße.

Gruß
Lorgarn


----------



## Rainer Hönle (29 April 2013)

Ich vermute, mit Lan-Device ist der Treiber für die Siemens-Software gemeint. Dieser ist für die direkte Kommunikation mit ACCON-AGLink oder libnodave nicht notwendig. ACCONtrol kann auch selbst direkt ein S7-Projekt laden. 
Was ist denn alles auf dem Rechner von ACCON-AGLink vorhanden? Wo befinden sich diese Dateien? Wie sind die Pfade gesetzt? Funktioniert die Demo-Version von ACCON-AGLink (die müsste ja mittlerweile installiert sein) ohne Exception?


----------



## lorgarn (29 April 2013)

Hallo


Rainer Hönle schrieb:


> Ich vermute, mit Lan-Device ist der Treiber für die Siemens-Software gemeint.


Damit ist der 'Realtime OS Virtual Network' Adapter gemeint, der sich laut Doku bei der Installation von Accontrol selber anlegen soll.


Rainer Hönle schrieb:


> Dieser ist für die direkte Kommunikation mit ACCON-AGLink oder libnodave nicht notwendig.


Nicht?


Rainer Hönle schrieb:


> ACCONtrol kann auch selbst direkt ein S7-Projekt laden.
> Was ist denn alles auf dem Rechner von ACCON-AGLink vorhanden? Wo befinden sich diese Dateien? Wie sind die Pfade gesetzt? Funktioniert die Demo-Version von ACCON-AGLink (die müsste ja mittlerweile installiert sein) ohne Exception?


Auf der Maschine hier habe ich die Demo von Accontrol und die oben beschriebe AGLink.dll aus dem Quellcode bzw. dem VisualStudio Projekt meines Vorgängers. Das war es auch schon. Muß die dll über einen Installationsmechanismus installiert und vorgehalten werden?
Nocheinmal: Es geht nicht daraum S7 Projekte zu erstellen. Ich muß mit meinem eigenen Programm mit einer S7 Maschine reden können (Daten rein, Daten raus) und die Lernkurve ist im moment nicht so richtig steil.

Gruß
Lorgarn


----------



## Rainer Hönle (29 April 2013)

Nicht die Anleitung von der Realtime-Version von ACCONtrol verwenden. Für den Fall reicht die Simulationsvariante. Und die benötigt definitiv keinen weiteren Treiber. ACCON-AGLink und auch libnodave unter Jochens Toolbox kann direkt mit ACCONtrol kommunizieren. Mir einfach auch einmal etwas glauben.
Es geht auch nicht darum, eine S7-Projekt zu erstellen sondern darum, dass auf ACCONtrol das selbe Programm vorhanden sein sollte, wie auf der richtigen SPS.
Ansonsten einfach mal die Demo-Version von ACCON-AGLink verwenden und dort unter .net ein Beispiel compilieren und testen. 
Für weitere Hilfestellung wäre es ganz sinnvoll, wenn meine Fragen beantwortet werden würden. Ansonsten drehen wir uns im Kreis.


----------



## lorgarn (29 April 2013)

Ich Antworte offenbar etwas konfus, verzeihung.
Die Domos kompilieren und funktionieren augenscheinlich. Ebenfalls kann ich mich mit AgLink Konfigurator mit der ACCONtrol verbinden. Das Dll-Test-Tool (AGLink_Info) erkennt die demo DLL und gibt mir die in der Doku beschriebene Rückgabe. Setzte ich AgLink_Info auf meine DLL an bekomme ich als Antwort:

Die Version der AGLink-DLL ist kleiner 2.2
Die Seriennummer konnte nicht ermittelt werden
Die Optionen konnten nicht ermittelt werden
Der Lizenznehmer konnte nicht ermittelt werden


Beliebige Taste zum Beenden druecken ...

Jetzt kommt das sehr kuriose: Ich entferne meine DLL aus meinem VisualStudio Projekt. Wenn ich dann einen Verweis auf die Demo DLL erzeugen will schlägt das fehl mit der Meldung:

---------------------------
Microsoft Visual Studio
---------------------------
Es konnte kein Verweis auf "C:\.....\Projects\ConsoleApplication1\ConsoleApplication1\DLL\AGLink.dll" hinzugefügt werden. Stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass sie eine gültige Assembly oder COM-Komponente ist.
---------------------------
OK   
---------------------------

Die Demo Dll funktioniert also, nur in meinem Projekt nicht, und die DLL aus dem vergangenen Projekt meines Vorgängers scheint veraltet zu sein.

[EDIT: Die Demosourcen kompilieren zwar aber werfen ebenfalls mit der demo DLL die DllNotFound Exception, sobald sie ausgeführt werden.]

Gruß
Lorgarn


----------



## Voddy (29 April 2013)

Hi Lorgarn,
handelt es sich um ein .net Projekt?
Wenn ja, machst du einen Verweis auf die AGL4DotNET.dll oder auf die AGLink40.dll?

Als Info vorne weg:
Die AGLink40.dll ist eine C++ native Assembly die in .net nicht direkt eingebunden werden kann. Um sie zu nutzen musst du die AGL4DotNET.dll einbinden und die AGLink40.dll mit ins Ausgabeverzeichnis kopieren lassen.

Viele Grüße,
Voddy


----------



## lorgarn (29 April 2013)

Danke für den Hinweis.
Worin genau besteht der Unterschied zwishen AGLDotNET.dll und AGLink.dll beziehungsweise AGL4DotNET.dll und AGLink40.dll? In den Demo Dateien finden sich nur erstere.

Gruß
Lorgarn


----------



## Rainer Hönle (29 April 2013)

AGLDotNet.DLL und AGLink.DLL sind von ACCON-AGLink Version 3.x, AGL4DotNET.DLL und AGlink40.DLL sind von ACCON-AGLink 4.x. Wenn die aktuelle Demoversion heruntergeladen und ordentlich installiert wurde, dann sollten die letzten beiden Dateien auf dem Rechner sein. Sonst wurde beim Download nicht das Setup mit den aktuellen Dateien von 2013 sondern alte Version von 2008 ausgewählt. Diese ist noch aus Kompatibilitätsgründen für Kunden mit der alten Version in den Downloads enthalten. In diesem Fall unbedingt die aktuelle Version herunterladen und installieren.


----------



## lorgarn (29 April 2013)

Na das hilft mir doch schonmal weiter. Nach der Neuinstallation läßt sich mein Testprogramm wenigstens ausführen. Ich habe mit dem Accon Konfigurationstool eine Verbindung erzeugt und Device 0 auf s7 TCP/IP gesetzt. Als PLC Nummer habe ich 126 angegeben und als IP 127.0.0.1 Der Verbindugstest funktioniert und ReadMLFBNr gibt mir ACCONtrol S7/SIM zurück, das klingt richtig.
Wenn ich nun den Accon API Guid öffne, kann ich auch über den Schalter Verbindug aufbauen oben unter der Menuzeile eine Verbindug aufbauen, Verbindung aufgebaut bis eConnected, bekomme ich gesagt.
Jetzt habe ich die DLL aus der Neuistallation in meinem Testprogramm referenziert (C:\software\ACCON-AGLink\Doku\AGL4DotNET.dll) aber die connect() Methode gibt mir für Device 0 leider nur eine Fehlernummer zurück -1048563 und kein ALG40_SUCCESSS, was offenbar 0 wäre. Muß ich das Device programmatisch aus meinem Code setzen? Ist das evtl. eh die bessere Wahl das zu tun, weil diese Maschine nur die Entwicklungsmaschine ist und nicht die in der Produktion später?

Gruß
Lorgarn


----------



## Voddy (29 April 2013)

Hi,

aaalso, AGLink40_Config.exe erzeugt eine XML-Datei mit z. B. dem Namen AGLink40CfgDev0000.xml für Gerät 0. die 0000 wird dabei für das entsprechende Gerät ersetzt 0-15 bei Standardeinstellungen. Diese Datei braucht AGLink40.dll um die Verbindung aufbauen zu können. 

Wenn sich diese Datei nun irgendwo auf der Platte befindet, kann sie über die Funktion


```
AGL4.SetParaPath("C:\Der\Pfad\Zum\Ordner");
```

bekannt gemacht werden. Oder man kopiert die entsprechenden Dateien in das Ausgabeverzeichnis. Am besten folgende Dateien mitnehmen:

AGLink40_Config.exe (Zum Aufruf aus deiner Anwendung heraus (AGL4.Config(-1))
AGLink40_Config.xml
AGLink40_Config_de.mo (Für deutsche Sprache)
AGLink40_Config_en.mo (Für englische Sprache)
AGLink40_Error.txt/eng (Enthält die Klartexte deutsch/englisch für Fehler die AGLink zurück gibt. Kann mit AGL4.GetErrorMsg(Fehlernummer, ref Textpuffer); aufgelöst werden
AGLink40.dll (Kommunikationsbibliothek selbst)
AGL4DotNET.dll (Wrapper zur Nutzung unter .net)

Ich empfehle 


```
AGL4.SetParaPath("...");
```
 beim Start der Anwendung auf das Verzeichnis zu setzen, in dem die Anwendung nachher arbeiten soll. Und AGLink40_Config.exe dann über die eigene Anwendung heraus aufrufen. Dann findet sich alles ordentlich wieder.

Ansonsten kann in AGLink40_Config.exe im Reiter "Optionen Programm" das Arbeitsverzeichnis separat eingestellt werden.

Die Verbindung kannst du dann entweder über die Schnittstelle 


```
IAGLink4 aglink = AGL4ConnectionFactory.CreateInstance(); // Hier gibts mehrere Überladungen mit unterschiedlichen Vorparametrierungen
bool succes= aglink.Connect(); // Verbindung aufbauen;
// usw.
```
Aufbauen.
Oder du verwendest die statische Klasse "AGL4". Da musst du aber alles von Hand machen. Dabei kann dir aber der API-Guide sehr gut weiter helfen, da dort bereits Beispielcode enthalten ist, wie das zu machen ist.

Viele Grüße,
Voddy


----------



## lorgarn (30 April 2013)

Ersteinmal vielen Dank an alle, die mir hier geantwortet haben. Ich habe die oben angesprochene XML-Datei, die sich sehr gut unter C:\Users\Public\Documents\DELTALOGIC versteckt hat gefunden und kann damit nun auch Eine Verbindung aufbauen. Ich kann die MLFBNr der virtuellen ACCONtrol SPS auslesen, aber das war es im Moment auch schon. Alle anderen Versuche, wie den Diganosepuffer zulesen oder die CPU anszustoßen bzw. anzuhalten scheitern an der Fehlermeldung: Keine Verbindung zum AG. Ich dachte diese Verbindung wäre nach PLCConnect passiert. 

Ich habe mir die Beispiele angesehen. Leider sind die nicht so unglaublich übersichtlich. Das 'Erste Schritte' Beispiel schafft es im endeffekt folgende Kommandos:

AGLOpenDevice
AGLDialUp
AGLInitAdapter
AGLGetLifeList
AGLPLCConnect
AGLReadMLFBNr
AGLPLCDisconnect
AGLExitAdapter
AGLHangUp
AGLCloseDevice

auf über 4000 Zeilen aufzublasen mit hilfe von Windows Forms Gedöns. Das nächste Beispiel ist sogar über 15000 Zeilen groß. Gibt es simplere Beispiele? Evtl. auch in Verbindung mit einer ganz einfachen Beispielprogrammierung der SPS?

Gruß
Lorgarn


----------



## Voddy (30 April 2013)

Hi Lorgarn,
habe dir mal ein sehr simples Beispiel angehängt, wie man AGLink benutzt. Es baut eine Verbindung auf, liest die MLFB-Nummer und den Diagnosepuffer aus.
Du musst in den Ausgabepfad nur deine AGL4DotNET.dll, AGLink40.dll und die AGLink40CfgDev0000.xml einfügen. Dann läuft das Ding auch los. Evtl noch den Verweis auf AGL4DotNET.dll erneuern.
Ist leider ein VS2012 Express Projekt da ich daheim nichts anderes hab. Kannst dir die Quellen aber notfalls einfach in ein eigenes Projekt kopieren.

Hoffe das hilft dir weiter.

Viele Grüße,
Voddy


----------



## lorgarn (3 Mai 2013)

Hallo zusammen,
ich bedanke mich für das Beispiel ich habe meinen Fehler damit finden können. Ich kann nun also ersteinmal grundsätzlich mit einer SPS reden. Nochmals danke an alle, die mir hier weitergeholfen haben.

Gruß
Lorgarn


----------

