第2章 串口编程技术
在Microsoft Windows 下开发串行通信目前通常有如下几种方法:一是利用Windows API通信函数;二是利用 windows 的读写端口函数_inp、_inpw、_inpd、_outp、_outpw、_outpd、(Windows95系列下)或开发驱动程序(WindowsNT系列操作系统下)直接对串口进行操作;三是利用第三方提供或自己编写的通信;四是使用串口通信组件,如ActiveX控件MSComm 。
MSComm控件:(Microsoft Communication Control)是微软公司提供的简化windows下串口通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法,在VisualBasic、VC、Delphi等语言均可使用。
以上几种方法中第一种使用面较广,但由于比较复杂,使用较困难;第二种需要了解硬件电路结构原理,深入驱动层次,专业化程度较高;第三种方法使用面向对象技术封装Win32API函数,提供一个用于串行通信的类,只要理解这种类的几个成员函数,就能方便的使用,但能普遍应用的这种类相当困难;第四种方法较简单,对于 Visual Basic,常用的方法就是使用第四种方法。本文将用第四种方法实现双机通信。
2.1 串口实现双机互联系统功能概述
双机互联程序通过串口将两台计算机连接起来,按照自定义的串口通信协议(简称为SPCP)进行信息交换,实现通过串口进行聊天、文件和收发的功能。
SPCP协议设计思想基于帧传输方式,即在向串口发送数据时是一帧一帧地发送。对于上层应用(如文件传输)来说,应用程序所发送的和所接收的都是流式数据,即如果应用程序需要进行上层的协议解释的话,它将面对的这些流数据重新拼装。为保证可靠的传输,在传输开始前,通过协议建立连接。来确定是否要接收数据,是否保存等。
2.2 VB串口查询法的实现方法
2.2.1 串口查询法的机理
VB的串口查询法是一种主要工作在查询方式下的实现方法。当通信程序工作在“查询”方式时,可以不考虑Win95的进程和线程的问题。仅在串口有数据时,去读串口缓
- 5 -
冲区就可以了。这种方法下确定串口读取的时机、握手协议及软件纠错的实现是程序员应考虑的主要问题。
以下是读取接收缓冲区数据时的流程图:
读数据
结束 无 缓冲区中有无数有 获取当前通信设备的数据 由于这种方法主要工作在查询方式。程序员必须完成相当一部分通信状态的检测工作,许多细节(甚至包括通信过程中的字符属性的转换)也必须通过程序代码完成。因而相比较通信控件方法而言,这种查询方法对通信双方协议的依赖性尤其大。双方通信协议的约定对程序实现的难易程度影响很大。
串口查询法中,一般串口初始化的流程如下:
设置设备控制块
设置通信参数 打开串口 设置缓冲区大小 值得注意的一点是,此方法下协议的约定必须满足以下条件:即甲方发送时,乙方必须在甲方发送动作之前进入循环接收状态,直到接收到字符后通过对串口读取函数
- 6 -
ReadFile返回值的判断跳出循环状态。 同时,一般为了不使系统因循环等待接收而进入“死循环”状态,可以人为设置读取串口的循环次数,一般1000~10000次即可。VB是一种极为灵活的高级语言,因而在这种方法下可以方便地引入汇编语言的思维,利用其GoTo转向语句方便地控制程序的流程。非常灵活方便。 2.2.2 与通信线程法的比较
通信线程法通过在应用程序的主线程外再创建一个通信线程来监视通信设备,其最大优点是程序对接收数据具有自主觉察能力。一旦通信线程查询到数据已发送到串口上,线程自动向应用程序发送一个数据接收到的消息,应用程序可用该消息来读取通信设备传来的数据。并且使用通信线程还不占用CPU时间。这样系统实际上具有了同时控制多个通信设备(如MODEM)的能力。通信线程法在C++的开发系统中用得较多,这与C++的特点和优势密切相关。由于VB自身的特点,创建通信线程的方法对VB而言,实现上有相当的难度。而且这样做,也无异于牺牲VB的简单方便性而去迁就程序的复杂性,很不经济。串口查询法容易地引入了汇编语言的一些思维,实现了最精简的程序代码。它不一定是最完善,但对一般VB程序员来说,这种方法确实达到了简化思路和降低难度的目的,因而实现简单。
- 7 -
- 8 -
第3章 SPCP通信协议设计
以下设计的串口通信协议用于完成本文双机互联程序的文件传输功能,简称为SPCP(Serial Port Communication Protocol)。SPCP设计思想基于帧传输方式,即在向串口发送数据时是一帧一帧地发送。对于上层应用(如文件传输)来说,应用程序所发送的和所接收的都是流式数据,即如果应用程序需要进行上层的协议解释的话,它将面对这些流数据的重新拼装。为保证可靠的传输,在传输开始前,通过握手建立连接与TCP/IP协议类似。
3.1 串行通信协议
3.1.1 异步通信协议的实例——起止式异步协议
----------- 图3.1. 起止式异步协议
特点与格式:
起止式异步协议的特点是一个字符一个字符传输,并且传送一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。其格式如图3.1所示。每一个字符的前面都有一位起始位(低电平,逻辑值0),字符本身有5~7位数据位组成,接着字符后面是一位校验位(也可以没有校验位),最后是一位,或者一位半,或二位停止位,停止位后面是不定长度的空闲位。停止位和空闲位都规定为高电平(逻辑值1),这样就保证起始位开始处一定有一个下跳沿。
从图中可以看出,这种格式是靠起始位和停止位来实现字符的界定或同步的,故称为起始式协议。传送时,数据的低位在前,高位在后,图3.2表示了传送一个字符E的ASCAII码的波形1010001。当把它的最低有效位写到右边时,就是E的ASCII码1000101=45H。
- 9 -
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于spcp技术串口实现双机通信(3)在线全文阅读。
相关推荐: