Mehrere Frame Grabber in einem System

mvDELTA, mvGAMMA-G, mvSIGMA-SLC, mvSIGMA-SLG, mvSIGMA-SQ, mvTITAN-C16, mvTITAN-C8, mvTITAN-CL, mvTITAN-DIG, mvTITAN-G1, mvTITAN-RGB/G4, pcIMAGE-SC, pcIMAGE-SDIG, pcIMAGE-SG/SGVS, pcIMAGE-SRGB

Es können prinzipiell so viele Frame Grabber wie vorhandene PCI-Steckplätze in einem System installiert werden. Diese können vom gleichen Typ sein oder nicht.

Sind Frame Grabber unterschiedlicher Bauart in einem System, so kann jede Hardware für sich ohne weitere Maßnahmen geöffnet werden. Der Treiber identifiziert den entsprechenden Boardtyp automatisch anhand der Vendor- (VNID) und Device-ID (DVID) des DMA-Controllers, der auf dem jeweiligen Frame Grabber vorhanden ist.

Die Vendor- (VNID) und Device-IDs (DVID) unserer Hardware:
mvDELTA, mvSIGMA-Serie: VNID:109E DVID:0350 (BT848) oder VNID:109E DVID:036E (BT878)
pcIMAGE-SC, pcIMAGE-SG/SGVS, pcIMAGE-SRGB: VNID:8086 DVID:1223
pcIMAGE-SDIG: VNID:10B5 DVID:9080
mvTITAN-Serie: VNID:1131 DVID:5400 (TM 1100) oder VNID:1131 DVID:5402 (TM1300)

Sind mehrere Frame Grabber der gleichen Bauart oder der gleichen Serie (mvSIGMA- und mvTITAN-Serie) in einem System vorhanden muss eine Unterscheidung getroffen werden, welche Hardware geöffnet werden soll.
Diese Unterscheidung muss in der verwendeten Konfigurationsdatei (z.B. grabber.ini) bzw. in der beim Öffnen verwendeten String-Tabelle durchgeführt werden.

Dabei muss für Windows oder MS-DOS für jeden zu öffnenden Frame Grabber eine eigene Konfigurationsdatei angelegt werden (z.B.: mvTITANDIG_1.ini, mvTITANDIG_2.ini, etc.).
Für Linux gibt es die Möglichkeit eine INI-Datei zu verwenden, die mehrere Sektionen enthält (s.u.)

Jeder Frame Grabber muss nun für sich geöffnet werden, wobei jeweils die zugehörige INI-Datei verwendet wird.
Die Auswahl des Frame Grabbers funktioniert mit dem Befehl "SelBoard".
Ausszug aus INI-Datei:
...
[TITAN]
...
SelBoard 0
...
InitBoard
...

"SelBoard 0" öffnet dabei den ersten Frame Grabber der zu öffnenden Art den der Treiber in der PCI-Bus Tabelle findet. "SelBoard 1" öffnet entsprechend den zweiten und so weiter. Eine maximale Begrenzung stellen nur die verfügbaren PCI-Steckplätze und die benötigte Bandbreite des PCI-Busses zur Übertragung der Bilddaten dar.
Bei Verwendung der Funktion mvOpenDevice() bekommt man damit für jeden Frame Grabber ein eigenes Device-Handle, welches im späteren Programmablauf jeden Frame Grabber eindeutig anspricht.

Linux INI-Dateien
Der MATRIX VISION Treiber für Linux kennt eine Besonderheit: es ist auch möglich mit einer INI-Datei für mehrere Grabber zu arbeiten. Dabei werden einfach zusätzliche Sektionen in die INI-Datei geschrieben. Jede Sektion fängt mit einem Header an, der auch eine zusätzliche Nummer enthält. Diese Nummer entspricht der "Minor Device Number" von der Device-Datei im Verzeichnis "/dev".

[TITAN]
...
SelBoard 0
...
InitBoard
...

[TITAN.1]
...
SelBoard 1
...
InitBoard
...

[TITAN.2]
...
SelBoard 2
...
InitBoard
...

Bei Verwendung der Funktion mvOpenDevice() kann man nun die INI-Datei und die Sektion vorgeben, die die Parameter für den ausgewählten Framegrabber bestimmen. N.B. Der Name der Sektion wird als Typ "CHAR**" als 2. Parameter übergeben. d.h. es sollte die Adresse eines Strings (array von CHAR) übergeben werden.

int error;
CHAR inifile[80] = "myinifile.ini";
CHAR section1[80] = "TITAN";
CHAR **sectionname1 = (CHAR **)§ion1;
CHAR section2[80] = "TITAN.1";
CHAR **sectionname2 = (CHAR **)§ion2;

mvOpenDevice (inifile, sectionname1, &error, NULL);
...
mvOpenDevice (inifile, sectionname2, &error, NULL);

Bei älteren Treiberversionen (älter als Mitte 2001) kann die Identifikation welcher Frame Grabber zu öffnen ist nicht mit dem Befehl "SelBoard" sondern muss mit dem Befehl "SetMemBase" durchgeführt werden. Das Prinzip ist aber das selbe.

Für die Identifikation ist es nötig die vom BIOS des Rechners vergebene Bridge- und Slotnummer der jeweligen Frame Grabber zu kennen.
Die Ermittlung dieser Nummern kann entweder mit dem Tool Pciscan.exe auf der Treiber-CD_ROM oder ohne weitere Tools aus der LOG-Datei entnommen werden. Dafür muss ein Programm, welches eine LOG-Datei erzeugt (z.B. mvConfig) einmalig gestartet und ein Frame Grabber intialisiert und wieder geschlossen werden. In der nun erstellten LOG-Datei finden sich u.a. folgende Informationen:
Beispiel:

****** PCI-Slot Information *******
BN BR SL VNID DVID RVID CMDR BASEADDR ROMADDR IRQ L LAT
--------------------------------------------------------------
0 00 00 8086 7190 0003 0006 F8000008 00000000 0 0 40
1 00 01 8086 7191 0003 001F 00000000 00000000 0 0 40
2 00 07 8086 7110 0002 000F 00000000 00000000 0 0 0
3 00 0F 10B8 0005 0008 0007 0000E801 FEBE0000 11 1 40
febff000
4 00 12 109E 0350 0012 0106 FD9FF008 00000000 9 1 40
5 00 13 109E 0350 0012 0106 FF9FF008 00000000 10 1 40
6 01 00 102B 0525 0004 0007 F2000008 FEAE0000 11 1 40
feafc000
fe000000
Anhand der VNID und der DVID können nun die Zeilen gesucht werden in denen die installierten Frame Grabber aufgeführt sind. Im Beispiel ist das Zeile 4 und 5. Aus diesen Zeilen können nun die entsprechenden Bridge- (BR) und Slotnummern (SL) entnommen werden. Im Beispiel: 1. Bridge 0x00 und Slot 0x12, 2. Bridge 0x00 und Slot 0x13.

Beispiel:
...
[MVSL]
...
SetMemBase 0x12 0 0 // opens first SLx, no baseaddress changed (recommended)
...
InitBoard
...

...
[MVSL]
...
SetMemBase 0x13 0 0 // opens second SLx, no baseaddress changed (recommended)
...
InitBoard
...

Linux: Andere Änderungen

Unter Linux sollte man zusätzlich zwei weitere mögliche Fehlerquellen ausschließen:

  • Der Kernel muss mit einem Parameter "mem= xxxM" gestartet werden, um Speicher für den linearen DMA-Puffer zu reservieren. (Siehe Linux README-Datei). Wenn mehrere Grabber in einem Rechner verwendet werden, muss dafür gesorgt sein, dass dieser Puffer für alle Frame Grabber ausreichend groß angelegt ist. Die Frame Grabber der mvTITAN Serie brauchen beispielsweise i.d.R. 4 MB pro Grabber. Für 3 Frame Grabber müssen demnach mindestens 12 MB reserviert sein.

  • Es müssen evtl. extra "Device" -Knoten anlegt werden. Standardmässig werden 4 Dateien von dem Skript "mvload" im Verzeichnis "/dev/" angelegt. Ist geplant mehr als 4 Grabber zu verwenden, müssen neue Dateien mittels "mknod" einmalig anlegt oder das Skript "mvload" geändert werden. Die neuen Dateien müssen mit unterschiedlichen "Minor Device Nummern" erzeugt werden. z.B. minor = 4 für den 5. Grabber, minor = 5 für den 6. Grabber usw. Die "Major Device Nummern" sollten die gleichen sein, wie die anderen Dateien, die automatisch erzeugt worden sind.

Zurück