关于delphi上位机的报告.docx
- 文档编号:6853320
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:12
- 大小:58.08KB
关于delphi上位机的报告.docx
《关于delphi上位机的报告.docx》由会员分享,可在线阅读,更多相关《关于delphi上位机的报告.docx(12页珍藏版)》请在冰豆网上搜索。
关于delphi上位机的报告
关于Delphi上位机的报告
一.Delphi基本概念介绍
1.1Delphi的基本形式
Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。
它使用了MicrosoftWindows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-OrientedLanguage)、当今世界上最快的编辑器、最为领先的数据库技术。
对于广大的程序开发人员来讲,使用Delphi开发应用软件,无疑会大大地提高编程效率,而且随着应用的深入,您将会发现编程不再是枯燥无味的工作——Delphi的每一个设计细节,都将带给您一份欣喜。
Delphi实际上是Pascal语言的一种版本,但它与传统的Pascal语言有天壤之别。
一个Delphi程序首先是应用程序框架,而这一框架正是应用程序的“骨架”。
在骨架上即使没有附着任何东西,仍可以严格地按照设计运行。
您的工作只是在“骨架”中加入您的程序。
缺省的应用程序是一个空白的窗体(Form),您可以运行它,结果得到一个空白的窗口。
这个窗口具有Windows窗口的全部性质:
可以被放大缩小、移动、最大最小化等,但您却没有编写一行程序。
因此,可以说应用程序框架通过提供所有应用程序共有的东西,为用户应用程序的开发打下了良好的基础。
Delphi已经为您做好了一切基础工作——程序框架就是一个已经完成的可运行应用程序,只是不处理任何事情。
您所需要做的,只是在程序中加入完成您所需功能的代码而已。
在空白窗口的背后,应用程序的框架正在等待用户的输入。
由于您并未告诉它接收到用户输入后作何反应,窗口除了响应Windows的基本操作(移动、缩放等)外,它只是接受用户的输入,然后再忽略。
Delphi把Windows编程的回调、句柄处理等繁复过程都放在一个不可见的Romulam覆盖物下面,这样您可以不为它们所困扰,轻松从容地对可视部件进行编程。
1.2面向对象编程的概念
面向对象的程序设计(Object-OrientedProgramming,简记为OOP)是Delphi诞生的基础。
OOP立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者。
它通过给程序中加入扩展语句,把函数“封装”进Windows编程所必需的“对象”中。
面向对象的编程语言使得复杂的工作条理清晰、编写容易。
说它是一场革命,不是对对象本身而言,而是对它们处理工作的能力而言。
对象并不与传统程序设计和编程方法兼容,只是部分面向对象反而会使情形更糟。
除非整个开发环境都是面向对象的,否则对象产生的好处还没有带来的麻烦多。
而Delphi是完全面向对象的,这就使得Delphi成为一种触手可及的促进软件重用的开发工具,从而具有强大的吸引力。
一些早期的具有OOP性能的程序语言如C++,Pascal,Smalltalk等,虽然具有面向对象的特征,但不能轻松地画出可视化对象,与用户交互能力较差,程序员仍然要编写大量的代码。
Delphi的推出,填补了这项空白。
您不必自己建立对象,只要在提供的程序框架中加入完成功能的代码,其余的都交给Delphi去做。
欲生成漂亮的界面和结构良好的程序丝毫不必绞尽脑汁,Delphi将帮助您轻松地完成。
它允许在一个具有真正OOP扩展的可视化编程环境中,使用它的ObjectPascal语言。
这种革命性的组合,使得可视化编程与面向对象的开发框架紧密地结合起来。
二.PIC单片机及串行通信接口
PIC单片机是一种RISC(精简指令集计算机)、哈佛双总线和两级指令系统流水线结构的高性价比的8位嵌入式控制器,具有集成度高、速度快、工作电压低、功耗低、I/O直接驱动、指令简单易学易用等特点,是目前使用非常广泛的一种单片机。
在PIC系列单片机中多数型号具有串行通信接口USART(通用同步异步收发器),选用的PIC单片机(PIC16c)PORTC口的RC6、RC7分别与发送端TX、接收端RX复用。
为了把它们分别设置成串行通信接口的发送和接收线,需要把片内的寄存器RCSTA中的SPEN位(D7)置1,同时还需要把PORTC的方向控制寄存器TRISC的D7位和D6位分别置1和置0,即将RC7、RC6分别设置为输人和输出。
单片机内与串行通信有关的寄存器为:
发送状态和控制寄存器TXSAT、接收状态和控制寄存器RCS.TA、波特率寄存器SPBRG、发送移位寄存器TSR、发送缓冲器TXREG、接收移位寄存器RSR和接收缓冲器
在Delphi中进行串行通信的方法有以下几种:
a)利用嵌人式汇编语言;
b)调用Windows中的API函数;
c)利用ActiveX控件;
d)利用第三方控件,一般情况下较易实现串行通信,能够用少量的代码轻松高效地完成任务。
本文采用Spcomm控件,其功能强大,使用方便,具有丰富的与串口通信密切相关的属性事件和方法,提供了对串口的各种操作。
其主要属性、事件及方法如下。
1)属性
Commnamm:
表示串口coml、corn2的名字;
Baudrate:
根据实际情况设定的波特率,在打开串口后也可更改此值,实际波特率随之改变;
Bytesize:
根据实际情况设定的字节长度;
Paritycheck:
表示是否需要校验;
Parity:
奇偶校验位;
st0pbits:
停止位;
Senddataempty:
布尔型属性,为True时表示发送缓存为空或者发送队列中没有消息,为False时表示发送缓存不为空。
2)事件
Onreceivedata:
当有数据输人缓存时,将触发该事件;
OnreceiveError:
当接收数据出现错误时,触发该事件。
3)方法
Startcomm:
用于打开串口,当打开失败时通常会报错;
Stopcomm:
用于关闭串口,没有返回值;
Writecommdata:
用于将一个字符串发送到写进程。
硬件连接见图l。
MAX232ACPE为一个电平转换器,以实现,ITIIL电平与RS-232电平的相互转换。
图1.硬件连接示意图
程序实现。
先创建一个工程comm.dpr,把窗体的NAME属性定义为FComm,窗口的标题定义为串口通信,再添加控件COMM,然后设定FComm窗体中COMM属性,波特率为9.6kb/s,奇偶校验位设为False,字节长度设为8,停止位设为1,串口(Comm.Name)设为COM1。
上位机主要通信程序如下:
proceduretfcomm.formshow(sender:
tobject);
begin
comm1.startcomm;//创建窗体时将Comm控件打开
end
procedurefcomm.formclose(sender:
tobject;varaction:
tcloseaction);
begincomm1.stopeomm;//关闭窗体时将Comm控件关闭
end
proceduresenddata;//定义数据发送过程
vati:
integer;
commflg:
boolean
begin
viewstring:
;
commflg:
true;
fori:
=1to8do
begin
ifnotfcomm.comm1.writeeommdata(@sbuf[i],1)then
begincommflg:
=false;
break
end;
sleep
(2);
viewstring:
=viewstring+inttohex(subf[i],2);
end;
viewstring:
:
发送+viewstring;
fcomm.memo.1ine.add(viewstring);
fcomm.memo.1ine.add();
ifnotcommflgthen
messageflg(发送失败.mterror.[mbyes],0);
end
proceduretfcomm.buttonclick(sender:
tobject);//接收数据过程VHI
strreceive:
string;
bufer:
pointer;
buferlength:
word;
begin
setlength(strreceive。
buferlength);
move(bufer~,pcher(strreceive),buferlength);
memo.1ine.add(strreceive);//接收传送来的数据并在窗体中显示
memo.invalidate;
end
end
本文对Delphi下利用spcomm控件实现上位机(PC机)与PIC单片机之间的串行通信的方法进行了探讨。
通信程序编制容易实现,具有一定的参考价值。
该串行通信方法值得在其他工程中应用。
三.Delphi环境下PC机与AVR单片机的串行通讯
本文即介绍了X射线板材测厚系统中上下位机的串行通讯。
下位机采用AVR单片机ATmega16进行数据采集,前置电路对3路检测信号进行光电转换和放大处理后送入到ATmega16单片机自带的10位A/D转换器中进行A/D转换,单片机再将三路转换值以16进制通过串行通讯发往PC机;上位机中采用Delphi编写软件,利用Delphi的强大数据库功能管理下位机发送的数据,供图表显示和产量、成品计算等;并在Delphi中利用SPComm控件实现与下位机的串行通讯。
3.1下位机软件设计
AVR单片机ATmega16的USART是一个高度灵活的串行通讯设备,能进行全双工操作,可工作在异步方式或同步方式下,并具有多处理器通讯模式、倍速异步通讯模式等增强型通信功能。
下位机的软件设计主要是通讯协议的设定和相关程序的设计。
(1)通讯协议给上下位机设置适当的通讯协议是保证上下位机能正常通讯的基础。
系统采用全双工异步通讯模式,通讯协议设置如下:
波特率 采用9600帧格式,数据格式采用8位数据位,1位起始位,1位停止位。
为使通讯更可靠,使能了奇偶校验功能,采用奇校验。
但如果上位机检测出所接收的数据错误,则丢弃不用,不再给下位机发信号请求重新发送数据,以保证单片机稳定的采样频率。
握手协议,采用软件实现上下位机的握手,下位机要往上位机发送数据时,先发送一个握手信号:
aa;上位机收到后回发一个信号:
bb,表示已经做好数据接收准备。
(2)程序设计
下位机通讯的程序采用C语言编写,主要任务是完成USART的初始化、采集数据的A/D转换、握手的实现和数据的发送。
这里主要介绍串口的初始化程序以及通讯程序的流程图。
串口的初始化程序:
主要设置相关的通信协议。
voidusartinit(void)//USART初始化
{
UCSRB=0x00;//初始化时先关闭USART
UCSRC=(1< //异步模式,奇校验,1个停止位,8位数据位 UBRRL=0x33; UBRRH=0x00;//波特率设为9600 UCSRA=0x00;//单机通讯 UCSRB=< } 通讯流程简介: 在完成相关的初始化工作后,启动A/D转换,当3路信号都转换完成后单片机往上位机发握手信号,等待上位机的应答。 串口发送采用查询方式,即CPU不停地查询数据寄存器是否为空,若为空则装载新的数据开始发送;而接收则采用中断方式,在数据接收结束后进入中断服务程序,为使程序尽量少地在中断中停留,中断服务程序中仅完成对握手信号的判别和发送标志的置位。 当握手成功后,单片机把转换的数据往上位机发送,数据全部发送完成后即进入下一轮的采样、转换和发送。 串行通讯流程如图2所示: 图2串行通讯流程图 3.2上位机软件设计 Delphi是一种采用事件驱动方式、面向对象的可视化高级编程语言,本系统的通讯软件设计采用Delphi7.0。 在Delphi可以利用的众多串行通信控件,SPComm控件是最简单,功能比较强大的一种。 该控件具有丰富的与串口通信密切相关的属性及事件,提供对串口的各种操作。 3.2.1SPComm的主要属性、方法和事件 (1)属性 Commonage: 串口名,填写COM1,COM2等串口的名字,字符型变量; BaudRate: 设定波特率。 如9600,19200等,在串口打开后也可更改波特率; ParityCheck: 是否使能奇偶校验; ByteSize: 字节长度。 根据实际情况可设定为5,6,7或8位; Parity: 奇偶校验位; StopBits: 停止位的位数; SendDataEmpty: 这是一个布尔属性,为True时表示发送缓存为空,或者发送队列里没有信息;为False时表示发送缓存不为空,或者发送队列里有信息。 (2)方法 Startcomm: 用于打开串口,若打开失败通常会报错; StopComm: 用于关闭串口,没有返回值。 (3)函数 WriteCommData(pDataToWrite: PChar;dwSizeofData2ToWrite: Word): boolean: 用于发送一个字符串到写线程,发送成功返回True,失败则返回False,执行此函数将立即得到返回值,发送操作随后执行。 函数有2个参数,其中pDataToWrite是需要发送的字符串,dwSizeofDataToWrite是发送的字符串的长度。 (4)事件 OnReceiveData: procedure(Sender: TObject;Buffer: Pointer;Bufferlength: Word)ofobject: 当输入缓存有数据时触发该事件,在这里可以对从串口收到的数据进行处理。 Buffer中是收到的数据,Bufferlength是收到的数据长度。 OnReceiveError: procedure(Sender: TObject;Event2Mask: DW()RD): 当接收数据时出现错误将触发该事件。 3.1.2程序关键部分的实现 Delphi中用于串口通讯的程序较少,集中在简单的串口打开和关闭、握手信号的测试和下位机采集数据的接收这几大板块,以下仅做简单介绍。 (1)打开串口并初始化 procedureTForm1.Opencomm(Sender: TObject); begin Comm1.CommName: =comm;//选择串口 Comm1.BaudRage: =9600;//设定波特率为9600 Comm1.Parity: =odd;//奇校验 Comm1.StopBits: =1;//1位停止位 Comm1.ByteSize: =8;//8位数据位 Comm1.StartComm;//打开串口 end; (2)测试握手信号 procedureTForm1.ButtonlClick(Sender: TObject); var i: byte; commflg: boolean;//变量定义 begin sbuf[1]: =byte(aa); commflg: =true;//若信号正确标志设定true ifnotTForm1.comm1.writecommdata(@sbuf[1],1)then begin commflg: =false;//若接收的握手信号错误,标志设为false end; end; (3)数据接收事件 procedureTForm1.CommlReceiveData(Sender: TObject;Buffer: Pointer;BufferLength: Word); var i,j: integer; commRevstr: shortstring; RevP: RecData[1..1024]ofbyte;//变量定义 begin SetLength(CommRevStr,BufferLength); //设置字符串长度与缓冲区大小相等; move(buffer,pchar(@rbuf),bufferlength); //将缓冲区内容拷贝到字符串地址上; fori: =1tobufferlengthdo begin viewstring: =viewstring+inttohex(rbuf[i],2)+””; //接收到的数据在窗体中显示 RecData[i]: =integer(S[i]);//存储接收到的数据 ⋯⋯ //限于篇幅和论述目的,接收到的数据的后续处理程序在此省略 end; end; (4)关闭串口 procedureTForm1.Button3Click(Sender: TObject); begin Comm1.StopComm;//关闭Comml end; 本文对实现上位机与AVR单片机之间串行通信的方法进行了详细的讨论。 通讯程序编程容易实现,在实际X射线实时板材测厚系统应用中,这种串口通信方法表现出了很强的工程实用性,通讯稳定可靠且成本低廉。 同时由于上下位机软件都是用高级语言编写,稍加修改便可方便地移植到其他相类似的工程系统中,故在测控工程领域有着广泛的应用前景。 四.我对Delphi的掌握 由于接触Delphi的时间并不长,所以对它的掌握还只是初级水平,下面以我编的一个四则运算器为例介绍一下。 程序如下: unit四则运算; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,StdCtrls; type TForm1=class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedureButton1Click(Sender: TObject); procedureButton2Click(Sender: TObject); procedureButton3Click(Sender: TObject); procedureButton4Click(Sender: TObject); private {Privatedeclarations} public FunctionADD(A,B: Integer): Integer; FunctionDEC(A,B: Integer): Integer; FunctionMUL(A,B: Integer): Integer; FunctionDEV(A,B: Integer): real; {Publicdeclarations} end; var Form1: TForm1; implementation functionTForm1.ADD(A,B: integer): Integer; begin result: =A+B; end; functionTForm1.DEC(A,B: integer): Integer; begin result: =A-B; end; functionTForm1.MUL(A,B: integer): Integer; begin result: =A*B; end; functionTForm1.DEV(A,B: integer): real; begin result: =A/B; end; {$R*.dfm} procedureTForm1.Button1Click(Sender: TObject); var X,Y: Integer; begin X: =StrToInt(Edit1.Text); Y: =StrToInt(Edit2.Text); Edit3.Text: =IntToStr(ADD(X,Y)); end; procedureTForm1.Button2Click(Sender: TObject); var X,Y: Integer; begin X: =StrToInt(Edit1.Text); Y: =StrToInt(Edit2.Text); Edit3.Text: =IntToStr(DEC(X,Y)); end; procedureTForm1.Button3Click(Sender: TObject); var X,Y: Integer; begin X: =StrToInt(Edit1.Text); Y: =StrToInt(Edit2.Text); Edit3.Text: =IntToStr(MUL(X,Y)); end; procedureTForm1.Button4Click(Sender: TObject); var X,Y: Integer; begin X: =StrToInt(Edit1.Text); Y: =StrToInt(Edit2.Text); Edit3.Text: =FloatToStr(DEV(X,Y)); end; end. 程序运行结果如下: 五.总结 Delphi的确是一款功能强大的上位机软件,学习Delphi的过程是一件充满愉快的事情,给人带来很大的成就感。 遗憾的是目前,我的掌握程度还很浅,将来做更深入的研究之后,一定再向林老师汇报。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 delphi 上位 报告