Was sind die Unterschiede zwischen mvSDK/mvAcquireControl und mvIMPACT Acquire?

mvSDK, mvAcquireControl, mvIMPACT Acquire

Im Folgenden werden in einer Tabelle für jede Schnittstelle die nötigen Grundaufrufe gegenüber gestellt:

Hardware öffnen

mvSDK mvAcquireControl mvIMPACT Acquire
Hardware sollte bekannt und in benutzter INI-Datei eingetragen sein. Bei mehreren Geräten gleicher Familie sollte für jedes Gerät eine eigene INI-Datei angelegt sein. Hardware sollte bekannt und in benutzter INI-Datei eingetragen sein. Bei mehreren Geräten gleicher Familie sollte für jedes Gerät eine eigene INI-Datei angelegt sein. Keine INI- oder Konfigurationsdatei nötig. Einstellungen werden entweder in der Registry oder als XML-Datei abgelegt. Siehe z.B. auch Demoprogramm 'SingleCapture'.
mvOpenDevice (CHAR FAR* name, 
CHAR *FAR *ini_table,
INT FAR *result,
DRVINI_T FAR *DriverInit)

Simple Interface:

grabInit(); 

C++ Interface:

IGrabber::Init();

Auswahl der zu öffnenden Hardware aus Liste über Device Manager:

DeviceManager devMgr; 

Öffnen der gewählten Hardware:

pDev->open();

 

Videoeingang einrichten

mvSDK mvAcquireControl mvIMPACT Acquire
Über Struktur ACQUIRE_DEF_T und Videotiming als auch über zusätzlich eingebundene Kameradefinition camdefs.ini und der Funktion SelCamera(); Schnittstelle nutzt für Beschreibung des Videosignals die Einstellungen aus den Kameradefinitionen camdefs.ini. Die mvIMPACT Acquire Schnittstelle basiert auf Eigenschaften (Properties). D.h. der Benutzer fordert den Zugriff auf ein Property-Interface an und kann somit die gewünschten Einstellungen ändern.
SelCamera();

Simple Interface: Auswahl über:

Igrabber::SelCamera
(char * strCameraName)

Beispiel:

CameraSettingsFrameGrabber
cs(pDev);

Ermöglicht Zugriff auf die verfügbaren Kameradefinitionen, welche im Verzeichnis 'Gemeinsame Dokumente > MATRIX VISION > mvIMPACT Acquire > Camera Files' liegen sollten. Die zu benutzende Definition wird aktiviert über:

 cs.type.write
( cameraDescriptionToUse );

Siehe auch Beispielprogramm 'CameraDescriptions'.

 

Weitere Einstellungen

mvSDK mvAcquireControl mvIMPACT Acquire
Jede Hardware und jede Eigenschaft besitzt seine eigene Funktion. Ebenso wie beim mvSDK besitzt jede Eigenschaft eine eigene Funktion.  Eigenschaften sind in einzelnen Gruppen (Klassen) zusammengefasst. Zum Ändern einer Eigenschaft genügt es, die jeweilige Member-Funktion der entsprechenden Klasse zu lesen oder zu schreiben.

Beispiel: statisches Setzten eines digitalen Ausgangs

VOID mvWriteDigIO
(DEV_T FAR *dev, DWORD data)

Beispiel: statisches setzten eines digitalen Ausgangs

 ISignals::SetSignal
Definition();

setzte Bitmaske aller Ausgänge und

 ISignals::Signal();

setzt diese.

Beispiel: statisches Setzten eines digitalen Ausgangs:

IOSubSystemFrameGrabber ioss(pDev); 

ermöglicht den Zugriff auf alle digitalen Ein- und Ausgänge. Die Member-Funktion

output (IO-Nummer)

liefert dann den Zugriff zum Setzten oder Rücksetzen des Ausgangs.

 

Bildaufnahme

mvSDK mvAcquireControl mvIMPACT Acquire

Einzelbildaufnahme

mvSingleSnap();

Nimmt 1 Bild auf und wartet auf deren Beendigung.

 mvSingleSnapAsync();

Funktion kehrt sofort zurück. Es sollte manuell auf die Fertigstellung 'gepollt' werden.

Kontinuierliche Aufnahme

  mvContinousSnap();

Kontinuierliche Bildaufnahme in immer dem selben Speicherbereich.

Einzelbildaufnahme

  IGrabber::Snap();

Nimmt 1 Bild auf und wartet auf deren Beendigung.

 IGrabber::SnapAsync();

Nimmt 1 Bild ohne Warten auf und Funktion

 IGrabber::WaitForSnapReady();

wartet bis eine Bildaufnahme fertig gestellt wurde.

Kontinuierliche Aufnahme

 IGrabber::Live(); 

Kontinuierliche Bildaufnahme in immer dem selben Speicherbereich.

Es gibt keine Unterscheidung zwischen Einzelbildaufnahmen mit oder ohne Warten. Daraus ergibt sich, dass immer dieselben Funktionen verwendet werden. Im Hintergrund läuft einen Multibuffer-Struktur, welche ausschließt, dass ein alter Bildinhalt durch eine neue Aufnahme überschrieben wird.

 FunctionInterface fi(pDev);

gibt Zugriff auf die Bildaufnahmefunktionen

 fi.ensureRequests(Anzahl);

definiert, wie viele Buffer für die Bildaufnahmen zur Verfügung stehen sollen.

fi.ImageRequestSingle();

fordert ein Bild an (setzt eine Bildaufnahmeanforderung in die Befehls-Queue ein)

 fi.imageRequestWaitFor();

wartet auf die Fertigstellung einer Bildaufnahme. Nur die Art der Anwendung dieser Befehle entscheidet über eine Einzelbildaufnahme oder einer kontinuierlichen. Beispiele: 'SingleCapture' und 'ContinuousCapture'.

Zurück