Device Access unter Windows
Voraussetzungen
Empfohlene Entwicklungsumgebung: Microsoft Visual Studio 2008 (VC 8)
Projekttypen:
- Win32-Bibliotheken (accdata, accdevice, alarm, corbaifc, dbs, device, devicefactory, devman, kgb, nativedevice, nsrvclient, nsrvtcpip, os, usrs, vmedevice)
- simple Konsolenprogramme (devman, nameserver, nameservercmd)
- Test-Programm client_gui mit MFC als Oberflächenbibliothek
Binaries auf Windows-PC laufen lassen: falls kein Compiler installiert ist, vcredist_x86.exe als Administrator ausführen. Dieses Tool installiert die Windows-Laufzeitbibliotheken. (Das Tool gibt’s bei Solveigh oder Microsoft:
http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&displaylang=de
Benötigte Dateien/Projekte:
- Quellen samt Projektverzeichnissen wie unten gezeigt aus dem SVN-Repository auschecken
- Folgende Dateien müssen aus anderen Quellen bezogen werden, da sie unter Windows nicht automatisch kopiert werden:
- win32-uname.h
- von Ordner "os\win32" nach "incasl" kopieren
- oda-msg.h + std-msg.h + xsrmsg.h
- Von asl-cluster nach "incasl" kopieren. Zu finden unter: /common/usr/production/include/msg (eqpact + echo $incmsg)
- devman-version-x86.hh
- Auf dem asl-cluster das projekt "uti" auschecken
- Das Python script "make-devman-version.py" mit passenden Parametern aufrufen: Z.B: "python make-devman-version.py x86 22.00.00"
- Das erzeugte "devman-version-x86.hh" ins projekt "devman" kopieren.
- Folgende Verzeichnissstruktur sollte angelegt werden (die Pfade für die Include-Dateien und die benötigten Bibliotheken sind relativ eingetragen in den Projektdateien)
workspace
accdata
accdevice
alarm
corbaifc
dbs
device
devicefactory
devman
kgb
nativedevice
nsrvclient
nsrvtcpip
os
usrs
win32
Microsoft.VC90.CRT (Microsoft Runtime DLLs)
omniORB-4.1.3 (OmniORB CORBA)
xerces-c-3.0.1-x86-windows-vc-9.0 (Xerces-Parser)
os.sln (Projektdatei, alle unter Windows verfuegbaren Projekte)
client_gui (Windows Test-Client)
ACC_LABVIEW_Interface_Wrapper (Labview-Interface)
debug (Win32-Debug-Dateien, Bibliotheken, Log-Dateien, Zwischendateien)
release (Win32-Release-Dateien, Bibliotheken, Log-Dateien )
boost_1_41_0
Benötigte 3rd-Party Pakete
(werden alle im Ordner win32 abgelegt, siehe oben)
Client-Bibliotheken
Um einen C++-Client unter Windows zum Laufen zu bringen, werden lediglich folgende Projekte benötigt:
accdata
device
devicefactory
nsrvclient
nsrvtcpip
os
Diese Bibliotheken müssen in den Projekteinstellungen angegeben werden. Ebenso die Pfade zu den Binaries und den zugehörigen Header-Dateien.
OmniORB
Für die CORBA-Dienste müssen im corbaifc-Verzeichnis die passenden Stubs erzeugt werden. Auf der Kommandozeile geht das mit den Befehlen (setzt Python 2.7 Installation voraus):
cd PfadZumOrdner_corbaifc
..\win32\omniORB-4.1.3\bin\x86_win32\omniidl -bcxx -I. corbaifc.idl
..\win32\omniORB-4.1.3\bin\x86_win32\omniidl -bcxx -I. corbaifcerror.idl
Umgebungsvariablen
Der Produktionsnameserver:
ACC_NAMESERVER_HOST = nsrv00a.acc.gsi.de
ACC_NAMESERVER_PORT=52315
Es kann aber auch ein eigener Nameserver unter Windows oder Linux gestartet werden. In dem Fall muss auch ein eigener Port verwendet werden.
alarm via multicast:
als Administrator in E:\Windows\System32\drivers\etc\hosts >239.255.100.42 alarm-mcast.acc.gsi.de< eintragen
Kompilieren
- "win32/os.sln" öffnen, darin sind alle anderen Projekte aufgeführt.
- Für jedes Sub-Projekt "F7" oder "Build/BuildSolution" übers Menü wählen.
- Build so lange wiederholen bis alle Projekte fehlerfrei kompilieren.
Debuggen
F5 oder über Menu
- das .dbs-File wird im Verzeichnis gesucht, in dem der Devicemanager ausgeführt wird. - hier wird auch das lock-File angelegt.
- die Log-Ausgaben mit logmsg werden in Text-Dateien mit der Dateiendung .log abgelegt, die denselben Namen haben wie der loggende Prozess
Troubleshooting
DLL Einsprungpunkte, fehlende DLLs lassen sich unter Windows mit dem Dependency Walker untersuchen. Zu beziehen von
http://www.dependencywalker.com/ .
Microsoft Visual Studio Bug
Gelegentlich kommt es vor, dass eine Bibliothek nicht erstellt werden kann und eine entsprechende Fehlermeldung ausgegeben wird (LNK2004). Abhilfe schafft in diesem Fall das Entfernen (nicht Loeschen!!!) der cpp-Datei aus dem Projekt, in der der DLL-Einsprungspunkt definiert ist. Sie trägt denselben Namen wie das Projekt und hat die Dateiendung .cpp . Nach dem Entfernen erstellt man das Projekt neu und fügt danach die Datei dem Projekt wieder hinzu. Jetzt sollte sich das Projekt wieder fehlerfrei erstellen lassen.
Bibliotheken werden zur Laufzeit nicht gefunden
Nicht immer genügt es die Umgebungsvariable PATH um die Pfade zu den omniORB-Bibliotheken zu ergänzen (z.B.
\win32\omniORB-4.1.3\bin\x86_win32). Beim Starten des Devman erscheint die Fehlermeldung "Das Programm kann nicht gestartet werden, da omnithread34_vc9_rtd.dll auf dem Computer fehlt. Installieren Sie das Programm erneut, um das Problem zu beheben.". Die einfache Lösung ist die fehlenden DLLs (in diesem Fall omniDynamic413_vc9_rt(d).dll, omniORB413_vc9_rt(d).dll, omnithread34_vc9_rt(d).dll) in das Ausführungsverzeichnis aus omniORB-4.1.3\bin\x86_win32 zu kopieren. Das d im Namen der drei DLLs steht für debug. Nur diese sollten in die Debug-Variante der Software eingebaut werden um Speicherprobleme zur Laufzeit zu vermeiden. Entsprechendes gilt für die Release-Variante.
DeviceManager unter Windows 7 (64-bit) laufen lassen
- setzt die Installation der Microsoft Visual C++ 2008 Redistributables (http://www.microsoft.com/de-de/download/confirmation.aspx?id=29) voraus
- ggfs. 32-bit Konsole oeffnen: run (Ctrl+R) %windir%\SysWoW64\cmd.exe (Eingabe im Windows Explorer)
- in einem Konsolenfenster in das jeweilige Ausfuehrungsverzeichnis wechseln (z.B. ... MSVS2008\win32\debug oder release)
- start devman.exe -f <Name der dbs-Datei> -p 55000 -d
- Windows-Firewall fragt nach ob Zugriff von devman.exe auf das Arbeitsplatznetzwerk zulässig ist - abnicken
ACC_LABVIEW_Interface_Wrapper erstellen
- Anleitung zum Bau des Wrappers