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.
Win32-

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
Topic revision: r18 - 28 Jul 2014, SolveighMatthies
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback