免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > VC下利用WindowsAPI异步串口通信软件设计(2)

VC下利用WindowsAPI异步串口通信软件设计(2)

时间:2012-06-16 19:04来源:未知 整理:寂涯网络 点击:


return0;
}
1.4 关闭串口
串行接口以文件的形式打开,还需要以文件的形式
将其关闭 利用API函数关闭串口时,只需使用Create-
File函数返回的句柄作为参数调用CloseHandle即可:
CloseHandle(m_hComm);
以上步骤完成后,还需在主对话框中调用CComm-
Port类成员函数,完成串行通信任务 需在主对话框中定
义全局变量m_CommPort作为新建通信类CCommPort的
对象,然后添加串口通信自定义的消息响应函数
0nComm()来完成对串口接收到的数据处理的任务
2 数据写入EXCEL
由于系统需要保存实时接收到的数据,因而可在VC
中调用 EXCEL,将串口接收到的数据存储到 Excel文
件中
(1)打开Excel,将数据导入Excel表中 为了能够调用
Excel 的接口,具体步骤如下:打开 MFCClassWizard 窗
口,选择Automation->AddClass->Fromatypelibrary,进
入 Excel 的类型库 选取 C:\ProgramFiles\MicrosoftOf-
fice\office\Excel9.OLB,再根据Excel对象的需要,选择所
需C++驱动程序类 本例选择_Application Workbooks
_Workbook Sheets _Worksheet Range,加入新类 所选的
新类以及头文件Excel9.h和源文件Excel9.cpp一并加入
工程 另外,在TemperControlDlg.cpp文件的头部需要添
加头文件#include"excel9.h" 又因为 Excel本身也是一
个实现自动化的COM组件,需初始化COM库,找到App
类的InitInstance()函数,在其中添加AfxOleInit()函数的调
用,初始化COM库代码如下:
if(!AfxOleInit())//初始化COM库
{
AfxMessageBox(" 初始化COM失败")
returnFALSE;
}
创建Excel模板的步骤如下:第一,创建作为模板的
一个工作簿 第二,单击" 文件" 菜单中的" 另存为",并
为该文件命名,本例使用 "temp" 作为文件名称;在 " 保
存类型" 框中,选择" 模板"(*.xlt)的类型文件 第三,
击" 保存" 按钮,完成Excel模板创建
(2)打开对话框资源,插入一个按钮, caption为" 数据
导入",添加响应函数,关键程序代码如下:
voidCTemperControlDlg::OnBtnDataImport()
{_Applicationm_ExlApp;
_Workbookbook;
_Worksheetsheet;
Workbooksbooks;
Worksheetssheets;
Rangerange;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND,
VT_ERROR);
m_ExlApp.CreateDispatch("Excel.Application");//创建
一个Excel应用
m_ExlApp.SetVisible(TRUE);//设置Excel为可见
books=m_ExlApp.GetWorkbooks();
sheets=books.Add(COleVariant("c:\\temp.xlt"));// 用模
板文件建立新文档
book.AttachDispatch(m_ExlApp.GetApplication());
sheets=book.GetSheets();//得到sheets
sheet=sheets.GetItem(COleVariant((short)1));// 得到
sheetl
sheet.Activate();//激活sheetl
range=sheet.GetRange(COleVariant(A1), COleVariant
(A1));
//设置表格内容
range.BorderAround(COleVariant((short)1),(long)2,(long)
1,covOptional);
range.SetValue(COleVariant(" 时间"));
range.SetHorizontalAlignment(COleVariant((short)3));//
设置水平对齐
range.SetVerticalAlignment(COleVariant((short)2));// 设
置垂直对齐
range.SetColumnWidth(COleVariant((short)15));
range=sheet.GetRange(COleVariant("B1"),COleVariant
("G1"));//选定范围
range.Merge(COleVariant((short)1));//合并单元格
range.BorderAround(COleVariant((short)1),(long)2,(long)
1,covOptional);
range.SetValue(COleVariant(" 温度显示值"));
range.SetHorizontalAlignment(COleVariant((short)3));
range.SetVerticalAlignment(COleVariant((short)2));
range.SetColumnWidth(COleVariant((short)10));
{
COleSafeArraysaRet;
DWORDnumElements[]={1,7};
saRet.Create(VT_VARIANT,2,numElements);
FillSafeArray("接收时间",0,0,&saRet);
FillSafeArray("柜内温度1",0,1,&saRet);
FillSafeArray("柜内温度2",0,2,&saRet);
FillSafeArray("室内温度1",0,3,&saRet);
FillSafeArray("室内温度2",0,4,&saRet);
FillSafeArray("室外温度",0,5,&saRet);
FillSafeArray("监控加热器",0,6,&saRet);
range=sheet.GetRange(COleVariant("A1"),COleVariant
("G1"));
range.SetValue(COleVariant(saRet));
saRet.Detach();
}
//利用 FillSafeArray函数可将串口接收到的实
时数据保存到Excel表中
SaveRealTimeData(&saRet);
//释放对象

本页地址 http://www.jybase.net/biancheng/20120616953.html

百度搜索更多

谷歌搜索更多

顶一下
(1)
50%
踩一下
(1)
50%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com