6.3 PC 上位机的软件设计
6.3.1 PC软件设计方法的选择
在开发PC上位机的通信程序中,人们常用的编程语言可分为3类:(1) 直接面向底层硬件的汇编语言。(2) DOS环境下的高级编程语言,如: C语言等。(3) Windows环境下的高级编程语言,如:VC++等。而在这3种方式中Windows环境下的串口编程以其设备无关性,可移植性以及界面友好等特征而得到广泛应用。同时在Windows操作系统已经占据统治地位的情况下,欲开发良好的通信程序,利用Windows环境下的高级语言已渐成为必然的选择。
开发Windows环境下的串口通信程序主要有以下2种方法:
(1) 利用Windows API(Application Program Interface)用户程序接口函数;
(2) 利用ActiveX控件;
后者的主要特点是简单易学,但前者的功能更为强大控制手段更为灵活。
6.3.2 PC软件通信方式的选择
在Win32环境下串行通信有两种:主要方式即同步方式,异步方式两种方式有各自的特点。在软件设计时应根据实际情况选择合适的方式。
(1)同步方式
在同步方式中,读串口的函数试图在串口的接收缓冲区中读取规定数目的数据,直到规定数目的数据全部被读出或设定的超时时间已到时才返回。例如:(以C++ Builder编程语言为例下同)
……………………
……………………
COMMTIMEOUTS cto;
int timeConstant, timeMutiplier;
cto.ReadTotalTimeoutConstant = timeConstant; //设置总超时常数
cto.ReadTotalTimeoutMultiplier = timeMutiplier; //设置总超时系数
SetCommTimeouts(m_hFile,&cto); //超时设置
…………………………
…………………………
ReadFile (hComport,inBuffer,nWantRead,&nRealRead,NULL);//读串口
…………………………
…………………………
COMMTIMEOUTS结构用于设置超时,指定读写函数的等待时间
在ReadFile 函数中hComport 为待读串口句柄;inBuffer 为输入缓冲区大小;nWantRead 为每次调用ReadFile 时,函数试图读出的字节数;nRealRead 为实际读出的字节数;最后一个参数值NULL 代表ReadFile将采用同步文件读写方式。
(2)异步方式
异步方式中,利用Win32 的多线程结构,可以让串口的读写操作在后台进行,而应用程序的其它部分在前台执行例如:
……………………
……………………
……………………
CreateFile(lpszPort, //打开串口
GENERIC_READ|GENERIC_WRITE,
0,
0,
……………………
……………………
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, //允许异步操作
0);
OVERLAPPED lpOverlapped;
COMMTIMEOUTS cto;
int timeConstant, timeMutiplier;
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>