`
javasogo
  • 浏览: 1817063 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

基于VC的接收机串口程序设计

阅读更多

摘 要: 本文介绍了使用Visual C++开发使用接收机与PC机通信的接口程序,利用ActiveX控件来简化程序设计难度的方法,并给出了详细的实现方法,具有一定的实用意义。

  关键词 串口通信 Visual C++ ActiveX控件



  一、 引言

  串行接口是微机与外部设备的主要通信接口之一。只需要一条信号线就可以进行单向数据传送。由于线路简单,价格相对较低,得到了广泛应用。

  如果想利用串行接口来实现近距离通信(通常15米以内),可以采用图1的连接方式来实现。该接收机采用EIA-RS232C串行标准进行通信,其数据通信信号形式如下表:

波特率(Baud) 4800, 9600, or 19200 bps
数据位(Databit) 8 bits
停止位(Stopbit) 2 bits
校验位(Parity) Non
流控制(Flow Control) XON / XOFF

  接收机接收通过串口接收来自PC机的控制命令后,进行相应的动作,完成相应的设置。那么如何在WINDOWS环境下快速有效地开发串口通信程序呢?一般情况下的串口通信无非采用两种方法:一是利用Windows 的通信API 函数, 二是利用一些高级语言(如VC++等)来实现。Windows 的API 函数虽然使用面很广,但由于比较复杂而有一定的难度,而Visual C++ 的ActivateX 控件, 由于其灵活性与易用性而受广大计算机开发者的青睐,正成为主要的开发工具。

  二、ActiveX控件介绍

  ActiveX是Windows 下进行应用程序开发的崭新技术,它的核心内容是组件对象模型COM(Component Object Model)。ActiveX控件包括一系列的属性、方法和事件,使用ActiveX控件的应用程序和ActiveX控件之间的工作方式是客户/服务器方式,即应用程序通过ActiveX控件提供的接口来访问ActiveX控件的功能。

  Microsoft Communication control是Microsoft公司提供的简化Windows下串行接口收发数据的简便方法。下面介绍在Visual C++6.0环境下,用ActiveX通信控件来编程实现串口通信的方法和技巧。

  三、串口通信的编程实现

  用VC++的Active X控件来实现串口通信,是一种快速简洁而又简单的编程方法。下面简单介绍实现过程。

  3.1 在程序中嵌入通信控件

  单击Project菜单中选择Add to Project,再单Components and Controls,从弹出的对话框中单击Registered ActiveX Controls,然后在列表框中选择Microsoft Communications Control, version 6.0,单击OK。之后注意到Project中新增加了一个类。通过查看类MSComm的源文件mscomm.cpp,我们可以了解这个控件的属性和使用方法,其中的Get...函数可以用来访问该属性的当前值,而Set...函数则用来设置该属性的新值。

  3.2 利用串口通信类编程实现通信功能

  在添加了串口通信类之后,就可以在相应的程序中创建一个通信控件,然后通过调用串口通信类的成员函数来完成相应的数据接收和发送功能。

  四、 串口通信的使用方法和技巧

  4.1 通过人工映射事件自动响应函数

  通信控件的工作原理类似与中断方式,当有通信事件发生时(如发送数据、接收数据等),就会触发OnComm事件,在该事件的处理函数中调用OnCommEvent()函数,通过返回值即可确定是那类事件,再作出相应的处理。

  但需要注意的是,OnCommEvent()函数并不是自动映射的,必须手工添加该事件映射函数。其方法如下:

  示例中是在主框架类中调用通信控件类函数。所以先要在Mainfrm.h添加如下消息映射函数。

afx_msg void OnCommEvent();

  然后在Mainfrm.cpp中添加如下代码

BEGIN_EVENTSINK_MAP(CMainFrame, CFrameWnd)
ON_EVENT(CMainFrame, ID_COMMCTRL, 1, OnCommEvent, VTS_NONE)
END_EVENTSINK_MAP()

  接下来就可以在void CMainFrame::OnCommEvent()函数中处理各种串口响应事件。

  串口收发数据时,若数据只用 ANSI 字符集,则用文本方式收发。对其它字符数据,如数据中有嵌入控制字符、Nulls 等等,则使用二进制方式。

  其中一个需要注意的问题是函数SetInput()发送的是VARIANT型变量,而我们输入的一般是CString型变量,因此必须进行转换。先将CString型变量转换为BYTE型数组,再将转换为ColeSafeArray型变量,然后将其组转换为VARIANT型变量发送出去。这个转换过程看起来比较复杂,但它可以满足用不同的变量类型来发送数据。在串口接收数据时,也要做类似的变量类型转换处理。该转换的主要代码实现如下所示:

void CMainFrame::OnSendData(CString m_strInputData,int kind)
{
CString str,string;
VARIANT strReceive;

BYTE data[256];
long i,length;
COleSafeArray m_input2;

length=m_strInputData.GetLength();
//将Cstring型变量转换为BYTE型数组
for(i=0;i<length;i++)
data[i]=m_strInputData.GetAt(i);

length++;
//创建一个ColeSafeArray型变量数组
m_input2.CreateOneDim(VT_UI1,length,data,0);

//把字节数组转换成ColeSafeArray型变量
for(i=0;i<length;i++)
m_input2.PutElement(&i,data+i);
//把ColeSafeArray型变量转换成VARIANT型变量
strReceive=m_input2;
//发送数据
m_commctrl.SetOutput(strReceive);
}

  我们知道,每个使用的串口通信控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个控件。通常,PC机配有两个串行接口,分别以COM1和COM2标称。所以如果需要在同一应用程序中,对两个接收机进行遥控时,就可以通过创建两个串口通信控件来实现。并且PC机也可以根据需要添加新的串行接口硬件,所以通过多个串口通信控件就能很容易地实现与多个外部设备的通信。

  五、 结束语

  本文实现了在windows98下用Visual C++来开发某侦察接收机与PC机串行通信的接口程序,并且利用ActiveX控件大大简化了程序设计的难度。本文给出了部分关键实现的代码,并根据作者开发经验,指出了需要注意的问题,具有一定的实用意义。
分享到:
评论

相关推荐

    基于VC的接收机串口程序设计.rar

    总结来说,"基于VC的接收机串口程序设计"是一个利用MFC库在VC++环境中实现串口通信的项目。通过理解和应用CSerialPort类,我们可以构建一个能够监听和响应串口数据的接收机程序。这在嵌入式系统开发中,尤其是在调试...

    基于VC的串口通信程序源代码

    基于VC的串口通信程序源代码解析与理解 在深入探讨基于VC的串口通信程序源代码之前,我们首先需要了解几个关键概念:VC(Visual C++),串口通信,以及程序源代码。 ### VC(Visual C++) VC是Microsoft Visual ...

    基于VC_6_0的串口通信程序设计

    ### 基于VC_6_0的串口通信程序设计 #### 一、引言 随着自动化技术的发展,串口通信技术在工业自动化领域扮演着越来越重要的角色。特别是对于那些需要实现远程监控和控制的应用场景,串口通信提供了一种高效且成本...

    基于VC++6.0的RS-422串口通信设计

    ### 基于VC++6.0的RS-422串口通信设计 #### 1. 引言 在某航天系统的地面测试项目中,为了实现模拟特定型号卫星的数据发送与接收任务,本研究首先深入分析了RS-422通信协议,并结合Moxa公司提供的CP-132UL卡,利用...

    基于VC_6_0的多串口通信方法.pdf

    ### 基于VC_6_0的多串口通信方法 #### 引言与背景 随着科技的进步,工业自动化和远程监控系统的需求日益增长,其中串口通信因其简便性、灵活性以及数据传输的可靠性而成为连接计算机与外部设备的重要手段。然而,...

    vc串口上位机程序源码

    MFC是微软为Windows应用程序设计的一套C++类库,它封装了Windows API,提供了更面向对象的编程方式。MFC中包含了各种窗口、控件、线程、网络和数据库等组件,使得开发者能够快速构建用户界面和系统功能。 2. C++...

    基于vc的串口通信,实现两台计算机之间的发送和接收信息功能

    总的来说,基于VC的串口通信项目是一个实用且基础的软件开发任务,它帮助开发者理解和掌握串口通信的基本原理和编程技巧。通过这个项目,不仅可以提升对串口通信的理解,也有助于提高使用VC进行系统集成和应用开发的...

    基于VC的USB接口通信程序设计

    ### 基于VC的USB接口通信程序设计 #### 一、引言 随着信息技术的飞速发展,数据采集和处理技术在多个领域如雷达、通信、遥测、遥感等发挥着重要作用。传统计算机系统中,数据传输依赖于串口或并口,这些接口虽然能...

    基于VC串口通信的设计.doc

    在实际应用中,了解和掌握串口通信的基本概念和工作原理对于设计和实现基于VC++的串口通信程序至关重要。这不仅可以提升系统的通信效率,还能确保数据传输的准确性和稳定性。对于互联网领域的应用,串口通信技术常...

    VC 6.0实现串口通讯

    ### VC 6.0 实现串口通讯 #### 摘要 串行通信作为一种常见的数据交换方式,在工业监控、数据采集以及实时监控系统中得到了广泛的应用。它因其简单易行、灵活方便以及数据传输可靠性高等特点而备受青睐。本文旨在...

    VC编的串口测温软件

    本篇文章将详细解析一款基于VC(Visual C++)开发的串口测温软件,该软件通过串口与单片机进行通信,实现对DS18B20温度传感器数据的采集和显示。 首先,我们需要了解基础概念。VC是Microsoft公司推出的面向对象的...

    VC++6[1].0环境下GPS接收机串口通信的实现.pdf

    ### 四、实例:基于VC++6.0的GPS接收机串口通信实现 #### 1. 打开串口 使用`CreateFile()`函数,通过指定串口的设备名(例如`\\\\.\\COM1`),设置相应的访问权限和共享模式,实现串口的打开。 #### 2. 配置串口...

    VC串口 基于MSComm

    通过《VC串口(基于MSComm).pdf》这份文档,你将能够学习到如何在VC环境下创建串口通信的MFC应用程序,了解MSComm控件的使用技巧,以及如何设计一个健壮的串口通信系统。这份教程适合那些已经具备基本VC和MFC编程基础...

    VC与Labview、Matlab编程论文资料[2].rar

    基于VC_6_0的串口通信程序设计.pdf 基于VC_6_0的光伏逆变并网发电监测系统的设计.pdf 基于VC_6_0的数据库信息查询及打印技术.pdf 基于VC_6_0的网络通信设计.pdf 基于VC_6_0的虚拟汽车数字仪表盘的设计.pdf 基于VC_...

    PC机与PLC串口通信程序设计

    本文将详细探讨如何使用VC(Visual C++)、LabVIEW以及BCB(Borland C++ Builder)进行PC机与PLC的串口通信程序设计。 首先,串口通信是通过串行接口(如RS-232、RS-485等)进行数据传输的一种方式,它允许设备之间...

    VC通用串口程序,stm8通讯板程序

    标题中的“VC通用串口程序,stm8通讯板程序”涉及到的是使用Visual C++(VC)编程语言开发的,用于与STM8微控制器进行串行通信的应用程序。STM8是意法半导体公司(STMicroelectronics)生产的一款8位微控制器,广泛...

    模拟GPS接收机的程序(VC源码)

    标题中的“模拟GPS接收机的程序(VC源码)”是指一种使用C++编程语言(VC++是Microsoft的C++开发环境)实现的软件,它能够模拟真实世界中的全球定位系统(GPS)接收机的功能。这个程序对于学习、测试或调试GPS相关...

    VC与Labview、Matlab编程论文资料

    基于VC_6_0的串口通信程序设计.pdf 基于VC_6_0的光伏逆变并网发电监测系统的设计.pdf 基于VC_6_0的数据库信息查询及打印技术.pdf 基于VC_6_0的网络通信设计.pdf 基于VC_6_0的虚拟汽车数字仪表盘的设计.pdf 基于VC_...

    vc实现的串口程序开发相关动态链接库,可以发送接受,简单实用.rar

    本资源提供的是一款使用VC++和MFC(Microsoft Foundation Classes)实现的串口程序开发动态链接库,专为简化串口通信而设计,具有发送和接收数据的能力,对于初学者和专业开发者来说都非常实用。 首先,我们来深入...

Global site tag (gtag.js) - Google Analytics