应用Matrox MIL库二次开发-硬件控制函数说明
核心接口函数
1. MdigAlloc() - 分配采集器(加载DCF配置)
从 matroxdigitizer.cpp:
MdigAlloc(m_MilSystem, 0, test, M_DEFAULT, &m_MilDigitizer);
作用:
- 分配Matrox采集器资源
- 加载DCF配置文件(
16k-radient_external_FrameTrigger.dcf) - 配置外部触发信号参数(触发引脚、触发沿、触发电平等)
参数说明:
m_MilSystem:MIL系统ID0:采集器索引test:DCF配置文件路径M_DEFAULT:默认配置&m_MilDigitizer:返回的采集器ID
2. MdigProcess() - 启动/停止采集(等待外部触发)
从 matroxdigitizer.cpp:
MdigProcess(
m_MilDigitizer, // 采集器ID
m_MilGrabBufferList, // 缓冲区列表
m_MilGrabBufferListSize, // 缓冲区数量
M_SEQUENCE + M_COUNT(2), // 采集2帧
M_SYNCHRONOUS + M_TRIGGER_FOR_FIRST_GRAB, // 等待外部触发信号
ProcessingFunction, // 回调函数
&m_UserHookData // 用户数据
);
作用:
- 启动采集过程
- 等待外部触发信号(来自PLC)
- 管理采集卡内存缓冲区
- 触发回调函数处理采集到的图像
关键参数:
M_TRIGGER_FOR_FIRST_GRAB:等待首个触发信号(阻塞)M_SYNCHRONOUS:同步模式,等待相机完成采集
3. MdigControl() - 控制采集参数
从 matroxdigitizer.cpp:
MdigControl(m_MilDigitizer, M_GRAB_TIMEOUT, M_INFINITE);
作用:
- 设置采集超时时间为无限
- 确保采集卡一直等待触发信号,不会超时中断
其他可能的控制参数:
MdigControl(m_MilDigitizer, M_GRAB_ABORT, M_DEFAULT); // 中断采集
MdigControl(m_MilDigitizer, M_CAMERA_FREE_RUN, M_ENABLE); // 启用自由运行模式
4. MdigInquire() - 查询采集器信息
从 matroxdigitizer.cpp:
m_bufWidth = MdigInquire(m_MilDigitizer, M_SOURCE_SIZE_X, M_NULL);
m_bufHeight = MdigInquire(m_MilDigitizer, M_SOURCE_SIZE_Y, M_NULL);
作用:
- 查询采集器的分辨率
- 查询采集器的类型
- 查询采集器的状态
5. MdigGetHookInfo() - 获取采集到的图像数据
从 matroxdigitizer.cpp:
MIL_ID ModifiedBufferId;
MdigGetHookInfo(HookId, M_MODIFIED_BUFFER + M_BUFFER_ID, &ModifiedBufferId);
作用:
- 在回调函数中获取已填充的图像缓冲区ID
- 从采集卡内存获取图像数据
接口函数总结
| 函数 | 作用 | 在触发流程中的位置 |
| MdigAlloc() | 加载DCF配置文件,配置外部触发参数 | 初始化阶段 |
| MdigControl() | 设置超时、触发模式等参数 | 启动采集前 |
| MdigProcess() | 启动采集,等待外部触发信号 | 核心函数 |
| MdigInquire() | 查询采集器信息 | 初始化阶段 |
| MdigGetHookInfo() | 获取采集到的图像数据 | 回调函数中 |
完整的接口调用流程
// 1. 初始化阶段
MdigAlloc(m_MilSystem, 0, dcf_file, M_DEFAULT, &m_MilDigitizer); // 加载DCF配置
MdigInquire(m_MilDigitizer, M_SOURCE_SIZE_X, M_NULL); // 查询分辨率
MdigInquire(m_MilDigitizer, M_SOURCE_SIZE_Y, M_NULL); // 查询分辨率
// 2. 启动采集阶段
MdigControl(m_MilDigitizer, M_GRAB_TIMEOUT, M_INFINITE); // 设置无限超时
MdigProcess(m_MilDigitizer, buffer_list, buffer_size, // 启动采集,等待触发
M_SEQUENCE + M_COUNT(2),
M_SYNCHRONOUS + M_TRIGGER_FOR_FIRST_GRAB,
ProcessingFunction, &user_data);
// 3. 等待PLC触发信号(阻塞)
// PLC发送触发信号 → 采集卡检测到 → 触发相机采集
// 4. 回调函数中获取图像
MdigGetHookInfo(HookId, M_MODIFIED_BUFFER + M_BUFFER_ID, &buffer_id); // 获取图像缓冲区
// 5. 停止采集阶段
MdigControl(m_MilDigitizer, M_GRAB_ABORT, M_DEFAULT); // 中断采集
MdigProcess(m_MilDigitizer, buffer_list, buffer_size, M_STOP, ...); // 停止采集
总结
与PLC"通信"的接口函数是:
- MdigAlloc() - 加载DCF配置文件(配置外部触发参数)
- MdigProcess() - 启动采集,等待外部触发信号(核心函数)
- MdigControl() - 控制采集参数(超时、触发模式等)
- MdigInquire() - 查询采集器信息
- MdigGetHookInfo() - 获取采集到的图像数据
这些函数都是Matrox MIL库提供的API,用于与Matrox采集卡通信。采集卡通过硬件接口接收PLC的触发信号,实现"通信"功能。
注意: 这里没有传统的软件通信协议(如Modbus、OPC、串口等),而是通过硬件触发信号实现同步。









