logo资料库

vc++如何调用labview中的控件.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
兵工自动化 软件技术 O. I. Automation 2004 年第 23 卷第 4 期 Software Technique 2004, Vol. 23, No. 4 文 章 编 号 :1006- 1576(2004)04- 0084- 03 VC 环境下虚拟仪器界面的制作 付强文,张英敏,黎玉刚 (西北工业大学 自动控制系,陕西 西安 710072) 摘 要 : 采 用 LabVIEW 控 件 可 制 作 基 于 VC++ 6.0 环境 的 虚 拟 仪 器 界 面 。LabVIEW 控 件 以 ActiveX 技 术 提 供 , 安 装 后 能 自 动 注 册 。 也 可 通 过 安 装 其 封 装 文 件 OCX 注 册 。 常 用 的 LabVIEW 控 件 有 :Boolean 开 关 控 件 、Numeric 数字控件、Graph 图表控件等。 关键词:LabVIEW;VC+ + 6.0;虚拟仪器;界面 中图分类号:TP311.11 文献标识码:A Making Interface of Virtual Instruments in VC (Dept. of Auto-Control, North Western Polytechnical University, Xi'an 710072, Cnina) FU Qiang-wen, ZHANG Ying-ming, LI Yu-gang Abstract: The controls of LabVIEW can be used to make the interface of virtual instruments in VC++6.0. These controls are provided by ActiveX and can be registered by the OCX file. The common controls of LabVIEW include: boolean controls, numeric controls and graph controls. Key words: LabVIEW; VC++ 6.0; Virtual instruments; Interface 1 引言 VC 以 其 强 大、灵 活 的 特 点 成 为 主 流 开 发 平 台 。 但 是 , 许 多 测 控 软 件 要 求 用 户 界 面 具 有 和 真 实 仪 器 相 似 的 外 观 , 用 VC 实 现 需 要 成 千 上 万 条 代 码 , 效 率 太 低 。 美 国 NI 公 司 的 LabVIEW 语 言 , 用 图 标 和 连 线 代 替 文 本 编 写 程 序 , 是 当 前 测 控 领 域 的 技 术 热 点 。LabVIEW 提 供 了 丰 富 逼 真 的 仪 表 界 面 控 件 , 如 显 示 表 盘 、 温 度 计 、 示 波 器 等 。 若 能 将 这 些 控 件 用 于 VC 环 境 下 , 便 可 使 VC 程 序 员 将 精 力 专 注 于 程序的主要功能,开发出高质量的测控软件。 2 注册控件 LabVIEW 的 控 件 以 ActiveX 技 术 提 供 。 ActiveX 是 一 个 动 态 连 接 库 , 是 作 为 基 于 COM 服 务 器 进 行 操 作 的 , 并 且 可 以 嵌 入 在 包 容 器 宿 主 应 用 程 序 中 。ActiveX 控 件 与 开 发 平 台 无 关 , 在 一 种 编 程 语 言 下 开 发 的 ActiveX 控 件 , 无 需 任 何 修 改 , 即 可 在 另 一 种 编 程 语 言 中 使 用 , 其 效 果 如 同 使 用 Windows 通 用 控 件 类 似。因 此, 只 要 在 计 算 机 上 安 装 了 LabVIEW, 系 统 将 完 成 控 件 的 自 动 注 册 , 安 装 后 任 意 打 开 一 个 VC 工 程 , 在 Project/Add to Project/Components and Controls 菜 单 项 下 , 打 开 Registered ActiveX Controls 文 件 夹 , 将 可 以 看 到 一 些 以 “(National Instruments)” 结 尾 的 文 件 , 如 “CWButton Control (National Instruments)”。 这 些 文 件 就 是 新 注 册 的 LabVIEW 控 件 , 可 以 通 过 双 击该文件将相应控件添加到 VC 工程中。 LabVIEW 常 用 的 界 面 控 件 都 封 装 在 cwui.ocx 和 mesa.dll 文 件 中 , 只 要 注 册 了 cwui.ocx, 就 可 在 没 有 安 装 LabVIEW 的 计 算 机 上 方 便 地 使 用 控 件 。 注 册 OCX 文 件 常 用 的 方 法 有 3 种:① 在 开 始 菜 单 的 “ 运 行 ” 对 话 框 中 使 用 Regsvr32.exe 程 序 注 册 ; ② 通 过 制 作 安 装 程 序 软 件 ,实 现 OCX 文 件 的 自 注 册 ;③ 在 VC 应 用 程 序 中 添 加 注 册 代 码 注 册。在 小 型 程 序 中 较 好 的 作 法 是 使 用 第 ③ 种 方 法 , 在 程 序 最 初 嵌 入 注 册 代码( 如C*App::InitInstance 函 数 中), 实现控件的自注册。其编程方法如下: LPCTSTR pszDllName="cwui.ocx"; / /ActiveX 控件的路径及文件名 HINSTANCE hLib = LoadLibrary(pszDllName); / / 装载 ActiveX 控件 if (hLib < (HINSTANCE)HINSTANCE_ERROR) AfxMessageBox("找不到 Dll 文件!"); FARPROC lpDllEntryPoint; / / 获取注册函数 DllRegisterServer 地址 lpDllEntryPoint = GetProcAddress (hLib,_T("DllRegisterServer")); if(lpDllEntryPoint!=NULL) / / 调用注册函数 DllRegisterServer { if (FAILED((*lpDllEntryPoint)())) / / 注册失败 { AfxMessageBox("调用 DllRegisterServer 失败!"); FreeLibrary(hLib); } } else AfxMessageBox("调用 DllRegisterServer 失败!"); 程 序 运 行 时,应 将 cwui.ocx 和 mesa.dll 文 件 和 应 用 程 序 放 到 同 一 个 文 件 夹 , 也 可 将 cwui.ocx 和 mesa.dll 文件复制到 Windows 的 system 目录下。 3 控件使用 收 稿 日 期 : 2004- 01- 05; 修 回 日 期 :2004- 02- 16 作 者 简 介 : 付 强 文 (1980- ), 男 , 四 川 人 , 西 北 工 业 大 学 自 动 控 制 系 在 读 硕 士 研 究 生 , 从 事 检 测 技 术 与 自 动 化 、 惯 性 导 航 技 术 研 究 。 ·84·
3.1 Boolean 控件的使用 兵工自动化 软件技术 O. I. Automation 2004 年第 23 卷第 4 期 Software Technique 2004, Vol. 23, No. 4 Indicator。对 于 数 值 编 辑 框 , 可 在 Advanced 属 性 页 下 将 其 控 制 模 式 选 为 Indicator , 并 可 以 在 Format 属性页下选择数字显示格式。 新 建 VC 对 话 框 工 程 LabView, 并 在 Project/ Add to Project/Components and Controls 菜 单 项 下 , 打 开 Registered ActiveX Controls 文 件 夹 , 双 击“CWButton Control (National Instruments)”文 件图标,将 Boolean 控件添加到工程中。 向 LabView 工 程 的 前 面 板 添 加 两 个 Boolean 控 件 ,ID 号 分 别 为 IDC_SWITCH 和 IDC_LED。 在 控 件 的 Style 属 性 页 下 可 以 看 到 ,Boolean 控 件 具 有 许 多 逼 真 的 风 格 , 包 括 三 维 垂 直 开 关 , 三 维 水 平 开 关,矩 形 LED,圆 形LED,三 维 推 钮 开 关 ,ON/OFF 开 关 等 。 此 为 IDC_SWITCH 控 件 选 中 三 维 垂 直 开 关 风 格,并 在 Button 属 性 页 的 Mode 列 表 框 中 选 中 Switch when pressed 选 项,这 样 控 件 将 相 应 鼠 标 的 单 击 动 作 。 为 IDC_LED 控 件 选 中 圆 形 LED 风 格 , 在 Button 属 性 页 的 Mode 列 表 框 中 选 中 Indicator 选项,将控件只作显示用。 通 过 类 向 导 为 显 示 控 件 IDC_LED 添 加 CCWButton 类 的 成 员 变 量 m_ctlLED,为 控 制 控 件 IDC_SWITCH 添 加 ValueChanged 消 息 响 应 函 数 并 添加代码如下: void CLabViewDlg:: OnValueChangedSwitch(BOOL Value) { m_ctlLED.SetValue(Value ); / / 将上下拨动开关的值赋给指示灯 } 一 旦 IDC_SWITCH 的 布 尔 值 改 变 , 程 序 便 将 其 赋 给 IDC_LED 显 示 出 来 。 编 译 并 运 行 程 序 , 用 鼠 标 连 续 单 击 拨 断 开 关 , 会 如 愿 看 到 显 示 灯 也 随 着 明 灭 。 可 见 ,Boolean 控 件 的 使 用 方 法 非 常 简 单 。 还 可 通 过 在 Button 属 性 页 下 更 改 控 件 颜 色,使 它 们 看起来更像实际面板上的器件。 3.2 Numeric 控件的使用 Numeric 控 件 包 括 旋 钮 控 件 , 滑 块 控 件 和 数 值 编 辑 框 , 可 通 过 向 LabView 工 程 添 加 “CWKnob Control (National Instruments) ”,“ CWSlide Control (National Instruments)”和“CWNumEdit Control (National Instruments)”来使用控件。 向 LabView 工 程 的 前 面 板 添 加 一 个 旋 钮 控 件 , ID 号为 IDC_CWKNOB1; 添 加 一 个 滑 块 控 件 ,ID 号 为 IDC_CWSLIDE1; 添 加 一 个 数 值 编 辑 框 ,ID 号 为 IDC_CWNUMEDIT1。同样,可以在 Style 属 性 页 下 改 变 控 件 的 风 格 , 这 里 选 择 旋 钮 控 件 为 三 维 拨 号 盘 风 格 , 滑 块 控 件 为 三 维 温 度 计 风 格 , 数 值 编 辑 框 为 按 钮 左 置 风 格。为 方 便 示 例,可 将 在 Pointer 属 性 页 下 将 IDC_CWKNOB1 的 Mode 改 为 Control , 将 IDC_CWSLIDE1 的 Mode 改 为 通 过 类 向 导 为 显 示 控 件 IDC_CWSLIDE1 添 加 CCWSlide 类 的 变 量 m_ctlSlider , 为 显 示 控 件 IDC_CWNUMEDIT1 添 加 CCWNumEdit 类 的 变 量 m_ctlNum , 为 控 制 控 件 IDC_CWKNOB1 添 加 PointerValueChanged 消 息 响 应 函 数 并 添 加 代 码 如 下 : void CLabViewDlg::OnPointerValueChangedCwknob1 (long Pointer, VARIANT FAR *Value) { m_ctlSlider.SetValue( *Value ); / / 转动表盘值赋给温度计 m_ctlNum.SetValue(*Value ); / / 转动表盘值数值显示 } 编 译 并 运 行 程 序 , 用 鼠 标 左 键 旋 转 拨 号 盘 指 针,会看见温度计和数值显示控件在跟着变化。 3.3 Graph 控件的使用 Graph 控 件 是 NI 公 司 开 发 的 图 表 控 件 。 虽 然 VC 下 也 自 带 有 图 表 控 件 MSChart, 但 是 无 论 从 哪 方 面 看 ,Graph 控 件 都 比 MSChart 控 件 更 像 一 个 真 正 意 义 上 的 示 波 器 。 并 且 Graph 控 件 功 能 更 全 面 , 使 用 也 更 加 方 便 灵 活 。 通 过 添 加 ActiveX 文 件 “CWGraph Control (National Instruments)”, 可 将 Graph 控件添加到工程中。 向 LabView 工 程 的 前 面 板 添 加 Graph 控 件 , ID 号为 IDC_CWGRAPH1,并 在 Style 属 性 页 下 选 择 “ Plots:Colored” 风 格 。 这 样 , 控 件 可 用 于 绘 制 不 同 颜 色 的 多 条 曲 线 。 通 过 类 向 导 为 控 件 添 加 CCWGraph 类 的 成 员 变 量 m_Graph, 并 添 加 两 个 按钮,分别用于动态绘制单条曲线和多条曲线。 (1) 用 Graph 控件动态绘制单条曲线 测 控 软 件 需 要 将 实 时 接 收 到 的 数 据 显 示 到 曲 线 上 , 形 成 动 态 效 果 。 Graph 控 件 的 成 员 函 数 SetYDataAppend 很 好 地 解 决 了 这 个 问 题 , 每 次 调 用 该 函 数 可 将 一 个 点 追 加 到 曲 线 末 尾 。 问 题 的 难 点 在 于 函 数 参 数 使 用 了 VARIANT 类 。VARIANT 只 是 一 个 新 定 义 的 结 构 ,它 的 主 要 成 员 包 括 一 个 联 合 体 及 一 个 变 量。该 联 合 体 由 各 种 类 型 的 数 据 成 员 构 成,而 该 变 量 则 用 来 指 明 联 合 体 中 目 前 起 作 用 的 数 据 类 型 。 VARIANT 及 由 之 而 派 生 出 的 Cole Variant 类常用于在 OLE 自动化中传递数据。 为 对 话 框 类 CLabViewDlg 添 加 成 员 变 量 long m_lData,在 单 条 曲 线 的 启 动 按 钮 下 添 加 如 下 语 句 : m_lData = 0; / / 初始化变量 m_Graph.ClearData(); / / 清空图表数据 SetTimer(1, 60, NULL); / / 启动定时器 1 ·85·
兵工自动化 软件技术 O. I. Automation 2004 年第 23 卷第 4 期 Software Technique 2004, Vol. 23, No. 4 然 后 在 ON_WM_TIMER 消 息 响 应 函 数 中 添 加 数的 CASE 2 中添加如下代码: 代码,完成动态显示曲线: void CLabViewDlg::OnTimer(UINT nIDEvent) { switch( nIDEvent ) { case 1: m_lData++; / / 变量递增 m_Graph.SetYDataAppend(ColeVariant (sin(3.1415*m_lData/100) ) ); / / 向曲线添加点 break; case 2: break; } } 由 于 代 码 中 使 用 了 sin 函 数 模 拟 数 据 , 必 须 在 文 件 中 包 含 头 文 件 "math.h" 。 然 后 编 译 并 运 行 程 序 , 点 击 单 条 曲 线 的 启 动 按 钮 , 将 看 到 一 条 正 弦 曲 线在不断延伸。 (2) 用 Graph 控件动态绘制多条曲线 测 控 软 件 不 只 采 集 一 个 物 理 量 , 所 以 可 能 要 求 程 序 能 够 实 时 绘 制 多 条 曲 线 。Graph 控 件 提 供 的 解 决 方 法 很 简 单 , 仍 使 用 SetYDataAppend 函 数 , 问 题的关键在其参数 VARIANT 类。 为 对 话 框 类 CLabViewDlg 添 加 成 员 变 量 ColeSafeArray saRet 和 long index[2],并 在 其 构 造 函数中添加初始化代码: DWORD numElements[] = {3, 1}; saRet.Create(VT_R8, 2, numElements); index[1]=0; 在多条曲线的启动按钮下添加如下语句: m_lData = 0; / / 初始化变量 m_Graph.ClearData(); / / 清空图表数据 SetTimer(2, 60, NULL); / / 启动定时器 2 m_lData++; / / 变量递增 for(index[0]=0; index[0]<3; index[0]++) { double val = index[0]*0.5 + sin(3.1415*m_lData/100); saRet.PutElement(index, &val); / / 构成 COleSafeArray 数组 } m_Graph.SetYDataAppend(saRet); / / 向曲线族添加点 可 见 , 动 态 绘 制 多 条 曲 线 的 实 质 在 于 , 每 次 向 控 件 添 加 的 是 一 个 三 维 数 组,而 不 是 一 个 数。这 样 , 控 件 将 动 态 绘 制 出 三 条 正 弦 曲 线 。 经 最 终 编 译 执 行 ,可制作出如图 1 所示的精美界面。 图 1 在 VC 环境下制作的虚拟仪器界面 4 结论 通 过 在 VC++6.0 环 境 下 使 用 LabVIEW 控 件 来 制 作 虚 拟 仪 器 界 面 , 既 美 观 生 动 又 高 效 快 捷 。 它 可 以 把 VC 程 序 员 从 繁 琐 的 界 面 绘 制 中 解 放 出 来 , 而 将精力集中于软件的关键环节,提高了生产效率。 参考文献: [1] 许 福 , 舒 志 , 张 威 . Visual C++ 程 序 设 计 技 巧 与 实 例 [M]. 中国铁道出版社, 2003. [2] 陈 再 . 浅 谈 Windows 中 ActiveX 控 件 注 册 的 几 种 方 法 [EB/ OL]. VC知识库第二期. http://www.vckbase.com. [3] 石 博 强 , 赵 德 永 , 等 . LabVIEW6.1编 程 技 术 实 用 教 程 最 后,只 需 要 在 ON_WM_TIMER 消 息 响 应 函 [M]. 中国铁道出版社, 2002. 来 稿 摘 登 摘 登 编 号 : 1006- 1576( 2004) 04- 30; 收 稿 日 期 : 2004- 02- 24 嵌入式 Linux 在赤壁粮库监控系统中的应用 (1. 华中科技大学 控制科学与工程系,湖北 武汉 430074;2. 中央贮备粮赤壁直属库) 余沛 1,王仲东 1,顾根来 2 摘要:嵌入式 Linux 操作系统采用了 MC68EZ328 微控制器、FLASH、RAM、磁盘及以太网和 CAN 总 线 的 接 口 电 路 、 并/ 串口电路。可 根据系统需要修改、裁剪、增加 Linux 内核源代码。建立 Lin 内核环境,修改启动代码、GUI 函数封装和网 卡驱动。然后转换启动画面格式,修改初始化进程,加入系统调用,调试键盘与 LCD 和 CAN 卡的驱动程序,实现数据转发。 Application of Embedded Linux in Monitor System for Chibi Grain Storehouse YU Pei1, WANG Zhong-dong1, GU Geng-lai2 (1. Dept. of Auto-Control, Huazhong University of Science & Technology, Wuhan 430074, China; 2. Chibi Center grain depot) Abstract: MC68EZ328 micro-controller, FLASH, RAM, disk storage, Ethernet, interface circuit and parallel/serial interface serial interface of CAN bus was applied in embedded Linux operating system. Linux kernel source code is modified, cut out and added according to requirement of system. At first, Lin kernel source environment was established, start-up code was modified, GUI function was encapsulated and network card was driven. And then, start-up menu format was transformed, initialization course was modified, and system calling was added, keyboard, LCD and CAN and driver of CAN card was debugged. ·86·
分享到:
收藏