基于MFC网络通信设计【实用文档】doc_第1页
基于MFC网络通信设计【实用文档】doc_第2页
基于MFC网络通信设计【实用文档】doc_第3页
基于MFC网络通信设计【实用文档】doc_第4页
基于MFC网络通信设计【实用文档】doc_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于MFC网络通信设计【实用文档】doc文档可直接使用可编辑,欢迎下载

基于MFC网络通信设计基于MFC网络通信设计【实用文档】doc文档可直接使用可编辑,欢迎下载王忠亮2017—1-5250593736@软件工具VisualStudio2013系统平台Windows764bit设计目标设计一个基于对话框的应用软件,使两台PC机之间实现网络通信,一台为客户机,另一台为服务器.设计原理在客户—服务器方式下,实现网络程序的socket通信。客户和服务器是指通信中所涉及的两个应用进程,客户-服务器方式所描述的是进程之间服务和被服务的关系。一台PC机运行客户程序,而另一台PC机运行服务器程序。该设计只实现一个最简单的socket通信:单方向通信。只有客户向服务器发送消息,并且也只由客户主动断开连接。客户socket和服务器socket之间的关系如图:服务器程序中包含两个socket:监听socket和服务socket。监听socket响应客户socket的连接请求,一旦收到连接请求,则创建服务socket。服务socket负责接收客户socket发送过来的消息,并随时响应客户socket的断开连接请求.进一步细化上面过程,可得到Socket间通信流程图:设计步骤创建客户端工程打开VisualStudio2013工具,建立一个基于对话框的MFC项目,项目名称NetcommClient。创建客户socket类选择PROJECT-〉AddClass..。,如图所示:选择MFC类:为新类命名,这里笔者命名为CClientSocket(即客户socket类):客户端界面设计一个IPAddresssControl,用于设置服务器IP地址.一个列表框,用于显示操作指令信息。两个编辑框,一个用于设置通信端口号,一个用于输入发送消息。五个按钮,其中OK、Cancel按钮为界面默认,可以保留。“连接服务器"按钮用于启动客户socket发出连接请求.“断开连接”按钮用于关闭客户socket与服务器的连接。“发送”按钮启动消息发送。客户端源代码编写声明类对象在对话框头文件里声明客户socket类对象:添加控件变量IP地址控件变量为IP地址控件添加变量:端口号变量为端口号添加无符号整型变量:列表框控件变量为列表框添加控件变量:发送消息变量事件函数连接服务器双击“连接服务器"按钮,编写此按钮单击事件函数:断开连接双击“断开连接”按钮,编写此按钮单击事件函数:消息发送双击“发送”按钮,编写此按钮单击事件函数:网络事件响应函数重载客户socket类的网络事件OnConnect函数:由于OnConnect函数需要调用主窗口资源,因此需要include主窗口的头文件:创建服务器工程打开VisualStudio2013工具,建立一个基于对话框的MFC项目,项目名称NetcommServer.创建服务器端的类服务器端需要两个socket类:监听socket类和服务socket类.选择PROJECT->AddClass.。.,如图所示:选择MFC类:为新类命名,监听socket类命名为:CListenSocket,服务socket类命名为:CServerSocket.服务器端界面设计一个IPAddresssControl,用于设置服务器IP地址.一个列表框,用于显示操作指令信息和接收消息.一个编辑框,用于设置通信端口号。四个按钮,其中OK、Cancel按钮为界面默认,可以保留。“开始监听”按钮启动监听网络连接请求。“停止监听”按钮用于关闭监听功能。服务器端源代码编写声明类对象在对话框头文件里声明监听socket类对象和服务socket类对象:添加控件变量IP地址控件变量为IP地址控件添加变量:端口号变量为端口号添加无符号整型变量:列表框控件变量为列表框添加控件变量:事件函数启动监听双击“开始监听”按钮,编写此按钮单击事件函数:停止监听双击“停止监听”按钮,编写此按钮单击事件函数:网络事件响应函数重载监听socket类的OnAccept函数:由于OnAccept函数需要调用主窗口资源,因此需要include主窗口的头文件:重载服务socket类的OnReceive函数:由于OnReceive函数需要调用主窗口资源,因此需要include主窗口的头文件:重载服务socket类的OnClose函数:运行效果客户端启动操作:设置服务器IP地址—〉设置端口号—>点击“连接服务器”->输入发送消息->点击“发送按钮”.停止工作:点击“断开连接”按钮—〉点击“OK”或“Cancel”按钮退出(或点击右上角关闭界面)。服务器端启动操作:设置服务器IP地址->设置端口号—〉点击“开始监听”.停止工作:点击“停止监听”按钮—〉点击“OK”或“Cancel”按钮退出(或点击右上角关闭界面).基于TCP协议下的简单网络通信与实现摘要本文设计并实现了在Windows下基于局域网内的TCP协议的简单即时通信系统,系统采用TCP/IP模式,底层通信通过SOCKET套接字接口对端口进行监听,当有消息发送来时,做出相应的处理,服务器负责客户端的登录验证。本文首先讨论了套接字创建、绑定、将套接字设置为监听模式、接受信息和关闭套接字从而实现简单的网络通信,然后阐述了如何使用C++来模拟基于TCP协议下的客户服务方式的网络通信过程。由于在此设计中主要是使用C程序的形式来模拟TCP协议的传输方式,从而实现面向对象的可靠传输,在这种情况下无需对IP协议进行讨论。关键字:套接字TCP协议目录1、引言…………………....1.1、课程背景...............................................................................................................1.2、相关技术介绍.......................................................................................................1.3、TCP协议…………1.4、TCP——传输控制协议………….1.5、套接字……………2、系统框架.........................................................................................................................3、系统设计流程图.............................................................................................................4、系统的实现.....................................................................................................................4.1、服务器端程序..............................................................................................................4.2、客户端程序..................................................................................................................结论……………………参考文献………………1、引言1.1、课题背景TCP/IP起源于美国国防部高级研究规划部署(DARPA)的一项研究计划——实现若干台主机的相互通信。现在,TCP/IP已成为Internet上通信的工业标准。因为OSI模型的七层参考模型比较复杂,并且在实际运用中难以实现,所以目前应用比较多的是TCP/IP模型,该模型包括4个层次:应用层运输层网络层网络接口层对于TCP/IP网络层次模式,核心协议是网络层的IP协议,和运输层的TCP协议,这也是为何成为TCP/IP协议的缘由。1.2、相关技术介绍NET开发平台及C#.NET开发语言NET框架是Microsoft公司推出的一种全新的开发平台,提供了统一的、面向对象并且可以扩展的编程类库和完善的集成开发环境,大大简化了应用程序的开发过程,并且具有良好的移植性和安全性。微软为了推行.NET战略,特别为.NET平台设计了一种语言——C#。C#是由C和C++派生而来的一种“简单、流行、面向对象、类型安全”的程序设计语言,其综合了Visualbasic的高效率和C++的强大功能,然而更多的人感觉C#更类似JAVA。事实上C#融合了大量的JAVA思想,C#是.NET的关键性语言,它是整个.NET平台的基础。与C#相比,.NET所支持的其它语言显然是配角,包括VC++.NET在内。但是微软并没有打算放弃VC++.NET,相反,微软对VC++.NET有着另一番独特的打算,VC++.NET的定位与C#不完全重合,VC++.NET应用范围仍强于C#,这一点无论对微软公司还是软件业应用现状都非常重要。可见VC++.NET在NET框架中已经退化成了底层的语言了,就像C++之前的标准C语言一样,以后将只有开发底层或桌面程序的程序员使用它。它虽然仍旧强大,但是已经不是主流,而主流就是C#语言。1.3、TCP协议TCP/IP网络协议协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此交流的一种“语言”。网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。相邻层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两种形式:面向连接的服务和无连接的服务。计算机网络中已经形成的网络体系结构主要有两个:OSI参考模型和TCP/IP参考模型。TCP/IP参考模型是因特网(Internet)的基础。和OSI的7层协议相比,TCP/IP协议只有4个层次。通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族,包括100多个相互关联的协议,其中IP(InternetProtocol,网际协议)是网络层最主要的协议;TCP(TransmissionControlProtocol,传输控制协议)和UDP(UserDatagramProtocol,用户数据报协议是传输层中最主要的协议),一般认为IP、TCP、UDP是最根本的三种协议,是其他协议的基础。1.4、TCP——传输控制协议面向连接的通信可以使用可靠通信,在这时候,第四层协议发送数据接收方的确认,如果未收到数据或者数据被损坏,则请求重新传输。TCP协议就使用这种可靠通信。使用TCP协议的应用层协议包括HTTP、FTP、SMTP和Telnet等。TCP要求在发送数据之前必须打开连接。服务器应用程序必须执行一个称作被动打开(passiveopen)的操作,以利用一个已知的端口号创建一个链接,这是,服务器并不是对网络进行呼叫,而是侦听并等待引入的请求。客户应用程序必须执行一个主动打开(activeopen),为此,它向服务器应用程序发送一个同步序列号(SYN)以标识连接。客户应用程序可以将动态端口号作为本地端口使用。服务器必须向客户发送一个确认(ACK)以及服务器的序列号(SYN)。随后,客户回复一个ACK,这样就建立了链接。现在可以发送和接收消息了。接收消息后,总是返回ACK消息。如果在收到ACK之前发送方已经超时,则消息将被放到重发队列中以再次发送。由于它的握制,所以TCP协议比较复杂并且费时,但此协议在处理数据时对数据包的传送有保障,从而使得在应用程序协议中不需要再包括该功能。1.5、套接字套接字这个术语并没有定义某个协议:它具有两层含义,但两者都与一个协议相关。第一个含义是套接字编程API,它最初由伯克利大学为BSDUNIX而创建。BSD套接字在经过修改后被用作Windows环境的编程接口(并且被命名为WinSock)。WinSockAPI被包装在System.Net.sockets命名空间的.NET类中。WindowsSockets是一个独立于协议的编程接口,用于编写网络应用程序。套接字的第二层含义表示一个用于在进程间进行通信的终端。在TCP/IP中,每个终端都与一个IP地址和一个端口号绑定。我们必须对流式套接字和数据报套接字这两种类型进行区分。流失套接字用TCP/IP协议来使用面向连接的通信;另一方面,数据报套接字用UDP/IP来使用无连接通信。2、系统框架3、系统设计4、系统的实现4.1、服务器端程序#include<Winsock2.h>#include<stdio.h>Voidmain(){//加载套接字库WORDwVersionRequested;WSADATAwsaDdata;Interror;wVersionRequested=MAKEWORD(1,1);err=WSAStarup(wVersionRequested,&wsaDATA);if(err!=0){return;}If(LOBYTE(wsadata.wVersion)!=1||HIBYTE(wsadata.wVersion)!=1){WSACleanup();Return;}//创建用于监听的套接字SOCKETsockSrv=socket(AF-INET,SOCK-STREAM,0);SOCKADDR-INaddrSrv;addrSrv.sin-addr.S-un.S-addr=hotonl(INADDR-ANY);addrSrv.sin-family=AF-INET;addrSrv.sin-port=htons(6000)//绑定套接字Bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将套接字设为监听模式,准备接收客户请求Listen(sockSrv,s);SOCKADDR-INaddrClient;Intlen=sizeof(SOCKADDR);While(1){//等待客户请求到来SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);CharsendBuf(100);Sprintf(sendBuf,)”Welcom%sto”,ine-ntoa(addrClient.sin-addr));//发送数据Send(sockConn,sendbuf,strlen(sendBuf)+1,0);CharrecvBuf(100);//接受数据Recv(sockConn,recvBuf,100,0);//打印接受的数据Printf(“%s\n”,recvBuf);//关闭套接字Closesocket(sockConn);}}4.2、客户端程序#include<Winsock2.h>#include<stdio.h>Voidmain(){//加载套接字库WORDwVersionRequested;WSADATAwsaDdata;Interror;wVersionRequested=MAKEWORD(1,1);err=WSAStarup(wVersionRequested,&wsaDATA);if(err!=0){return;}If(LOBYTE(wsadata.wVersion)!=1||HIBYTE(wsadata.wVersion)!=1){WSACleanup();Return;}//创建套接字SOCKETsockSrv=socket(AF-INET,SOCK-STREAM,0);SOCKADDR-INaddrSrv;addrSrv.sin-addr.S-un.S-addr=hotonl(INADDR-ANY);addrSrv.sin-family=AF-INET;addrSrv.sin-port=htons(6000)//向服务器发出连接请求Connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//接受数据CharrecvBuf[100];Recv(sockClient,recvBuf,100,0);Printf(“%s\n”,recvBuf);//发送数据Send(sockClient,”Thisislisi”,strlen(“Thisinlisi”)+1,0);//关闭套接字Closesocket(sockConn);WSACLeanup();}}结论在此设计中仅仅适合于数量少的计算机间的通信,其中一个缺陷是,当多台计算机同时进行通信时,会照成网络拥塞,可能导致消息传输中丢失,此设计没有做出解决的方案,但有这样的方案猜想,为了解决拥塞问题,可以使用慢开始、拥塞避免、快从传和快恢复算法,进而改进此设计,但是这会涉及大量的数学运算。此设计还存另一个缺陷,没有实现可靠传输,TCP协议的可靠传输机制是用字节的序号进行传输控制,而这里仅是监听端口是否有数据发送,如果有,就接收,没有就继续监听。参考文献[1]孙鑫,VC++深入详解[M]北京:电子工业出版社,2021.7:528-546[2]谢希仁,计算机网络[M]北京:电子工业出版社,2021.1:180-210安康学院学年论文﹙设计﹚题目基于MATLAB的数字通信系统仿真设计学生姓名学号专业班级指导教师2013年6月23日基于MATLAB的模拟通信系统仿真设计(作者:张小文)(安康学院电子与信息工程系电子信息工程专业10级,陕西安康725000)指导教师:朱燕【摘要】通信是通过某种媒体进行的信息传递,目的是传输信息,通信系统是用以完成信息传输过程的技术系统的总称,作用是将信息从信源发送到一个或多个目的地.调制与解调在信息的传输过程中占据着重要的地位,是不可或缺的,因此研究系统的调制和解调过程就极为重要.MATLAB是集数值计算、图形绘制、图像处理及系统仿真等强大功能于一体的科学计算语言,它强大的矩阵运算和图形可视化的功能以及丰富的工具箱,为通信系统的调制和解调过程的分析提供了极大的方便。本论文首先介绍了通信系统的概念,进而引出调制和解调,然后介绍了我们常用的几种调制和解调的方法。由于MATLAB具有的强大功能所以详细介绍了MATLAB通信系统工具箱,并给出了基于MATLAB的通信系统的调制与解调的实现,运用MATLAB仿真软件进行仿真。【关键词】通信系统;调制与解调;MATLAB;2FSK;2ASK;2PSK;2DPSKDigitalCommunicationSystemSimulationBasedOnMATLABAuthor:ZhangXiaowen(Grade10,Class2,ElectronicandInformationEngineering,DepartmentofelectronicsandInformationEngineering。,AnkangUniversity,Ankang725000,Shaanxi)Tutor:ZhuYanAbstract:Communicationisthroughamediafortransportation.Communicationsystemwhichisusedtocompletetheprocessofinformationtransmissionsystems,ingeneral,istosendtheinformationfromthesourcetooneormoredestinations.Modulationanddemodulationoccupiedanimportantpositioninthetransmissionofinformationwhichisessential,sotheresearchaboutthemodulationanddemodulationprocessinthecommunicationsystemisextremelyimportant.MATLABisanumericalcomputation,graphicsrendering,imageprocessingandsystemsimulationandotherpowerfulfeaturesinoneofthescientificcomputinglanguage,itisapowerfulmatrixcalculationandgraphicalvisualizationfeaturesandarichtoolboxprovidesagreatconvenienceforthecommunicationsystemofmodulationanddemodulationprocess.Thispaperintroducestheconceptofthecommunicationsystem,andthenleadstomodulationanddemodulation,andthenintroducedseveralofourcommonlyusedmethodofmodulationanddemodulation。AsthepowerofMATLABsowroducedthecommunicationsystemtoolboxintheMATLAB。WegivesseveralexamplesaboutthecommunicationsystembasedonMATLABmodulationanddemodulationandusethesoftwareofMATLABtosimulatethem.Keywords:CommunicationSystems;Modulationanddemodulation;MATLAB;2FSK;2ASK;2PSK;2DPSK0引言通信按照传统的理解就是信息的传输,在当今高度信息化得社会,信息和通信已经成为现代社会的“命脉”。信息作为一种资源,只有通过广泛的传播与交流,才能产生利用价值,促进社会成员之间的合作,推动社会生产力的发展,创造出巨大的经济效益.而通信作为传输信息的手段或方式,与传感技术、计算机技术相互融合,已经成为21世纪国际社会和世界经济发展的强大推动力,所以未来的通信对人们的生活方式和社会的发展将会产生更加重大和意义深远的影响。在信息传输过程中,要求天线的尺寸要和信号的波长相比拟,信号才能有效的被辐射。对于语音信号来说,相应的天线尺寸要在几十公里以上,实际上不可能实现,所以需要经过调制将信号频谱搬移到较高的频率范围,如果不进行调制就把信号直接辐射出去,那么各电台所发出信号的频率就会相同。调制作用的实质就是使相同频率范围的信号分别依托于不同频率的载波上,接收机就可以分离出所需的频率信号,不致互相干扰.有时信号过于复杂,人工计算其调制和解调过程较难实现,对其结果的分析又缺乏可视化的直观表现,影响了所得结果在实际生活中的应用,美国MathWorks公司开发的MATLAB解决了这一问题。它应用于自动控制、数学计算、信号分析、信号处理等诸多领域,也是国内高校和研究部门进行许多科学研究的重要工具.MATLAB的出现给通信系统的分析提供了极大的方便。1MATLAB简介美国Mathworks公司于1967年推出了矩阵实验室“MatrixLaboratory"(缩写为Matlab)这就是Matlab最早的雏形。开发的最早的目的是帮助学校的老师和学生更好的授课和学习。Matlab是一种解释性执行语言,具有强大的计算、仿真、绘图等功能。Simulink是MATLAB中的一种可视化仿真工具,也是目前在动态系统的建模和仿真等方面应用最广泛的工具之一。确切的说,Simulink是一个用来对动态系统进行建模、仿真和分析的软件包,它支持线性和非线性系统,连续、离散时间模型,或者是两者的混合。系统还可以使多种采样频率的系统,而且系统可以是多进程的。在Simulink环境中,它为用户提供了方框图进行建模的图形接口,采用这种结构画模型图就如同用手在纸上画模型一样自如、方便,故用户只需进行简单的点击和拖动就能完成建模,并可直接进行系统的仿真,快速的得到仿真结果。但是Simulink不能脱离MATLAB而独立工作。Matlab将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作,而且利用Matlab产品的开放式结构,可以非常容易地对Matlab的功能进行扩充,从而在不断深化对问题认识的同时,不断完善Matlab产品以提高产品自身的竞争能力。利用M语言还开发了相应的Matlab专业工具箱函数供用户直接使用。这些工具箱应用的算法是开放的可扩展的,用户不仅可以查看其中的算法,还可以针对一些算法进行修改,甚至允许开发自己的算法扩充工具箱的功能。目前Matlab产品的工具箱有四十多个,分别涵盖了数据获取、科学计算、控制系统设计与分析、数字信号处理、数字图像处理、金融财务分析以及生物遗传工程等专业领域。2二进制数字调制系统的原理及实现数字通信系统,按调制方式可以分为基带传输和带通传输。数字基带信号的功率一般处于从零开始到某一频率(如0~6M)低频段,因而在很多实际的通信(如无线信道)中就不能直接进行传输,需要借助载波调制进行频谱搬移,将数字基带信号变换成适合信道传输的数字频带信号进行传输,这种传输方式,称为数字信号的频带传输或调制传输、载波传输。所谓调制,是用基带信号对载波波形的某参量进行控制,使该参量随基带信号的规律变化从而携带消息。对数字信号进行调制可以便于信号的传输;实现信道复用;改变信号占据的带宽;改善系统的性能.数字基带通信系统中四种基本的调制方式分别称为振幅键控(ASK,Amplitude-Shiftkeying)、移频键控(FSK,Frequency-Shiftkeying)、移相键控(PSK,Phase-Shiftkeying)和差分移相键(DPSK,DifferentPhase-Shiftkeying)。本次课程设计对这四种调制方式进行了仿真。2。1二进制振幅键控采用的流程图如图2-1所示:图2—12ASK调制解调框图2.1。1ASK调制原理2ASK二进制振幅调制就是用二进制数字基带信号控制正弦载波的幅度,使载波振幅随着二进制数字基带信号而变化,而其频率和初始相位保持不变.信息比特是通过载波的幅度来传递的。其信号表达式为:,S(t)为单极性数字基带信号。由于调制信号只有0或1两个电平,相乘的结果相当于将载频或者关断,或者接通,它的实际意义是当调制的数字信号“1”时,传输载波;当调制的数字信号为“0"时,不传输载波。2ASK信号的时间波形e2ASK(t)随二进制基带信号S(t)通断变化。所以又被称为通断键控信号。典型波形如图2-2所示。图2—2典型2ASK波形e2ASK(t)为已调信号,它的幅度受s(t)控制,也就是说它的幅度上携带有s(t)的信息。2ASK信号的产生方法通常有两种:模拟调制法(相乘器法)和键控法。模拟调制法就是用基带信号与载波相乘,进而把基带信号调制到载波上进行传输。键控法由s(t)来控制电路的开关进而进行调制。两种方法的调制如图2-3和图2—4所示。图2-3模拟调制法(相乘器法)图2—4键控法2.1。2ASK解调原理2ASK有两种基本解调方法:相干解调法(同步检测法)和非相干解调法(包络检波法).相干解调需要将载频位置的已调信号频谱重新搬回原始基带位置,因此用相乘器与载波相乘来实现。相乘后的信号只要滤除高频部分就可以了。为确保无失真还原信号,必须在接收端提供一个与调制载波严格同步的本地载波,这是整个解调过程能否顺利完好进行的关键。本次设计采用相干解调法.两种解调原理图如图2—5和图2—6所示。图2-5相干解调法(同步检测法)图2—6非相干解调法(包络检波法)2。1.3仿真结果及分析通过编写M文件程序(见附录),产生随机信号,按图2—1顺序对每一模块编程后。程序中注有需注意语句及解释.运行程序,实现2ASK的调制与解调过程.本次设计采用模拟调制法(相乘器法)和相干解调法.仿真后调制过程及解调过程的图形分别如图2—7和图2-8所示。图2-72ASK调制过程仿真图图2—82ASK解调过程仿真图由图可以看出,产生的数字随机信号为“0100100001",经载波调制后信号为“1”的时间内有正弦波形,信号为“0”的时间内无波形。经过加随机噪声,相干解调后,恢复出原始信号,与基带信号一致,因此达到本次设计目的。2。2二进制移频键控所用流程图如图2-9所示:图2-92FSK调制解调框图2.2.1FSK调制原理一个FSK信号可以看成是两个不同载波的2ASK信号的叠加。其解调和解调方法和FSK差不多。2FSK信号的频谱可以看成是f1和f2的两个2ASK频谱的组合.频移键控是利用载波的频率来传递数字信号,在2FSK中,载波的频率随着二进制基带信号在f1和f2两个频率点间变化,频移键控是利用载波的频移变化来传递数字信息的.在2FSK中,载波的频率随基带信号在f1和f2两个频率点间变化。故其表达式为:典型波形如图2-10所示:图2—102FSK典型波形图2FSK的调制方式有两种,即模拟调频法和键控法.本次设计采用键控法.键控法中可以用二进制“1”来对应于载频f1,而“0”用来对应于另一频率f2,而这个可以用受矩形脉冲序列控制的开关电路对两个不同的独立的频率源f1、f2进行选择通。键控法原理图如图2-11示图2—112FSK键控法原理图2.2。2FSK解调原理2FSK的解调方式有两种:相干解调方式和非相干解调方式。非相干解调是经过调制后的2FSK数字信号通过两个频率不同的带通滤波器f1、f2滤出不需要的信号,然后再将这两种经过滤波的信号分别通过包络检波器检波,最后将两种信号同时输入到抽样判决器同时外加抽样脉冲,最后解调出来的信号就是调制前的输入信号.其原理图如图2-12所示。图2-122FSK非相干解调原理图相干解调是根据已调信号由两个载波f1、f2调制而成,则先用两个分别对f1、f2带通的滤波器对已调信号进行滤波,然后再分别将滤波后的信号与相应的载波f1、f2相乘进行相干解调,再分别低通滤波、用抽样信号进行抽样判决器即可.原理图如图3-14所示。图2-132FSK相干解调原理图2。2。3仿真结果及分析通过编写M文件程序(见附录),产生随机信号,按流程图2.2.1顺序对每一模块编程后。程序中注有需注意语句及解释。运行程序,实现2FSK的调制与解调过程。本次设计中采用键控法调制法和相干解调法。仿真后调制过程及解调过程的图形分别如图2-14、图2—15和图2—16所示.由图可以看出,产生的随机信号为“1011001001",经过反相产生反码,并分别与两个载波相乘,经过加入随机噪声后波形如图2—15所示。在解调时,分别与对应的载波相乘。解调出基带信号,可以看出实现了本次设计目的。图2—142FSK键控法调制过程仿真图图2-152FSK键控法调制过程仿真图图2—162FSK相干解调过程仿真图2.3二进制相移键控所用流程图如图2-17所示:图2-172PSK调制解调框图2。3.1PSK调制原理在二进制数字调制中,当正弦载波的相位随二进制数字基带信号离散变化时,则产生二进制移相键控(2PSK)信号.2PSK信号调制有两种方法,即模拟调制法和键控法。通常用已调信号载波的0°和180°分别表示二进制数字基带信号的1和0,模拟调制法用两个反相的载波信号进行调制。2PSK以载波的相位变化作为参考基准的,当基带信号为0时相位相对于初始相位为0°,当基带信号为1时相对于初始相位为180°。键控法,是用载波的相位来携带二进制信息的调制方式.通常用0°和180°来分别代表0和1.其时域表达式为:其中,2PSK的调制中an必须为双极性码。本次设计中采用模拟调制法。两种方法原理图分别如图2-18和图2-19所示。图2—18模拟调制法原理图图2-19键控法原理图2.3.2PSK解调原理由于2PSK的幅度是恒定的,必须进行相干解调.经过带通滤波的信号在相乘器中与本地载波相乘,然后用低通滤波器滤除高频分量,在进行抽样判决。判决器是按极性来判决的.即正抽样值判为1,负抽样值判为0.2PSK信号的相干解调原理图如图2—20所示,各点的波形如图2—21所示。由于2PSK信号的载波回复过程中存在着180°的相位模糊,即恢复的本地载波与所需相干载波可能相同,也可能相反,这种相位关系的不确定性将会造成解调出的数字基带信号与发送的基带信号正好相反,即“1”变成“0”吗“0"变成“1",判决器输出数字信号全部出错。这种现象称为2PSK方式的“倒π”现象或“反相工作”.但在本次仿真中是直接给其同频同相的载波信号,所以不存在此问题。图2-202PSK的相干解调原理图图2-21相干解调中各点波形图2.3.3仿真结果及分析通过编写M文件程序(见附录),产生随机信号,按流程图2-17所示顺序对每一模块编程后.程序中注有需注意语句及解释。运行程序,实现2PSK的调制与解调过程。本次设计采用模拟调制法和相干解调法。仿真后调制过程及解调过程的图形分别如图2—22和图2—23示.图2—222PSK模拟调制方法过程仿真图图2—232PSK相干解调过程仿真图由图可以看出,产生的随机信号为“0011001100”,经过反相产生反码,并将原码跟反码一起合成双极性码,与载波相乘后加入随机噪声。在解调时,与对应的载波相乘经过低通滤波、抽样判决后,解调出基带信号与原基带信号一致,可以看出实现了本次设计目的。2.4二进制差分相移键控所用流程图如图2—24所示:图2-242DPSK调制解调框图2。4.1DPSK调制原理二进制差分相移键控。2DPSK方式是用前后相邻码元的载波相对相位变化来表示数字信息。假设前后相邻码元的载波相位差为,可定义一种数字信息与之间的关系为:为前一码元的相位。实现二进制差分相移键控的最常用的方法是:先对二进制数字基带信号进行差分编码,然后对变换出的差分码进行绝对调相即可。2DPSK调制原理图如图2—25所示。图2—252DPSK调制原理框图2。4。2DPSK解调原理2DPSK信号解调有相干解调方式和差分相干解调。用差分相干解调这种方法解调时不需要恢复本地载波,只要将DPSK信号精确地延迟一个码元时间间隔,然后与DPSK信号相乘,相乘的结果就反映了前后码元的相对相位关系,经低通滤波后直接抽样判决即可恢复出原始的数字信息,而不需要在进行差分解码。相干解调码变换法及相干解调法的解调原理是,先对2DPSK信号进行相干解调,恢复出相对码,再通过码反变换器变换为绝对码,从而恢复出发送的二进制数字信息。在解调过程中,若相干载波产生相位模糊,解调出的相对码将产生倒置现象,但是经过码反变换器后,输出的绝对码不会发生任何倒置现象,从而解决了载波相位模糊的问题。本次设计采用相干解调。两种解调方式的原理图如图2—26和图2-27所示。图2—262DPSK差分相干解调原理图图2-272DPSK相干解调原理图2DPSK相干解调各点波形图如图2—28所示。图2—282DPSK相干解调各点波形图2。4。3仿真结果及分析通过编写M文件程序(见附录),产生随机信号,按流程图2-24所示顺序对每一模块编程后。程序中注有需注意语句及解释。本次设计采用相干解调法。运行程序,实现2DPSK的调制与解调过程。仿真后调制过程及解调过程的图形分别如图2—29、图2—30和图2-31所示。由图可以看出,产生的绝对随机码为“0100111010",经码差分变化产生相对码,经反相产生相对码反码,分别与两个载波相乘后加入随机噪声.在解调时,分别与对应的载波相乘经过低通滤波、抽样判决后,解调出基带信号与原基带信号一致,可以看出实现了本次设计目的。图2-292DPSK调制过程仿真图图2—302DPSK调制过程仿真图图2-312DPSK相干解调过程仿真图3总结与体会通过本次课程设计,我对课本上数字通信传输系统特别是二进制频移键控(2FSK)有了重新的认识。对2FSK调制数字基带信号加深了理解。对于使用键控法产生2FSK信号、添加高斯白噪声、使用相干解调、抽样判决等,我比较系统地认识了数字通信传输系统。本课程设计使用的MATLAB仿真软件和Simulink仿真环境,通过写其源程序代码,加深了我对每一步进行的理解,即要明白每一步都是怎么来的。通过使用Simulink仿真环境,我可以直观地放置相应的模块,搭建通信系统,并能够动态的显示仿真结果,使学习设计不再枯燥3.1程序设计与系统实施。MATLAB提供了程序设计仿真环境,可以通过编写代码完成某些模块的仿真。同时利用其提供的画图功能,可以使人直观地观察程序设计及调试的结果。每一步都得十分细心,需要具体到一个小小的标点符号,否则程序就会在调试中出错.本设计中,根据设计规划包括基带信号的产生和调制、加入高斯白噪声、带通滤波和低通滤波、相干解调、计算误码率等。本过程使我将学习过但并不熟练的MATLAB软件重新学习和使用了一下,并通过查阅和引用相关资料学习使用其相关的函数功能。MATLAB中的画图功能是本课程设计的亮点,将结果直观地表现出来。3。2理论模糊造成设计困难。通过进行设计我发现,没有熟悉的理论知识搞设计是困难的。在设计每一步时,必须搞清楚每一步是干什么的,怎么进行,这些都需要理论进行指导。当哪一步不会弄时,我就去查书,将书中的理论细细研读,这样通过本课程设计我又把书中相关的部分细细看了几遍,对书中的理论有了更深的认识。因为多次调试,结果越来越接近理论情况下的结果,可见实验其实就是对理论的验证.所以,清楚地掌握理论是进行设计的关键步骤。参考文献[1]樊昌信,詹道庸,徐炳祥,吴成柯.通信原理[M].北京:国防工业出版社,1980:171~260。[2]薛鹏骞.电子与通信电路计算机仿真[M]。北京:煤炭工业出版社,2003:113~144。[3]邓华.MATLAB通信仿真及应用实例详解[M]。北京:人民邮电出版社,2003:99~115.[4]陈怀琛.MATLAB及其在理工课程中的应用指南[M].西安:西安电子科技大学出版社,2002:146~180。[5]张谦.通信系统中MATLAB基础与仿真应用[M].西安:西安电子科技大学出版社,2010:85~109.[6]孙屹.MATLAB通信仿真开发手册[M].北京:国防工业出版社,2005:138~168.[7]王立宁,乐光新,詹菲.MATLAB与通信仿真[M].北京:人民邮电出版社,2000:74~86.[8]约翰·G·普罗克斯。现代通信系统的使用MATLAB[M].西安:西安交通学出版社,2001:95~121.[9]陈萍.现代通信实验系统的计算机仿真[M]。北京:国防工业出版社,2003:171~260。[10]孙亮.MATLAB语言与控制系统仿真[M].北京:北京工业大学出版社,2001:64~83。[11]WilliamAShay.UnderstandingDataCommunicationsandNetworks[M]:WadsworthPublishingCompany,1998:162~164.[12]WilliamStallings。DataandComputerCommunications,SeventhEdition[M]:PrenticeHall,2003:201~207。基于CAN总线的modbus通信设计摘要:CAN总线是由德国BOSCH公司开发了的,其主要用于汽车计算机控制系统,而在工业控制领域较少适用,在工业领域用的最多的是RS485总线。CAN总线较RS485总线具有网络各节点之间的数据通信实时性强,开发周期短,已形成国际标准的现场总线等优点.因此CAN总线是比较有前途的现场总线之一,在工业控制领域代替RS485是有可能的。 为了能简单地应用CAN总线代替RS485总线,如果采用比如CANopen等协议使得设备变得复杂化,那么有没有简单点的协议?很多做过工业设备的工程师都熟悉MODBUS协议,在RS485总线上跑的最多的协议就是MODBUS,如果我们在CAN总线上运行MODBUS协议,那么做过RS485的工程师就能很快地转移过来,减少了开发难度.所以本文就以CAN总线上跑MODBUS协议为目的对数据网络层协议进行设计。概念:MODBUS有主从概念,CAN总线支持多主,在这里我们把主机叫做客户端,从机叫做服务器.在CAN总线上采用客户端服务器的概念。在进行协议介绍前先对CANMODBUS进行简单的介绍。MODBUS:阅读过MODBUS协议的人都知道modbus有ASCII和RTU模式,其中RTU模式用的较多,一个数据包在网络上传输我们必须知道包的开始和结束,在RTU模式中数据包是以至少3.5个字符的静默时间开始和结束的,如果信息结束前存在超过1。5个字符以上的间隔时间则出错.为了检测这些时间间隔,在程序上将变得很被动。ASCII虽然有专用的开始结束标志符,但是ASCII需要把一个字节数据传换为两个字符发送所以其效率低。所以还是得采用RTU模式,但得根据CAN总线的特点解决数据包开始结束标志的定义.CAN总线:CAN总线的数据传输是以帧为单位的,一个帧包含标识符、数据段CRC等,标识符表示该帧的发送优先级,数据段包含实际的数据,数据长度从1到8字节,CRC对该帧进行校验,因为帧中包含了数据校验功能,所以在CAN上跑modbus就不需要再对数据进行CRC校验。在这里我们看到CAN总线是有优先级这个概念,但是没有出现像modbus这样有地址的概念,CAN总线上标识符段表示的是该帧的优先级,它面向的是数据,而modbus面向的是设备,每个数据包中都有地址,如果我们把地址放在CAN帧的数据段中那么所有设备都必须接收每一帧,然后对数据进行解析,如果网络负载比较大的是时候,这对设备不利。CAN控制器一般都能对特定的标识符段进行过滤,那么我们为什么不能把标识符段作为设备的地址,然后设备对特定的标识符进行过滤,这样就减少了设备的负担.但是如果标识符段作为目的地址,那么CAN总线上就不能有两个主机,应为CAN总线规定不能有两个相同标识符的帧同时发送。既然标识符符不能作为目的地址,那么就实现不了设备对数据的过滤。我的解决办法是把帧的标识符段分为两部分,一部分为发送方地址,另一部分为接收方地址,其中接收方地址在标识符的高端。这样我们就能通过表标识符段知道这帧数据是谁发给谁的,对于接收方它通过设置过滤器只接收表识符高端数据为自己地址的帧,这样就解决了CAN总线中地址的概念。这个地址还表示的设备的优先级,地址越小优先级就越高,接收方地址和发送方地址就决定这帧的发送优先级。标识符段分为标准帧和扩展帧,标准帧的标识符为11bit,扩展帧的标识符为29bit,按照接收方地址加发送方地址的分配方法标准帧的地址范围为0~31,共计32个地址,如果用扩展帧的来分配地址范围为0~16383,共计16384个地址。标识符接收方地址发送方地址因为一帧最多能发送8字节数据,因此要发送超过8字节的数据就必须使用多帧,为了能适应多任务环境,我们在把帧的数据段的前两自己数据用作特殊用途:第一字节表示帧数据的ID,其bit7为1:表示服务器返回的数据帧,为0:表示客户端请求的数据帧;第二字节表示着一帧在这个数据包中的相对为位置,其bit7为1:表示这是最后一帧,因此我们可以根据这一帧就能计算出此次要传输的数据字节数,有这两字节的数据我们就能把一个数据包分成多个帧发送出去,然后在接收方根据这两字节的信息把数据包从新组装。由第二字节信息我们可以计算出一次能传输的数据包的大小为128*6=768字节。你也许会问,那个ID数据有什么用,为了支持多任务处理,一个客服端可能有多个任务同时把数据发送到同一个服务器,这个ID就是区分不同任务的,客户端发送到的时候分配一个空闲的ID然后以此ID把数据发送出去。服务器接受到同一个客服端发来的不同ID的数据包,那么服务器就根据ID的不同分别处理;回复客户端时把ID的最高位置1,然后发送回去,客服端收到发回复后根据ID把数据分发给对应的任务。一个设备可以是客户端也可以是服务器,还可以包含两者,那么CAN接收服务程序就必须明确接收到的数据是自己收到的回复还是别人的请求,因此ID的最高位

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论