Libnodave auf 64Bit kompilieren???

Zuviel Werbung?
-> Hier kostenlos registrieren
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
unix:DEFINES += 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
unix:DEFINES += LINUX
unix:QMAKE_LFLAGS += -lpthread -Wl --no-undefined -pthread
macx:DEFINES += unix
macx:DEFINES += 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 :-(
 
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
DEFINES += LITTLEENDIAN
unixEFINES += LINUX

Dann funktioniert es auch mit 64 Bit unter Linux.

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!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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!
 

Anhänge

  • libnodave_jfkmod64.zip
    74,8 KB · Aufrufe: 115
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
 
Hallo,

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

Anhänge

  • ErrorAuf_64.JPG
    ErrorAuf_64.JPG
    52,6 KB · Aufrufe: 42
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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?
 
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?


Bei mir sieht die in CSharp so aus:
Code:
[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:
Code:
public struct daveOSserialType {
            public IntPtr rfd;
            public IntPtr wfd;
        }

also denke Ich der Fehler liegt in "int fd1" und "int fd2"
 
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
 
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!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zuletzt bearbeitet:
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
 
Zurück
Oben