目前,在用计算机进行数据传输时,常用的是串行通信方式。
在Visual C++的编程中,既可以用Windows API函数进行串行通信编程,也可以利用环境自带的控件进行编程。利用 API函数编写实际应用程序时,往往要考虑多线程的问题,这样编出来的程序不但十分庞大,而且结构比较复杂,继承性差,维护困难。但是使用串行通信控件就相对简单一些,而且功能强大,性能安全可靠。
本文以Microsoft Communications Control(version 6.0)为例,介绍串行通信控件在VC++中的使用方法。 |
1、在建立新工程时,将ActiveX Controls复选框选中,表示本程序支持ActiveX 控件。 |
2、单击Project菜单,从中选择Add to Project,在弹出的对话框中单击Components and Controls选项,然后在弹出的对话框中再单击Registered ActiveX Controls选项。 |
3、在列表中选择Microsoft Communications Control (version6.0),形状为带有红色底座的黄色电话机。单击Insert按钮,确认后,会出现一个Confirm Classes对话框,其中列出了该控件的类名(CMSComm)、头文件名(MSComm.h)、执行文件名(MSComm.cpp)。 |
关闭此对话框,在程序主界面的控件列表中,可以看到该通信控件已被加入,拖动该控件就可以将其放入程序中。 |
通信控件的工作原理类似于中断方式,当有通信事件发生时,如发送、接收数据,就会触发OnComm事件。在OnComm事件的处理函数中调用 GetCommEvent()函数,由该函数的返回值即可确定是什么类型的事件,并由此做出相应的处理。 |
下面以接收处理串口的GPS信号为例,说明该控件在编程中的具体应用。 |
利用MFC生成一个基于对话框的应用程序,对话框中的控件及其相应的消息与响应函数如下表所示。 |
控件名称 |
控件 ID |
对应变量 |
通信控件 |
IDC_MSCOMM |
m_Comm |
接收按钮 |
IDC_BUTTON_RECEIVEGPSDATA |
OnbuttonStartreceivegps() |
GPS信号显示 |
IDC_EDIT_COMDATA |
m_comdata |
停止接收按钮 |
IDC_BUTTON_ENDRECEIVEGPSDATA |
OnbuttonEndreceivegps() |
Handshaking:nohandshaking; |
void CGpsDlg::OnButtonStartreceivegps() |
if(!m_Comm.GetPortOpen() ) |
m_Comm.SetPortOpen(TRUE); |
void CGpsDlg::OnButtonEndreceivegps(); |
if( m_Comm.GetPortOpen() ) |
m_Comm.SetPortOpen(FALSE); |
if(m_Comm.GetCommEvent()== 2) |
m_input1=m_Comm.GetInput(); |
//将VARIANT型变量转换为ColeSafeArray型变量 |
length=m_input2.GetOneDimSize(); |
m_input2.GetElement(&i,data+i); |
char a=* (char *)(data+i); |
转换为ColeSafeArray型变量,再将其转换为 |
BYTE型数组,然后将数组转换为CString型变量, |
这样就将GPS信号的数据流提取出来了。再通过简单的字符串操作就可以分别找出GPS信号中的经度、纬度以及相对应的格林威治时间等定位信息。 |
以上程序在Win98/95/NT、P133 PC机、ROCKWELL JUPITER GPS接收板环境下调试通过。 | |
阅读(1237) | 评论(0) | 转发(0) |