公司动态

学习笔记:LabVIEW调用DLL解析S19文件教程

📅 2026/7/27 8:06:04
学习笔记:LabVIEW调用DLL解析S19文件教程
本教程将从零开始手把手教你如何在 LabVIEW 中动态加载一个 DLLHexS19ParserDLL并利用其提供的函数解析 S19 格式的固件文件最后在界面上显示解析结果和固件数据。准备工作安装好 LabVIEW本教程使用 2020 版本32位需注意 DLL 位数与 LabVIEW 一致。准备好HexS19ParserDLL.dll和对应的头文件函数原型如下。准备一个示例 S19 文件如APP.s19。1. 创建空白工程启动 LabVIEW点击“创建项目”或从菜单文件→新建→项目。在弹出的对话框中选择“空白项目”保存为S19Parser.lvproj。在项目浏览器中右键点击“我的电脑”选择“新建→VI”命名为 labview_test.vi并保存。2. 设计前面板Front Panel我们需要放置以下控件来显示信息控件类型用途备注字符串显示控件路径显示所选 S19 文件路径标签S19文件路径文件路径显示控件显示当前加载的 DLL 路径标签DLL文件路径簇Cluster显示 ParserInfo 结构体信息包含起始地址(U32)、结束地址(U32)、总字节数(U32/U64)、记录数(U32/64)数值显示控件数组显示前16个字节数据用 U8 数组显示十六进制具体操作如下在前面板上从控件选板拖入“字符串显示控件”和“文件路径显示控件”分别命名为S19文件路径和DLL文件路径。拖入一个“簇”控件在里面按顺序放入四个数值显示控件右键簇→“在后面添加元素”。依次设置元素0start_address表示法 U32元素1end_address表示法 U32元素2total_data_bytes表示法根据 LabVIEW 位数选择 U32 或 U64元素3record_count表示法同上将簇标签改为ParserInfo。拖入一个“数组”控件将元素类型设为 U8标签改为Data (前16字节)。3. 编写程序框图Block Diagram3.1 使用文件对话框选择 S19 文件在程序框图上从“Express→输入”选板中放置“文件对话框”函数。配置对话框将“所选路径”输出端经过“路径转换为字符串”的控件连接到S19文件路径显示控件。3.2 使用文件对话框选择 DLL 路径动态加载为了让用户自由选择 DLL 位置我们也使用文件对话框。再放置一个“文件对话框”配置类似但文件类型选择*.dll。将所选路径输出连接到DLL路径显示控件。为了支持“在程序框图中指定路径”后续调用 CLN 节点时我们会将路径连入。注意通常 DLL 路径固定但此处为演示动态加载。如果 DLL 放在固定位置可直接使用常量路径。3.3 配置“调用库函数节点”解析 S19 文件在程序框图上放置“调用库函数节点”位于“互连接口→库与可执行程序”选板。双击节点打开配置对话框函数选项卡勾选“在程序框图中指定路径”。函数名填入ParseS19File。调用规范选择“C”因为 DLL 使用 __cdecl。参数选项卡依次添加返回值、参数1、参数2。返回值类型为“有符号 32 位整数”输出。参数1文件名类型“字符串”数据格式“C 字符串指针”。参数2info 结构体指针类型“适配至类型”数据格式自动变灰。点击确定。将文件对话框输出的S19文件路径转换为字符串使用“路径至字符串转换”函数连接到 CLN 的第一个参数。创建一个 ParserInfo 簇常量在程序框图上用“簇常量”然后放入四个数值默认值都设为0连接到 CLN 的第二个参数。为 CLN 节点的路径输入端连接DLL路径需要先将路径转换为字符串或者直接连接路径CLN 接受路径类型。实际上 CLN 的path输入端接受路径数据类型所以可以直接连接文件对话框输出的路径。3.4 显示 ParserInfo 信息在 CLN 成功后将连接在第二个参数上的簇现在已被 DLL 填充数据引出。使用“按名称解除捆绑”函数位于“编程→簇、类与变体”选板将簇的每个字段提取出来。将这些字段分别连接到前面板上的ParserInfo簇中各元素的显示控件可以直接将解除捆绑后的值连接到簇元素。更简单的方法直接将整个簇连线到前面板 ParserInfo 簇的接线端这样就会自动更新。但为了清晰可单独显示每个字段现只提取start_address和total_data_bytes字段。3.5 读取并显示前16个字节数据再放置一个“调用库函数节点”配置调用GetDataAtAddress。同样勾选“在程序框图中指定路径”路径连接同一个 DLL 路径。参数返回值int32输出addressU32输入这里填入解析出的start_addresslengthU64输入这里填 16buffer适配至类型连接一个 U8 数组预先分配 16 个元素可用“初始化数组”创建buffer_sizeU64输入填 16调用规范 C。从 ParserInfo 簇中取出start_address连接到 address 参数。创建一个长度为 total_data_bytes大小 的 U8 数组连接到 buffer 参数维数大小连接到“按名称解除捆绑”的total_data_bytes输出默认值设置为0。调用后检查返回值若成功则 buffer 数组已被填充将其连接到前面板Data (前16字节)显示控件。为了显示十六进制右键数组显示控件选择“表示法→十六进制”。4. 运行测试在前面板上点击“解析”按钮注意我们还未将按钮与事件关联建议使用“事件结构”或简单地将按钮连接到条件结构但本教程为简化直接运行 VI 时会自动执行一次或在循环中等待按钮按下。推荐使用“事件结构”响应按钮点击。为了完整我们在主循环中放置一个事件结构响应按钮按下事件然后执行解析流程。运行 VI先选择 DLL 文件再选择 S19 文件点击解析观察结果。5. 总结与注意事项本教程演示了动态加载 DLL 的方法适合需要灵活更换 DLL 的场景。注意位数匹配32位 LabVIEW 用 32位 DLL64位用 64位 DLL。size_t类型在 32位 和 64位 下大小不同务必在 LabVIEW 簇中使用正确的数值表示法U32 或 U64。如果调用失败检查 DLL 依赖如 VC 运行库可提供静态编译版本。所有 CLN 节点的调用规范务必设置为C。通过以上步骤您就可以在 LabVIEW 中轻松解析 S19 文件并提取固件数据了。后续您还可以扩展功能如保存数据、分段显示等。