心得
转自:https://www.cnblogs.com/beeone/archive/2010/08/12/1798280.html
如果你已经会使用(yòng)SPCOMM且出现10个以上的串口问题
请改一下串口名(míng)
COM1.CommName='\\.\com18';
就这样 加'\\.\'就行了我也不知道什么回事.......
以下為(wèi)抄录不知道是谁的
Delphi 是新(xīn)一代可(kě)视化开发工(gōng)具(jù),它具(jù)有(yǒu)功能(néng)强大、简便易用(yòng)和代码执行速度快等特点,是全球公(gōng)认的快速应用(yòng)开发工(gōng)具(jù)技(jì )术的先驱者,它越来越在构架企业信息系统方面发挥着重要作(zuò)用(yòng)。由于Delphi 这些显著特点,许多(duō)程序员选择Delphi作(zuò)為(wèi)开发工(gōng)具(jù)编制各种应用(yòng)程序。但是,令人惋惜的是Delphi没有(yǒu)自带串口通讯的控件,在它的帮助文(wén)档里也没有(yǒu)提及串口通讯,这就给编制通讯程序的开发人员带来众多(duō)麻烦,影响了开发进度,下面就这一技(jì )术进行讨论。 用(yòng)Delphi 实现串口通讯,常用(yòng)的几种方法為(wèi):使用(yòng)控件如MSCOMM和SPCOMM,使用(yòng)API函数或者在Delphi 中(zhōng)调用(yòng)其它串口通讯程序。利用(yòng)API编写串口通信程序较為(wèi)复杂,需要掌握大量通信知识,其优点是可(kě)实现的功能(néng)更强大,应用(yòng)面更广泛,更适合于编写较為(wèi)复杂的低层次通信程序。相比较而言,利用(yòng)SPComm控件则相对较简单,该控件具(jù)有(yǒu)丰富的与串口通信密切相关的属性及事件,提供了对串口的各种操作(zuò)。 使用(yòng)控件这一方法容易掌握,而SPCOMM支持多(duō)線(xiàn)程,所以SPCOMM控件的应用(yòng)更加广泛。结合实例详细介绍SPCOMM的使用(yòng)。一.SPCOMM控件的安(ān)装(zhuāng)
1.选择下拉菜单Component的第二项Install Component 。
在Unit file name 处填写控件SPCOMM控件所在路径,其它可(kě)用(yòng)默认值,点击OK按纽。
2.安(ān)装(zhuāng)成功后,system控件面板中(zhōng)将出现一个红色控件COMM。现在使用(yòng)COMM控件可(kě)以象Delphi自带控件一样使用(yòng).。
二.SPCOMM的主要属性,方法和事件
1.属性CommName:填写COM1,COM2…等串口的名(míng)字,在打开串口前,必须填写好此值。
BaudRate:设定波特率9600,4800等,根据实际需要来定,在串口打开后也可(kě)更改波特率,实际波特率随之更改。
ParityCheck:奇偶校验。
ByteSize:字节長(cháng)度_5,_6,_7,_8等,根据实际情况设定。
Parity:奇偶校验位StopBits:停止位SendDataEmpty:这是一个布尔属性,為(wèi)true时表示发送缓存為(wèi)空,或者发送队列里没有(yǒu)信息;為(wèi)False时表示表示发送缓存不為(wèi)空,或者发送队列里有(yǒu)信息。
2.方法 Startcomm过程用(yòng)于打开串口,当打开失败时通常会报错,错误主要有(yǒu)7种:
⑴串口已经打开 ;
⑵打开串口错误 ;
⑶文(wén)件句柄不是通讯句柄;
⑷不能(néng)够安(ān)装(zhuāng)通讯缓存;
⑸不能(néng)产(chǎn)生事件 ;
⑹不能(néng)产(chǎn)生读进程;
⑺不能(néng)产(chǎn)生写进程;
StopComm过程用(yòng)于关闭串口,没有(yǒu)返回值。
函数WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word ): boolean 用(yòng)于发送一个字符串到写線(xiàn)程,发送成功返回true,发送失败返回false, 执行此函数将立即得到返回值,发送操作(zuò)随后执行。函数有(yǒu)两个参数,其中(zhōng) pdatatowrite是要发送的字符串,dwsizeofdatatowrite 是发送的長(cháng)度。
3.事件OnReceiveData : procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object
当输入缓存有(yǒu)数据时将触发该事件,在这里可(kě)以对从串口收到的数据进行处理(lǐ)。Buffer中(zhōng)是收到的数据,bufferlength是收到的数据長(cháng)度。
OnReceiveError : procedure(Sender: TObject; EventMask : DWORD)
当接受数据时出现错误将触发该事件。
三.SPCOMM的使用(yòng) 下面,我们结合一个串口通讯的例子来说明SPCOMM的使用(yòng)。
為(wèi)了实现PC与单片机8051之间的通讯,首先要调通它们之间的握手信号,假定它们之间的通讯协议是,
PC到8051一帧数据6个字节,8051到PC一帧数据也為(wèi)6个字节,当PC发出(F0,01,FF,FF,01,F0)后能(néng)收到这样一帧(F0,01,FF,FF,01,F0),表示数据通信握手成功,两者之间就可(kě)以按照协议相互传输数据。在PC方要发送及接受数据需要以下步骤:1.创建一个新(xīn)的工(gōng)程COMM.DPR,把窗體(tǐ)的NAME属性改為(wèi)FCOMM,把窗體(tǐ)的标题改為(wèi)测试通讯,添加控件。 对COMM1(黑色矩形围住的控件)进行属性设计,设波特率4800,校验位无,字节長(cháng)度_8,停止位_1,串口选择COM1。Memo1中(zhōng)将显示发送和接受的数据。选择File/Save As将新(xīn)的窗體(tǐ)存储為(wèi)Comm.pas。

download spcomm :