# S7-314 mit LibNoDave, DotNetSiemensPLCToolBoxLib oder Snap7



## Parmaster (19 Oktober 2014)

Hallo!

Ich habe eine S7-314 C-2 DP und 3 Karten (FM 353) für Schrittmotoren, wobei ich nur eine Verbindung zur CPU mit MPI habe.

Dazu schreibe ich noch ein Programm mit VB.NET.

Nun stellt sich mir die Frage, welche Lib am besten dafür geeignet ist? Wenn ich das richtig gesehen hab, funktioniert Snap7 nur mit Ethernet, oder hab ich etwas übersehen?
Mit den anderen beiden sollte die Verbindung mit MPI funktionieren, oder?

Wo findet man eine Doku der beiden Libs? Mich würde vor allem die Verbindung mit MPI interessieren, und natürlich auch eine komplette Übersicht der Befehle.

Bei der DotNetSiemensPLCToolBoxLib finde ich ehrlich gesagt nicht mal die DLL.

Wäre nett wenn mir jemand helfen könnte, und evtl. auch ein Beispiel zeigen könnte wie man die Verbindung mit MPI herstellt.

Vielen Dank schon mal.


----------



## Jochen Kühner (19 Oktober 2014)

Hallo, die DotNetSiemens...Lib verwendet intern auch libnodave, allerdings in einer von mir modifizierten Version. Beispiele für VB sind in der Solution enthalten, das ganze gibts bei GitHub: https://github.com/jogibear9988/DotNetSiemensPLCToolBoxLibrary


----------



## Parmaster (19 Oktober 2014)

Hallo!

Das bei github hab ich schon gefunden, allerdings muss ich zugeben dass ich nicht weiß was ich da genau nehmen soll. Den Ordner TestVB? Da ist ja schon seit 2 Jahren nichts mehr geändert worden. Oder ist das noch aktuell?

Und wo finde ich dort die benötigten DLLs?


----------



## Parmaster (20 Oktober 2014)

Es wäre nett wenn mir mal jemand zeigen könnte wie man damit eine MPI Verbindung aufbaut. Ich finde bei den ganzen Beispielen usw. bei github keine einzige Verbindung mit MPI per VB.NET. Und die benötigten DLLs hab ich auch noch nicht gefunden.


----------



## Jochen Kühner (20 Oktober 2014)

In dem TestVB Programm wird wenn man auf "Show Config" klickt die Verbindungsconfig angezeigt! Da kann man auch eine MPI Verbindung einstellen. Danach kann man mit "MW100 lesen" das Merkwort 100 auslesen.

Falls dert Fehler kommt "Die DLL "libnodave_jfkmod.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.", die Dll liegt im "externalDlls" Ordner der Solution und muss in das Verzeichnis in dem dein Programm compiliert wird kopiert werden!


----------



## Parmaster (20 Oktober 2014)

Wenn ich die DLL hinzufügen will, kommt die Meldung
	
	



```
---------------------------
Es konnte kein Verweis auf "C:\Users\$USERS\Documents\Visual Studio 2010\Projects\TestVB\TestVB\bin\Debug\libnodave_jfkmod.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.
---------------------------
```


----------



## Jochen Kühner (20 Oktober 2014)

Du musst die auch nicht hinzufügen, sondern nur in das "bin" Verzeichnis kopieren, also das indem deine "exe" etc liegt...

Wenn die als Verweis nötig wäre hätte Ich Ihn ja hinzugefügt! Warum das so ist: Siehe hier: http://openbook.galileo-press.de/vi...gn_004.htm#mj1217b56c6cf478ddf0789e900af225da und http://openbook.galileo-press.de/visualbasic_2008/vb2008_18_programmiertechniken_002.htm


----------



## Parmaster (20 Oktober 2014)

Ja, die ist dort auch. Ich hab TestVB genau so übernommen, und in den ersten Zeilen steht dort:


```
Imports DotNetSiemensPLCToolBoxLibrary.DataTypes.Blocks
Imports DotNetSiemensPLCToolBoxLibrary.Communication
Imports DotNetSiemensPLCToolBoxLibrary.DataTypes
Imports DotNetSiemensPLCToolBoxLibrary
Imports DotNetSiemensPLCToolBoxLibrary.Projectfiles
Imports DotNetSiemensPLCToolBoxLibrary.DataTypes.Blocks.Step7V5
Imports DotNetSiemensPLCToolBoxLibrary.DataTypes.Projectfolders.Step5
Imports DotNetSiemensPLCToolBoxLibrary.DataTypes.Blocks.Step5
```

Allerdings bekomme ich als Fehler das hier


```
Der in Imports "DotNetSiemensPLCToolBoxLibrary.DataTypes.Blocks" angegebene Namespace oder Typ enthält keine öffentlichen Member oder kann nicht gefunden werden. Stellen Sie sicher, dass der Namespace oder der Typ definiert ist und mindestens einen öffentlichen Member enthält und dass der importierte Elementname keine weiteren Aliase enthält.
```

Die DotNetSiemensPLCToolBoxLibrary.dll ist auch in dem Verzeichnis.


----------



## Jochen Kühner (20 Oktober 2014)

Du solltest dich vielleicht erst mal mit Grundlagen in Vb.Net befassen! 

Welches .Net Framework hast du als Ziel ausgewählt? Also Ich kann mein Projekt kompilieren und das läuft auch, darin stimmen auch die Verweise! Zu deinem kann Ich ohne Source nichts sagen!


----------



## derwestermann (14 November 2014)

Moin!

Dreisterweise hänge ich mich hier mal an, weil meine Probleme ähnlich sind:
Eine  kleine Routine, welche mir die Daten aller Profinet-Teilnehmer ausliest  wollte ich mir schreiben und greife hierzu auf die SimaticLib zu. Das  funzt so weit auch ganz gut, scheitern tue ich an der CPU. Die ist ja  kein Slave, sondern ein Modul im Rack unter Stations. Ich komme aber an  die Module nicht heran, dann entsann ich mich der  DotNetSiemensPLCToolBoxLibrary und bin auch ziemlich begeistert. Ein  wesentlicher Punkt ist, daß ich bei den Modulen auch die Angabe der  GSDML-Datei benötige, oder der Simatic-Bestellnummer. Eben diese finde  ich jedoch in der, von DotNetSiemensPLCToolBoxLibrary gelieferten  Struktur auch nicht. Jetzt sitze ich einigermaßen in der Tinte und sehe  mich gezwungen, diese Informationen doch wieder von Hand auszulesen,  habe aber ein paar Tage mit dem Versuch zugebracht, die Datenbeschaffung  zu automatisieren. Hier wäre ich für jeden Tip dankbar.

By the way: Wenn ich im Debuggingmodus Online auf die Steuerung zugreifen will, bekomme ich die Meldung: 
_System.DllNotFoundException wurde nicht von Benutzercode behandelt.
   Message=Die DLL "libnodave_jfkmod.dll": Das angegebene Modul wurde  nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen  werden.
  Source=DotNetSiemensPLCToolBoxLibrary
  TypeName=""
  StackTrace:
       bei DotNetSiemensPLCToolBoxLibrary.Communication.LibNoDave.libnodave.closeS7online(IntPtr port)
        bei  DotNetSiemensPLCToolBoxLibrary.Communication.PLCConnection.Dispose() in  z:\A\DotNetSiemensPLCToolBoxLibrary-master\LibNoDaveConnectionLibrary\Communication\PLCConnection.cs:Zeile  2694.
       bei  DotNetSiemensPLCToolBoxLibrary.Communication.ConnectionEditor.tryConnect_DoWork(Object  sender, DoWorkEventArgs e) in  z:\A\DotNetSiemensPLCToolBoxLibrary-master\LibNoDaveConnectionLibrary\Communication\ConnectionEditor.cs:Zeile  711.
       bei System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
       bei System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
  InnerException:_ 
Wenn  ich die libnodave_jfkmod.dll in das bin-Verzeichnis kopiere, kann ich  die ToolboxForSiemensPLCs.exe auch Online verwenden, aber ich kann halt  keine Onlinesachen im Debugmodus betreiben.
Das ist aber nur Jugend  forscht und im Moment nicht mein Hauptproblem, dennoch freute mich auch  in diesem Fall ein hilfreicher Tip.

Gruß

der Westermann


----------



## derwestermann (14 November 2014)

Nochma Moin!

Fräst mich doch der Gedanke, daß ich vielleicht gar nicht aktuell bin, was die _DotNetSiemensPLCToolBoxLibrary _angeht und siehe da, nehme ich die aktuellste Version, ist auch das Online-Problem verschwunden.

Das  Problem mit den Modulen bleibt dergestallt, daß ich vorhin einmal die  Module im Rack vermittels der SimaticLib auslesen konnte. Nun aber immer  die Meldung _Reentrancy erkannt_ bekomme. Auch nach Neustart der VM. Ich raste aus.....

Gruß

der Westermann


----------



## Jochen Kühner (14 November 2014)

Also welche Information möchtest du noch aus dem S7 Projekt auslesen? Komm mit deinen Threads nicht ganz klar. Vielleicht kann Ich ja support dafür einbauen?


----------



## derwestermann (14 November 2014)

In diesem Falle Hardware-Daten, jedoch habe ich mich jetzt mal durch alle Forenbeiträge zum Thema DotNetSiemensPLCToolBoxLib gelesen und da erfuhr ich, daß Du die Hardware nicht so behandelt hast. Daher bin ich zu der Variante mit SimaticLib zurückgeschwenkt.
Asche auf mein Haupt, jawaohl ich bin zu doll gesprungen. Ein Thread wäre das Problem mit dem Auslesen von Hardwaredaten vermittels DotNetSiemensPLCToolBoxLib, das hat sich vorerst erledigt, weil diese Daten nun mal nicht in der dll verfügbar gemacht werden.
Der nächste Thread wäre die Online-Verbindung über DotNetSiemensPLCToolBoxLib gewesen, das hat sich erledigt, da mit der neuesten Bibliothek von Dir dieses wieder funzt.
Bleibt der Thread, daß ich die Hardwaredaten für die ProfiNet-Teilnehmer und die CPU über die SimaticLib finden will, das müßte dann eigentlich ein neuer werden.

Gruß

der Westermann


----------



## Jochen Kühner (14 November 2014)

div. hardware daten kannst du über meine bib lesen, z.b. profinet/profibus teilnehmer


----------



## derwestermann (19 November 2014)

Jo, den Profinetnamen, aber mehr nicht. In der NodeId steht irgendein Wert, aber nicht die PNIO-Teilnehmernummer.
Es gibt ein Objekt nahmens Gsdfile, aber da steht nur \0 drin.


----------

