串行接口通信及通信监测.docx
- 文档编号:18089704
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:40
- 大小:276.84KB
串行接口通信及通信监测.docx
《串行接口通信及通信监测.docx》由会员分享,可在线阅读,更多相关《串行接口通信及通信监测.docx(40页珍藏版)》请在冰点文库上搜索。
串行接口通信及通信监测
目录
摘要I
AbstractII
1引言1
2串行通信理论的有关概念2
2.1通信2
2.2通信系统2
2.3通信的种类3
2.4通信参数4
2.5工作模式5
2.6同步通信和异步通信5
3几种方法实现串行接口通信及通信监测7
3.1使用MSComm串口通信控件来实现7
3.1.1MSComm控件串行通信处理方式7
3.1.2MSComm控件的属性7
3.1.3MSComm控件串口通信编程实例7
3.2调用Windows下的API函数实现11
3.2.1通信API及开放式服务体系11
3.2.2串行通信编程框架12
3.3方案的选取13
4串行接口通信及通信监测14
4.1硬件原理图的设计14
4.1.1RS-232的机械特性14
4.1.2RS-232的接口的电气特性15
4.1.3通信数据的传输15
4.2软件部分的编写16
4.2.1界面的设计16
4.2.2主界面视图中控件属性的设计17
4.2.3程序的主要实现的功能模块框图18
5串行接口通信和通信监测的测试20
6论文总结25
致谢26
参考文献27
附录引用到的代码28
摘要
随着计算机的普及,计算机网络和多微机系统的广泛应用,尽管当今USB通信技术和以太网技术快速发展,然而串口通信技术始终以其连接简便,价格低廉,稳定可靠等优点,在计算机通信领域占有一席之地。
在工业控制中,用PC机对工程实现实时监控,通常要求PC机能在用户界面上具有数据采集、数据处理以及控制信号的产生与传输等功能,而串口通信正是最适合的通信方式。
本文主要介绍了一个电脑做上位机,其他外围设备做下位机的小型通信系统的设计与实现。
本文主要以实现两PC机的串行接口通信及通信监测的分析与设计为主线,首先了解有关串口通信系统及通信监控的一些概念,由此引出PC机与外围设备的串口通信模式,提出了双机通过RS-232C串口线连接来实现通信的可行方案,同时介绍双机之间进行点到点的串口通信的设计。
本部分的程序设计主要使用VisualC++6.0作为开发工具,利用其提供的各种面向对象的开发工具来开发的系统,并使用MSComm串口通信控件来编程串口通信程序。
本方案的实现主要要解决一下几个方面的问题:
1.设计了上位机向下位机发送通信方式的命令格式,从机向主机发送反馈的命令格式,以及接收和发送的具体流程。
2.使用VisualC++6.0作为开发工具,其可视化的界面的设计。
3.要实现双机形式的主从式串口通信必须对通信进行管理以避免陷入混乱的通信中。
关键字:
RS-232串行通信MSComm串口通信控件
Abstract
Withthepopularityofcomputers,computernetworksandcomputersystemsmorewidelyused,althoughthecurrentUSBcommunicationtechnologyandtherapiddevelopmentofEthernettechnology,however,hasitsserialcommunication
connectionissimple,inexpensive,stableandreliable.Placeinthecomputercommunicationsfield.Inindustrialcontrol,withthePC,real-timemonitoringoftheproject,usuallyrequiretheuserinterfaceonthePCfunctionswiththedatacollection,dataprocessingandcontrolsignalgenerationandtransmissionfunctions,andserialcommunicationisthemostappropriatemeansofcommunication.Thispaperdescribesacomputertodothehostcomputer,otherperipheralstodothenextbitmachinefromthecommunicationsystemofsmallprimarydesignandimplementation.
Inthispaper,inordertoachievetheserialinterfaceofthetwoPC-communicationandcommunicationanalysisanddesignofmonitoringthemainline,firstofallabouttheserialcommunicationsystemandcommunicationcontrolsomeoftheconcepts,whichleadstoPC,andthemodeofserialcommunicationperipheralsproposedmasterandslaveserialportbyRS-232Cserialcommunicationcabletoachieveafeasibleoption,alsointroduceddouble-pointserialcommunicationbetweenthedesign.ThemainpartoftheprogramdesignusingVisualC++6.0asadevelopmenttool,theuseofitsvariousobject-orientedsystemdevelopmenttoolstodevelopandusetheserialcommunicationcontrolMSCommtoprogramserialcommunicationprogram.
Implementationofthisprogramtosolvethemajorproblemsfollowingaspects:
1.Designedahostcomputersendsthedown-bitcommandformatmeansofcommunication,feedbackfromthemachinetosendcommandstothehostformat,andsendandreceivethespecificprocess.2.UsingVisualC++6.0asadevelopmenttool,anditsvisualinterfacedesign.3.Toachievethedoubleformofmaster-slavecommunicationserialcommunicationmustbemanagedtoavoidthechaosofthecommunication.
Keywords:
RS-232serialcommunicationserialcommunicationcontrolMSComm
1引言
随着当今信息技术的快速发展,通信已成为信息技术中的关键问题。
尤其在控制领域,以何种方式实现计算机和外围设备间即简单又可靠的通信,就显得格外的重要,由于串口通信有实现简单,使用灵活方便,数据传输可靠等优点,因而广泛应用于工业控制领域中,是计算机与外部设备进行数据通信时经常使用的方式之一。
VC++是新一代的面向对象的可视化开发工具,提供了良好的页面设计能力,在PC的串行接口通信和通信方面有很好的应用,它具有功能强大、简单易用和代码执行速度快的特点,在通信的软件开发中成为越来越多的开发人员的首选工具,无论在工业中PC机和单片机之间的通信,还是PC与PC之间的双机点到点的通信,都具有相同的开发环境和模式。
掌握了通信的基本原理之后,能灵活的实现串口通信和通信监控。
本课题的上位机的信息管理及监控软件运行在Windows操作系统下,并利用MSCom控件开发设计双机之间的通信并对运行状态进行监控。
PC机与PC机的链接可以使用标准的RS-232串行口,实现短距离的通信物理的动态链接,可操作性强。
运行在PC机端的程序可通过调用MSComm串口通信控件来实现动态的链接,可对外部设备进行数据访问和命令传送,因外部设备串行通信模块具有通用性和可移植性,可通过简单的设置和改变而嵌入到其他的数据采集系统中。
串口通信协议具有通用性、稳定性和可实现性。
而MSComm串口通信控件已经得到广泛的应用,可靠性强,能够实现最后的通信监控的效果。
2串行通信理论的有关概念
2.1通信
所谓通信,简单而言就是指消息的传递。
通信的目的不外乎数据的交换,数据必须经过交换才能由发送端到达接收端,发送端所使用的方法就是将数据利用一定的程序通过线路发送出去,接收端则是根据协议将数据收集起来并且进行存储或显示等作用。
2.2通信系统
实现消息传递所需的全部技术设备和传输媒介的总和称为通信系统。
其模型方框图如图2-1所示,由信源、发送设备、信道(包括噪声)、接收设备和信宿五部分组成。
图2-1通信系统的基本模型
1.信源
信源又称为信息源或发终端,是信息的产生地,是各种消息转换成电信号的转换器,信源输出的信号称为基带信号。
根据消息的内容不同,信源可以分成音频信源、视频信源和数据信源等。
而根据转换后输出的基带信号的类型,又可将信源分为模拟信源和数字信源。
2.发送设备
发送设备的基本功能是将信源与传输媒介匹配起来,即将信源产生的基带信号转换成适合于信道传输的信号形式。
变换的形式多种多样,在模拟通信系统中的主要变换方式是调制;在数字通信系统中的主要变换方式是编码。
3.信道和噪声
从发送设备到接收设备之间信号传递所经过的媒介称为信道,它可以是有线的,也可以是无线的,即信道分成有线和无线两种。
在信号的传输过程中,通信设备必然会受到来自内外各方面的噪声干扰,通信的各个环节以及每一台设备都有可能产生噪声。
为了便于分析问题,将各种噪
声等效为由信道引入。
4.接收设备
接收设备是接收端各种设备的总称,其功能与发送设备的功能正好相反。
它的主要任务是从接收到的带有干扰的信号中正确恢复原始基带信号,如解调、译
码等。
5.信宿
信宿又称为受信者或接收终端,是信息传输的终点,其作用是将基带信号转换(还原)成原始的消息。
2.3通信的种类
通信按不同的特征会有不同种类说法,如:
按信号的特征有模拟通信和数字通信;按传输的方式有基带传输和频带传输通信,但通常通信的形式可以分为两种,一种为并行数据通信,另一种则为串行数据通信。
这两种不同的通信模式如图2-2所示:
图2-2并行与串行
由图2-2可知,并行数据通信一次的传输量为8个位(1个字节),而串行数据通信则是一次只传输1位。
并行数据通信是指在通信的过程中数据位的各位同时进行传送的通信方式。
它的突出优点是传送速度快;缺点是数据有多少位,就需要多少根传送线。
串行数据通信是指数据是一位一位的按顺序进行传送的通信方式,它的突出优点是只需一对传送线,这样就能大大降低传送的成本,很适用于进行远距离通信;缺点是数据传送的过程中传送速度比较低。
2.4通信参数
串行端口的通信方式是将字节拆分成一个接着一个的位再传送出去。
接到此电位信号的一方再将此一个一个的位组合成原来的字节,如此形成一个字节的完整传送。
在传输进行的过程中,双方明确传送信息的具体方式,否则双方就没有一套共同的译码方式,从而无法了解对方所传过来的信息的意义。
因此双方为了进行通信,必须遵守一定的通信规则,这个共同的规则就是通信端口的初始化。
通信端口的初始化必须对以下几项参数进行设置。
1.数据的传输速率(波特率)
数据的交换是通过传输双方的传输线的电压改变来实现的,但传输线的电压改变的速度必须和接收端的接收速度保持一致,RS-232是一种异步通信传输方式,这种传输双方没有一个可作为参考的同步时钟作为基准。
由于没有一个参考时钟,双方所发送的高低电位到底代表几个位就不能确定了,那么要使双方的数据读取正常,就要考虑到传输速率——波特率,其所代表的意义是每秒钟所能产生的最大电压状态改变率,即每秒钟进行振荡的次数。
在原始信号经过不同的波特率取样后,所得的结果是完全不一样的。
因此通信双方获得相同的通信速度是首先要做的事情。
2.数据位
串行通信端口一般发送的数据都是字符类型的,倘若用来传输文件,则需要使用二进制类型的数据。
若使用字符类型时,通常使用其相应的ASCII码值,而ASCII码值中8个位构成一个字符。
以RS-232传输为例,实际中大多数应用是发送文字码,所以需要7个位就来把ASCII码值的0-127个字符全部表达出来,在这个范围就内包含了所有的可见字符。
在不同的情况下,需要使用到不同的发送单位来发送数据,那么使用多少个位来合成一个字节就需要首先确定了。
3.起始位及停止位
由于异步串行通信中没有使用同步脉冲作为基准,故接收端完全不知道发送端什么时候将进行数据的发送,当发送端准备要开始发送数据时,发送端会在所送出的字符前后分别加上高电位的起始位(逻辑0)及低电位的停止位(逻辑1),它们分别代表的是所发送数据的起始位和停止位。
当发送端要开始发送数据时,便将传输线上的电位由低电位拉高,而当发送结束时,再将电位拉至低电位。
接收端会因起始位的触发来开始进行接收数据,并因停止位的触发(因电压维持在低电位)而得知发送数据的字符信号就此结束了。
当加入了起始位及停止位才比较容易达到多字符的接收能力,起始位固定为1位,而停止位则有多种选只要通信双方协议通过即可,没有强制规定。
4.校验位
为了预防在通信的过程中产生错误,所以用校验位来作为一种检查机制;它主要是检查所发送的数据的正确性的一种核对码,其中又分为奇校验和偶校验这两种方式,用来检查所发的数据中字符码的1的数目是奇数还是偶数。
现以偶校验位为例,B的ASCII码是42H,将它以二进制表示是01100010,其中1的数目是三,因此校验位便是1,使1的数目保持偶数。
同理,校验位是奇校验位时,A的校验位便是0,使1的数目保持奇数。
接收端重新计算奇偶校验位,如果新的计算值正确,那么表示正常。
如果新的计算值错误,那么接收端就会收到一些指示,表示此次接收的数据有误。
2.5工作模式
通过单线传输信息是串行数据通信的基础。
数据通常是在两个站(点对点)之间进行传送,按照数据流的方向可分成3种传送模式:
单工、半双工、全双工。
单工方式时,数据的传送是按一个单一的方向进行,由于这种局限性在日常用途中相对较少,如:
串行接口的打印机的数据传输和简单的系统间的数据采集。
半双工方式能实现数据双向传输,但不能同时进行发送和接收,在实际的应用是采用一定的协议来实现收/发开关轮转。
全双工方式可以允许通信双方同时进行数据的双向传送,由于这三种通信方式都是采用同一线路传送同一种信号频率,故资源没有得到很好利用,所以在实际的应用中,通过使用多路复用器或多路集线器,采用时分,频分和码分复用技术来提高资源的利用效率。
三种传输方式如图2-3所示,从左到右分别是单工,半双工,全双工。
图2-3三种传输方式
2.6同步通信和异步通信
串行传输中,数据是一位一位按照到达的顺序依次传输的,每位数据的发送和接收都需要时钟来控制。
发送端通过发送时钟确定数据位的开始和结束,接收端需要在适当的时间间隔对数据流进行采样来正确的识别数据。
接收端和发送端必须保持步调一致,否则数据传输就会出现差错。
为了解决以上问题,串行传输可采用以下两种方法:
异步传输和同步传输。
异步通信是指发送设备与接收设备在进行通信的过程中使用各自的时钟来控制数据的发送和接收。
在实际应用中,发送设备和接收设备的时钟应尽可能的保持一致,这样能使通信双方的收发协调。
在异步通信中,它是以字符(构成的帧)为单位进行传输且字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的。
其原理图如图2-4所示:
图2-4异步通信原理图
同步通信是通信的双方采用相同的时钟来控制,这样能使使双方达到完全同步。
此时,传送的数据位之间的距离均为“位间隔”的整数倍,所传送的字符之间没有间隙,以此来保证位同步和字符同步。
发送端与接收端可以通过外同步和自同步两种方法实现来实现同步。
以自同步为例,自同步原理图如图2-5所示:
图2-5同步通信原理图
3几种方法实现串行接口通信及通信监测
目前在Win32下,可以使用两种编程方法来实现串口通信,其一是使用MSComm串口通信控件来实现,这种方法程序简单,但相对不是很灵活。
其二是调用Windows下的API函数实现,这种方法能较好的掌握串口通信的机制且相对灵活,但编程复杂。
3.1使用MSComm串口通信控件来实现
3.1.1MSComm控件串行通信处理方式
MicrosoftCommunicationsControl(以下简称MSCOmm)是Microsoft公司提供的简化Windows串行通信编程的ActiveX控件,它为应用程序提供了通过串行接121收发数据的简便方法。
程序员不需要花时间去了解复杂的API函数,只需要利用MSComm控件就可实现串口编程。
MSComm控件提供了两种处理通信问题的方法:
一是事件驱动(Event—Driven)方法,二是查询法。
(1)事件驱动方式
事件驱动方式是处理串行端口交互作用的一种非常有效的方法。
使用事件驱动法设计程序时,每当有新字符到达或端口状态改变,或发生错误时,MSCOmm控件的OnComm事件捕获并处理这些通信事件。
而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以Oncom事件处理函数中加入自己的处理代码,这种方法由于程序响应及时可靠,在实际生活中经常使用。
(2)查询方式
查询的实质实际上仍然是事件驱动,这种方法应用程序每当执行完某一串行口操作后,将不断地检查CommEvent属性的值来查询事件或错误,如果应用程序较小,而且是自保持的,那么这种方法可能比较可取。
3.1.2MSComm控件的属性
MSComm控件有许多属性,其中非常重要的几个属性如下:
CommPort:
设置并返回通信端El号。
Setting:
以字符串的形式设置并返回波特率,奇偶校验位,数据位,停止位。
PortOpen:
设置并返回通信端口的状态。
也可以打开和关闭端口。
Input:
从接收缓冲区返回和删除字符。
Output:
向传输缓冲区写一个字符。
3.1.3MSComm控件串口通信编程实例
(1)创建串口通信程序工程MySCommTest
打开VisualC++6.0集成开发环境,创建一个基于对话框的MFC应用程序项目,命名为MySCommTest,完成这一步后插入MSComrn控件并定义对话框内各个对象的成员变量。
(2)串口初始化
右键点击对话框,选择ClassWizard一>MemberVariables页,选中IDC_MSCOMM控件,再点击“AddVariable⋯”在CMySCommTestDlg类中为串口控件添加CMSComm类的控制变m_ctrlcomm。
在MySCommTestDlg:
:
OnlnitDialog()函数中写入对串口的初始化语句。
通过串口初始化变量m_ctrlcomm来设置串口控件的属性。
初始化代码示例如下:
BOOLCMYDlg:
:
OnInitDialog()
{
if(m_COM.GetPortOpen())
m_COM.SetPortOpen(FALSE);
m_COM.SetPortOpen
(1);//选择com1
if(!
m_COM.GetPortOpen())
{
m_COM.SetPortOpen(TRUE);//打开串口
m_szStatus=”打开”;
}
else
{
AfxMessageBox("cannotopenserialport");
}
m_COM.SetSettings("9600,n,8,1");//波特率9600,无校验,8个数据位,1个停止位
m_COM.SetInputMode
(1);//1:
表示以二进制方式检取数据
m_COM.SetRThreshold
(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_COM.SetInputLen(0);//设置当前接收区数据长度为0
m_COM.GetInput();//先预读缓冲区以清除残留数据
if(m_COM.GetPortOpen())
{
GetDlgItem(IDC_OPEN_CLOSE)->SetWindowText("关闭窗口")
}
returnTURE;
}
(3)串口事件处理函数OnComm()
MsComm控件一般用事件驱动方式从串口接收数据,事件驱动法完成对数据的监视并在程序中捕捉并处理这些事件。
为串口事件添加OnComm()消息处理函数。
消息处理函数是对串口事件的处理,根据自身需要编写。
示例代码为:
voidCMySCommTestDlg:
:
OnComm()//使用MSComm控件的事件驱动方式接收申口数据
voidCMySCommTestDlg:
:
OnCommMscomm()
{
UpdateData(TURE);//取控件的数据
switch(m_COM.GetCommEvent())
{case1:
//comEvSend事件
{//如有数据要发送,可采用如下代码:
OnSend();
}
break;
case2:
//comEvReceiv事件,有数据到达
{VARIANTvariant_inp;
COleSafeArraysafearray_inp;
LONGlen,k;
BYTErxdata[2048];//设置BYTE数组An8-bitintegerthatisnotsigned.
CStringstrtemp;
variant_inp=m_COM.GetInput();//读缓冲区
safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();//得到有效数据长度
for(k=0;k {safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 } for(k=0;k {m_iRecvDataCount++;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串行 接口 通信 监测
![提示](https://static.bingdoc.com/images/bang_tan.gif)