C#/LibNoDave: VS express 2013 - Anwendung

Dirk_Sch

Level-1
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

was mit "Visual Studio express 2010" gelingt, funktioniert mit "Visual Studio express 2013" nicht mehr. Aber der Reihen nach:

Seit ein paar Tagen versuche ich ein kleines C#-LibNoDave-Testprojekt zu schreiben bzw. anzupassen, um eine Kommunikation mit einer S7 1200 aufzubauen. Als Vorlage verwende ich libnodave.sourceforge.net/ "libnodave-0.8.5.1" (simpleISO_TCP.cs; libnodave.dll; libnodave.net.dll). Als Entwicklungsumgebung dient mir dazu das (aktuelle) Visual Studio express 2013. Mit dem erstellten Testprogramm bekomme ich leider keine Verbindung hergestellt. Die Codezeile:

"fds.rfd = libnodave.openSocket(102, "192.168.1.210");" liefert immer eine 0 und damit keine Kommunikation.

Erstelle ich aber das gleiche Projekt mit "Visual Studio express 2010" (ist bei mir auf einem anderen Rechner (Notebook) installiert), funktioniert die Kommunikation.

Könnt Ihr mir hier weiter helfen. Was muss ich evtl. im "VS express 2013" einstellen, damit ein funktionierendes Programm kompiliert werden kann. Ich muss dazu bemerken, dass ich leider (noch) nicht viel Erfahrung mit der C#-Programmierung und Visual Studio habe.

Gruß Dirk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
da würde ich jetzt nicht unbedingt das Problem vermuten.

eher hier:

gleiche mal die Netzwerkeinstellungen des 2013-Host mit dem 2010-Host ab.

Werde ich mir anschauen. Ich vermute, dass Du die "Eigenschaften von LAN-Verbindungen" unter Win7 meinst.?

Trotzdem noch eine Bemerkung:
Wenn ich das Testprojekt, welches ich mit "VS expr. 2010" erstellt habe, auf den Rechner mit dem ""VS expr. 2013" kopiere und dann mit selbiger Umgebung im Debug-Modus starte, habe ich Zugriff auf die SPS (?). Daher denke ich nicht, dass es an den Netzwerkeinstellungen auf dem 2013-Host liegt.
 
Wenn ich das Testprojekt, welches ich mit "VS expr. 2010" erstellt habe, auf den Rechner mit dem ""VS expr. 2013" kopiere und dann mit selbiger Umgebung im Debug-Modus starte, habe ich Zugriff auf die SPS (?). Daher denke ich nicht, dass es an den Netzwerkeinstellungen auf dem 2013-Host liegt.

und andersherum? die in VS2013 erstellte Anwendung auf dem 2010-Host?
benutzt du die selbe Framework-Version in 2013 wie in 2010?
 
und andersherum? die in VS2013 erstellte Anwendung auf dem 2010-Host?
benutzt du die selbe Framework-Version in 2013 wie in 2010?

Habe ich noch nicht ausprobiert, werde ich aber gleich mal tun.

Unter 2010 wird das ".NET Framework 4 Client Profile" und unter 2013 das ".NET Framework 4.5" benutzt. Allerdings habe ich auch das schon probiert: Unter 2013 habe ich das ".NET Framework 4 Client Profile" eingestellt. Leider ohne Erfolg.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
eine praktische Frage: warum dann nicht mit dem 2010er Projekt in 2013 weiterarbeiten, wenn es doch funktioniert? ;)
oft findet sich die Lösung im Laufe der Zeit von ganz allein...
 
Hast du alle DLL's dabei?

Einen Verweis auf libnodave.net.dll musst du ja haben.
Ein Verweis auf
libnodave.dll funktioniert ja nicht, die musst du zu deinem Projekt hinzufügen und einstellen, das sie ins Ausgabeverzeichnis kopiert wird. Oder du kopierst sie manuell rein (nicht so schön)...


 
Hast du alle DLL's dabei?

Einen Verweis auf libnodave.net.dll musst du ja haben.
Ein Verweis auf
libnodave.dll funktioniert ja nicht, die musst du zu deinem Projekt hinzufügen und einstellen, das sie ins Ausgabeverzeichnis kopiert wird. Oder du kopierst sie manuell rein (nicht so schön)...

Ich denke ja. Die Dateien libnodave.net.dll und libnodave.dll habe ich in das Verzeichnis "Debug" kopiert. Im VS-Projekt mache ich dann noch einen Verweis auf die libnodave.net.dll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
und andersherum? die in VS2013 erstellte Anwendung auf dem 2010-Host?
benutzt du die selbe Framework-Version in 2013 wie in 2010?

So, habe jetzt mal versucht, die in VS2013 erstellte Anwendung auf dem 2010-Host zum Laufen zu bringen. Leider ohne Erfolg: Als Erstes wurde von VS2010 bemängelt, dass das Framework 4.5 nicht gefunden wird. Nachdem ich das Zielframework auf ".NET Framework 4 Client Profile" eingestellt hatte, konnte ich die Anwendung kompilieren. Beim Starten im Debugmodus wird bei der Zeile "fds.rfd = libnodave.openSocket(102, "192.168.1.210");" ein Ausnahmefehler angezeigt: "BadImageFormatExeption wurde nicht behandelt. Es wurde versucht, eine Datei mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0:8007000B) ... "

Also in diese Richtung funktioniert es auch nicht.
 
Nutzt du auf beiden Rechnern das Debug-Profil, oder hast du zufällig auf dem VS2013-Pc "release" eingestellt...

...oder...

Wie ist die Ziel-CPU eingestellt? Any CPU, x86, x64...
Nimm auf jeden Fall x86, der Fehler (BadImageFormatExeption wurde nicht behandelt. Es wurde versucht, eine Datei mit einem falschen Format zu laden..) ist mir nicht ganz unbekannt, aber schon lange her...
 
Zuletzt bearbeitet:
So, habe jetzt mal versucht, die in VS2013 erstellte Anwendung auf dem 2010-Host zum Laufen zu bringen. Leider ohne Erfolg: Als Erstes wurde von VS2010 bemängelt, dass das Framework 4.5 nicht gefunden wird. Nachdem ich das Zielframework auf ".NET Framework 4 Client Profile" eingestellt hatte, konnte ich die Anwendung kompilieren. Beim Starten im Debugmodus wird bei der Zeile "fds.rfd = libnodave.openSocket(102, "192.168.1.210");" ein Ausnahmefehler angezeigt: "BadImageFormatExeption wurde nicht behandelt. Es wurde versucht, eine Datei mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0:8007000B) ... "

Also in diese Richtung funktioniert es auch nicht.

ist dein Rechner mit VS2010 wohl 32 Bit!
Entweder die Anwendung unter 2013 als x86 compilieren, oder eine 64Bit libnodave verwenden!

oder meine ToolBox (https://github.com/jogibear9988/DotNetSiemensPLCToolBoxLibrary), die verwendet automatisch 32/64 Bit libnodave, je nach bedarf!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nutzt du auf beiden Rechnern das Debug-Profil, oder hast du zufällig auf dem VS2013-Pc "release" eingestellt...

...oder...

Wie ist die Ziel-CPU eingestellt? Any CPU, x86, x64...
Nimm auf jeden Fall x86, der Fehler (BadImageFormatExeption wurde nicht behandelt. Es wurde versucht, eine Datei mit einem falschen Format zu laden..) ist mir nicht ganz unbekannt, aber schon lange her...

Auch auf dem VS2013-PC habe ich das "Debug-Profil" (unter Projekt/Projektxxx-Eigenschaften/Erstellen/Konfiguration: Aktiv(Debug)) eingestellt.

Für die Ziel-CPU habe ich alle drei Varianten probiert: "Any CPU", "x86" und "x64" (eingestellt unter: Projekt/Projextxxx-Eigenschaften/Erstellen/Zielplatform: ... und unter: Erstellen/Konfigurations-Manager/Plattform und "Aktive Projektmappenplattform:"). Je nach Einstellung musste ich die libnodave.dll in das entsprechende Debug-Verzeichnis kopieren (z.B. .../bin/Debug oder .../bin/x86/Debug ...) damit sie vom Compiler gefunden wird.
Mit allen drei Einstellungsvarianten hatte ich keinen Erfolg, aber unterschiedliche Reaktionen: mit "Any CPU" und "x86" lieferte mir die Codezeile: "fds.rfd = libnodave.openSocket(102, "192.168.1.210")" eine 0 und das Programm konnte "ordentlich" (zwar ohne Kommunikation zur SPS) beendet werden. Mit der Einstellung "x64" wurde an dieser Stelle ein Ausnahmefehler provoziert: "Ein Ausnahmefehler des Typs "System.BadImageFormatException" ist in TestLND.exe aufgetreten. Zusätzliche Informationen: Es wurde versucht, eine Datei mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B)".
 
ist dein Rechner mit VS2010 wohl 32 Bit!
Entweder die Anwendung unter 2013 als x86 compilieren, oder eine 64Bit libnodave verwenden!

oder meine ToolBox (https://github.com/jogibear9988/DotNetSiemensPLCToolBoxLibrary), die verwendet automatisch 32/64 Bit libnodave, je nach bedarf!

Danke für den Tipp. Werde ich mir auf jeden Fall anschauen.

Aber noch mal zu LibNoDave: Wo finde ich eine 64Bit-Variante von libnodave (z.B. unter http://libnodave.sourceforge.net ?). Außerdem bleibt die Frage, warum ich unter VS2013 mit den Einstellungen für x86 keine Anwendung kompiliert bekomme, mit der ich eine Kommunikation zur SPS aufbauen kann?
 
Ne 64Bit Version findest in meiner Toolbox, die ist jedoch modifiziert, da solltest du dann gleich die Toolbox zum Verbinden verwenden!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...Außerdem bleibt die Frage, warum ich unter VS2013 mit den Einstellungen für x86 keine Anwendung kompiliert bekomme, mit der ich eine Kommunikation zur SPS aufbauen kann?

Wenn ich das richtig verstehe, kannst du dein Projekt unter den oben genanten Einstellungen nicht kompilieren. Welche Fehlermeldung bekommst du?


Der Fehler beim starten als 64Bit Anwendung (Datei mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B)) ist klar (mittlerweile); die "original" libnodave.dll funktioniert nicht in 64Bit Anwendungen

Ich habe gerade keine SPS zur Hand, aber kann mein letztes Projekt ohne Probleme mit Visual Studio 2013 kompilieren. Und das auf einem 32Bit, sowie 64Bit Windows 8. Das Zielframework ist hier 4.0.
 
Wenn ich das richtig verstehe, kannst du dein Projekt unter den oben genanten Einstellungen nicht kompilieren. Welche Fehlermeldung bekommst du?


Der Fehler beim starten als 64Bit Anwendung (Datei mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B)) ist klar (mittlerweile); die "original" libnodave.dll funktioniert nicht in 64Bit Anwendungen

Ich habe gerade keine SPS zur Hand, aber kann mein letztes Projekt ohne Probleme mit Visual Studio 2013 kompilieren. Und das auf einem 32Bit, sowie 64Bit Windows 8. Das Zielframework ist hier 4.0.

Sorry, hier habe ich mich wahrscheinlich undeutlich ausgedrückt: Ich kann unter VS2013 alle drei Varianten ohne Fehler kompilieren. Nach dem Start (im Debug-Modus) erhalte ich mit der x64-Variante den Ausnahmefehler und in den beiden anderen Varianten bekomme ich "nur" keine Kommunikation zur SPS zustande (Codezeile: "fds.rfd = libnodave.openSocket(102, "192.168.1.210")" gibt nur eine "0" zurück).

Was für ein Visual Studio benutzt Du? Ich verwende das Visual C#2013 in "Visual Studio Express 2013 für Windows Desktop" (Version 12.0.21005.1 REL) und .NET Framework Version 4.5.50938. Als Zielframework hatte ich sowohl ".NET Framework 4.5" als auch ".NET Framework 4 Client Profile" eingestellt. Jeweils ohne Erfolg.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
lad dir mal hier : http://jochensserver.no-ip.org/wordpress/?page_id=58 die jfk vartab und sag ob du dich damit verbinden kannst.

Hallo Jochen,

die JFK-VarTab habe ich mir runtergeladen und auch ausprobiert: ja, ich kann mich mit meiner SPS verbinden (über Config Connections/ISO over TCP ... ; Verbindung testen: Connected! (MLFB:6ES7 214-1AG40-0XB0))

Gruß Dirk
 
Ok, dann gehts auf jeden fall von dem rechner mit libnodave (wobei mein programm ja eine modifizierte version nutzt). Aber warum dein call dann nicht funz... kein plan im moment. Kann dir nur sagen, dann versuchs halt über meine Bibliothek, damit scheints ja zu klappen (sonst würde jfk vartab ja auch nicht funktionieren)
 
Hallo,


auch ich bekam mein libnodave Programm (Visual Studio Express -VBasic) unter 64Bit W7 nicht zum laufen. Nach langer suche habe ich herausgefunden, dass man bei den Express-Versionen die Zielplattform (x32 oder x64) nicht angeben kann.
Die "mitgelieferte" DLL ist für x32. Wenn man bei der Vollversion als Zielplattform x32 angibt funktioniert alles auch unter 64Bit.
 
Zurück
Oben