工学
RSS阅读器
 您现在的位置: 在职教育交流中心 >> 论文写作 >> 计算机 >> 计算机应用 >> 论文正文

利用VC中的通讯控件开发串形通信程序

作者:佚名    论文来源:在职教育交流中心    点击数:    更新时间:2007-5-21
由于需要我们开发了前置机应用程序,实现功能就是将前置机里存放的信息取出来用计算机进行处理,该程序是利用VC在WIN98下开发而成,对串口的访问是通过VC中的通讯控件主要完成的。通讯程序开发不仅涉及对串口的访问,还牵涉多线程编程24小时运行等问题,是编程中令人头疼的问题。本文中只介绍利用控件对串口的访问。为了说明控件的应用,这里特编制两台计算机通过串口进行信息交换的小程序,来介绍通讯控件的具体运用。
1. 控件程序的实现
    启动Microsoft 5.0,利用Appwizards建立一个新的基于对话框的project,选名commtest,其中第二步选择ActiveX Control选项,证明支持控件功能,其他都选择缺省,这样就建立了一个基于对话框的应用程序。
    然后将通讯控件加入应用之中,在对话框资源上点击鼠标右键,选择Insert ActiveX Control然后在控件选择对话框中选择Microsoft Communictions Control,Version5.0,然后选择Insert插入一个类似电话机的控件,然后点击该控件就可以修改和设置控件特性。按Add to Project选项中Registered ActiveX Control选项然后在控件选择对话框中选择Microsoft Communictions Control,Version5.0,将通讯控件两个程序Mscomm.h和Mscomm.cpp加入project当中。这样就把通讯控件加入了应用程序当中,可以应用该控件进行编程了。
2.通讯控件的各属性的含义:
w10 属性设定值说明
ComPort1串口号
Settings9600,n,8,1串口的参数设置,依次为波特率、奇偶校验、数据位数、停止位数
InBufferSize1024接收缓冲区大小
InputLen0从接收缓冲区读取的字节数,0表示全部读取
InputMode1接收数据的类型,0表示文本类型,1表示二进制类型
OutBufferSize1024发送缓冲区大小
RThreshold1设定当接收几个字符时触发OnComm事件,0表示不产生事件,1表示每接收一个字符就产生一个事件
SThreshold0设定在触发OnComm事件前发送缓冲区内所允许的最少字符数,0表示发数据时不产生事件,1表示当发送缓冲区空时产生OnComm事件

通讯控件的属性很多,这里只是介绍其中的几种,可以根据自己的需求选择加以设置调整,对于其他属性可以查看VC帮助和联机手册。
通讯控件的工作原理类似于中禵cf方式,当有通讯事件发生时(如发送数据、接收数据等),就会触发OnComm事件,在该事件的处理函数中调用GetCommEvent()函数,通过返回值即可确定是那类事件,再作出相应的处理。
3.VC通讯控件的数据类型和命令
对通讯控件来说,其所有的数綺dd类型和命令都在两个控件文件mscomm.h和mscomm.cpp两个文件当中,mscomm.h定义了控件类和各条命令的函数及所用的各参数,mscomm.cpp文件中有各命令函数的描述。
4.主程序的编制
在对话框中增加下面几个按钮:
 发送数据编辑框
发送数据按钮;
     接收数据编辑框
清除数据按钮;
通讯按钮;
首先我们为对话框中的控件添加对应的变量和响应函数a3具体做法如下表所示。
w10 控件名称控件ID对应变量
发送数据编辑框IDC_SENDDATEm_SendDate
发送按钮IDC_SENDOnSend()
清除按钮IDC_CLEAROnClear()
接收数据编辑框IDC_RECEIVEDATEm_ReceiveData
通讯控件IDC_MSCOMMm_Comm



    再打开ClassWizard,选中IDC_MSCOMM,可看到该控件能响应的消息为OnComm,添加改函数并将其改名为OnComm(),在该函数中添加代码,就能实现对串口事件的处理。其中一个需要注意的问题是函数GetInput()返回的是VARIANT型变量,而在编辑框中显示的是Cstring型变量,因此必须进行转换。先将VARIANT型变量转换为ColeSafeArray型变量,再将其转换为BYTE型数组,然后将数组转换为Cstring型变量。这个转换过程看起来比较复杂,但它可以满足用不同的变量类型来显示接收数据。该程序的主要代码添加在CommTestDlg.cpp中,如下所示:
void CcommTestDlg::OnSend()
{
it( !m_Comm.GetPortOpen() )
m_Comm.SetPortOpen(TRUE);//打开串口
UpdateData(TRUE);
m_Comm.SetOutput(ColeVariant(m_SendData));//发送数据
}
void CcommTestDlg::OnClear()
{
m_ReceiveData.Empty();//清除接收对话框中的数据
m_SendData.Empty();//清除发送对话框中的数据
UpdataData(FALSE);
}
void CcommTestDig::OnComm()
{
VARIANT m_input1;
ColeSafeArray m_input2;
Long length,i;
BYTE data[1024];
Cstring str;
if(m_Comm.GetCommEvent()= =2)//接收缓冲区内有字符
{
m_input1=m_Comm.Getinput();//读取缓冲区内的数据
m_input2=m_input1;//将VARIANT型变量譥aa换为ColeSafeArray型             变量
length=m_input2.GetOneDimSize();//确定数据长度
for(i=0;i
m_input2.GetElement(&i,data+i);//将数据转换为BYTE型数组
for(i=0;i
{
char a=* (char *)(data+i);
str.Format(“%c”,a);
m_ReceiveData+=str;
}
}
UpdataData(FALSE);//更新编辑框内容
}
5.试验程序
现在程序已经写完,可以编辑訽cb行。我们可以做一个小实验来验证程序的功能。首先检验你的串口1,看它是否工作正常,可用常见的DOS程序Comdebug检查。确认串口工作正常后,可用串口线将两台微机的串口1相连,同时在两台机子上运行该程序(也可只用一台微机,将其串口1的2脚和3脚短接,即自发自收状态),在发送对话框中随便敲入一些字符,用鼠标点击发送按钮,你就会在另一台机子的接收对话框中看到这些数据,甚至汉字也可以发送。由此看来,利用通讯控件可以很容易的编写出串行通讯程序。但相对来说,通讯控件在VC中的使用要比在VB中复杂的多,要想开发出更多更灵活的使用方法还需要不断的摸索和实践。
【声明】本网站刊载的资料由网友提供分享 资料内容纯属作者个人观点,不表示本网同意其说法或描述,仅为提供更多信息,也不构成任何建议。网友转载请注明原作者姓名及出处。如有侵犯到您的版权,请与我们联系
·利用VC中的通讯控件开发串形通信程序· 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】    
    
  • 上一篇论文:
  •  
        
  • 下一篇论文:
  •  
    相关论文
    用VB制作网址链接器
    利用虚拟现实技术构建动画素材开发环境的研…
    用VC++6.0为对话框添加最小化按钮和提示条
    采用VC++面向对象技术构建岩土工程勘察软件
    利用EPP并行口实坝PC机之间通信的CAN总线设…
    利用VBA编程实现从EXCEL表到AUTOCAD表转换
    网友评论:
    (只显示最新10条。评论内容只代表网友观点!)
    早上8:30-下午5:30
    全国客服热线: 010-84639241
    客服QQ: 10015411 / 173799180
    客服Email: edufo@163.com
      QQ交流群: 5379191 / 5371551
    网站介绍 |  联系我们 | 加盟合作 | 友情链接 | 广告服务 | 诚聘英才 | 网站地图 | 免责声明
    不良信息
    举报中心
    在职教育交流中心 版权所有 TEL:010-84639241 京ICP备06028089
    Copyright © 1998 - 2007 EDUFO Inc. All Rights Reserved
    网络110
    报警服务