# Libnodave auf 64Bit kompilieren???



## trolly70 (27 Oktober 2009)

Hallo,
eine kurze Frage. Hat schon einmal jemand erfolgreich versucht Libnodave mit einem 64-Bit Compiler zu kompilieren, oder ist es aussichslos? 

Trolly70


----------



## hans_meiser (30 Oktober 2009)

Hallo Trolly70,
Das sieht schlecht aus, habe ich auch schon einmal versucht, hat aber nicht geklappt. Steht hier auch schon bereits im Forum. Libnodave ist meines Wissens nach eine 32bit- Geschichte. 

Ich finde aber dass ganze Gerede um 32Bit oder 64Bit überbewertet ist. Wenn mich nicht alles täuscht, sind unter 32Bit 4GB Ram adressierbar, das sollte doch eigentlich für jeden Zweck reichen, oder?:wink: 

hans_meiser


----------



## trolly70 (30 Oktober 2009)

Hallo Hans Meiser,


hans_meiser schrieb:


> Das sieht schlecht aus, habe ich auch schon einmal versucht, hat aber nicht geklappt. Steht hier auch schon bereits im Forum. Libnodave ist meines Wissens nach eine 32bit- Geschichte.


Zu diesem Ergebnis bin ich auch gekommen, naja macht nichts, aber danke für die Bestätigung.. 



hans_meiser schrieb:


> Ich finde aber dass ganze Gerede um 32Bit oder 64Bit überbewertet ist. Wenn mich nicht alles täuscht, sind unter 32Bit 4GB Ram adressierbar, das sollte doch eigentlich für jeden Zweck reichen, oder?:wink:


Ob das jetzt überbewertet oder nicht ist, weiss ich nicht. Kommt auf den jeweiligen Einsatz an. Wenn ich darüber nachdenke, dass meistens Projekte viele Jahre lang supported und auch an neue BS angepasst werden müssen, halte ich 64Bit für eine zukunfssichere Wahl. Zum Beispiel habe ich gelesen, dass Win 2008 64Bit bald keine 32Bit Dienste mehr zulassen wird. Für den Hausgebrauch ist es aber wohl egal. Ist aber auch nur meine Meinung.

Danke und Gruß Trolly70


----------



## RobiHerb (31 Oktober 2009)

*32/64 Bit*

Dürfte eigentlich gar kein Problem sein, ich hätte die Tools, gibt es jemand in Rhein/Main, der sich mit der Problematik auseinander setzen möchte?

Wo bekommt man denn die Sourcen?


----------



## Thomas_v2.1 (31 Oktober 2009)

Unter Linux hat das schonmal jemand für 64-Bit kompiliert:

http://www.sps-forum.de/showpost.php?p=72763&postcount=3

So wie es aussieht war es nur die Änderung im Makefile.


----------



## mp (31 Oktober 2009)

Hallo,



Thomas_v2.1 schrieb:


> So wie es aussieht war es nur die Änderung im Makefile.



ja, habe nur das Makefile angepasst. Sourcen von libnodave bleiben unverändert!

Läuft bei mir ohne Probleme:

SuSE 10.2 64bit
libnodave 0.8.4
g++ (GCC) 4.1.2

Gruß
Marco


----------



## trolly70 (1 November 2009)

mp schrieb:


> ja, habe nur das Makefile angepasst. Sourcen von libnodave bleiben unverändert!
> 
> Läuft bei mir ohne Probleme:
> 
> ...


 
 Hallo mp,
 danke, das werde ich auch einmal versuchen. Allerdings interessiert es mich auch unter Windows weil ich von Linux weniger Plan habe. Spricht nach deiner Erfahrung etwas dagegen z.B. mit dem MS C++?

 Trolly70


----------



## eloboy (7 März 2010)

*windows server 2008 r2*

Hallo Leute,

läuft Libnodave unter windows server 2008 r2 (64 Bit).
Muss/Soll ich die dll für 64 Bit Kompilieren ?
Als Programmiersprache benützte ich VB.Net 2008.
Sollte ich da auch was beachten?

danke schon mal.


----------



## MikeBi (14 Februar 2011)

*Interresse an 64 Bit*

Also ich bin auch sehr an der 64 Bit Version interressiert. Ich versuche gerade erst einmal die 32 Bit Version zu übersetzen. Das übersetzen klappt zwar, aber die notwendigen Funktion werden nicht exportiert (kann also nicht darauf zugreifen). Bin gerade ratlos. Versuch mit VS C++ 2008.
Mit dem Makefile ging es gleich gar nicht. Nur kryptische Fehlermeldungen.
Vielleicht bekommt es ja einer von Euch hin.

Mike


----------



## Jochen Kühner (14 Februar 2011)

64 Bit compilieren geht, aber die DLL funzt danach noch nicht! Ich bin da sporadisch dran am probieren, aber das wird noch dauern....

Auf jeden Fall läufts nicht wenn man mit der 64 Bit DLL eine Verbindung aufbauen will! (über TCP, die anderen Verbindungen (seriell) konnte Ich noch nicht testen (hab kein Adapter!), S7Online wird ja nicht funktionieren, da es im Moment nur eine 32 Bit DLL ist!)


----------



## MikeBi (15 Februar 2011)

Habe villeicht noch einen potentiellen Fehler gefunden. In 
openS7online wird der Rückgabewert als Handle declariert, aber ein Integer zurück gegeben. Wahrscheinlich bei 64 Bit ein Problem.

Mike


----------



## Jochen Kühner (15 Februar 2011)

OpenS7online wird unter 64 bit eh nicht funktionieren, da Step7 noch keine 64 Bit Treiber enthält!


----------



## MikeBi (17 Februar 2011)

Hallo,

also ich bin ein bißchen weiter gekommen.

```
[SIZE=2]fds.rfd = [/SIZE]libnodave.openSocket
[SIZE=2]fds.wfd = fds.rfd
[/SIZE]di = New libnodave.daveInterface
di.initAdapter
dc = New libnodave.daveConnection
```

werden ohne Probleme durchlaufen. 
Aber bei


```
res = dc.connectPLC()
```
 bekomme ich eine -1 zurück. DaveConnection gibt mir aber einen Pointer zurück.
Ich habe einiges im Sourcecode von int auf Handle geändert. Wenn ich den gleichen Sourcecode für 32 Bit übersetzt funktioniert die Schnittstelle auf einem 32 Bit Rechner. Nur mit 64 Bit kompiliert und auf einem 64 Bit Rechner kommt dieser Fehler. Ich denke, da ist immer noch ein int statt einem Pointer deklariert. Ich komme aber leider nicht so ganz klar, was bei dieser Funktion aufgerufen wird. 
Vielleicht seht ihr etwas im Quellcode.

Mike


----------



## Jochen Kühner (17 Februar 2011)

*Hmm...*

Ich hab da auch schon rumprobiert. 

Bei mir brach er immer an der select Anweisung ab.

Thread dazu hier: http://www.c-plusplus.de/forum/279564


----------



## Zottel (18 Februar 2011)

Ich hab keinen 64-Bit-fähigen Rechner. Vielleicht kann mir ja mal einer von euch nen VPN-Zugang verschaffen?


----------



## Jochen Kühner (18 Februar 2011)

Zottel schrieb:


> Ich hab keinen 64-Bit-fähigen Rechner. Vielleicht kann mir ja mal einer von euch nen VPN-Zugang verschaffen?



Wennn mein Kollege mit seinem 64 Bit Lappi von Montage zurück ist bestimmt!

Ansonsten schon mal, hasst du vielleicht eine Idee warum schon bei der select Anweisung ein Fehler passiert, obwohl wenn Ich den Wert des Sockets mit printf ausgebe dies immer noch der gleiche wie nach dem öffnen ist? (steht genauer in dem Thread auf c-plusplus.de)


----------



## Zottel (18 Februar 2011)

Jochen Kühner schrieb:


> ...hasst du vielleicht eine Idee warum schon bei der select Anweisung ein Fehler passiert, obwohl wenn Ich den Wert des Sockets mit printf ausgebe dies immer noch der gleiche wie nach dem öffnen ist? (steht genauer in dem Thread auf c-plusplus.de)


Nein. Nur einen Vorschlag zur Methodik:
Mal ein 10-Zeilen Programm schreiben (bzw. copy & pasten), das ein Socket öffnet und dann darauf schreibt. Da sieht man den Effekt (wireshark, echo-server). Dann, wenn klar ist, daß das Socket ok ist und auch richtig an read() übergeben werden kann, select() einfügen. Wenn das geht, eventuelle Erkenntnisse auf Libnodave zurückübertragen.


----------



## Jochen Kühner (18 Februar 2011)

Zottel schrieb:


> Nein. Nur einen Vorschlag zur Methodik:
> Mal ein 10-Zeilen Programm schreiben (bzw. copy & pasten), das ein Socket öffnet und dann darauf schreibt. Da sieht man den Effekt (wireshark, echo-server). Dann, wenn klar ist, daß das Socket ok ist und auch richtig an read() übergeben werden kann, select() einfügen. Wenn das geht, eventuelle Erkenntnisse auf Libnodave zurückübertragen.



Jo wäre noch nee Idee. Wenn mein Kollege wieder zurück ist, werd Ich mich mal wieder dran machen! Ich hab das ganze ja auch extra mit den Beispielprogrammen von dir, und nicht mit C# getestet, weil vielleicht tauchen da ja noch weitere Probleme auf, beim nutzen einer 64 Bit DLL.

Läufts denn eigentlich unter Linux mit einer 64 Bit DLL? Das könnt ich heut mal Zuhause noch probieren. Da könnt Ich dir auch Zugriff geben falls du Interesse hast!


----------



## Jochen Kühner (18 Februar 2011)

*Ok...*

Ok, habs heute nochmal auf meinem Linux Server probiert (Ubuntu Server 64Bit).

Compilieren und verbinden klappt da ohne Probleme, somit schein es nur ein Problem mit dem Windows Socket zu sein!


----------



## Jochen Kühner (18 Februar 2011)

Nochwas: Musste im Linux Makefile unter den Compileroptionen aber -fPIC anhängen, damit es compiliert! 

(Hab auch noch -m64 angehängt um sicher zu sein das eine 64 Bit Version erzeugt wird (wobei das unter meinen 64 Bit System glaub automatisch der Fall ist!))


----------



## pvbrowser (19 Februar 2011)

Zottel schrieb:


> Wenn das geht, eventuelle Erkenntnisse auf Libnodave zurückübertragen.



Hallo Zottel,
ich habe Dein nodave.c  und setport.c in unsere rlllib mit eingebunden.
Dazu waren folgende #defines notwendig:
# LITTLEENDIAN and LINUX is only for libnodave to work
DEFINES           += LITTLEENDIAN
unixEFINES      += LINUX

Dann funktioniert es auch mit 64 Bit unter Linux.

Hier der qmake pro file zur Erzeugung des Makefile
###############################################################
TEMPLATE = lib
#CONFIG   = warn_on release Hilscher qt
#CONFIG   = warn_on release staticlib
CONFIG   = warn_on release
CFLAGS   = -pipe -Wall -W -O0 -march=i586 -mcpu=i686 -fmessage-length=0 -DNO_DEBUG -fPIC
# LITTLEENDIAN and LINUX is only for libnodave to work
DEFINES           += LITTLEENDIAN
unixEFINES      += LINUX
unix:QMAKE_LFLAGS += -lpthread -Wl --no-undefined -pthread
macxEFINES      += unix
macxEFINES      += PVMAC

HEADERS  = rllib.h                     \
           rlspawn.h                   \
           rlwthread.h                 \
           rlthread.h                  \
           rlsocket.h                  \
           rltime.h                    \
           rlmailbox.h                 \
           rlfifo.h                    \
           rlsharedmemory.h            \
           rlspreadsheet.h             \
           rlinifile.h                 \
           rlinterpreter.h             \
           rlpcontrol.h                \
           rlcutil.h                   \
           rldefine.h                  \
           rlevent.h                   \
           rleventlogserver.h          \
           rldataprovider.h            \
           rlserial.h                  \
           rlmodbus.h                  \
           rlmodbusclient.h            \
           rl3964r.h                   \
           rlsiemenstcp.h              \
           rlsiemenstcpclient.h        \
           rlcontroller.h              \
           rlppiclient.h               \
           rlsvganimator.h             \
           rlsvgcat.h                  \
           rlfileload.h                \
           rlhistorylogger.h           \
           rlhistoryreader.h           \
           rlhilschercif.h             \
           rludpsocket.h               \
           rleibnetip.h                \
           rlopcxmlda.h                \
           rldataacquisition.h         \
           rldataacquisitionprovider.h \
           rlstring.h                  \
           rlplc.h                     \
           rlwebcam.h                  \
           rlcommandlineinterface.h

SOURCES  = rlspawn.cpp                   \
           rlwthread.cpp                 \
           rlthread.cpp                  \
           rlsocket.cpp                  \
           rltime.cpp                    \
           rlmailbox.cpp                 \
           rlfifo.cpp                    \
           rlsharedmemory.cpp            \
           rlspreadsheet.cpp             \
           rlinifile.cpp                 \
           rlinterpreter.cpp             \
           rlpcontrol.cpp                \
           rlcutil.cpp                   \
           rlevent.cpp                   \
           rleventlogserver.cpp          \
           rldataprovider.cpp            \
           rlserial.cpp                  \
           rlmodbus.cpp                  \
           rlmodbusclient.cpp            \
           rl3964r.cpp                   \
           rlsiemenstcp.cpp              \
           rlsiemenstcpclient.cpp        \
           rlcontroller.cpp              \
           rlppiclient.cpp               \
           rlsvganimator.cpp             \
           rlsvgcat.cpp                  \
           rlfileload.cpp                \
           rlhistorylogger.cpp           \
           rlhistoryreader.cpp           \
           rlhilschercif.cpp             \
           rludpsocket.cpp               \
           rleibnetip.cpp                \
           rlopcxmlda.cpp                \
           rldataacquisition.cpp         \
           rldataacquisitionprovider.cpp \
           rlstring.cpp                  \
           rlplc.cpp                     \
           rlwebcam.cpp                  \
           rlcommandlineinterface.cpp    \
           nodave.c                      \
           setport.c

macx:SOURCES -= rlhilschercif.cpp

Hilscher {
  HEADERS += rlcannode.h           \
             rlcanopendaemon.h     \
             rlcanopentypes.h      \
             rlcanopenstructs.h    \
             objdir.h              \
             rlcanopenclient.h     \
             rlcanopen.h
  SOURCES += rlcanopendaemon.cpp   \
             rlcanopentypes.cpp    \
             objdir.cpp            \
             rlcanopenclient.cpp   \
             rlcannode.cpp         \
             rlcanopen.cpp
  INCLUDEPATH = ../usr-inc
}

#unix:OBJECTS += ../foreign/abel/lib/libabplc5.a
#unix:OBJECTS += ../foreign/cell/lib/libcell.a
#unix:OBJECTS += ../foreign/libnodave/openSocket.o 
#unix:OBJECTS += ../foreign/libnodave/setport.o     
#unix:OBJECTS += ../foreign/libnodave/nodave.o    

TARGET   = rllib

#unix:header.path = /usr/local/include/rllib 
#unix:header.files = *.h ../foreign/abel/lib/*.h ../foreign/cell/lib/*.h ../foreign/libnodave/*.h 
#unix:header.extra = mkdir -p /usr/local/include/rllib
#unix:target.path = /usr/lib
#unix:target.files = librllib.*
#unix:INSTALLS = target header

##################################################################
Unter Windows sieht es so aus:

%mingwdir%\bin\gcc.exe nodave.c -o nodave_mingw.o -c -D_WIN32 -DBCCWIN -I%mingwdir%\include

Aber eben nur 32 Bit ausprobiert.

PS: Die Forensoftware macht mir die  da rein :-(


----------



## Jochen Kühner (19 Februar 2011)

Zottel schrieb:


> Wenn das geht, eventuelle Erkenntnisse auf Libnodave zurückübertragen.



Das werd Ich natürlich auf jeden Fall tun. Meine jetzigen Erweiterungen zu LibNoDave hab Ich dir ja auch schon zugeschickt!




> Hallo Zottel,
> ich habe Dein nodave.c und setport.c in unsere rlllib mit eingebunden.
> Dazu waren folgende #defines notwendig:
> # LITTLEENDIAN and LINUX is only for libnodave to work
> ...



Mit 64 Bit unter Linux funzt ja auch die orginal DLL. Es geht halt unter Windows nicht! Wobei Ich nicht weis ob es unter Windows mit mingw geht, weis aber auch nicht ob dann die opensocketw oder opensocket verwendet wird. Mit opensocketw, ohne mingw läufts zumindest bbei mir unter 64 Bit noch nicht!


----------



## Jochen Kühner (24 März 2011)

*LibNoDave unter Windows 64 BIT*

So, die neuste LibNoDave scheint unter Windows nun auch in 64 Bit zu laufen. Das Problem waren wohl die falschen Socket aufrufe, welche Thomas_V2.1 in diesem Thread: http://www.sps-forum.de/showpost.php?p=315504&postcount=137 berichtete.

Hab meine angepasste libnodave hier mal als 64 BIT Version angehängt, vieleicht braucht Sie ja jemand!


----------



## MikeBi (24 März 2011)

Das klingt ja super. Leider wird gerade die Maschine, wofür ich das brauche abgebaut. Aber in ca. 2 Wochen bin ich zur Inbetriebnahme. Da werde ich die Lib auf jeden Fall testen.
Nochmals vielen Dank für die Lib.

Mike


----------



## Ruud (24 März 2011)

Hallo,

Ich habe es mal ausprobiert, aber bekomme noch ein fehler, habe ein picture davon gemacht.


----------



## MikeBi (24 März 2011)

Hallo,

Du benutzt vermutlich die libnodave.net.dll. Ich glaube da waren noch ein paar Funktionen drin, die Integer statt IntPtr verwenden. Importiere mal den Code aus der Lib in Deine Anwendung. Dann sieht vielleicht an welcher Stelle die Lib stolpert oder z.B. ein Pointer statt einem Integer verwendet wird. Der Code ist im Download von Libnodave enthalten.

Mike


----------



## Ruud (25 März 2011)

*intPtr*

Mein anruf habe ich direct im code und nicht mit den "glue", So sieht meine anruf aus

 Private Declare Function daveNewInterface Lib "libnodave_jfkmod64.dll" (ByVal fd1 As Integer, ByVal fd2 As Integer, ByVal name As String, ByVal localMPI As Integer, ByVal protocol As Integer, ByVal speed As Integer) As IntPtr


Vermutlich habe ich eine declaration falsh, aber welche?


----------



## Jochen Kühner (25 März 2011)

Ruud schrieb:


> Mein anruf habe ich direct im code und nicht mit den "glue", So sieht meine anruf aus
> 
> Private Declare Function daveNewInterface Lib "libnodave_jfkmod64.dll" (ByVal fd1 As Integer, ByVal fd2 As Integer, ByVal name As String, ByVal localMPI As Integer, ByVal protocol As Integer, ByVal speed As Integer) As IntPtr
> 
> ...




Bei mir sieht die in CSharp so aus:

```
[DllImport("libnodave_jfkmod64.dll", EntryPoint = "daveNewInterface")]
private static extern IntPtr daveNewInterface(daveOSserialType fd, [MarshalAs(UnmanagedType.LPStr)] string name, int localMPI, int useProto, int speed);
```

wobei daveOSserialType folgender Struct ist:

```
public struct daveOSserialType {
            public IntPtr rfd;
            public IntPtr wfd;
        }
```

also denke Ich der Fehler liegt in "int fd1" und "int fd2"


----------



## Ruud (25 März 2011)

*IntPtr*

Da habe ich noch was arbeit zu verichten, die newinterface funktioniert jetzt.


----------



## MikeBi (11 April 2011)

Hallo,

ich konnte leider erst heute die dll ausprobieren. Bei mir gibt die dll bei 
connectPLC eine -1 (also Fehler) zurück. Hast Du die dll zu laufen bekommen. Wenn ja, könntest Du das Project ins Netz stellen oder hast Du eine neue Version? Ich kann leider immer nur mit der 32Bit Version arbeiten. Bis zu connectPLC sieht auch alles OK aus und bei connectPLC kann mann ja auch nicht viel falsch machen (Parameter).
Ich hoffe, es gibt noch weitere Erkentnisse.

Mike


----------



## Jochen Kühner (11 April 2011)

Also Ich verwende die DLL in meiner ConnectionLib und da läufts mit 64 Bit!
Vieleicht kannst du mal mit dem Tool aus diesem Thread http://sps-forum.de/showpost.php?p=322758&postcount=15 versuchen ob der Verbindungsaufbau klappt. Im Config-Fenster kannst du den Verbindungsaufbau schon testen!


----------



## MikeBi (11 April 2011)

Danke für den Tipp. Das Tool werde ich morgen mal ausprobieren.

Mike


----------



## Jochen Kühner (11 April 2011)

Du kannst dann noch die libnodave_jfkmod.dll löschen um Sicherzugehen, das auch die 64 Bit DLL verwendet wird!

Wenn es denn damit funktioniert kann man zumindest einen Fehler in der DLL ausschließen. (Höchstens Ich hab einen Fehler in der normalen daveNewConnection, da Ich ja die von mir erweiterte daveNewExtendetConnection verwende). Aber erst mal das eine prüfen!


----------



## Jochen Kühner (11 April 2011)

Achso, nochwas: die neuste Version der DLL gibts immer in meiner SIemensPLCToolboxLib (http://siemensplctoolboxlib.codeplex.com/) im Verzeichnis externalDlls


----------



## MikeBi (11 April 2011)

Ich hatte mir ja auch mal ein 64 Bit dll von libnodave kompiliert. Dort bin ich dann auche an der gleichen Stelle hängen geblieben. Leider, weiß ich nicht, wie ich in der lib dann weitermachen kann. Also ich versuch eine Verbindung über ISOTCP. Ich habei leider nicht genau verstanden, wo ich die Log-Meldungen von Libnodave verfolgen kann. 

Mike


----------



## Jochen Kühner (11 April 2011)

*Alte Version...*

Also wenn du deine 64 Bit DLL mit der alten Version von libnodave (8.4.5) erstellt hast, dann hats nicht funktioniert, da dort Parameter bei der Erstellung des Sockets falsch waren (Infos hier: http://sps-forum.de/showpost.php?p=315504&postcount=137). Meine 64Bit DLL bassiert auf libnodave 0.8.4.6, und die hab Ich auf Win7 64Bit getestet!


----------



## MikeBi (11 April 2011)

Ich bin halt bei der aten Version genau an der gleichen Stelle gescheitert. Ich hatte auch schein ein paar Änderungen von Integer in HANDLE gemacht. Ich war voller Hoffnung das es jetzt geht und habe es auch mit der neuen Version probiert. Aber wie gesagt,morgen teste ich mal Deinem Tool. Ich habe die gleiche Windows Version an der Maschine.

Mike


----------



## MikeBi (12 April 2011)

Also connected bekomme ich. Wird dabei schon ein ConnectPLC ausgeführt oder beinhaltet das nur das öffen des Interfaces ? Wie habe ich die Konfiguration zu interpretieren. Ich möchte ab Byte 160 10 Bytes auslesen.
Achso noch etwas. Ich hatte einige Problem Dein Tool zum laufen zu bringen. Windows7 mag es überhaupt nicht, das in der Registry unter  LOCAL_MACHINE geschrieben wird.

Mike


----------



## Jochen Kühner (12 April 2011)

Also das Tool Connected auch zur PLC, somit sollte die DLL eigentlich funktionieren...


----------



## MikeBi (12 April 2011)

Wird das ConnectPLC schon beim drücken auf den Button Connect ausgeführt ? Die anderen Buttons bringen mir immer nur eine Fehlermeldung zurück. Ich dachte, die Fehlermeldung kommt, weil die Parameterkonfiguration falsch ist. Deshalb habe ich danach gefragt.

Mike


----------



## Jochen Kühner (12 April 2011)

Das Connecten kannst du schon in dem Config Fester probieren. Da gibt es unten eine Schaltfäche "Verbindung testen"


----------



## MikeBi (12 April 2011)

lso im Config-Fenster kommt Verbindung erfolgreich. Aber im Progromm ist ja auch der Verbindungsaufbau erfolgreich. (openSocket und daveConnection) . ers bei ConnectPLC kommt ein Fehlercode zurück.
Also ich mach jetzt Feierabend villeicht hast Du morgen Lust weiter zu machen.

Mike


----------



## Jochen Kühner (12 April 2011)

Wenn du in meinem Config SCreen auf Test klickst, wird auch ConnectPLC() aufgerufen, und geprüft ob der Connect funktioniert hat! Also scheints nicht an der DLL zu liegen wenn der Connect so geht!

Vielleicht kannst du deinen Code zum Verbindungsaufbau ja mal reinstellen...


----------



## MikeBi (12 April 2011)

Hier mal mein Code.

```
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Private[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] fds [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] libnodave.daveOSserialType[/SIZE]
[SIZE=2][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Private[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] di [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] libnodave.daveInterface[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Private[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] dc [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] libnodave.daveConnection[/SIZE]
[SIZE=2][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Private[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] res [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][/SIZE]
 
[SIZE=2][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Public [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Structure[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] daveOSserialType[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff] Public[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] rfd [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] IntPtr [/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff] Public[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] wfd [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] IntPtr [/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Structure[/COLOR][/SIZE][/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff] 
[/COLOR][/SIZE]
[/SIZE][/SIZE][SIZE=2]fds.rfd = libnodave.openSocket(102, myIPAddress) [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'Portstatus - lesen[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]fds.wfd = fds.rfd [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'Portstatus schreiben = Portstatus - lesen[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]di = [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] libnodave.daveInterface(fds, [/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"Palettenbahnhof"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], localMPI, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)[/SIZE]
 
[SIZE=2]di.setTimeout(1000000)[/SIZE]
[SIZE=2]res = di.initAdapter[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] res = 0 [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'initAdapter OK[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]' Rack und Slot spielen keine Rolle bei diesem Protokoll[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]dc = [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] libnodave.daveConnection(di, plcMPI, 0, 2)[/SIZE]
[SIZE=2]res = dc.connectPLC()[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
[/COLOR][/SIZE]
```
 
Hier noch die Deklarationen der Lib-Aufrufe.

Der Text scheint zu lang zu sein, deshalb der Rest in der nächsten Antwort.


----------



## MikeBi (12 April 2011)

```
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Public [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Declare [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Function[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] openSocket [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Lib[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"libnodave.dll"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] port [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], <MarshalAs(UnmanagedType.LPStr)> [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] portName [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]String[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] IntPtr [/SIZE]
 
 
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Private [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Declare [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Function[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] daveNewInterface [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Lib[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"libnodave.dll"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] fd [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] daveOSserialType, [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] name [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]String[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] localMPI [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] useProto [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] speed [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] IntPtr[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Public [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Sub [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] fd [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] daveOSserialType, [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] name [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]String[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] localMPI [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] useProto [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] speed [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]pointer = daveNewInterface(fd, name, localMPI, useProto, speed)[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Sub[/COLOR][/SIZE]
[/COLOR][/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Protected [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Declare [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Function[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] daveNewConnection [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Lib[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"libnodave.dll"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] di [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] IntPtr, [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] MPI [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] rack [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] slot [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] IntPtr[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Public [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Sub [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] di [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] daveInterface, [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] MPI [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] rack [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] slot [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]pointer = daveNewConnection(di.pointer, MPI, rack, slot)[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Sub[/COLOR][/SIZE][/COLOR][/SIZE]
 
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Protected [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Declare [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Function[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] daveConnectPLC [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Lib[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"libnodave.dll"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] dc [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] IntPtr) [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Public [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Function[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] connectPLC() [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Integer[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Return[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] daveConnectPLC(pointer)[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Function[/COLOR][/SIZE]
[/COLOR][/SIZE][/COLOR][/SIZE][/COLOR][/SIZE]
```
 
Ich hoffe ja immer noch, das ich irgendeine Variable als Integer statt als Pointer deklariert habe. Vielen Dank für Deine Bemühungen.

Mike


----------



## Jochen Kühner (13 April 2011)

```
Rack und Slot spielen keine Rolle bei diesem Protokoll
```
Wieso sollte das so sein?

Was für eine CPU? 300er oder 400er?


----------



## MikeBi (13 April 2011)

Es geht um eine 300er CPU. Der Text stammt aus der Vorlage. Ich kann nur sagen, wenn ich das Programm mit 32 Bit laufen lasse, gibt es kein Problem.

Mike


----------



## Jochen Kühner (13 April 2011)

Wie sieht die Definition von daveOSserialType aus?


----------



## Jochen Kühner (13 April 2011)

Ah sorry, habs überlesen... Oben ist sie ja...


----------



## Jochen Kühner (13 April 2011)

Und wie hast dus gemacht? Meine dll in libnodave.dll umbenannt? Vielleicht liegt irgendwo noch ne falsche Version der libnodave.dll die genutzt wird? Start dein prg mal ohne dll im verzeichnis, obs dann nen fehler gibt!


----------



## MikeBi (14 April 2011)

Das ist auf jeden Fall deine Lib. Die Dll umbenennen war einfacher aus die ganzen Deklarationen der Aufrufe abzuändern.

Mike


----------



## Jochen Kühner (15 April 2011)

Hmmmm.... Seh halt keinen Fehler, und da es mit meiner Wrapper Dll funzt. Vielleicht kannst du mir ja deinen Quellcode zuschicken, dann probier Ich es auf meinem 64Bit Pc, oder du nutzt halt meine ConnectionLib.


----------



## MikeBi (15 April 2011)

Hallo,

ich habe mal die entsprechenden Code-Teile in ein Projekt kopiert. Das Project ist in VB.Net. Vielleicht findes Du jetzt etwas.

Mike


----------



## Jochen Kühner (16 April 2011)

Hmm mal schaun wo Ich das jetzt testen kann, mein Kollege hat seinen Laptop platt gemacht und Win7 32 Bit installiert, aber Ich finde schon was... Dauert halt noch 1,2 Tage...

Mfg.


----------



## Jochen Kühner (19 April 2011)

Bekomms im Moment nicht zum laufen, auch mit meinem Programm nicht.

Aber es hatte auf meinem Kollegen seinen 64 Bit Laptop schon funktioniert!

Nun ist das Problem, das send() in libnodave von Winsock funktioniert noch (die Daten werden auch gesendet) aber das select() von Winsock liefert danach den Fehler "WSAGetLastError: 10038" d.h. das Socket ist nun ungültig... Komm aber im Moment nicht dahinter was da falsch läuft...


----------



## Jochen Kühner (27 April 2011)

Also auch das reseten von Winsock wie hier: http://www.windowsbbs.com/windows-7/94986-winsockfix-windows-7-64bit.html und ausführen als Administrator hat nichts gebracht!

(Wenn einer noch ne Idee hat, her damit!)


----------



## fschaeckermann (6 Mai 2011)

Hallo zusammen!

Ich habe die Diskussion hier nun komplett durchgelesen und mir ist nicht ganz klar, ob es nun eine funktionierende 64bit Version gibt, oder nicht...

Ich habe jedenfalls mit libnodave_jjfkmod64.dll aus dem neuesten siemensplctoolboxlib-77369.zip bisher keinen Erfolg gehabt. Bis zum daveConnectPLC funktioniert alles, aber dann gibt es den -1 Return Code...

Vielleicht zur Information: ich nutze einen jna Java Wrapper um die DLL, um sie aus Java heraus nutzen zu können. Mit der 32bit DLL funktioniert mein Programm aus einer 32bit JRE einwandfrei. Aus der 64bit JRE mit der 64bit DLL leider nicht. Gibt es irgendwas, was ich machen könnte, um weitere Ursachenforschung zu betreiben?

Schöne Grüße, Frank


----------



## Jochen Kühner (6 Mai 2011)

Also Ich habe schon mal eine Verbindung zustande gebracht, aber im Moment gehts nicht mehr! Die select Anweisung in libnodave auf den Socket gibt einen fehler aus!


----------



## fschaeckermann (6 Mai 2011)

Also... hier ist, was ich mit Hilfe von Wireshark herausbekommen habe:

Wenn ich die 32bit Version mit rack=1 und slot=2 aufrufe, ergibt das einen Destination TSAP von 0202.

Bei der 64bit Version kommt mit den gleichen Werten eine Destination TSAP von 0122 heraus und die funktioniert ganz sicher nicht, also Return Code -1: connection refused.

Jetzt werde ich mir mal den Code anschauen und versuchen herauszubekommen, wie die unterschiedlichen TSAPs zustande kommen könnten.


----------



## Thomas_v2.1 (6 Mai 2011)

fschaeckermann schrieb:


> Also... hier ist, was ich mit Hilfe von Wireshark herausbekommen habe:
> 
> Wenn ich die 32bit Version mit rack=1 und slot=2 aufrufe, ergibt das einen Destination TSAP von 0202.
> 
> ...



Die TSAPs werden in libnodave meiner Meinung nach eh falsch zusammengebaut. Was aber bei der normalen Anwendung mit libnodave nicht weiter auffällt, weil man nur aus einer CPU Daten auslesen kann und diese immer im Rack 0 sitzt.

Bei IsoOnTcp findest du die Rack/Slot angaben in nodave.c in Zeilen 4025/4026.

```
dc->msgOut[17]=dc->rack+1;
	    dc->msgOut[18]=dc->slot;
```
Und das ist falsch. In Zeile 4000 steht wie es richtig aussieht:
Rack (Bit 7-5) and Slot (Bit 4-0)

Eine von 0 abweichende Rack-Nummer hat man nur wenn man einen CP in einem anderen Rack sitzen hat.

Korrekte Destination-TSAP wären z.B.:
0x010f -> Rack 0, Slot 15 (z.B. CPU)
0x012a -> Rack 1, Slot 10 (CP)
0x014a -> Rack 2, Slot 10 (CP)


----------



## Jochen Kühner (6 Mai 2011)

Thomas_v2.1 schrieb:


> Die TSAPs werden in libnodave meiner Meinung nach eh falsch zusammengebaut. Was aber bei der normalen Anwendung mit libnodave nicht weiter auffällt, weil man nur aus einer CPU Daten auslesen kann und diese immer im Rack 0 sitzt.
> 
> Bei IsoOnTcp findest du die Rack/Slot angaben in nodave.c in Zeilen 4025/4026.
> 
> ...



In meiner libnodave Version ist das mit Rack/Slot so implementiert! Also das Rack an bit 5-7 und slot an bit 0-4


----------



## Jochen Kühner (6 Mai 2011)

fschaeckermann schrieb:


> Also... hier ist, was ich mit Hilfe von Wireshark herausbekommen habe:
> 
> Wenn ich die 32bit Version mit rack=1 und slot=2 aufrufe, ergibt das einen Destination TSAP von 0202.
> 
> ...



Ich kontrollier das nochmals, aber letztes mal als Ich es probiert hab, waren mit Wireshark die Anfragen identisch, es kam auch von der Cpu bei der 64 Bit Version das gleiche zurück, aber select gab einen fehler aus!


----------



## dealer125 (3 März 2012)

Hallo

ich habe den beitrag durch gelesen und wollte frage gibt es mittlerweile eine funktionierende* Libnodave.dll für 64-bit* gibt.

weil ich habe bisher alles auf 32-bit gemacht und möchte nun umstellen.
Wo noch auf 32 kompiliert wurde aber win7 auf 64 bit umgestellt habe lief noch alles jetzt versuche ich auf 64-bit zu kompilieren aber die dll macht nicht mit.

Softwareumgebung:
VMware Player 4.0.1
Windows 7 Pro 64-bit SP1
Visual Studio 2010 SP1 Programm mit VB Framework 4
Step7 v5.5 SP1 incl. PLCSim
Nettoplcsim v.0.9.1
libnodave-0.8.4.6

Vielleicht weiß es ja jemand?

MFG


----------



## Jochen Kühner (4 März 2012)

Nein, es gibt noch keine Funktionierende Version. Compilieren lässt sie sich zwar, aber immer wenn auf Antwort gewartet wird, gibt es einen Fehler "100038 von WSAGetLastError" Und Ich hab noch keine Ahnung warum...


----------

