包含vb.net相机硬触发的词条( 二 )


status = GXUpdateDeviceList(nDeviceNum, 1000);
if ((status != GX_STATUS_SUCCESS) || (nDeviceNum = 0))
{
return 0;
}
//打 开 设 备
stOpenParam.accessMode = GX_ACCESS_EXCLUSIVE;
stOpenParam.openMode = GX_OPEN_INDEX;
stOpenParam.pszContent = "1";
status = GXOpenDevice(stOpenParam, hDevice);
if (status == GX_STATUS_SUCCESS)
{
//设 置 触 发 模 式 为 ON
status = GXSetEnum(hDevice, GX_ENUM_TRIGGER_MODE, GX_TRIGGER_MODE_ON);
//设 置 触 发 激 活 方 式 为 上 升 沿 , 还可以设置下降沿触发,指电平上升或下降时为一次触发
status = GXSetEnum(hDevice, GX_ENUM_TRIGGER_ACTIVATION, GX_TRIGGER_ACTIVATION_RISINGEDGE);
//设置触发开关为line2
status = GXSetEnum(hDevice, GX_ENUM_TRIGGER_SOURCE, GX_TRIGGER_SOURCE_LINE2);
//Selects the physical line (or pin) of the external device connector to configure,vb.net相机硬触发我也不知道是啥反正加去了
status = GXSetEnum(hDevice, GX_ENUM_LINE_SELECTOR, GX_ENUM_LINE_SELECTOR_LINE2);
//设置line2模式为input,同样可以设置为outpot,则可以通过相机控制外部设备
status = GXSetEnum(hDevice, GX_ENUM_LINE_MODE, GX_ENUM_LINE_MODE_INPUT);
// GX_ENUM_TRIGGER_MODE: 触发模式, 枚举值参考 GX_TRIGGER_MODE_ENTRY
// GX_COMMAND_TRIGGER_SOFTWARE : 软触发命令
// GX_ENUM_TRIGGER_ACTIVATION : 触发极性, 枚举值参考
// GX_TRIGGER_ACTIVATION_ENTRY GX_ENUM_TRIGGER_SWITCH : 外触发开关, 参考
// GX_TRIGGER_SWITCH_ENTRY GX_ENUM_TRIGGER_SOURCE : 触发源, 枚举值参考
// GX_TRIGGER_SOURCE_ENTRY GX_ENUM_TRIGGER_SELECTOR : 触发类型选择, 参考
// GX_TRIGGER_SELECTOR_ENTRY GX_FLOAT_TRIGGER_DELAY : 触发延迟
//设置曝光和增益等参数和原先在一致
status = GXSetFloat(hDevice, GX_FLOAT_EXPOSURE_TIME, (float)3000);
status = GXSetEnum(hDevice, GX_ENUM_BALANCE_RATIO_SELECTOR, GX_BALANCE_RATIO_SELECTOR_RED);
status = GXSetFloat(hDevice, GX_FLOAT_BALANCE_RATIO, 1.6484);
status = GXSetEnum(hDevice, GX_ENUM_BALANCE_RATIO_SELECTOR, GX_BALANCE_RATIO_SELECTOR_BLUE);
status = GXSetFloat(hDevice, GX_FLOAT_BALANCE_RATIO, 1.5664);
status = GXSetEnum(hDevice, GX_ENUM_BALANCE_RATIO_SELECTOR, GX_BALANCE_RATIO_SELECTOR_GREEN);
status = GXSetFloat(hDevice, GX_FLOAT_BALANCE_RATIO, 1.000);
status = GXSetEnum(hDevice, GX_ENUM_GAIN_SELECTOR, GX_GAIN_SELECTOR_ALL);
status = GXSetFloat(hDevice, GX_FLOAT_GAIN, 10.0);
//注 册 图 像 处 理 回 调 函 数,每次接受到一个电平变化就会回调
status = GXRegisterCaptureCallback(hDevice, NULL, OnFrameCallbackFun);
//发 送 开 采 命 令
status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_START);
}
//所有引脚状态
int64_t nAllLineStatus = 0;
while (1)
{
cv::imshow("test", empty);
if (cv::waitKey(1) == 'a')
{
}
if (cv::waitKey(1) == 'b')
{
//输出所有引脚的电平,0xc默认是未触发状态,但是实际上0xe是未触发
GX_STATUS Status = GXGetInt(hDevice, GX_INT_LINE_STATUS_ALL, nAllLineStatus);
std::cout
"line status:"nAllLineStatusstd::endl;
}
if (cv::waitKey(1) == 'q')
{
//
//在 发 送 停 采 命 令 前 如 果 产 生 了 有 效 触 发 , 那 么 图 像
//会 通 过 OnFrameCallbackFun 接 口 返 给 用 户
//---------------------
//发 送 停 采 命 令
status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_STOP);
//注 销 采 集 回 调
status = GXUnregisterCaptureCallback(hDevice);
status = GXCloseDevice(hDevice);
hDevice = NULL;
status = GXCloseLib();
std::cout"end captrue"std::endl;
return 0;
}
}
}
1
2
3
4
5
6
7
8
9
10

推荐阅读