(1)串口查询法的机理
Visual Basic的串口查询法是种主要工作在查询方式下的实现方法。当通信程序工作在“查询”方式时,可以不考虑Windows 9x的进程和线程的问题。仅在串口有数据时,去读串口缓冲区就可以了。这种方法下确定串口读取的时机、握手协议及软件纠错的实现是程序员应考虑的主要问题。
由于这种方法主要工作在查询方式。程序员必须完成相当部分通信状态的检测工作,许多细节(甚至包括通信过程中的字符属性的转换)也必须通过程序代码完成。因而相比较通信控件方法而言,这种查询方法对通信双方协议的依赖性尤其大。双方通信协议的约定对程序实现的难易程度影响很大。
值得注意的点是,此方法下协议的约定必须满足以下条件:即甲方发送时,乙方必须在甲方发送动作之前进入循环接收状态,直到接收到字符后通过对串口读取函数ReadFile返回值的判断跳出循环状态。
同时,般为了不使系统因循环等待接收而进入“死循环”状态,可以人为设置读取串口的循环次数,般1000—10000次即可。
Visual Basic是种极为灵活的高级语言,因而在这种方法下可以方便地引入汇编语言的思维,利用其Goto转向语句方便地控制程序的流程。非常灵活方便。
(2)与通信线程法的比较
通信线程法通过在应用程序的主线程外再创建个通信线程来监视通信设备,其大优点是程序对接收数据具有自主觉察能力。旦通信线程查询到数据已发送到串口上,线程自动向应用程序发送个数据接收到的消息,应用程序可用该消息来读取通信设备传来的数据。并且使用通信线程还不占用CPU时间。这样系统实际上具有了同时控制多个通信设备(如MODEM)的能力。
通信线程法在C++的开发系统中用得较多,这与C++的特点和优势密切相关。
由于Visual Basic自身的特点,创建通信线程的方法对Visual Basic而言,实现上有相当的难度。而且这样做,也无异于牺牲Visual Basic的简单方便性而去迁就程序的复杂性,很不经济。串口查询法容易地引入了汇编语言的些思维,实现了精简的程序代码。它不定是完善,但对般Visual Basic程序员来说,这种方法确实达到了简化思路和降低难度的目的,因而实现简单。