显微镜平台,太阳光模拟器,衍射光学元件,光束整形,分束镜,光谱仪,生物激光器,光束分析仪,Layertec
激光产品应用
激光产品应用
激光产品应用 首页 > 技术咨询 > 激光产品应用

在自定义MFC应用中集成DATARAY光束轮廓分析仪:从控件添加到数据获取的完整流程

作者:维尔克斯  时间:2026-5-18 11:21:52

如果您需要为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,但其执行效率高、资源占用少,至今仍是许多遗留工业软件或对性能要求严格的桌面应用维护和开发的技术选择。

1DATARAY光斑分析仪


在进行激光光束分析仪的二次开发时,选择正确的硬件平台至关重要。DATARAY公司提供的高性能光束分析仪,以其卓越的光束分析仪精度和稳定性,成为许多集成项目的首选。无论是进行基础的光斑测量,还是复杂的光束轮廓分析仪级研究,DATARAY的光斑分析仪都能提供可靠的数据源。对于希望超越标准软件功能的用户,针对DATARAY设备的二次开发可以解锁强大潜力。

我们将逐步向您展示示例程序是如何创建的。请遵循下面列出的一系列图中的说明。

开发环境配置:

-基础软件安装

前置步骤:以管理员身份安装DataRay标准软件,连接设备并确认驱动正常。

开发工具:安装Visual Studio 2013

注意:虽然OCX控件在VS2006/2008/2010中可能工作,但官方仅对VS2013及以上版本提供完整支持。

2:创建一个新Project

-MBCS库配置(关键步骤)

由于DataRay OCX控件依赖多字节字符集(MBCS),必须单独配置。

3VS项目属性字符集设置

操作:下载MBCS库后,需在Visual Studio项目属性中设置字符集为“使用多字节字符集”(_MBCS)。

说明:此图应展示项目属性页中“字符集”或“库设置”的配置界面,确保编译时链接正确的MBCS库。


控件集成与初始化:

-添加OCX控件至工具箱:

4OCX控件

操作:工具(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配置

-获取数据项IDButtonID/ProfileID

7:未配置时所见

操作:在DataRay标准软件中,右键点击界面上的按钮(如Xc, Yc显示处),查看弹出的属性对话框中的 ID#

说明:图片需展示右键菜单及属性框,重点标注 Name ID# 字段(例如Xc对应ID 171Yc对应ID 172)。


-代码获取数据方式

方式A(通过Button控件):

double dXc = m_MyXcButton.GetParameter(); // m_MyXcButton需预先绑定ButtonID

方式B(通过GetData Control统一查询):

double dXc = m_MyGetDataCtrl.GetOcxResult(171); // 直接传入ButtonID


图像与轮廓数据获取(重点)

获取2D图像数据(WinCamD相机)

操作:使用 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差异:ButtonIDProfileID与相机不同,需在软件中重新右键查看。


报错处理与调试

说明: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();

}











关于我们
公司简介 人才招聘
产品中心
衍射光学元件 光学平台 Optosigma,西格玛光机 激光测量 激光器 镜片 晶体 光学仪器 光电探测器 光学配件 太赫兹
代理厂商
比利时 芬兰 以色列 德国 美国 立陶宛 加拿大 荷兰 英国
技术咨询
公司新闻 西格玛光机产品介绍 激光产品介绍 激光产品答疑 激光产品选型 激光产品应用 光学单位换算 激光基础知识 激光行业资讯 激光技术文档
联系我们
联系方式 在线留言 点此下载产品目录
0755 84870203

服务热线

网站地图 微信公众号