如何在运行时从TwinCAT代码(TwinCAT Vision)访问GigE相机功能?
在TwinCAT Vision中运行时读写GigE相机参数(无需配置助手)
GigE相机基本遵循GenICam标准,TwinCAT Vision底层支持直接访问相机的GenICam参数节点,无需依赖配置助手即可实现运行时读写,以下是具体实现步骤:
1. 映射相机的GenICam参数节点
- 先完成相机的基础连接配置(确保TwinCAT能识别到GigE相机),这一步是必要的,但无需通过配置助手修改参数。
- 在TwinCAT设备树中展开目标GigE相机,找到GenICam Node Map,这里包含了相机所有可配置的参数节点(比如曝光时间对应
ExposureTime)。 - 将需要读写的节点直接拖拽到PLC变量表中,自动生成关联变量(例如
fbCameraDevice.ExposureTime,命名随工程结构调整)。
2. PLC程序中直接读写参数
读取参数
直接读取映射后的变量即可获取当前参数值:
VAR nCurrentExposure : DINT; fbCameraDevice : FB_VisionCamera; // 相机实例函数块 END_VAR nCurrentExposure := fbCameraDevice.ExposureTime;
写入参数
赋值后需调用相机的ApplySettings方法确认生效,部分参数需要相机处于停止采集状态:
// 先停止采集(若参数修改需要) fbCameraDevice.StopAcquisition(); // 设置曝光时间为1500微秒 fbCameraDevice.ExposureTime := 1500; // 应用设置 fbCameraDevice.ApplySettings(); // 重启采集 fbCameraDevice.StartAcquisition();
3. 关键注意事项
- 参数范围校验:写入前可读取对应参数的
Min/Max节点(如ExposureTimeMin、ExposureTimeMax),确保设置值在合法区间内。 - 枚举参数处理:对于触发模式这类枚举型参数,直接使用TwinCAT提供的枚举常量赋值即可,例如:
fbCameraDevice.TriggerMode := TRIGGER_MODE.ON; fbCameraDevice.ApplySettings(); - 只读参数排查:若参数无法写入,先确认该参数是否为只读属性(可在GenICam Node Map中查看节点属性),或相机当前状态是否允许修改(如正在采集时部分参数锁定)。
4. 高级场景:直接调用GenICam API
如果某些特殊参数未在节点映射中显示,可使用FB_GenICamNode函数块直接操作:
VAR fbGenICamNode : FB_GenICamNode; nExposureValue : DINT; hCameraHandle : HANDLE; END_VAR // 初始化节点(传入相机句柄和参数节点名) hCameraHandle := fbCameraDevice.DeviceHandle; fbGenICamNode.Init(sNodeName := 'ExposureTime', hDevice := hCameraHandle); // 读取参数 fbGenICamNode.Read(nValue => nExposureValue); // 写入参数 fbGenICamNode.Write(nValue := 2000);
内容的提问来源于stack exchange,提问作者Rainer Bärs
相关产品推荐
相关产品推荐

