第15卷第3期2001年9月
山东工程学院学报JournalofShandongInstituteofTechnology
Vol.15.No.3Sept./2001
Delphi程序中实现串行口通讯的三种方法
李志合易维明程卫东张国海
山东工程,山东淄博255012
摘要介绍了Delphi编程语言在测控
系统中串行口通讯的三种编程方法:利用嵌入式汇编语言、WindowsAPI函数和ActiveX的SPComm和MSComm控件,并介绍了它们的使用方法;同时附带了串行口操作输入输出函数。关键词Delphi语言,APIFunction,ActiveX控件中图分类号:TN91文献标识码:A
1概述
由Borland公司开发的Delphi语言是一种新生代的面向对象的可视化编程语言,它以其简洁的代码、精美的界面、易学易懂的特点深受人们的喜爱。相对传统测控系统开发语言如C、+、
VB及汇C+VC、编语言,Delphi的最大特点就是界面制作更加简单和美观、数据库功能更加强大,它支持Oracle、、SQL功能完备的可视组件库——Server等大型数据库。同时由于它具有强大的BDE数据库引擎和种类齐全、VCL,直接调用WindowsAPI函数以及直接嵌入式汇编语言等特点,使其在测控系统中应用越来越广泛。Delphi的多线程技术使数据采集和现场控制速度更加快捷。在Delphi中多线程为TThread对象,通过创建线程,合理安排CPU的时序,从而大大提高CPU的使用效率。但令人惋惜的是Delphi没有自带的串行口通讯控件,这就给编制通讯程序带来众多麻烦,影响了开发进度。不过,现在已经有许多公司的硬件产品支持Delphi,它们提供了Delphi的驱动程序库函数。开发人员可以通过调用这些函数实现串行口通讯。由于提供这些库函数的硬件并不普及,而且这些函数专用性较强,不能满足开发者的全部要求。对于测控系统来说,数据采集是关键的一环,数据采集技术在工业控制及自动化等领域中发挥着重要的作用。数据采集的一般过程是这样的:向采集卡发出通道选择指令,选择要采集的通道号。启动A/D转换。等待,直到转换完成。!从采集卡读出数据。而数据采集也无非是对总线上的I/O端口进行操作,现场检测元件(各类传感器)通过RS232或直接将模拟量通过二次仪表转换后送给工控机或微机串行口,而串行口需快速连续的读写串行口数据,并进行换算,将转换结果显示,对I/O的读写必须编制输入输出程序实现对硬件的操作。在Delphi中有三种不同的方法可以制作成输入输出子程序,以便在程序中调用。利用Delphi开发测控系统的三种不同串行口
通信方法是:一是在Delphi程序中嵌入汇编语言;二是调用WindowsAPI函数实现串行口通讯;三是利用Delphi提供的ActivX通讯控件如MSCOMM或SPCOMM。下面分别详细介绍它们的具体应用方法。
2Delphi串行口通讯的三种不同实现方法
2.1利用嵌入式汇编语言Delphi的嵌入式汇编语言支持所有的8086/8087和80386/80387指令,可放在程序可执行部分的
收文日期:2001-06-08作者简介:李志合(1975-),男(汉),山东德州人,山东工程硕士研究生,研究方向:生物质利用
第3期
李志合等:Delphi程序中实现串行口通讯的三种方法
—53—
任何地方。汇编语言模块必须以关键字ASM开头、END结束,以便和其他语句分开。在其范围内的变量都可以直接调用。与以前的TurboAssember不同,标号、注释、变量声明都遵循Delphi规则,系统可以直接对这些语句进行编译,无需安装额外的汇编编译系统。开发者不必了解程序中现场保护或变量调用等细节,这一切均由系统自动完成。用嵌入式汇编进行串行口通讯的基本的输入输出子程序如下。
ProcedureOutport(addressout:
word;valueout:byte);//定义数据输出子程序,实现串行口写操作BeginAsm//嵌入汇编开始标示符Moval,valuout//送控制字Movdx,addressout//送地址Outdx,al//向地址写控制字End;//嵌入式汇编结束标示符End;ProcedureInport(addressin:word):byte;//定义数据输入子程序BeginAsmMovdx,addressin//送地址Inal,dxMov@result,al//读数据End;End;
定义了以上两个输入输出子程序以后,就可以在程序中调用它,实现对串行口的读写操作。利用嵌入式汇编代码简单、效率高,是数据采集和自动控制优先选用的方法。2.2利用windows提供的API函数Delphi作为编程语言,可以方便的调用CreateFile、ReadFile、WriteFile、SetupComm、BuildCommDCB、CommState等WindowsAPI函数,实现对串行口的输入输出控制操作。Windows环境下,对于Set在串行口通讯的控制是通过中断机制驱动的,由系统自行处理。Windows禁止应用程序直接和硬件打交道,程序员只能使用Windows提供的标准函数通过通讯驱动程序与硬件接口。首先,用CreateFile()函数打开通讯端口,然后通过SetupComm()函数给通讯的输入输出队列分配一定大小的内存缓冲区,接着通过BuildCommDCB()函数和SetCommState()等函数对主要通讯参数进行设置。初始化完成后就可以利用下面列出串行口操作的几个函数和串行ReadFile()函数和WriteFile()函数对通讯端口进行读写操作了。口初始化函数: