# libnodave und ACControl auf Win7 64 Bit Prof



## Earny (6 Mai 2012)

Hallo,

ich will diverse VB.Net-Visus über libnodave mit ACCOntrol kommunizieren lassen. Auf meinem alten WinXp-Rechner klappt das problemlos. ACCOntrol 1.2.32 lässt sich unter W7 64 Prof installieren. Es kann aber nicht in der Schnittstellenkonfiguration von STEP7 angesprochen werden. (Ist nicht so schlimm, man kann das S7-Programm auch direkt laden.). Ich hoffe aber, das Deltalogic demnächst die 1.3.0- oder 2.0.0-Version von ACCOntrol für W7 64 Bit herausbringt.)

Das S7-Programm läuft fehlerfrei in der ACCONtrol-CPU ab.
Die libnodave.dll habe ich an vier Stellen abgelegt (sicher ist sicher):
in Syswow64 von Windows (hier sollen die alten 32 Bit-Treiber(!), z.B. dlls und ocx usw. rein)
in Sytem32 von Windows (hier sollen die neuen 64 Bit-Treiber(!) rein)
im Projektordner des mit VB.2010SP1Prof erstellten VB-Projekts
und im Ordner bin\debug des VB-Projekts

Ich vermute, dass die libnodave.dll nicht wirklich W7 64 Bit bekannt ist. Bei Xp genügt es ja, sie ins system32 zu kopieren - das wars. Ich benutze noch den libnodave-Modul, also nicht die Wrapper-libnodave.net.dll. Das hat bisher auf dem XP-Rechner bestens funktioniert.

Oder tut es die alte libnodave.dll (32 Bit) bei W7 64 Bit nicht. Hier im Forum gibt es schon viel Infos drüber.

Das nachfolgende VB-Projekt startet fehlerfrei. Es gibt keine Fehlermeldung! Der Wert aus dem MW40 soll gelesen und in die Textbox "txtWert" geschrieben werden. In der Textbox kommt eine saubere "0" an, aber es entsteht kein Fehler. 
In cbxIP gebe ich die 127.0.0.1 für die ACCONtrol-CPU an. ACCOntrol zeigt im MW40 die Werte korrekt an!


```
Option Explicit On
Option Strict Off
 
Public Class Form1
 
    Dim ph As Integer
    Dim di As Integer
    Dim dc As Integer
    Dim res As Integer
 
    Private Sub btnAufbau_Click_1(sender As System.Object, e As System.EventArgs) Handles btnAufbau.Click
        Dim Port As Integer = 102, IP As String, Rack As Integer = 0, Slot As Integer = 2
        Dim MPIAdressLocal As Integer = 0, MPIAdressPLC As Integer = 2
        IP = cbxIP.Text
        ph = openSocket(Port, IP)
        di = daveNewInterface(ph, ph, "IF1", MPIAdressLocal, daveProtoISOTCP, daveSpeed187k)
        res = daveInitAdapter(di)
        dc = daveNewConnection(di, MPIAdressPLC, Rack, Slot)
        res = daveConnectPLC(dc)
        Timer1.Enabled = True
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim buf(1) As Byte, Wert As Single
        res = daveReadBytes(dc, daveFlags, 0, 40, 2, buf(0))
        Wert = daveGetS16from(buf(0))
        txtWert.Text = Wert
    End Sub
 
    Private Sub btnAbbau_Click_1(sender As System.Object, e As System.EventArgs) Handles btnAbbau.Click
        Timer1.Enabled = False
        res = daveDisconnectPLC(dc)
        Call daveFree(dc)
        dc = 0
        res = daveDisconnectAdapter(di)
        Call daveFree(di)
        di = 0
        res = closePort(ph)
        ph = 0
    End Sub
 
End Class
```



Gruß
Earny


----------



## Jochen Kühner (6 Mai 2012)

Libnodave tut, die dll hab ich auch nur im
Anwendungsverzeichnis, nutze allerdings csharp! Aber, du musst dein programm als x86 anstatt als any cpu compulieren! 
Ich hab in meiner connection lib auch ne 64 bit version von libnodave, funzt aber nicht per ethernet (den fehler hab ich noch nicht gefunden), aber falls du seriell komunizierst könntest die mal noch probieren!


----------



## Earny (6 Mai 2012)

Die libnodave.dll habe ich wie beschrieben an vier Stellen abgelegt. Ich glaube sie wird auch gefunden. Es gibt keinen Absturz. Allerdings wird nur "0" aus dem MW40 gelesen. Ich vermute, die libnodave.dll greift nicht auf die ACCONtrol-CPU zu. 

Das mit der x86 ansatt any CPU verstehe ich nicht. Ich lasse zur Zeit nicht kompilieren, weil ich nur im Debug-Modus in der Entwicklungsumgebung von VB2010Prof teste.


----------



## Earny (7 Mai 2012)

Hallo Jochen,

du sagst die libnodave.dll tuts. Heißt das, auch auf einem 64 Bit-System? Wie hast du die libnodave.dll in der Entwicklungsumgebung eingebunden? 
Bisher (bei XP) war das nicht unbedingt erforderlich. Es genügte sie ins system32 von Windows zu kopieren.

Gruß
Earny


----------



## Jochen Kühner (7 Mai 2012)

Di libnodave.dll liegt im Verzeichnis meiner Anwendung und sonst nirgens. 

Und auch wenn dein Projekt in der Entwicklungsumgebung läuft kannst du in den Projekteinstellungen Any CPU oder x86 einstellen. Und mit Any CPU wird libnodave als 32 Bit Dll nicht unter 64 Bit windows mit deinem DotNet Programm laufen...


----------



## Earny (8 Mai 2012)

besten Dank für die Antwort. Ich würde da aber gern nochmal genau nachfragen, weil ich deine Antwort möglicherweise nicht ganz verstanden habe.

1.) Gibt es zur Zeit irgendeine Möglichkeit, auf einem Windows7 64 Bit-Rechner (ohne VM-Ware oder ähnliche Hilfsmittel, die ein unterlagertes 32 Bit-System bereitstellen) aus einem .Net-Entwicklungssystem (z.B. VB2010), was auf dem 64 Bit-System läuft mit Hilfe der libnodave.dll auf die Speicher einer S7-CPU zuzugreifen, so wie das unter XP 32 Bit problemlos geht.

2.) Gibt es zur Zeit irgendeine Möglichkeit, mit .Net eine Anwendung (z.B. Visualisierung) für einen 64 Bit-Rechner zu erstellen, aus der mit Hilfe von libnodave auf die Speicher einer S7-CPU zugegriffen werden kann?

3.)  Gibt es zur Zeit irgendeine Möglichkeit, auf einem Windows7 64 Bit-Rechner (ohne VM-Ware oder ähnliche Hilfsmittel) aus einem .Net-Entwicklungssystem mit Hilfe der libnodave.dll auf PLCSim (über NetToPLCSim) oder auf ACCONTrol zuzugreifen?

Ich wäre dir bzw. euch dankbar, wenn ich eine Antwort auf die Fragen erhalten könnte.


Gruß
Earny


----------



## Jochen Kühner (9 Mai 2012)

Man kann mit unter einem 64 Bit System libnodave mit .NET benutzten, man muss nur das programm als x86 compilieren!!


----------



## Earny (9 Mai 2012)

gut, dann werd ichs mal versuchen.


----------



## Earny (9 Mai 2012)

die Kommunikation zwischen meiner kleinen VB2010-Visu auf meinem Win7 64 Bit-Rechner und einer CPU314C-2PNDP über Ethernet und libnodave klappt jetzt!!!!!!

Die Kommunikation zu ACCONtrol (1.2.32) will noch nicht, und die Kommunikation über ein MPI-LAN-Kabel auf die MPI-Schnittstelle der CPU314C-2PNDP klappt auch noch nicht. Das kann jetzt aber nur noch eine Frage von Tagen sein.


Earny


----------



## Deep Blue (22 Mai 2012)

Hallo,

möchte mich da gerne mal mit einhacken...
Ich würde auch gerne unter VS2010 mit Win7 64 Bit Libnodave nutzen. Muß ich dafür einfach nur die .dll in mein Projekt einbinden? Gibt es irgend wo was zu nachlesen - Beispielcode? Belegt die Dot.net Anwendung mit Libnodave und die Kommunikation mit einer Lean-BG permanent einen Kanal? Bei 3 kann es da ja schon mal eng werden und einer fliegt 

Danke für Eure Hilfe!


----------



## Earny (23 Mai 2012)

Hallo Deep Blue,

zum Testen kannst du meinen obenstehenden Beispielcode nehmen. Der liest das MW40. Anstelle von cbxIP.text musst du die IP deiner Profinet-CPU oder die IP deines Ethernet-CPs angeben.
Die libnodave.dll kannst du für den Test in der Entwicklungsumgebung einfach mal in den Ordner bin/debug kopieren. Dort wird sie gesucht und gefunden. Für fertige VB-Programme musst du sie einbinden. Bei meiner obigen Lösung wird noch der LibnodavModul benötigt. Den müsste es hier irgendwo im Forum geben. Notfalls tut es auch der Modul für VB6.0. Dann musst du allerdings im Modul den Datentyp "Long" (VB6.0) auf "Integer" (VB.Net) umstellen. Geht mit Suchen-Ersetzen ganz gut.

Es klappt bei mir nur die Verbindung zu einer wirklichen S7-CPU mit Profinetschnittstelle. Die Kommunikation mit ACCONtrol oder NetToPLCsim klappt nicht. Ich hoffe die Deltalogic-Leute bringen bald das ACCONtrol für 64 Bit-Windows raus. Das müsste dann problemlos gehen.

Earny


----------



## Deep Blue (24 Mai 2012)

Hallo Earny,

erst mal vielen Dank für Deine Antwort. Habe die Libnodave.dll nun ins Projekt eingebunden. Aber auch wenn ich es offiziell hinzufüge kennt VS den Namespace der .dll nicht. Alles was damit zu tun hat, wird mir angemeckert. Und LibnodavModul fidne ich leider nirgends.


----------



## Jochen Kühner (24 Mai 2012)

Kannsts auch mit meiner connection lib versuchen (link in meiner signatur). Die nutzt intern eine gepatchte version von libnodave, und da sind vb beispiele dabei!



Deep Blue schrieb:


> Hallo Earny,
> 
> erst mal vielen Dank für Deine Antwort. Habe die Libnodave.dll nun ins Projekt eingebunden. Aber auch wenn ich es offiziell hinzufüge kennt VS den Namespace der .dll nicht. Alles was damit zu tun hat, wird mir angemeckert. Und LibnodavModul fidne ich leider nirgends.


----------



## Earny (26 Mai 2012)

hallo Deep Blue,

hier kommt noch der Modul. Ich habe die Endung in "pdf" geändert. Das musst Du auf "vb" zurückändern.

Gruß
Earny


----------



## Kottan (29 Oktober 2013)

Hallo beisammen,

sorry, dass ich diesen Thread nochmals hervorhole.

Ich habe ein Testprogramm unter VB.NET in der 32 Bit Umgebung zum laufen gebracht.
Unter 64 Bit funktioniert es aber nicht.

Stelle ich den Compiler wie hier beschrieben auf x86 um, dann bekomme aber jede Menge Fehlermeldungen wie z.B:
'Der Typ "libnodave.daveOSserialType" ist nicht definiert' 
'Der Typ "libnodave.daveInterface" ist nicht definiert' 
usw.

Was mache ich falsch?
Danke im Voraus für jede Hilfestellung.

lg.


----------



## Earny (29 Oktober 2013)

Hallo Kottan,

ich kann Dir da leider nicht helfen. Die Methoden libnodave.daveOSserialType und libnodave.daveInterface sagen mir nichts. Ich vermute, die werden im Zusammenhang mit der libnodave.net.dll eingesetzt. Die Bedeutung bzw. der Vorteil dieser libnodave.net.dll ist mir nie klar geworden. Ich benutze nur die libnodave.dll und den libnodaveModul.vb. Dabei sieht der Verbindungsauf- und Abbau anders aus und die von Dir eingesetzten Methoden gibt es dann nicht.


----------

