基于spcp技术串口实现双机通信_第1页
基于spcp技术串口实现双机通信_第2页
基于spcp技术串口实现双机通信_第3页
基于spcp技术串口实现双机通信_第4页
基于spcp技术串口实现双机通信_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、.:.;目 录 TOC o - h z u HYPERLINK l _Toc 摘要 PAGEREF _Toc h III HYPERLINK l _Toc Abstract PAGEREF _Toc h V HYPERLINK l _Toc 第一章 串行通讯的引见 HYPERLINK l _Toc . 串行通讯方式 HYPERLINK l _Toc . 串行通讯的传送方向 HYPERLINK l _Toc . 串行输入/输出 HYPERLINK l _Toc . 串行接口规范 HYPERLINK l _Toc 第章 串口编程技术 HYPERLINK l _Toc . 串口实现双机互联络统功能概

2、述 HYPERLINK l _Toc . VB串口查询法的实现方法 HYPERLINK l _Toc 第章 SPCP通讯协议设计 HYPERLINK l _Toc . 串行通讯协议 HYPERLINK l _Toc . SPCP协议的发送格式 HYPERLINK l _Toc 第章 双机互联程序的实现 HYPERLINK l _Toc . 创建规范的工程文件 HYPERLINK l _Toc . 参与串口通讯控件 HYPERLINK l _Toc . 设计程序主窗体 HYPERLINK l _Toc 第章 程序的测试与运转 HYPERLINK l _Toc . 软件及硬件测试 HYPERLIN

3、K l _Toc . 总结 HYPERLINK l _Toc 附录PAGE 39PAGE V串口实现双机通讯摘要计算机串口编程在通讯软件中有着非常广泛的运用,如、视频和控制等。很多行业会涉及到串口通讯技术。串行通讯中分为异步通讯和同步通讯两种根本串行通讯方式,串行通讯在两个设备之间传输,有单工、半双功、全双工三种方式。在本论文中,串口实现双机互联是经过串口线直接衔接两台计算机,按照自定义的串口通讯协议简称为SPCP进展信息交换。经过VB中MSComm控件处置底层串口通讯细节,根据自定义串口通讯协议建立衔接,实现聊天和文件传输功能。关键字:VB,串口通讯,SPCP,数据交换。serial com

4、municationAbstractSerial computer programming in the communications software has a very wide range of applications, such as telephone, fax, video and control. Many industries would involve serial communication technologies. Serial communication is divided into asynchronous communications and synchro

5、nous communication are two basic serial communication, serial communication between the two transmission equipment, a single-workers, half-duplex, full-duplex three forms.In that paper, to achieve double-serial-line Internet directly through the serial port to connect two computers, in accordance wi

6、th the custom of serial communication protocol (referred to as SPCP) for information exchange. VB MSComm control through treatment in the bottom of serial communication details, according to custom serial communication protocol to connect, and chat and file transfer feature.Keyword: VB, serial commu

7、nication, SPCP, data exchange.PAGE 40第一章 串行通讯的引见 串行通讯方式 在计算机与外设之间的信息传送中,按照一次传送数据的位数分类,可分为:并行传送方式和串行传送方式。并行传送方式为数据的各位同时传送;串行传送方式为数据的各位按一定的顺序逐位分时传送。串行传送适用于长间隔 通讯系统及各类计算机网络。由于信息在一个方向上传输只占用一根传输线,而这根线上既传送数据,又传送联络信号,为此为区分这根线传送的信息流中,哪一部分是联络信号,哪一部分是数据,就必需引出串行通讯的一系列商定。于是,在串行通讯中就有异步通讯和同步通讯两种根本串行通讯方式。 异步通讯 异步通

8、讯有字符格式和波特率两项商定。字符格式:传送一个字符总是从传送一位起始位开场,接着传输字符本身位,传送字符从最低位开场,逐位传送,直至到传送最高位,接着传送奇/偶校验位,最后传送位或个半位或位停顿位。从起始位开场到停顿位终了,构成一帧信息。一帧信息传送终了后,可传送不定长度的空闲位,作为帧与相邻帧之间的间隔,也可以没有空闲位间隔。 波特率:是单位时间内传送二进制数据的位数,以位/秒为单位,即波特。异步通讯传送速度普通在波特范围内,用于传送信息量不大,传送速度要求较低场所。 同步通讯 同步通讯中运用的数据格式根据所采用的控制规程通讯双方就如何交换信息所建立的一些规定和过程称为通讯控制规程又可分为

9、面向字符型和面向位比特型两种。面向字符型的数据格式又有单同步、双同步、外同步之分。单同步:发送方先传送个同步字符,再传送数据块,接纳方检测到同步字符后接纳数据;双同步:发送方先传送个同步字符,再传送数据块,接纳方检测到同步字符后接纳数据;外同步:用一条公用线来传送同步字符,以实现收发双方同步操作。三种同步方式,均以个字节的冗余检验码CRC作为一帧信息的终了。面向位型:根据IBM的同步数据链路控制规程SDLC,SDLC数据格式,同步传送,接纳和发送时钟对于收/发双方之间的数据传送到达同步是至关重要的。在发送方,普通都是在发送时钟的下降沿将数据串行移位输出;在接纳方,普通都是在接纳时钟的上升沿将数

10、据串行移位输入。 串行通讯的传送方向 串行通讯在两个站或设备A和B之间传送,有单工、半双工、全双工三种方式。 单工:仅能进展一个方向的传送,即A只能作为发送器,B只能作为接纳器; 半双工: 能交替地进展双向数据传送,但两设备之间只需一根传输线,因此两个方向的数据传送不能同时进展; 全双工: A、B之间有两条传输线,能在两个方向上同时进展数据传送。 串行输入/输出 串行输入的特点:串行数据传输中,每次只传送一位数据,速度比并行传输慢。但是,实现串行传输的硬件具有经济性和适用性的特点。 串行接口规范RS-、RS-与RS-都是串行数据接口规范,最初都是由电子工业协会EIA制定并发布的.RS-、RS-

11、与RS-规范只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此根底上用户可以建立本人的高层通讯协议。 RS-串行接口规范目前RS-是PC机与通讯工业中运用最广泛的一种串行接口。RS-被定义为一种在低速率串行通讯中添加通讯间隔 的单端规范。RS-采取不平衡传输方式,即所谓单端通讯。收、发端的数据信号是相对于信号地.典型的RS-信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+V,负电平在-V电平。当无数据传输时,线上为TTL,从开场传送数据到终了,线上电平从TTL电平到RS-电平再前往TTL电平。接纳器典型的任务电平在+V与-V。由于发送电平与接纳电平的差仅为V至V左右,

12、所以其共模抑制才干差,再加上双绞线上的分布电容,其传送间隔 最大为约米,最高速率为kb/s。RS-是为点对点即只用一对收、发设备通讯而设计的,其驱动器负载为k。所以RS-适宜本地设备之间的通讯。 串口编程技术在Microsoft Windows 下开发串行通讯目前通常有如下几种方法:一是利用Windows API通讯函数;二是利用 windows 的读写端口函数_inp、_inpw、_inpd、_outp、_outpw、_outpd、Windows系列下或开发驱动程序WindowsNT系列操作系统下直接对串口进展操作;三是利用第三方提供或本人编写的通讯;四是运用串口通讯组件,如ActiveX控

13、件MSComm 。MSComm控件:Microsoft Communication Control是微软公司提供的简化windows下串口通讯编程的ActiveX控件,它为运用程序提供了经过串行接口收发数据的简便方法,在VisualBasic、VC、Delphi等言语均可运用。以上几种方法中第一种运用面较广,但由于比较复杂,运用较困难;第二种需求了解硬件电路构造原理,深化驱动层次,专业化程度较高;第三种方法运用面向对象技术封装WinAPI函数,提供一个用于串行通讯的类,只需了解这种类的几个成员函数,就能方便的运用,但能普遍运用的这种类相当困难;第四种方法较简单,对于 Visual Basic,

14、常用的方法就是运用第四种方法。本文将用第四种方法实现双机通讯。 串口实现双机互联络统功能概述双机互联程序经过串口将两台计算机衔接起来,按照自定义的串口通讯协议简称为SPCP进展信息交换,实现经过串口进展聊天、文件和收发的功能。SPCP协议设计思想基于帧传输方式,即在向串口发送数据时是一帧一帧地发送。对于上层运用如文件传输来说,运用程序所发送的和所接纳的都是流式数据,即假设运用程序需求进展上层的协议解释的话,它将面对的这些流数据重新拼装。为保证可靠的传输,在传输开场前,经过协议建立衔接。来确定能否要接纳数据,能否保管等。 VB串口查询法的实现方法 串口查询法的机理 VB的串口查询法是一种主要任务

15、在查询方式下的实现方法。当通讯程序任务在“查询方式时,可以不思索Win的进程和线程的问题。仅在串口有数据时,去读串口缓冲区就可以了。这种方法下确定串口读取的时机、握手协议及软件纠错的实现是程序员应思索的主要问题。以下是读取接纳缓冲区数据时的流程图:获取当前通讯设备的数据缓冲区中有无数据读数据终了无有 由于这种方法主要任务在查询方式。程序员必需完成相当一部分通讯形状的检测任务,许多细节甚至包括通讯过程中的字符属性的转换也必需经过程序代码完成。因此相比较通讯控件方法而言,这种查询方法对通讯双方协议的依赖性尤其大。双方通讯协议的商定对程序实现的难易程度影响很大。串口查询法中,普通串口初始化的流程如下

16、:设置设备控制块翻开串口设置通讯参数设置缓冲区大小值得留意的一点是,此方法下协议的商定必需满足以下条件:即甲方发送时,乙方必需在甲方发送动作之前进入循环接纳形状,直到接纳到字符后经过对串口读取函数ReadFile前往值的判别跳出循环形状。 同时,普通为了不使系统因循环等待接纳而进入“死循环形状,可以人为设置读取串口的循环次数,普通次即可。VB是一种极为灵敏的高级言语,因此在这种方法下可以方便地引入汇编言语的思想,利用其GoTo转向语句方便地控制程序的流程。非常灵敏方便。 与通讯线程法的比较 通讯线程法经过在运用程序的主线程外再创建一个通讯线程来监视通讯设备,其最大优点是程序对接纳数据具有自主觉

17、察才干。一旦通讯线程查询到数据已发送到串口上,线程自动向运用程序发送一个数据接纳到的音讯,运用程序可用该音讯来读取通讯设备传来的数据。并且运用通讯线程还不占用CPU时间。这样系统实践上具有了同时控制多个通讯设备如MODEM的才干。通讯线程法在C+的开发系统中用得较多,这与C+的特点和优势亲密相关。由于VB本身的特点,创建通讯线程的方法对VB而言,实现上有相当的难度。而且这样做,也无异于牺牲VB的简一方便性而去迁就程序的复杂性,很不经济。串口查询法容易地引入了汇编言语的一些思想,实现了最精简的程序代码。它不一定是最完善,但对普通VB程序员来说,这种方法确实到达了简化思绪和降低难度的目的,因此实现

18、简单。 SPCP通讯协议设计以下设计的串口通讯协议用于完本钱文双机互联程序的文件传输功能,简称为SPCPSerial Port Communication Protocol。SPCP设计思想基于帧传输方式,即在向串口发送数据时是一帧一帧地发送。对于上层运用如文件传输来说,运用程序所发送的和所接纳的都是流式数据,即假设运用程序需求进展上层的协议解释的话,它将面对这些流数据的重新拼装。为保证可靠的传输,在传输开场前,经过握手建立衔接与TCP/IP协议类似。 串行通讯协议 异步通讯协议的实例起止式异步协议图. 起止式异步协议特点与格式:起止式异步协议的特点是一个字符一个字符传输,并且传送一个字符总是

19、以起始位开场,以停顿位终了,字符之间没有固定的时间间隔要求。其格式如图.所示。每一个字符的前面都有一位起始位低电平,逻辑值,字符本身有位数据位组成,接着字符后面是一位校验位也可以没有校验位,最后是一位,或者一位半,或二位停顿位,停顿位后面是不定长度的空闲位。停顿位和空闲位都规定为高电平逻辑值,这样就保证起始位开场处一定有一个下跳沿。从图中可以看出,这种格式是靠起始位和停顿位来实现字符的界定或同步的,故称为起始式协议。传送时,数据的低位在前,高位在后,图.表示了传送一个字符E的ASCAII码的波形。当把它的最低有效位写到右边时,就是E的ASCII码=H。图. ASCAII码的波形起止位的作用:起

20、始位实践上是作为联络信号附加进来的,当它变为低电平常,通知收方传送开场。它的到来,表示下面接着是数据位来了,要预备接纳。而停顿位标志一个字符的终了,它的出现,表示一个字符传送终了。这样就为通讯双方提供了何时开场收发,何时终了的标志。传送开场前,发收双方把所采用的起止式格式包括字符的数据位长度,停顿位位数,有无校验位以及是奇校验还是偶校验等和数据传输速率作一致规定。传送开场后,接纳设备不断地检测传输线,看能否有起始位到来。当收到一系列的“停顿位或空闲位之后,检测到一个下跳沿,阐明起始位出现,起始位经确认后,就开场接纳所规定的数据位和奇偶校验位以及停顿位。经过处置将停顿位去掉,把数据位拼装成一个并

21、行字节,并且经校验后,无奇偶错才算正确的接纳一个字符。一个字符接纳终了,接纳设备有继续测试传输线,监视“电平的到来和下一个字符的开场,直到全部数据传送终了。由上述任务过程可看到,异步通讯是按字符传输的,每传输一个字符,就用起始位来通知收方,以此来重新核对收发双方同步。假设接纳设备和发送设备两者的时钟频率略有偏向,这也不会因偏向的累积而导致错位,加之字符之间的空闲位也为这种偏向提供一种缓冲,所以异步串行通讯的可靠性高。但由于要在每个字符的前后加上起始位和停顿位这样一些附加位,使得传输效率变低了,只需约%。因此,起止协议普通用在数据速率较慢的场所小于.kbit/s。在高速传送时,普通要采用同步协议

22、。 面向字符的同步协议特点与格式:这种协议的典型代表是IBM公司的二进制同步通讯协议(BSC。它的特点是一次传送由假设干个字符组成的数据块,而不是只传送一个字符,并规定了个字符作为这个数据块的开头与终了标志以及整个传输过程的控制信息,它们也叫做通讯控制字。由于被传送的数据块是由字符组成,故被称作面向字符的协议。 特定字符控制字符的定义:由上面的格式可以看出,数据块的前后都加了几个特定字符。SYN是同步字符(synchronous Character,每一帧开场处都有SYN,加一个SYN的称单同步,加两个SYN的称双同步设置同步字符是起联络作用,传送数据时,接纳端不断检测,一旦出现同步字符,就知

23、道是一帧开场了。接着的SOH是序始字符Start Of Header,它表示标题的开场。标题中包括源地址、目的地址和路由指示等信息。STX是文始字符(Start Of Text,它标志着传送的正文数据块开场。数据块就是被传送的正文内容,由多个字符组成。数据块后面是组终字符ETBEnd Of Transmission Block或文终字符ETX(End Of Text),其中ETB用在正文很长、需求分成假设干个分数据块,分别在不同帧中发送的场所,这时在每个分数据块后面用文终字符ETX。一帧的最后是校验码,它对从SOH开场到ETX或ETB字段进展校验,校验方式可以是纵横奇偶校验或CRC。另外,在面

24、向字符协议中还采用了一些其他通讯控制字,它们的称号如下表所示:表. 通讯控制字称号ASCIIEBCDIC序始SOH文始STX组终ETB文终ETX同步SYN送毕EOT讯问ENQ确认ACK否认NAK本义DLE数据透明的实现:面向字符的同步协议,不象异步起止协议那样,需求在每个字符前后附加起始和停顿位,因此,传输效率提高了。同时,由于采用了一些传输控制字,故加强了通讯控制才干和校验功能。但也存在一些问题,例如,如何区别数据字符代码和特定字符代码的问题,由于在数据块中完全有能够出现与特定字符代码一样的数据字符,这就会发生误解。比如正文有个与文终字符ETX的代码一样的数据字符,接纳端就不会把它当作为普通

25、数据处置,而误以为是正文终了,因此产生过失。因此,协议应具有将特定字符作为普通数据处置的才干,这种才干叫做“数据透明。为此,协议中设置了转移字符DLE(Data Link Escape)。当把一个特定字符看成数据时,在它前面要加一个DLE,这样接纳器收到一个DLE就可预知下一个字符是数据字符,而不会把它当作控制字符来处置了。DLE本身也是特定字符,当它出如今数据块中时,也要在它前面加上另一个DLE。这种方法叫字符填充。字符填充实现起来相当费事,且依赖于字符的编码。正是由于以上的缺陷,故又产生了新的面向比特的同步协议。 面向比特的同步协议特点与格式:面向比特的协议中最具有代表性的是IBM的同步数

26、据链路控制规程SDLCSynchronous Data Link Control),国际规范化组织ISO(International Standard Organization的高级数据链路控制规程HDLCHigh Level Data link Control),美国国家规范协会(Americal National Standard Institute)的先进数据通讯规程ADCCP(Advanced Data Communication Control Procedure)。这些协议的特点是所传输的一帧数据可以是恣意位,而且它是靠商定的位组合方式,而不是靠特定字符来标志帧的开场和终了,故称“

27、面向比特的协议。这中协议的普通帧格式如下图:-图. 帧格式帧信息的分段:由图.可见,SDLC/HDLC的一帧信息包括以下几个场(Filed,一切场都是从有效位开场传送。SDLC/HDLC标志字符:SDLC/HDLC协议规定,一切信息传输必需以一个标志字符开场,且以同一个字符终了。这个标志字符是,称标志场(F)。从开场标志到终了标志之间构成一个完好的信息单位,称为一帧(Frame)。一切的信息是以帧的形传输的,而标志字符提供了每一帧的边境。接纳端可以经过搜索“来探知帧的开头和终了,以此建立帧同步。地址场和控制场:在标志场之后,可以有一个地址场A(Address和一个控制场C(Control)。地

28、址场用来规定与之通讯的次站的地址。控制场可规定假设干个命令。SDLC规定A场和C场的宽度为位或位。接纳方必需检查每个地址字节的第一位,假设为“,那么后面跟着另一个地址字节;假设为“,那么该字节就是最后一个地址字节。同理,假设控制场第一个字节的第一位为“,那么还有第二个控制场字节,否那么就只需一个字节。信息场:跟在控制场之后的是信息场I(Information)。I场包含有要传送的数据,并不是每一帧都必需有信息场。即信息场可以为,当它为时,那么这一帧主要是控制命令。帧校验信息:紧跟在信息场之后的是两字节的帧校验,帧校验场称为FC(Frame Check)场或称为帧校验序列FCS(Frame ch

29、eck Squence)。SDLC/HDLC均采用位循环冗余校验码CRCCyclic Redundancy Code)。除了标志场和自动插入的“以外,一切的信息都参与CRC计算。实践运用时的两个技术问题:“位插入/删除:如上所述,SDLC/HDLC协议规定以为标志字节,但在信息场中也完全有能够有同一种方式的字符,为了把它与标志区分开来,所以采取了“位插入和删除技术。详细作法是发送端在发送一切信息除标志字节外时,只需遇到延续个“,就自动插入一个“,当接纳端在接纳数据时除标志字节假设延续收到个“,就自动将其后的一个“删除是,以恢复信息的原有方式。这种“位的插入和删除过程是由硬件自动完成的。SDLC

30、/HDLC异常终了:假设在发送过程中出现错误,那么SDLC/HDLC协议常用异常终了(Abort)字符,或称为失效序列使本帧作废。在HDLC规程中,个延续的“被作为失效字符,而在SDLC中失效字符是个延续的“。当然在试销序列中不运用“位插入/删除技术。SDLC/HDLC协议规定,在一帧之内不允许出现数据间隔。在两帧之间,发送器可以延续输出标志字符序列,也可以输出延续的高电平,它被称为空闲Idle)信号。 SPCP协议的发送格式 /DDDDDDDD数据尾头标志数据类发送过程中的商定:当收信方收到时为开场发送的开场标志,在此之后又收到那么表示是文本文件,假设收了那么表示是文件类型,当收到时那么表示

31、发送终了。串口发送过来的数据作为一个数据流按SPCP协议进展处置,并加上控制字符进展发送;在接纳端,根据接纳到的数据进展处置,接纳完成后在发送到显示窗口。 双机互联程序的实现 创建规范的工程文件创建一个基于规范.EXE的工程,翻开 Visual Basic,从“ 文件菜单中选择“新建工程,然后选择建立规范.EXE工程即可。图.新建工程对话框 参与串口通讯控件默许的控件工具栏中没有MSComm控件,因此首先要把它参与到控件工具栏中。为了在实现文件传送功能时可以方便地选择文件途径,还应添加一个规范对话框,这在默许的控件工具栏中也是没有的。选择“Project菜单下的“ Components 选项,

32、在弹出的对话框中选取“controls选项卡,选中“ Microsoft Comm Control .和“ Microsoft Common Dialog Control . ,单击“确定按钮将它们参与到控件工具栏中来,这时就可以看到控件工具栏出现 MSComm控件图标外形与类似和规范对话框控件图标。图. 外接程序管理器 设计程序主窗体主窗体的功能分析本文的程序仅包含两个窗体,即主窗体和参数设置窗体。参数设置仅完成对MSComm进展参数设置,其他功能几乎均从主窗体中进展呼应。本文将完成以下功能:整个程序的初始化。对各标志变量的设置与呼应。对各个按钮的呼应。短语的输入功能。程序的主界面该当可以呼

33、应各种操作,并调用程序的各个模块和功能,因此,主界面主要实现的功能就是调用本系统的一切其他功能,包括翻开串行口、封锁串行口、启动参数设置、发送音讯、或显示文件传送界面等功能。本程序的根本功能是依托MSComm控件实现的,首先要将其添加到窗体中,由于该控件在程序运转时是不可见的,我把它们放在窗体的底部即可。同样,规范对话框控件也只需放在窗体底部即可。为了实现对串行口的操作,我利用组合框定制了一个简单的选择框,和两个按钮来实现对串口设置能改动到程序中和能将收到的信息清空以保证能把接下来收到的信息显示在窗口上,当在发送文件时会显示发送信息内容及文件途径。主窗体的界面设计窗体及其控件的主要属性和作用如

34、表所示:表.frmMain 窗体及其控件的主要属性和作用称号控件类型主要属性主要属性frmMainFormCaption=双机互联标题栏显示程序CtrMSCommMSCommSettings和CommPort两属性运转时设置用于操作串行口的控序控制启用和封锁SendDataCommandButtonCaption=发送控制发送一条音讯rtfReceiveRichTextBox显示信息记录CmdSendTextCommandButtonCaption=发送文件选择发送文件SendFileDialOle调用发送对话框cboBaudComboBoxList=,设置波特率cboDataComboBox

35、List=、设置数据位cboStopComboBoxList=设置停顿位cboOutBufferSizeComboBoxList=、设置缓冲区cboComPortComboBoxList=,设置串口号SettingOkCommandButtonCaption=翻开串口设置翻开串口CommPortCloseCommandButtonCaption=封锁串口设置封锁串口SaveFileDialOle调用保管对话框frmMain 窗体的设计界面如下图:图. 整体控件图图. 主窗体左上部分担任聊天功能收短信息,右下部分担任信息的发送,“发送“按钮实现文本的发送,“发送文件“按钮,实现文件传输功能。右上

36、方的几个选择框可以实现配置串口参数功能,按钮分别完成翻开串口、封锁串口。假设需求发送文件,点击“发送文件按钮,将自动弹出文件对话框,从中选择待发送文件,那么程序在互联的另一方发送文件恳求接纳时自动翻开文件对话框,要求用户选择文件保管途径和称号,然后将文件保管。系统的加构方式所示。程序间交换数据发送端运用程接纳端运用 文件传输短信息其它其它短信息文件传输缓冲区spcp串口通讯协议SPCP串行通讯协议缓冲区spcp串口通讯协议SPCP串行通讯协议omm控件Windows APIindows APIomm控件Windows APIindows API串行口串行口串口线本系统中关注的重点是SPCP协议

37、的设计和实现,而建立在SPCP协议上的两种上层运用,文件传输和短信息传输那么是程序的主要目的。 程序的测试与运转 软件及硬件测试本程序的测试运转需求把两台计算机用串口线衔接起来进展,或者在把一台机器上的两个串行口衔接起来,本论文采用的是前一种方式。 发送音讯时发送方和收信方见以下图。图. 发送方窗口输入中文“级通讯工程毕业设计点“发送收信方窗口如图.:图. 收信方窗口同时发送方也可以作为接受方,例如输入中文“于向阳点“发送如图.。 发送文件时当发送方选定文件途径即文件名后,接纳端将弹出一个规范的“另存为对话框由接纳方选择存盘途径,假设所选择的途径指向的文件已存在,那么程序会讯问能否覆盖原有的文

38、件,确定后即可开场接纳。图. 选择要发送的文件图. 发送方窗口图. 保管收到的文件图. 收信方窗口至此,完成了双机通讯程序的发送音讯和发送文件两个功能,到达了预期的效果。 总结随着计算机运用领域的不断扩展,计算机之间的远程通讯誉得也越来越广泛。作为RAD开发工具代表的VisualBasic同样提供了一系列规范通讯命令的接口,它允许建立串口衔接,可以衔接到其他通讯设备如Modem、还可以发送命令、进展数据交换以及监视和呼应在通讯过程中能够发生的各种错误和事件等,可以满足通常情况下的串口通讯需求。假设在实践运用过程中,可以很好的掌握MSComm控件的特性,灵敏变通,就可以到达平安、稳定、高效通讯的

39、目的。在本文中,以控件作为底层接口,在此根底上建立了一个简单的串行通讯协议SPCP,并由此实现了实时通讯和文件传输功能。当然还有一些缺陷,比如文件传输效率较低,平安性也较差,由于是做聊天和数据的传输,为了减少传输的负担,就没有设置校验位,还有待于进一步的完善和优化。附录()相关代码Dim RHead, RType, One, IsStr As BooleanDim RStr, Sendstr As StringDim b( To ) As ByteDim strSet As String Dim intPort As Long Dim intOutBuffer As Long Private

40、Sub OpenPort_Click() If frmMain.ctrMSComm.PortOpen = False Then Call CommPortOpen Sendstr = 设置:翻开串行口! Else Sendstr = 设置:串行口曾经翻开! End IfEnd SubPrivate Sub ClearRecV_Click()RecV.Text = End SubPrivate Sub CommPortClose_Click() If ctrMSComm.PortOpen = True Then ctrMSComm.PortOpen = False Sendstr = MsgBo

41、x(串行口已封锁!, + vbExclamation) Else Sendstr = MsgBox(串行口已封锁!, + vbExclamation) End IfEnd SubPrivate Sub Form_Load()If ctrMSComm.PortOpen = True Then ctrMSComm.PortOpen = FalseEnd IfRecV.Locked = True RecvHead = False RecvType = FalseOne = FalseIsStr = FalseRStr = SaveFileDial.CancelError = TrueSendFile

42、Dial.CancelError = TrueEnd SubPrivate Sub ctrMSComm_OnComm()Dim RecVStr As StringIf ctrMSComm.PortOpen = True ThenDim RecVByte() As ByteDim RecvLen, i As IntegerOn Error GoTo ErrorHandlerRecVByte = ctrMSComm.InputFor i = LBound(RecVByte) To UBound(RecVByte) If RHead Then If RType Then If IsStr Then

43、If RecVByte(i) = Then RecV.Text = RecV.Text & 收到: & RStr & vbCrLf RStr = RHead = False RType = False IsStr = False One = False Else If One Then b() = RecVByte(i) RStr = RStr & StrConv(b, vbUnicode) One = False Else If RecVByte(i) Then b() = RecVByte(i) One = True Else RStr = RStr & Chr(RecVByte(i) E

44、nd If End If End If Else If RecVByte(i) = Then RecV.Text = RecV.Text & 如今收到文件请选择保管途径: & vbCrLf SaveFileDial.FileName = Data.Txt SaveFileDial.DialogTitle = 保管文件 SaveFileDial.DefaultExt = Txt SaveFileDial.Filter = *.txt|*.txt|*.*|*.* SaveFileDial.Action = Open SaveFileDial.FileName For Output As # Pri

45、nt #, RStr RecV.Text = RecV.Text & 收到文件保管在: & SaveFileDial.FileName & vbCrLf Close # RStr = RHead = False RType = False IsStr = False One = False Else If One Then b() = RecVByte(i) RStr = RStr & StrConv(b, vbUnicode) One = False Else If RecVByte(i) Then b() = RecVByte(i) One = True Else RStr = RStr

46、& Chr(RecVByte(i) End If End If End If End If Else If RecVByte(i) = Then RType = True IsStr = True ElseIf RecVByte(i) = Then SaveFile.Enabled = True RType = True IsStr = False Else RHead = False End If End If Else If RecVByte(i) = Then RHead = True End If End IfNext iErrorHandler:Select Case Err.Num

47、berCase RecV.Text = RecV.Text & 他没有保管收到的文件! & vbCrLf RStr = RHead = False RType = False IsStr = False One = FalseEnd SelectElse MsgBox (请翻开串口)End IfEnd SubPrivate Sub SendData_Click()Dim str() As ByteSendstr = Chr() + Chr() + SendD.Text + Chr() + Chr() + Chr() str = StrConv(Sendstr, vbFromUnicode) c

48、trMSComm.Output = str End SubPrivate Sub SendFile_Click()Dim InputData, Sendstr As StringDim SendData() As ByteSendFileDial.FileName = Data.TxtSendFileDial.DefaultExt = TxtSendFileDial.Filter = *.txt|*.txt|*.*|*.*On Error GoTo ErrorHandlerSendFileDial.Action = Sendstr = Open SendFileDial.FileName Fo

49、r Input As #Do While Not EOF() Line Input #, InputData Sendstr = Sendstr + InputData + vbCrLf LoopClose #Sendstr = Chr() + Chr() + Sendstr + Chr() SendData = StrConv(Sendstr, vbFromUnicode) ctrMSComm.Output = SendData SendD.Text = SendD.Text & 已发送文件: & SendFileDial.FileName & vbCrLf ErrorHandler:Sel

50、ect Case Err.NumberCase SendD.Text = SendD.Text & 他选择发送文件后又取消了! & vbCrLfEnd SelectEnd SubPrivate Sub SettingOk_Click() If ctrMSComm.PortOpen = False Then ctrMSComm.PortOpen = True strSet = frmMain.cboBaud.Text + , + N + , + frmMain.cboData.Text + , + frmMain.cboStop.Text intPort = Val(cboComPort.Tex

51、t) intOutBuffer = Val(cboOutBufferSize.Text) Call frmMain.SetComm(strSet, intPort, intOutBuffer) Call frmMain.CommPortOpenEnd IfEnd SubPublic Sub CommPortOpen() On Error GoTo PortError ctrMSComm.CommPort = intCommPort ctrMSComm.Settings = strCommSettings ctrMSComm.InBufferSize = intInBufferSize ctrM

52、SComm.InBufferCount = ctrMSComm.OutBufferSize = intOutBufferSize ctrMSComm.OutBufferCount = ctrMSComm.RThreshold = ctrMSComm.Handshaking = comRTSXOnXOff PortError:Case Err.Number Case MsgBox (该串口曾经被占用,请换其它串口!) End SelectEnd SubPublic Sub SetComm(strSet As String, intPort As Long, intOutBuffer As Lon

53、g) strCommSettings = strSet intCommPort = intPort intOutBufferSize = intOutBufferEnd Sub连线方法在电脑的运用中往往会遇到各种各样的衔接线。这些衔接线外观上好似都差不多,但内部构造完全不同并且不能混用。假设在运用中这些衔接线坏了,往往很多运用者都不知道应该怎样办,下面就给出这些常见的衔接线的连线方法以便于修缮或查找缺点。在引见之前先对一些市场常用名词做出解释。如今一切的接头都可以分为公头和母头两大类。公头:泛指一切针式的接头。母头:泛指一切插槽式的接头。一切接头的针脚有一致规定,在接头上都印好了的,衔接时要留

54、意。在接线时没有提及的针脚都悬空不论。下面给出串口,并口各针脚功能表以供高级用户维护电缆或接头时运用。针串口功能一览针脚功能 发送数据TXD 接纳数据 RXD 发送恳求 RTS 发送去除 CTS 数据预备好 DSR 信号地 GND 载波检测 DCD 数据终端预备好 DTR 振铃指示 RI针串口功能一览表针脚功能 载波检测 DCD 接纳数据 RXD 发送数据TXD 数据终端预备好 DTR 信号地 GND 数据预备好 DSR 发送恳求 RTS 发送去除 CTS 振铃指示 RI串口联机线的衔接方法串口联机线主要用于直接把两台电脑的com口衔接。比较早一点的AT架构的电脑的串口有为针,和针两种,如今的

55、ATX架构的电脑两个串口全部是针。于是联机线就分为种针对针串口联机线,针对针串口联机线,针对针串口联机线这些直接电缆衔接线可以互换的连线方法如下表: 串口连机线一览针对针串口衔接针母头 针母头 针对针串口衔接针母头 针母头 针对针串口衔接针母头 针母头 串口转接线这种转接线适用于针串口和针串口的转换。首先,根据需求转或转选择两个转接头。选择方法如下:针转针针公头,针母头。针转针针公头,针母头。然后运用尽量短的带屏蔽的多芯衔接线。衔接方法如下表串口转接线一览针接头 针接头 二、 EIA RSC接口 、引脚规定 维护地:号脚,它与设备的外壳相连,需求时可以使它直接与大地相连; TXD:发送数据,号

56、脚; RXD:接纳数据,号脚; 信号地:号脚; RTS:恳求发送,这是数据终端设备(以下简称DTE)向数据通讯设备(以下简称DCE)提出发送要求的恳求线。 CTS:准许发送,这是DCE对DTE提出的发送恳求作出的呼应信号。当CTS在接通形状时,就是通知DTE可以发送数据了。当RTS在断开形状时。CTS也随之断开,以备下一次应对过程的正常进展;当RTS在接通形状时,只需当DCE进入发送态时,即DCE已预备接纳DTE送来的数据进展调制并且DCE与外部线路接通时,CTS才处于接通形状。 DSR:数据通讯设备预备就绪,它反映了本端数据通讯设备当前的形状。当此线在接通形状时,阐明本端DCE曾经与信道衔接

57、上了且并没有处在通话形状或测试形状,经过此线,DCE通知DTE,DCE预备就绪。DSR也可以作为对RTS信号的呼应,但DSR线优先于CTS线成为接通态。 DTR:数据终端预备就绪。假设该线处于接通形状,DTE通知DCE,DTE曾经作好了发送或接纳数据的预备,DTE预备发送时,本设备是自动的,可以在预备好时,将DTR线置为接通形状。假设DTE具有自动转入接纳的功能,当DTE接到振铃指示信号RI后,就自动进入接纳形状,同时将DTR线置为接通形状。 RI:振铃检测,当DCE检测到线路上有振铃信号时,将RI线接通,传送给DTE,在DTE中经常把这个信号作为处置机的中断恳求信号,使DTE进入接纳形状,当振铃停顿时,RI也变成断开形状。DCD:接纳线路信号检测,这

温馨提示

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

评论

0/150

提交评论