作者:李gh 时间:2026-05-15
客户若需构建专属的DATARAY光束轮廓仪自动化测试平台,DATARAY光斑分析仪提供了完整的二次开发方案,详解如何通过DataRay OCX控件与C++编程,MFC控件(Microsoft Foundation Classes)是微软基于 C++ 封装的一套原生 Windows 桌面 UI 组件,用于快速构建传统的 Win32 应用程序界面。实现对DATARAY面阵相机及扫描狭缝轮廓仪的深度控制,从而实现自动化测量、实时数据流处理与系统级集成。是工业自动化、激光加工和科学研究领域开发者实现高效、定制化光束质量分析的权威技术资源。探索高级集成可能性,提升您的系统智能化水平,含官方示例代码。
MFC控件提供了一系列标准控件(如按钮 CButton、编辑框 CEdit、列表框 CListBox、树形控件 CTreeCtrl等),通过资源编辑器即可拖拽布局,并利用 消息映射机制(如 ON_BN_CLICKED)处理用户交互。虽然 MFC 在界面美观度和跨平台能力上不如现代的 Qt 或 WPF,但其执行效率高、资源占用少,至今仍是许多遗留工业软件或对性能要求严格的桌面应用维护和开发的技术选择。
图1:DATARAY光斑分析仪
在进行激光光束分析仪的二次开发时,选择正确的硬件平台至关重要。DATARAY公司提供的高性能光束分析仪,以其卓越的光束分析仪精度和稳定性,成为许多集成项目的首选。无论是进行基础的光斑测量,还是复杂的光束轮廓分析仪级研究,DATARAY的光斑分析仪都能提供可靠的数据源。对于希望超越标准软件功能的用户,针对DATARAY设备的二次开发可以解锁强大潜力。
我们将逐步向您展示示例程序是如何创建的。请遵循下面列出的一系列图中的说明。
开发环境配置:
-基础软件安装
前置步骤:以管理员身份安装DataRay标准软件,连接设备并确认驱动正常。
开发工具:安装Visual Studio 2013。
注意:虽然OCX控件在VS2006/2008/2010中可能工作,但官方仅对VS2013及以上版本提供完整支持。
图2:创建一个新Project
-MBCS库配置(关键步骤)
由于DataRay OCX控件依赖多字节字符集(MBCS),必须单独配置。
图3:VS项目属性字符集设置
操作:下载MBCS库后,需在Visual Studio项目属性中设置字符集为“使用多字节字符集”(_MBCS)。
说明:此图应展示项目属性页中“字符集”或“库设置”的配置界面,确保编译时链接正确的MBCS库。
控件集成与初始化:
-添加OCX控件至工具箱:
图4:OCX控件
操作:工具(Tools)→ 选择工具箱项(Choose Toolbox Items)→ COM组件(COM Components)→ 浏览(Browse...)→ 选择 DataRayOcx.ocx。
说明:图片应展示勾选“DataRay Controls”后的工具箱状态,证明控件已成功加载。
-创建对话框控件并绑定变量:
图5:对话框控件并绑定变量
操作:将 GetData Control拖放至对话框,右键添加变量(如 m_MyGetDataCtrl),必须勾选“Control变量”。
说明:此图展示“添加成员变量向导”对话框,重点显示“Control”类别被选中的状态,并标注变量名 MyGetDataCtrl。
-设备初始化代码
// 在对话框初始化函数中调用
m_MyGetDataCtrl.StartDriver(); // 启动相机驱动
图6:构建并运行的示例应用程序
说明:此图应为示例程序成功运行后的界面截图,证明项目构建无错误,设备已连接。
数据获取与ID配置
-获取数据项ID(ButtonID/ProfileID)
图7:未配置时所见
操作:在DataRay标准软件中,右键点击界面上的按钮(如Xc, Yc显示处),查看弹出的属性对话框中的 ID#。
说明:图片需展示右键菜单及属性框,重点标注 Name 和 ID# 字段(例如Xc对应ID 171,Yc对应ID 172)。
-代码获取数据方式
方式A(通过Button控件):
double dXc =
m_MyXcButton.GetParameter(); // m_MyXcButton需预先绑定ButtonID
方式B(通过GetData
Control统一查询):
double dXc =
m_MyGetDataCtrl.GetOcxResult(171); // 直接传入ButtonID
图像与轮廓数据获取(重点)
获取2D图像数据(WinCamD相机)
图8:获取图像像素数据
操作:使用 GetWinCamDataAsVariant()或 FillVariantWithWinCamData()函数获取图像像素数据,并保存为CSV。
代码说明:
void
CDataRayInterfaceCplusPlusWinCamDDlg::OnBnClickedRetrieveImageData() {
CComVariant
MyWCVar;
MyGetDataCtrl.FillVariantWithWinCamData(&MyWCVar); // 获取变体数据
CComSafeArray<short> WCSafeArray; // 转换为安全数组处理
// ... 后续保存为CSV的代码
}
清晰展示 CComVariant和 CComSafeArray的使用。
图9:在此函数的定义范围内,您需编写代码,从DataRay OCX中获取2D图像数据,并将数据保存为.csv文件。
此示例代码会将从FillVariantWithWinCamData ( 处获取的数据保存到名为ImageData.csv的文件中,该文件会在点击按钮时创建在可执行路径文件夹中。由于我们使用了StreamWriter,因此需在页面顶部添加using system.IO;的语句。代码引用信息可在教程结尾处找到,前提是图像内容较为难以辨识。
-扫描狭缝轮廓仪(Scanning Slit)差异:
控件差异:需使用 2D Control 而非 CCD
Image Control。
ID差异:ButtonID和ProfileID与相机不同,需在软件中重新右键查看。
报错处理与调试
说明:OCX支持事件(如测量完成事件),可在VS资源视图中为控件添加事件处理程序,实现异步响应。
通过调用官方光束分析仪的ActiveX控件,开发者可以将光斑分析仪的核心功能嵌入到自定义的自动化测试平台中,实现光束轮廓分析仪数据的实时处理与闭环控制。这极大地扩展了激光光束分析仪的应用边界,使其从单一的测量工具转变为智能生产系统的一部分。因此,掌握光斑分析仪二次开发技术,特别是针对DATARAY系列产品的二次开发,对于构建先进的激光光束分析仪应用系统具有决定性意义。成功的光束分析仪集成方案,离不开对光束轮廓分析仪底层接口的深度理解与灵活运用。
所用示例代码:
private void ImageDataBn_Click(object sender, EventArgs
e)
{
short[]
image;
short[]
array;
image =
axGetData1.GetMinCamDataAsVariant() as short[];
array =
axGetData1.GetMinCamDataAsVariant() as short[];
long
resolution = axGetData1.CaptureIsFullResolution();
short
horizontalPixels = axGetData1.GetHorizontalPixels();
short
verticalPixels = axGetData1.GetVerticalPixels();
long
pixelCount;
//resolution
of 0 indicates it is a fast resolution capture
if
(resolution == 0)
{
pixelCount = (horizontalPixels * verticalPixels)/4;
}
//Full
Resolution
else
if(resolution==1){
pixelCount = (horizontalPixels * verticalPixels);
}
else
{
pixelCount = (horizontalPixels * verticalPixels) / 8;
}
string
exeFolder = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
string
pathname = exeFolder + "\\ImageData.csv";
StreamWriter
sw = new StreamWriter(pathname);
for(int i =
1; i<=array.Length;i++)
{
int W =
image[i - 1];
string
Name;
if (i ==
1)
{
Name
= W + ", ";
sw.Write(Name);
}
else if
(i % (horizontalPixels) == 0)
{
sw.Write(W+Environment.NewLine);
}
else
{
Name
= W + ", ";
sw.Write(Name);
}
}
sw.Close();
}