兵工自动化 软件技术 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·