uEye Kamera-Handbuch Version 4.92
![]() |
![]() |
GigE |
GigE |
Syntax
INT is_Multicast(HIDS hCam, UINT nCommand, void* pParam, UINT cbSizeOfParams)
Beschreibung
Mit dieser Funktion wird der Multicast-Betrieb einer GigE uEye Kamera konfiguriert oder eine virtuelle Multicast-Kamera geöffnet. Damit eine Kamera zusätzlich als virtuelle Multicast-Kamera verfügbar ist, muss die Kamera selbst vom Master-PC geöffnet sein. Erst dann ist die virtuelle Multicast-Kamera für andere Client-PCs frei und verfügbar.
Die Befehle unterscheiden aktive und passive Multicast-Kommandos. Aktive Multicast-Kommandos ändern Parameter in der Kamera. Hierfür muss die Kamera verfügbar sein (aber nicht geöffnet) und im Kamera-Handle die Geräte-ID verwendet werden. Mit den passiven Multicast-Kommandos kann eine virtuelle Multicast-Kamera von einem Client-PC lesend geöffnet werden.
![]() |
Die Multicast-Funktion wird erstmals mit Treiber 4.50 unterstützt. Die Kameramodelle UI-526xCP, UI-536xCP und UI-537xCP der Kamerafamilie GigE uEye CP unterstützen keinen Multicast-Betrieb. |
Für den Multicast-Betrieb müssen Sie der Kamera eine persistente IP-Adresse (is_IpConfig()) und eine Multicast-IP-Adresse zuweisen. Gültige Multicast-IP-Adressen sind 224.0.0.1 bis 239.255.255.255.
Für Multicast-Kameras gelten folgende Einschränkungen:
•Die persistente IP-Adresse der GigE uEye Kamera muss im Subnetz des Netzwerkadapters liegen. Mögliche Clients der virtuellen Multicast-Kamera müssen ebenfalls in diesem Subnetz sein.
•Wenn der Master die Kameraeinstellungen ändert, wirken sich diese auch bei den Clients auf das Bild aus. Die Clients können nur kamera-unabhängige Funktionen setzen (z. B. Software-Gamma oder Software-LUT).
•Die Software-Hotpixelkorrektur funktioniert nicht auf den Client-PCs.
•Wenn der Multicast-Betrieb aktiviert ist, kann sich dies auf die Performance der API-Applikation auswirken.
![]() |
Bei Verwendung einer Firewall müssen gegebenenfalls die Regeln so eingestellt werden, dass die Applikation Netzwerk-Paket empfangen kann. Unter Umständen können sich Sicherheitsprogramme (z. B. Antivirenprogramme) negativ auf die Performance der virtuellen Multicast-Kamera auswirken. |
Über den Übergabeparameter nCommand wird dabei der Funktionsmodus gewählt. Der Übergabeparameter pParam ist abhängig vom Funktionsmodus unterschiedlich belegt; bei Funktionen zum Setzen oder Rücklesen eines Wertes enthält pParam einen Zeiger auf eine Variable vom Typ UINT. Die Größe des Speicherbereichs, auf den pParam verweist, wird im Übergabeparameter cbSizeOfParam angegeben.
Übergabeparameter
hCam |
Handle auf Kamera |
||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
pParam |
Zeiger auf Funktionsparameter, der abhängig von nCommand unterschiedlich belegt ist. |
||||||||||||||||||||||||||||||||
cbSizeOfParam |
Größe des Speicherbereichs in Byte, auf den pParam verweist. |
||||||||||||||||||||||||||||||||
Inhalte der Struktur IS_PMC_READONLYDEVICEDESCRIPTOR
UEYE_ETH_ADDR_IPV4 |
ipCamera |
Kamera-IP-Adresse |
UEYE_ETH_ADDR_IPV4 |
ipMulticast |
Mutlicast-IP-Adresse |
UINT |
u32CameraId |
Kamera-ID |
UINT |
u32ErrorHandlingMode |
Ein Bild wird über das Netzwerk in mehreren Paketen übertragen, dabei können einzelne Pakete verloren gehen. Für diesen Fall kann die Fehlerbehandlung eingestellt werden: •IS_PMC_ERRORHANDLING_REJECT_IMAGES: Unvollständige Bilder ablehnen (fehlerhaft empfangene Bilder werden verworfen) •IS_PMC_ERRORHANDLING_IGNORE_MISSING_PARTS: Bildfehler ignorieren (Fehler werden ignoriert, d. h. nicht empfangene Bildteile sind schwarz) •IS_PMC_ERRORHANDLING_MERGE_IMAGES_RELEASE_ON_COMPLETE: Merge Mode - Erst freigeben wenn neue Pakete kommen (Bei einem Paketverlust wird die Bildanzeige so lange verzögert, bis alle Pakete eines Bildes neu empfangen wurden.) •IS_PMC_ERRORHANDLING_MERGE_IMAGES_RELEASE_ON_RECEIVED_IMGLEN: Merge Mode - Bei neuen Paketen sofort freigeben (Neue Bilder werden sofort angezeigt, für fehlende Pakete werden die vorherigen Bilddaten verwendet.) |
Rückgabewert
IS_INVALID_PARAMETER |
Einer der übergebenen Parameter ist außerhalb des gültigen Bereichs, oder für diesen Sensor nicht unterstützt, bzw. in diesem Modus nicht zugänglich. |
IS_NO_SUCCESS |
Allgemeine Fehlermeldung |
IS_NOT_SUPPORTED |
Das verwendete Kameramodell unterstützt diese Funktion oder Einstellung nicht. |
IS_OUT_OF_MEMORY |
Es konnte kein Speicher alloziert werden. |
IS_SUCCESS |
Funktion erfolgreich |
/* Überprüfe ob der passive Multicast-Betrieb systemweit aktiv ist. */
BOOL enable = FALSE;
int nRet = is_Multicast(0, IS_PMC_CMD_SYSTEM_GET_ENABLE, &enable, sizeof(enable));
if(nRet == IS_SUCCESS)
{
if(enable == TRUE)
{
/* Initialisiere Multicast-Betrieb in lokaler API-Instanz. */
nRet = is_Multicast(0, IS_PMC_CMD_INITIALIZE, NULL, 0);
if(nRet == IS_SUCCESS)
{
/* Lade alle in der Systemkonfiguration gespeicherten Multicast-Geräte. */
nRet = is_Multicast(0, IS_PMC_CMD_LOADDEVICES, NULL, 0);
}
}
}
IS_PMC_READONLYDEVICEDESCRIPTOR roDeviceDescriptor;
/* Setze Kamera_IP auf 192.168.0.100 */
roDeviceDescriptor.ipCamera.by.by1 = 192;
roDeviceDescriptor.ipCamera.by.by2 = 168;
roDeviceDescriptor.ipCamera.by.by3 = 0;
roDeviceDescriptor.ipCamera.by.by4 = 100;
/* Setze Multicast-IP auf 239.20.20.1 */
roDeviceDescriptor.ipMulticast.by.by1 = 239;
roDeviceDescriptor.ipMulticast.by.by2 = 20;
roDeviceDescriptor.ipMulticast.by.by3 = 20;
roDeviceDescriptor.ipMulticast.by.by4 = 1;
/* Bestimme gewünschte Kamera-ID */
roDeviceDescriptor.u32CameraId = 42;
/* Bestimme Fehlerbehandlungsmodus */
roDeviceDescriptor.u32ErrorHandlingMode = IS_PMC_ERRORHANDLING_REJECT_IMAGES;
/* Aktiviere Multicast-Betrieb systemweit (einmalig nötig, kann über IDS Kameramanager erfolgen) */
BOOL enable = TRUE;
int nRet = is_Multicast(0, IS_PMC_CMD_SYSTEM_SET_ENABLE, &enable, sizeof(enable));
/* Initialisiere Multicast-Betrieb in lokaler API-Instanz. */
nRet = is_Multicast(0, IS_PMC_CMD_INITIALIZE, NULL, 0);
/* Erzeuge (virtuelles) Read-Only-Gerät */
nRet = is_Multicast(0, IS_PMC_CMD_ADDMCDEVICE, &roDeviceDescriptor, sizeof(roDeviceDescriptor));
if (nRet == IS_SUCCESS)
{
/* Speichere alle erzeugten Read-Only-Geräte in der Systemkonfiguration */
nRet = is_Multicast(0, IS_PMC_CMD_STOREDEVICES, NULL, 0);
}
/* Alternativ: Entfernen eines Gerätes */
/* Setze Kamera-IP auf 192.168.0.120 */
roDeviceDescriptor.ipCamera.by.by1 = 192;
roDeviceDescriptor.ipCamera.by.by2 = 168;
roDeviceDescriptor.ipCamera.by.by3 = 0;
roDeviceDescriptor.ipCamera.by.by4 = 120;
/* Entferne(virtuelles) Read-only-Gerät (mit der IP 192.168.0.120) */
int nRet = is_Multicast(0, IS_PMC_CMD_REMOVEMCDEVICE, &roDeviceDescriptor, sizeof(roDeviceDescriptor));
if (nRet == IS_SUCCESS)
{
/* Speichere alle erzeugten Read-Only-Geräte in der Systemkonfiguration */
nRet = is_Multicast(0, IS_PMC_CMD_STOREDEVICES, NULL, 0);
}
/*
* Auslesen der Multicast-Konfiguration einer Kamera.
* Dies funktioniert sowohl im gepairtem Zustand mit dem Device-Handle als auch im ungepairtem Zustand mit der Dervice-ID der Kamera.
*/
/* Ungepairt: Device-ID der zu konfigurierenden Kamera (aus der Kameraliste) */
INT nDeviceId = 1001;
UEYE_ETH_ADDR_IPV4 multicastIp;
/* Lese Multicast-IP der Kamera 1001 */
int nRet = is_Multicast(nDeviceId | IS_USE_DEVICE_ID, IS_AMC_CMD_GET_MC_IP, &multicastIp,
sizeof(multicastIp));
unsigned int multicastEnabled;
/* Lese Status des Multicast-Modus der Kamera 1001 */
nRet = is_Multicast(nDeviceId | IS_USE_DEVICE_ID, IS_AMC_CMD_GET_MC_ENABLED, &multicastEnabled,
sizeof(multicastEnabled));
/* Alternativ in gepairtem Zustand mit HIDS Kamerahandle hCam. */
UEYE_ETH_ADDR_IPV4 multicastIp2;
/* Lese Multicast-IP der geöffneten Kamera hCam */
nRet = is_Multicast(hCam, IS_AMC_CMD_GET_MC_IP, &multicastIp2, sizeof(multicastIp2));
unsigned int multicastEnabled2;
/* Lese Status des Multicast-Modus der geöffneten Kamera hCam */
nRet = is_Multicast(hCam, IS_AMC_CMD_GET_ENABLED, &multicastEnabled2, sizeof(multicastEnabled2));
/* Konfiguration des Multicast-Betriebs einer Kamera im ungepairtem Zustand */
/* Device-ID der zu konfigurierenden Kamera (aus der Kameraliste) */
INT nDeviceId = 1001;
UEYE_ETH_ADDR_IPV4 multicastIp;
multicastIp.by.by1 = 239;
multicastIp.by.by2 = 20;
multicastIp.by.by3 = 20;
multicastIp.by.by4 = 1;
/* Überprüfung, ob Multicast von der Kamera unterstützt wird */
IS_U32 nMulticastSupported = 0;
int nRet = is_Multicast(nDeviceId | IS_USE_DEVICE_ID, IS_AMC_CMD_GET_MC_SUPPORTED,
&nMulticastSupported, sizeof(nMulticastSupported))
bool bMulticastSupportedByDevice = (nMulticastSupported & IS_AMC_SUPPORTED_FLAG_DEVICE);
bool bMulticastSupportedByFirmware = (nMulticastSupported & IS_AMC_SUPPORTED_FLAG_FIRMWARE);
if (bMulticastSupportedByDevice && bMulticastSupportedByFirmware)
{
/* Konfiguriere Multicast-IP der Kamera 1001 auf 239.20.20.1 */
nRet = is_Multicast(nDeviceId | IS_USE_DEVICE_ID, IS_AMC_CMD_SET_MC_IP,
&multicastIp, sizeof(multicastIp));
unsigned int multicastEnabled = 1;
/* Aktiviere Multicast-Modus der Kamera 1001 */
nRet = is_Multicast(nDeviceId | IS_USE_DEVICE_ID, IS_AMC_CMD_SET_MC_ENABLED,
&multicastEnabled, sizeof(multicastEnabled));
}
Haben Sie Verbesserungshinweise? Senden Sie ein kurzes
Feedback zu diesem Kapitel.
Vielen Dank!
Bei technischen Fragen wenden Sie sich bitte an Ihren lokalen Händler oder nutzen Sie das Support-Formular auf unserer Internetseite.