打开串口
需要选择本次通信使用的串口,确定通信协议,即设置波特率、校验方式、数据 位、停止位等属性,打开该串口。示例代码如下:
//初始化并打开串口 Comm1.BaudRate:=9600;//波特率 9600bps Comm1.Parity:=None;//奇偶检验无 Comm1.ByteSize:=8;//数据位 8 Comm1
.StopBits:=1;//停止位 1 Comm1.StartComm; //打开串口
(2)建立握手信号
实现 PC 机与单片机之间的通信,首先要调通它们之间的握手信号,握手信号可 以随意选择某特定字符串, 当 PC 发出这样一帧数据后,通过接收事件能收到单 片机返回的这一帧数据或特定的某字符串,则表示握手成功,
系统通信正常。两 者之间就可以按照协议相互传输数据。否则需重新建立握手信号。 (3)发送数据
在编写基于串口的
计算机工业测控时,通常需要由 PC 机向下位机发送命令以控 制下位机的行为,同时向下位机发送有关数据。利用 Spcomm 串口控件向下位机 发送数据示例代码如下: //发送数据和控制字程序 procedure senddata; var i:integer; commflg : Boolean; begin commflg:=true ; for i:=1 to 8 do begin if not fcomm comml writecommdata(sendbutter,i) then begin Commflg=false; break; end; end; end; (4) 接收数据
在编写基于串口的计算机工业测控时,通常需要由下位机向 PC 机发送数据以使 PC 机了解系统的测试数据或下位机的运行状态,并进而控制下位机的行为。利 用 Spcomm 串口控件接收下位机发送的数据信息的示例代码如下: //事件驱动方式接收数据程序 procedure TForm1.CommlReceiveData(Sender:Tobject; Buffer:Pointer; bufferLength:Word); var receivedata:array of byte; begin sleep(100);//等待 100ms,保证接收到所有数据 move(buffef ,receivedata,bufferlength); //将接收缓存区中的数据转移到数组中
…… end; (5) 关闭串口
在系统开发中,应注意在不使用串口时应及时关闭串口,释放系统资源,否则可 能会影响系统的其它应用。关闭串口的代码如下: procedure TForm1.FormClose ( Sender;TObj ect:var Action:TCIoseAction ); begin comml.StopComm ; end; 4 Spcomm 串口通信的关键技术问题 Spcomm 应用的核心在于主线程、读线程和写线程之间的消息传递机制,而通信 数据相关信息的传递也是以消息传递的方式进行的。在使用 Spcomm 进行串口通 信编程,除按照说明使用外,还需要特别注意以下两个
问题。 首先,Spcomm 是通过 ReadIntervalTimeout 属性的设置,来确定所接收到的数 据是否属子同一帧数据,其默认值是 100ms,也就是说,只要任何两个字节到达 的时间间隔小于 1OOms,都被认为是属于同一帧数据,在与单片机协同工作时, 要特别注意这个问题[2]。 另外,Spcomm 的默认属性设置是支持
软件流控制的,用于流控制的字符是 13H(XoffChar)和 11H(XonChar),当单片机以二进制方式发送数据时,必须要禁 用 Spcomm 对于软件流控制的支持, 否则, 在数据帧中出现的 13H, 会被 Spcomm 11H 作为控制字符而加以忽略。 5 结论 实践证明,利用 Spcomm 串行通信控件在 Delphi7.0 中开发串口通信程序,具有 灵活、方便
、高效的特点。本文作者创新点是在认真分析多个基于计算机串口工 控测控系统的基础上, 分析了利用 Spcomm 控件实现 PC 机与单片机之间串口通信 的方法,研究了 Spcomm 串口通信的关键技术问题。在实际应用中取得了较好的 应用效果,具有一定的实践指导意义。