文档库 最新最全的文档下载
当前位置:文档库 › 基于DELPHI实现PC机与PLC的串行通讯

基于DELPHI实现PC机与PLC的串行通讯

基于DELPHI实现PC机与PLC的串行通讯
基于DELPHI实现PC机与PLC的串行通讯

基于DELPHI实现PC机与PLC的串行通讯

未知来源供稿2004-4-229:49:00

【字体:大中小】

1引言

DELPHI因为它的编程相对较简单、功能又很强大,应用程序开发周期较短、运行速度快等特点,目前被广泛应用于监控系统中,而在监控系统中,上位机与各控制设备及智能仪表(如: PLC、电力测试仪、温度巡检仪、数字电度表等)的串行通讯又是一个非常重要的环节。在Windows环境下用Delphi实现串行通信有3种方法:

(1)使用VB的通信构件MSComm;

(2)调用Windows95下的API函数来完成通信;

(3)熟悉C/C++或其它语言的用户可以将自己的程序编译链接为DLL(动态链接库),这样D elphi就可以调用DLL里的函数来通信。其中最容易方法是用VB的通信构件MSComm进行编程。

在使用VB构件之前,首先要将VB构件文件MSComm32.OCX安装到Delphi的动态构件库中。打开主菜单Component选择Import ActiveX Control...项,在弹出的对话框里选中Microsoft Comm Control6.0(安装VB6.0后必有此项),再单击Install按钮。此时Delphi 载入VB构件文件并重新编译DCL(Delphi Component Library)。编译完成后,MSComm 的小按钮出现在ActiveX页中,这时程序就可以使用此构件了。应该注意的是,安装前要确保VB通信构件的控制文件MSComm32.OCX在编译DCL之前已在\Windows\Syste m下。下面就以KOYO的SU-6系列PLC为例,全面介绍用DELPHI实现与PLC串行通讯的整个过程。

2三线制串行通讯线的制作

上位机(PC机)的通讯一般采用9针串口,SU-6系列PLC选用通讯模块U-01DM,该模块的通讯用串行插座为25针,内含一个RS-232C接口和一个RS422接口,这里由于上位机与PLC在同一盘柜内,所以直接采用RS-232C进行通讯(最大传输距离为15m),三线制连接方式如图1所示。

3U-01DM通讯模块的参数设定

通讯模块参数的设定方法请参见相应模块的说明书,本次通讯的参数设置如下:

图1三线制串行通讯接线方式

(1)自局号码用十六进制表示为01;

(2)波特率设定为19200bps;

(3)无奇偶校验;

(4)自我诊断方式;

(5)应答延时时间为0S;

(6)采用主-子局通讯方式;

(7)本机为子局(上位机一般默认为主局);

(8)有通讯超时的通常动作方式;

(9)采用ASC码通讯方式。

4程序创建

如图2所示,新建一个工程,将Form1的Caption属性改为“从子局到主局的数据传送”,放入两个Label控件,将其Caption属性分别改为:“请输入读出地址”,“数据传送量”,放入两个Edit控件,将Edit1的Text属性改为0101,将Edit2的Text属性改为000C(注意大小写),意思是从PLC的0101地址开始读取12个数,再放入一个Memo控件用于显示接

收到的数据、一个Timer控件、一个Mscomm控件。Mscomm控件是一个VB构件,经过引言所述的安装之后将显示在ActiveX中。

图2从子局到主局的数据传送界面

5应用CCM通讯协议进行通讯

CCM通讯协议包括从子局到主局的数据传送,和从主局到子局的数据传送两大部分。在实际应用中,前者是为了将PLC中数据送到上位机中,实现数据的显示功能,后者主要是为了通过上位机向PLC发送命令,实现对PLC及相关设备的控制。图3是从子局到主局的数据传送框图,(详细说明参见程序清单或CCM2通讯协议说明书。从主局到子局的数据传送框图略。)在用CCM通讯协议进行通讯时,只需在上位机上编制程序,PLC的应答是自动完成的,所以对于PLC来说,用户只需完成对通讯模块的参数设置并保证与上位机的设置相对应即可。

图3子局到主局的数据传送框图

6程序清单及详细说明

(本程序只演示了从子局到主局的数据传送方法,从主局到子局的数据传送方法与之类似) var//全局变量说明

Form1:TForm1;

a,b,c,d:string;

lrc,n:integer;

x,y,z:array[1..4>of integer;

implementation

{$R*.dfm}

procedure TForm1.FormCreate(Sender:TObject);//串口初始化

begin

https://www.wendangku.net/doc/7d18159634.html,mPort:=1;{使用COM1口为通信口}

MSComm1.InBufferSize:=1024;{设定接收队列长度为1KB}

MSComm1.OutBufferSize:=1024;{设定发送队列长度为1KB}

MSComm1.Settings:=`19200,n,8,1`;{波特率19200bps,无校验,8个数据位,1个停止位} MSComm1.InputLen:=0;{读取整个接收缓冲区内容}

MSComm1.InBufferCount:=0;{清除接收缓冲区}

form1.MSComm1.PortOpen:=true;{打开串口}

end;

procedure TForm1.Timer1Timer(Sender:TObject);

var

m:integer;

begin

b:=form1.MSComm1.Input;//通过读取缓冲

//区中的内容清空缓冲区

//以下将输入的字符转换成ASC码的序号

for m:=1to4do begin

if copy(form1.Edit1.Text,m,1)=`0`then x[m>:=48; if copy(form1.Edit1.Text,m,1)=`1`then x[m>:=49;……

if copy(form1.Edit1.Text,m,1)=`9`then x[m>:=57; if copy(form1.Edit1.Text,m,1)=`A`then x[m>:=65; if copy(form1.Edit1.Text,m,1)=`B`then x[m>:=66;……

if copy(form1.Edit1.Text,m,1)=`F`then x[m>:=70; end;

for m:=1to4do begin

if copy(form1.Edit2.Text,m,1)=`0`then y[m>:=48;……

if copy(form1.Edit2.Text,m,1)=`F`then y[m>:=70; end;

//以下将用字符表示的十六进制数转换成相应的十进//制数值

for m:=1to4do begin

if copy(form1.Edit2.Text,m,1)=`0`then z[m>:=0; if copy(form1.Edit2.Text,m,1)=`1`then z[m>:=1;……

if copy(form1.Edit2.Text,m,1)=`9`then z[m>:=9; if copy(form1.Edit2.Text,m,1)=`A`then z[m>:=10; if copy(form1.Edit2.Text,m,1)=`B`then z[m>:=11;……

if copy(form1.Edit2.Text,m,1)=`F`then z[m>:=15;

end;

a:=`N`+chr(33)+chr(5);

//呼叫代码:设子局号为1,则修正子局号为32+1,

//若子局号为2,则修正子局号为32+2,依此类推

c:=chr(1)+chr(48)+chr(49)+chr(48)+chr(50)+form1.Edit1.Text+form1.Edit2.Text+chr(48)+ chr(49)+chr(23);

//首标代码:chr(1)为SOH、chr(48)+chr(49)为子局

//号01、chr(48)为读出标志30H、chr(50)输入寄

//存器的功能码32H、form1.Edit1.Text为地址

//码、form1.Edit2.Text为4字节ASC码表示的传

//输数据量、chr(48)+chr(49)为自局号01、chr(23)

//为表示传送结束ETB

lrc:=48xor49xor48xor50xor x[1>xor x[2>xor x[3>xor x[4>xor y[1>xor y[2> xor y[3>xor y[4>xor48xor49;

//lrc表示各字符的序号的异或和:整数

c:=c+chr((lrc div16)+48)+chr((lrc mod16)+48);

//chr((lrc div16)+48)+chr((lrc mod16)表示为校

//验码,即首标中的LRC

form1.MSComm1.RThreshold:=4;

//设缓冲区中的字符数为4时,触发oncomm事件,

//因为子局的应答是4个字符

form1.MSComm1.Output:=a;//开始呼叫

end;

procedure TForm1.MSComm1Comm(Sender:TObject);

begin

case https://www.wendangku.net/doc/7d18159634.html,mEvent of comevreceive:

//当接收事件发生时进行下列操作

begin

b:=form1.MSComm1.Input;//读取缓冲区中

//的内容

//以下表示:如果子局的应答正常,则输出首标,并

//设缓冲区中的字符数为:7+数据传送量

if b=`N`+CHR(33)+CHR(6)+CHR(13)THEN

begin

form1.MSComm1.Output:=c;

form1.MSComm1.RThreshold:=7+z[1>*4096+z[2>*256+z[3>*16+z[4>;

end;

//如果接收到SOH字符,则读取有效字符,并显

//示在form1.Memo1中,发应答信号:ACK

if copy(b,3,1)=chr(2)then

begin

form1.Memo1.Text:=form1.Memo1.Text+copy(b,4,(z[1>*4096+z[2>*256+z[3>*16+z[4>))+ ``;

form1.MSComm1.Output:=chr(6);

form1.MSComm1.RThreshold:=2;

end;

//若对方发通讯结束信号EOF+CR,则我方发结束

//信号EOT

if b=chr(4)+chr(13)then

begin

form1.MSComm1.Output:=chr(4);

form1.MSComm1.RThreshold:=4;

end;

end;

end;

end;

end.

//注:本程序假定通讯数据不大于128个字符,若

//大于128个字符则程序应做适当改动。

7结束语

本程序在WindowsXP环境下用Delphi7.0调试通过,VB用的是6.0版本,接收到的是一组用字符表示的十六进制数,这些数与PLC的各模块的状态有着一一对应的关系。读者还需对接收到的数据进行必要的处理和转换以便直观的显示相应的开关量、模拟量等信息。因本程序的重点在如何通讯上,所以忽略了很多与实际应用有关的细节,如:对输入文本的条件限制、对从PLC采集到的数据进行LRC(纵向校验)确保数据传输的准确性、程序出错处理等。

delphi习题

1.BinBtn组件的kind 属性预定义了一些常用的位图按钮种类。 2。在Delphi的Dialog标签中提供了多个专用对话框,其中包括opendialog,savedialog,fontdialog。 3.关闭文件需要使用closefile () 函数。 4.对于条件表达式:((3 <= x)AND(x < 0))OR(x in [1..10]),当x = 3 时该表达式的值为1。 5、能够实现格式化输入的编辑框组件是MaksEdit 6、Table 控件操作时,方法(B )满足表尾添加记录 A.Insert B.Append C.Delete D.Post 7、能够实现多行文本编辑的两个组件是Memo 、RichEdit 。 8、只清除下拉列表中的所有选项,不清除编辑框的文本的方法是ComboBox1.Items.Clear; 9、MessageBox函数与MessageDlg函数的相同之处在于可以显示多个按钮也可以指定显示不同的图形符号 1. 如果要在中删除某个组件,单击此组件使之处于选中状态,然后在键盘上按DELETE 键就可以将该组件删除。 2. Delphi7编程使用的是Pascal 语言。 3. 复合语句是将多个语句用and 和or 两个保留字括起来。 4. Object Pascal提供了两种类型的选择结构语句,即if 语句和case 语句。 5.将窗体中的某个Button设置为默认按钮,应该设置属性default值设置为true 。6.说出你知道的一些有序类型INTEGER(整数型),STRING(字符型,按字母顺序排 列),enumerated(枚举型),subrange(子界型) 7.Delphi程序与数据库之间进行数据交换一般要由多个数据库组件协作完成。如果用户要查询数据库中的一条信息,该指令通过用户界面组件发出,经数据源组件到达数据集组件。数据集组件利用—数据库连接—组件与数据库建立连接,并读取数据库中的数据,而后又经过数据源组件将数据送到用户界面组件中显示。 四. 问答题(共3道) 1. 在Delphi中,对话框与子窗口有什么不同? 答:delphi中对话框实现的是WinAPI函数的封装,程序编译运行时,源代码中占用资源很小,子窗体相对大一些,此外,子窗体是一个类,可以很方便的进行继承和重载。 2. 使用私有域和方法的目的是什么? 答:不允许派生类和实例访问,实现更好地封装和保护自己的类,清楚地向用户表明,他们无需关心这些与他们无关的项。 3 请叙述进程与线程的区别和联系? 答:在支持线程的操作系统中,进程是分配资源的最小单位,线程是独立运行的最小单位。每个进程至少有一个线程,我们称之为主线程。一个进程可以创建、拥有多个线程。 4 请说出ADOQuery. ExecSQL与ADOQuery.open的区别? 答:ExecSQL 用于执行没有返回数据机的SQL语句,如删除指定的记录,插入记录数据,修改记录数据等操作 OPEN 用来打开数据集,其作用与将active属性设置为true相同 当adoquery执行的是select操作时,使用OPEN 用来打开数据集;当adoquery执行的是没有返回数据集的SQL语句(insert ,delete,update,create table等)时,使用ExecSQL执行。

DELPHI期末考试试题

《Delphi程序设计》试卷 学号:姓名:专业:班级: 题号一二三四五总分登分人 题分3010103020100 得分 一、单项选择题(每小题1分,共30分) 得分评卷人 1.一个Delphi应用程序必有一个文件和至少一个单元文件。 A.程序 B.工程 C.数据 D.图形 2.在窗体中完成多个控件整齐排列,应使用何种操作? A.Align B.Bring to front C.Scale D.Send to back 3.form(窗体)的OnCreate事件在何时触发?. A.窗体关闭 B.窗体建立 C.窗体隐藏 D.窗体活动 4.下列哪种属性可以设置窗体无最大化、最小化和关闭图标? A.bordericons B.formstyle C.visible D.enabled 5.下列哪个属性决定控件的可见和不可见? A.Color B.Formstyle C.Visible D.Enabled 6.所有可视化的VCL控件都是从哪一个基类派生而来的? A.Tcontrol B.TwidgetControl C.TwinControl D.TwindowControl 7.Delphi中,是特殊的单元文件,可理解为主单元文件,或者说 主程序,而其它的单元文件可以看作是被其所调用的子程序。 A.窗体文件 B.项目文件 C.资源文件 D.配置文件 8.下列哪个属性是控制窗体标题的属性? A.Formstyle B.Caption C.Font D.Enabled 9.下列哪种类型的常量不能用来定义子界类型? A.实型数据(Real)B.用户定义的任何顺序类型C.字符型(Char)D.整型(Integer) 10.下列变量命名正确的是。 A.7ABC B.Program7 C.page@21 D.program 11.如果要检查edit编辑框中输入的字符,可以在哪个事件处理程序中编写代码 检查。 A.OnClick B.OnEnter C.OnMouseUp D.OnKeyPress 12.以下哪个函数是输入对话框函数?。 A.inputbox B.messagebox C.messagedlg D.showmessage 13.下列对象不能响应Click事件的是。 A.列表框B.图片框C.窗体D.计时器14.已知对话框函数MessageDlgPos(ConstMsg:String;DlgType:TmsgDlg Type;Buttons:TmsgDlgButtons;HelpCtx:longint;X,Y:Integer):Word.问:

Delphi程序设计试题及解答(wan)

《Delphi 程序设计》试题及解答 卷6 一、填空题(20分,每空2分) 1、现实世界中对象具有自己的状态和行为。对应着,面向对象技术中的对象可以具有自己的属性和 方法 。 2、结构化程序设计要求程序中仅采用顺序、分支和循环三种控制结构,其中每种结构只能有 一个入口 和一个出口。 3、Delphi 应用程序中单元文件的扩展名是 .pas 。 4、与数学表达式 53)(cos 2++x b a 对应的Object Pascal 表达式是 。 5、对于下面的条件表达式: ((3 <= x )AND (x < 0)) OR (x in [1..10]) 当x = 3 时, 该表达式的值为 。 6、ListBox 对象列表框中的内容是通过 属性来进行设置的。 7、如果想设计DBGrid 对象的列标题和对齐方式,可以对DBGrid 对象的 属性进行设置。 8、时钟组件(Timer )能有规律的以一定时间间隔触发 事件 9、能够实现格式化输入的编辑框组件是 10、利用 对象的LineTo 等方法,可以绘制基本图形。 二、单项选择题(20分,每题2分) 1、Delphi 程序设计的基本特点是( )。 A . 可视化程序设计 B . 代码程序设计 C . 事件驱动编程 D . A 和C 2、进度显示组件ProgressBar 的当前进度可以通过( )属性设置。 A . Step B .Scroll C . Position D .Max 3、下列变量命名正确的是( )。 A .7ABC B . My7 C . page@2 D .cmd..1 4、“x 是小于200的非负数”的Object Pascal 表达式是( )。 A .0 ≤ x < 200 B . x >= 0, x<200 C .(x >=0) AN D (x < 200) D . (x >= 0 ) OR (x<200) 5、在窗体上建立多页面的用户界面,需要首先建立的对象是( ) A . TabControl B .PageControl C . HeaderControl D .PageScroller 6、能够删除edit1中内容的语句是( )。 A . edit1.Clear ; B .edit1. Focused ; C . edit1.Text= null ; D .edit1.text :='\0' ; 7、现建立一个简单报表,仅包含数据列标题栏、数据栏和汇总栏,则在Bands 属性的子属

delphi面试题及答案

delphi面试题及答案 【篇一:delphi程序期末试题答案】 一、单选题(每小题2分,共30分) 1.在 radiogroup 组件中有 4 个单选框,当选中第 2 个单选框时,radiogroup 组件中的 itemindex 属性值应为(b)。 a.0 b.1c.2d.3 2.函数和过程的区别为(a)。 a.函数执行后返回一个值,而过程不需返回值b.过程执行后返回一个值,而函数不需返回值c.过程在被调用时,能执行某种特殊功能并能返回到调用它的地方d.函数在被调用时,能执行某种特殊功能并能返回到调用它的地方3.32 and 27 的值是(b)。 a.59b.0c.27d.32 4.窗体与数据模块的扩展名是(b)。 a..dcu b..dfm c..pas d..dpr 5.delphi 中用什么函数来析构一个组件(c)。 a.constructor b.destroy c.free d.create 6.一个指针变量ptr 的域成员 fs 访问的方法是(c)。 a.ptr-fs b.ptr.fsc.ptr^fs d.ptr@fs 7.type aarrays=[1?8,1?5] of integer ,该类型定义了多少个下标元素(d)。 a.45 b.54 c.48 d.40 8.delphi 的所有类都是从什么类继承下来的(b)。 a.tcomponent b.tobject c.tstream d.tnull 9.定义构造函数时用到的保留字是(c)。 a.class b..implementation c.create d.construction 10.下列组件中属于可视组件的是哪一个(d)。 a.tdatasource b.topendialog c.ttable d.tscrollbar 11.设有过程 procedure pro(var x,y:integer); 变量 a , b 为整型 变量,其值分别为 5、6,则合法的过程调用语句是(a.pro(5,6) b.pro(5,b) c.pro(a,6)d.pro(a,b) 12.下列组件中不能获取焦点的是(b)。 a.tedit b.tlabelc. trichedit d.ttreeview13.定义抽象类必 须使用的指令字是(a)。 a.abstractb.virtualc.dynamicd.override” 14.delphi是哪个公司的产品(c)。 a. microsoft b.ibm c.borland d.dom

delphi考试试题

1、简述面向对象技术中“类”与“对象”的概念。结合Delphi中使用的组件,举例说明什么是类、什么是对象。 类是对象的抽象及描述,它是具有统一属性和方法的一类对象的统一描述体,是用来定义某类对象共有属性和方法的模板。而对象是类的实例。 在Delphi环境中,组件板上的组件就是类的概念,例如按钮组件就是按钮类。而用户在窗体上创建的一个按钮就是对象的概念(按钮对象)。用户可以在窗体上用按钮类创建若干个按钮对象,它们都是按钮类的实例。 2、在Delphi中,什么是对象的属性、方法和事件? 一个对象是由属性、方法和事件所组成。属性表示对象中的数据,方法是对象能够执行的动作,事件是能够引起对象反应的条件。 3、简述利用Delphi开发一个项目的基本步骤。 ●建立一个新的项目 ●建立窗体 ●在窗体上加入对象 ●检查和设定对象属性 ●编写对象的事件处理程序 ●编译、试运行,并进行代码调试 保存项目文件,退出Delphi 环境 4、在一个单元中,全局变量和局部变量的含义是什么?说明在单元文件中如何定义这两种变量(可举例说明)。 局部变量只能在定义它的程序块中使用,且其生命周期也只存在于从程序块开始执行到程序块执行结束。在一个事件处理程序中的变量说明部分,能够定义一个局部变量,供该事件处理程序内部使用。 而全局变量可以在单元中的各程序块中使用(共享),且生命周期存在于整个单元代码的活动期中。 在Implementation保留字后(但不要在程序块里)定义的变量就是全局变量。 选择题1、下列哪些条目可作为Delphi的变量名,哪些不行,并说明原因。 abc 123 abc123 123abc file a! 合法的变量名是:abc abc123 选择题7、如果想查看showmessage过程的帮助信息,请你说出两种获取帮助信息的方式。 ①通过主菜单Help的Delphi Help命令调出帮助主页面,在“索引”页输入框中输入要查找的showmessage单词,即可找出相关的帮助信息。 ②在代码中如果调用了showmessage过程,可将光标置于该单词中,然后按F1键,即可找出该过程的帮助信息。 选择题2、一个项目由一组文件组成。其中一些主要文件的后缀有: .dpr .pas .dfm .dcu .~dpr .~pas .~dfm 等 请说出这些文件的中文名称及用途。 答:.dpr 项目文件,存放项目的主程序 .pas 单元文件,存放源代码,如事件处理程序等。 .dfm 窗体文件,数据文件,记录窗体上的数据信息(如组件位置等) .dcu 目标文件,保存.pas编译后得到的结果。

台达通讯示范程序及说明

精心整理 台达通讯示范程序及说明一、本试验主要完成以下功能: 1)通过RS指令完成在HMI上读写DTA温度控制器、ASDA台达伺服控制器任意地址数据;2)通过人机HMI/PC实现伺服电机Pr模式下回原点、任意位置选择与定位控制。 二、试验用硬件和软件列表 序号名称型号数量 1 台达温度控制器DTA9696R1 1 2 台达伺服单元ASD-A0420LA 1 3 台达PLC DVP12SA11T 1 4 人机界面HMI PWS6600S-S 1 5 24V电源** 1 5 通讯线** 若干 调试过程中使用的软件: 1).HITECH-ADP 6.1.1.03画面编程软件 2).DeltaservoUIsoftwareA1.003伺服调试工具 3).台达PLC编程软件WPLSoft-2.09 三、资料引用描述: 1).ADP软件使用说明.pdf 2).ASD-A系列伺服驱动器系列手册.pdf M1000~M1014:参见P2-61~P2-63 BMOV:全部传送参见P6-24 RS:数据传输参见P7-81 ASCI:HEX转为ASCII参见P7-97 HEX:ASCII转为HEX参见P7-102 CCD:校验码参见P7-105 3)台达温度控制器DTA系列操作手册 四.程序中的关键部分编写思路 1)“二补码”的计算: 一个8位十六进制数(如**H)的二补码的计算方法是:FFH-**H+01H=100H-**H 2)编程的时候请参考章节(RS:数据传输参见P7-81)ASCII表 3)下面我们以写数据为例来说明编程思路 如下图所示,在PLC启动正向RUN的瞬间,写入初始化数值(图中左列所示);由 人机界面输入16进制数地址(如4700H),通过ASCI指令将其每一位转化为ASCII码存放到D60(D80)开始的4个数据寄存器中,然后通过BMOV指令送到D105…D108(D109…D112)中。数据传入以后,从地址ADR1/0开始,两个一组依次相加计算校验 码(见程序说明)。 在一个PLC扫描周期,需要将数据写入指定的地址当中去,以免产生错误,但是在人机 界面上,在同一时间只能写入一个数据,为解决这个矛盾,我们采用先把数据写入PLC 的数据寄存器中,待地址和数据都写好以后,人为地给一个触发信号,将数据同时写入。补码计算子程序: 时间的处理方法:分时处理——在不同时间段进行不同的读写操作。 如: 时间段M0----温度控制器写操作

Delphi面试题

Delphi面试题 第一部分Delphi知识1. 如果一个元件希望放到IDE的元件面板上,它必须从________类派生,如果一个元件能作为其它元件的容器,它必须从_____________类派生,如果一个元件在运行时可见,它必须从___________________类派生(A)TGraphicControl (B)TWinContr 1.您为什么选择软件开发这个行业?(30字左右简写); 2.如果有您解决不了的软件问题您会采取什么样的解决措施; 3.a.请您写出Object Pascal所支持的数据类型;b.请您写出Shl、Shr、Xor、Not 的数学表示法; 4.请您写出VCL结构层次(以TObject开始,最少五层);5 二.是非题(共20道)1.从主菜单上选择Project|Syntax Check 菜单选项,Delphi将编译从上次编译后有改动的任何单元,并报出遇到的错误。()2.Delphi的VCL对象有些是指针,从堆栈中分配空间,有些则不是。()3.粘贴时,如果作为容器的组件已被选择,剪贴 1、rtl70.bpl是什么?有什么用? 2、delphi的Package相对dll有什么优点? 3、以下的记录(结构)变量在内存占多少字节?type a = packed record v1: Byte; v2: Word; v3: string[16]; v4: Double; v5: string; v6: TForm; end; 4、以下的写法是否正确?

type a 一.选择题(共40道)1.用户开发程序时需要经常在窗体和编辑器窗口之间来回切换,可使用快捷键()。A、F12和F11 B、F12和F13 C、F12和Ctrl+F12 D、F12和Alt+F12 E、F12和Shift+F12 2.某函数如下:Function check(n,k:Integer):Integer; Var m:Integer; Beg 一、Delphi基础1、Delphi 内置类型string 和WideString 的区别。2、简要描述Delphi代码单元中,以下关键字的作用。interface:implementation:initialization:finalization:3、将一周七天声明成枚举类型。4、现有Integer 变量A、B,在不声明其

delphi程序试题答案

一、单选题 1.在RadioGroup 组件中有 4 个单选框,当选中第 2 个单选框时,RadioGroup 组件中的ItemIndex 属性值应为( B )。 A.0 B.1 C.2 D.3 2.函数和过程的区别为( A )。 A.函数执行后返回一个值,而过程不需返回值 B.过程执行后返回一个值,而函数不需返回值 C.过程在被调用时,能执行某种特殊功能并能返回到调用它的地方 D.函数在被调用时,能执行某种特殊功能并能返回到调用它的地方 3.32 AND 27 的值是( B )。 A.59 B.0 C.27 D.32 4.窗体与数据模块的扩展名是( B )。 A..dcu B..dfm C..pas D..dpr 5.Delphi 中用什么函数来析构一个组件( C )。 A.Constructor B.Destroy C.Free D.Create 6.一个指针变量ptr 的域成员fs 访问的方法是( C )。 A.ptr->fs B.ptr.fs C.ptr^fs D.ptr@fs 7.Type aarrays=[1…8,1…5] of integer ,该类型定义了多少个下标元素( D )。 A.45 B.54 C.48 D.40 8.Delphi 的所有类都是从什么类继承下来的( B )。 A.Tcomponent B.Tobject C.Tstream D.Tnull 9.定义构造函数时用到的保留字是( C )。 A.Class B..implementation C.create D.construction 10.下列组件中属于可视组件的是哪一个( D )。 A.Tdatasource B.Topendialog C.Ttable D.Tscrollbar 11.设有过程procedure pro(V AR x,y:integer); 变量a , b 为整型变量,其值分别为5、6,则合法的过程调用语句是( D )。 A.Pro(5,6) B.pro(5,b) C.pro(a,6) D.pro(a,b) 12.下列组件中不能获取焦点的是( B )。 A.Tedit B.Tlabel C.Trichedit D.Ttreeview 13.定义抽象类必须使用的指令字是( A )。 A.Abstract B.virtual C.dynamic D.override” 14.Delphi是哪个公司的产品( C )。 A.Microsoft B.IBM C.Borland D.DOM 15.窗体上放置有一个TEdit类控件Edit1,当在Edit1中按下‘A’键时触发的事件和事件顺序是( A )。 A.OnKeyDown->OnKeyPress->OnKeyUp B.OnKeyDown->OnKeyUp C.OnKeyPress D.OnKeyDown->OnKeyUp->OnKeyPress 二、判断题 1.Pascal 语言中可以把一个实数赋值给一个整型变量,系统会自动取整。(错) 2.所有类都有Name属性。(错) 3.variant类型的变量被动态赋值为一个特定的数据类型后,不能再赋值为一个其它的数据类型。(错) 4.函数MessageDlgPos与MessageDlg极为相似,只是MessageDlgPos函数能够控制信息对话框的出现位置。(对)5.BitBtn控件可以用来制作一个带图片的按钮,而SpeedButton则不能。(错) 6.MediaPlayer控件的AutoEnable属性是用来控制该控件是否可用。(错) 7.图形组件没有输入焦点,不能接受用户的输入,它只具有向用户显示的功能。(对) 8.Timer组件常称为“定时器”,它每隔固定的时间间隔可以触发一个OnTimer事件。(对) 9.Tobject是delphi的基类,系统中的每一个类都是Tobject的子类。(对) 10.在MDI应用程序窗口中,如果将一个窗体设为父穷窗体,要将它的FormStyle属性设为FsStayOnTop。(错)

Delphi程序设计复习题

《Delphi程序设计》复习题 一、单项选择题 1、下面哪句话对Delphi的描述是正确的()。 A.只能用于数据库客户端开发的工具B.Delphi的编程语言全部是面向过程的C.Delphi的编程语言是Java D.面向对象的可视化的开发环境 2、在Delphi中,建立一个文本编辑区域,可采用下列()。 A、命令按钮 B、文本标签控件 C、Edit控件 D、Timer控件 3、表达式60 +19 div 2 的值是() A.67 B.79 C.69 D.80 4、一个Delphi应用程序必有一个()文件和至少一个单元文件。 A) 执行程序B) 项目C) 数据D)图形 5、最适合于在工具栏上放置的工具按钮是() A.Button B.RadioButton C.SpeedButton D.BitBtm 6、Delphi应用程序设计基于()语言。 A) Basic B) C++ C) Pascal D) Object Pascal 7、下列表达式中()不是布尔表达式。 A) A=3 B) A div B C) A and B D) A>B 8、“x 是小于100的非负数”的Object Pascal表达式是()。 A.0 ≤x < 100 B.x >= 0, x<100 C.(x >=0) AND (x < 100) D.(x >= 0 ) OR (x<100) 9、利用Image对象的哪个属性设置,可以使加载的图像自动放大或缩小,以适应Image的显示区域() A.Stretch B.AutoSize C.Align D.Center 10、工具栏上的一个SpeedButton按钮如果要设置为状态按钮,则正确设置的方法是() A.将SpeedButton按钮的GroupIndex属性设置为0,且AllowAllUp属性设置为True。 B.将SpeedButton按钮的GroupIndex属性设置为0,且AllowAllUp属性设置为False。 C.将SpeedButton按钮的GroupIndex属性设置为非0值,且AllowAllUp属性设置为True。 D.将SpeedButton按钮的GroupIndex属性设置为非0值,且AllowAllUp属性设置为False。 11、要改变一个对象的高度,应使用属性()。 A、Font B、ForcColor C、Name D、Height 12、表达式30 +19 div 2 的值是() A.37 B.49 C.39 D.40 13、下列合法的变量名是()。 A、na + e B、e- 3r C、r_3 D、5we

《Delphi程序设计》测试试题及解答卷

《Delphi程序设计》试题及解答卷

————————————————————————————————作者:————————————————————————————————日期:

《Delphi 程序设计》试题及解答 卷5 一、填空题(20分,每空2分) 1、现实世界中对象具有自己的状态和行为。对应着,面向对象技术中的对象可以具有自己的属性和 方法 。 2、Delphi 应用程序中项目文件的扩展名是 .dpr 。 3、结构化程序设计要求程序中仅采用顺序、分支和循环三种控制结构,其中每种结构只能有 一个人口 和一个出口。 4、在Delphi 集成开发环境中,如果想要直接设置或者修改对象的属性,可以通过对象查看器(Object Inspector )中的 属性 或 Properties 窗口直接进行设置。 5、ListBox 对象列表框中的内容是通过 items 属性来进行设置的。 6、时钟组件(Timer)能有规律的以一定时间间隔触发 ontimer 事件。 7、如果让界面上的一个按钮变为不可用,需要将它的 enabled 属性设为False 。 8、Image 组件可通过设置其 Autosize 属性为True 使Image 组件根据图像的大小自动调整显示窗口大小。 9、Delphi 的一个项目由若干文件组成,其中文件名后缀含有“~”的文件为 备份文件 。 10、与数学表达式 53)(cos 2++x b a 对应的Object Pascal 表达式是 Cos*cos*(a+b) /(3*x) 二、单项选择题(30分,每题3分) 1、Delphi 程序设计的基本特点是(D ) A . 可视化程序设计 B . 代码程序设计 C . 事件驱动编程 D . A 和C 2、修改窗体的标题时,应当设置form 的属性是( A ) A .Caption B . Name C . Text D . Label 3、下列哪个常量说明语句是正确的( D ) A. const x := (c < 16); B. const x : 16 ; C. const x := 16 ; D const x = 16 ; 4、“x 是小于100的非负数”的Object Pascal 表达式是( C ) A .0 ≤ x < 100 B . x >= 0, x<100 C .(x >=0) AN D (x < 100) D . (x >= 0 ) OR (x<100) 5、编辑框(Edit )中的文本发生改变时引发的事件是( B ) A .AutoSize B .OnChange C .SetFocus D .SetText 6、表达式 30 + 19 div 2 的值是( C ) A . 37 B . 49 C . 39 D . 40 7、现建立一个简单报表,仅包含报表标题栏、数据栏和汇总栏,则在Bands 属性的子属性

台达plc伺服通信例子

PLC通讯控制伺服电机 src=https://www.wendangku.net/doc/7d18159634.html,/forum/pic/837305_1.GIF >

RS、MODRD/MODWR/MODRW、CVFD的比较: 1. RS---串行数据传输: █此指令是专为主机使用RS-485串联通讯接口所提供的便利指令。在程序中可以无限使用RS指令,但不可同一时间执行两个以上的RS指令。 █接口设备(变频器,温度控制器…)如果配备RS-485串行通讯,并且该设备的通讯格式也有公开就可以由PLC的使用者以RS指令设计程序来传输PLC与接口设备的数据。 █此指令的优点是: 可以读取或者写入任何通讯格式的外围接口设备(变频器,温度控制器…); (2)可以读/写位装置; █此指令的缺点是:(1) 该指令不能对接口设备的参数地址直接作用,必须先将欲读取/写入的数据内容(头码,装置地址,功能码,数据地址,个数/数据内容,校验码,尾码)写入到寄存器中,然后才能够读取/写入。(2)只能通过RS-485来监控外围接口设备。2.MODRD---MODBUS数据读取 █ MODRD指令是专门针对MODBUS ASCII模式/RTU模式的通讯外围设备专用的驱动指令。

█如果你要以通讯方式读取接口设备(变频器,温度控制器…)的某一参数,并且该接口设备通讯格式符合MODBUS的通讯格式,建议使用MODRD指令,因为这个指令相对RS指令要方便。 █此指令的优点是:(1)操作数简易,可以直接对参数地址进行操作。当欲读取外围接口设备的某一参数时,只要填写外围接口设备的装置地址、欲读取数据的地址,读取的笔数(WORD); (2)如果是ASCII形式,PLC能够将读取到的ASCII数据转化为十进制或十六进制数值存放到D1050~D1055。 █此指令的缺点是:(1) 只能读取符合MODBUS通讯格式的接口设备; (2)不能读取位装置; (3)最多只能读取6笔(6个word)数据。3.MODWR---MODBUS数据写入 █MODRD指令是专门针对MODBUS ASCII模式/RTU模式的通讯外围设备专用的驱动指令。 █如果你要以通讯的方式给外围接口设备(变频器,温度控制器…)写入或修改一个参数,并且此接口设备通讯格式符合MODBUS的通讯格式,建议使用MODWR指令,因为这个指令相对RS指令要方便。 █此指令的优点是:(1)操作数简易,可以直接对参数地址进行操作。当欲写入外围接口设备的某一参数时,只要填写外围接口设备的装置地址、欲写入数据的地址,欲写入的数据内容。 █此指令的缺点是:(1) 只能写入符合MODBUS通讯格式的接口设备; (2) 并且该指令执行一次,只能写入一笔(一个WORD)数据,(3)不能写入位装置。4.MODRW---MODBUS 数据读/写 █此指令也是针对“外围接口(变频器,温度控制器…)设备符合MODBUS通讯格式”的指令。█此指令既可以用来读取也可以用来写入外围接口设备(变频器,温度控制器…)的参数 █此指令的优点是:(1) 该指令既可以用来读取也可以用来写入数据,可以直接对参数地址进行操作; (2)并且能够一次读取/写入多笔(ES/EP最多8个word;EH最多16个word)数据。█此指令的缺点是:(1) 只能写入符合MODBUS通讯格式的接口设备,(2)不能读/写位装置。 5.CVFD软件---数据读/写█此软件可以可以读取也可以写入,并且还能够监控发送和接受到的数据. █此指令的优点是:(1)该软件可以很直观的监视发送&接收的数据;(2)该软件可以很方便的对外围接口设备读取和写入数据;(3)该软件能够对位装置进行读/写(4)该软件最多可以读取23(EH系列PLC)个word数据。理论上最多可以写入127个word数据。(5)该软件既可以通过RS-232也可以通过RS-485来监控外围设备。(6)和MODBUS,RS指令相比较,使用CVFD软件监控通讯数据是最方便,最直观的。

台达变频器和PLC通讯功能的实现方法

台达变频器和PLC通讯功能的实现方法 1 引言 plc和变频器是自动化设备上最常见的部件。其最初的控制型式大多是用plc的i/o点和模拟量模块直接控制变频器的启停和实现调速,但这种控制方式有两大弊端,最大的弊端是占用plc的i/o点和需要增加昂贵的模拟量模块,造成控制成本的增加。当被控制的变频器数量较多时,此弊端更是明显。第二个弊端是模拟量控制容易受干扰,传输距离也容易受限制。 近几年来自动化产品不断更新换代,性能不断提升,功能日益强大。在小型plc方面这个变化更加明显,现在的小型plc不仅执行速度大大提高,指令功能日益丰富,更重要的是大都支持多种通讯协议,并提供了更多的通讯接口。同时大多的变频器也具有了rs485接口,也能支持多种通讯协议,最常见的就是modbus协议。这种技术的进步为plc和变频器通讯的实现,提供了软件上的协议和硬件上的物理接口,从而为低成本高性能的通讯控制的实现打下了良好的基础。 2 通讯相关的基础知识 2.1 通讯协议communications protocol 通信协议是指通信双方的一种约定。这个约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程。 modbus协议是工业控制器中使用较普遍的一种网络协议。通过此协议,各种控制器之间(比如plc、变频器、伺服驱动器、各种智能仪表)、控制器通过其它网络(比如以太网)和其它设备之间都可以通信交换信息。该协议定义了一个控制器可以识别的信息架构,从而使不同厂商生产的支持此协议的各种工控产品可以连接到一个网络上进行集中控制和信息交换。 2.2 rs485接口的特点 rs485接口是在大家熟知的rs232接口的基础上推出的性能更优的一种串口。由于rs485接口具有良好的抗噪声干扰性,长的传输距离和多站功能等优点,它成为应用越来越广泛的串行接口。此外,rs485接口组成的半双工网络一般只需二根屏蔽双绞电线,这为长距离的通讯线路节省了很多配线,降低了系统的成本。 3 台达plc和变频器通讯功能的特点

delphi期末考试题

一、填空题(20分,每题2分) 1、一个对象是由三部分组成,分别为:方法、属性和事件所组成。 2、当程序运行时,如果要求窗体中的某个按钮不再显示,可以将该按钮的Visible 属性 设置为false即可。 3、Delphi应用程序中项目文件的扩展名是.dpr 4、Delphi是基于面向对象技术的,在delphi中,属性表示对象中的数据,方法是 对象能够执行的动作,事件是能够引起对象反应的条件。 5、写出下列表达式的值: Trunc(—1.3)+int(1.4)= 0 Sqr(3)+strtoint(19)= 28 3-2<>Int(1.1)= FALSE 6、在delphi集成开发环境中,如果想要直接设置或者修改对象的属性,可以通过对象观察器中的属性窗口直接进行设置。 7、复选框对象是否被选中,是由其checked 属性决定的。 8、delphi中程序与数据库之间进行数据交换一般由多个数据库组件协作完成,如果用户要查询数据库的一条信息,该指令通过界面组件发出,经数据源组件到达数据库组件。数据库组件利用自身的读写功能,通过数据库连接组件从数据库中取得数据,再经数据源组件送到用户界面组件中显示。 9、delphi中设计应用程序的菜单时,有主菜单和弹出菜单两种菜单,它们各自“standard”页上的一个组件创建,主菜单由MainMenu 组件创建,而弹出菜单用PopupMenu 组件创建窗体中的多页面设计要用到PageControl组件。 10、计时器控件能有规律的以一定时间间隔触发Ontimer 事件,并执行该事件过程中的程序代码。 二、单项选择题(20分,每题2分) 1、delphi程序设计的基本特点是(D) A.可视化程序设计 B.代码程序设计 C.事件驱动编程 D.A和C 2、下列哪个常量说明语句是正确的(D) A.const x := (c<16); B. const x : 16; C.const x :=16; D. const x = 16; 3、编辑框中的文本发生改变时被触发的事件是(B) A.AutoSize B. OnChange C.SetFocus D. SetFocus 4、下列说法正确的是(B) A.组件必须是可视的,这样用户才能看见。B. 控件都是可视的。 C.一个组件肯定是控件 D. 按钮(Button)是组件,而窗体(Form)则不是组件。 5、下面对Memo组件Memol操作正确的语句是(D) A.Memol.Clear””; B. Memol.Lines:=’Test’; C.Memol.Lines.Add(123456); D. Memol.Lines.Delete(1); 6、设有语句 X:=TnputBox(‘输入数值’,‘0’,‘示例’) 程序运行后,如果从键盘上输入数值10并按回车键,则下列叙述中正确的是:( D ) A.变量x的值是数值10 B. 在InputBox对话标题栏中显示的是“示例”

Delphi程序设计试题

《Delphi 程序设计》试题及解答 一、填空题(20分,每空2分) 1、结构化程序设计要求程序中仅采用顺序、分支和循环三种控制结构,其中每种结构只能有一个入口和一个出口。 2、现实世界中对象具有自己的状态和行为。与此相对应,面向对象技术中的对象可以具有自己的属性和方法。 3、Delphi 的一个项目由若干文件组成,其中与窗体文件对应的文件是单元文件。 4、在设计阶段,ListBox 对象列表框中的内容是通过 Items 属性来进行设置的。 5、调用主窗体的Close 方法,可以结束程序。 6、如果要在窗体上设计一个主菜单,首先要建立MainMenu 对象。 7、当Query 对象中存储一条Delete 语句时,执行该语句需要调用Query 的ExecSQL 方法。 8、与数学表达式 53)(cos 2++x b a 对应的Object Pascal 表达式是 sqr(cos(a+b)) /(3*x)+5 或 cos(a+b) * cos(a+b) /(3*x)+5 9、通过Animate 对象的CommonA VI 属性设置,可以指定系统标准的A VI 动画演示。 10、利用Canvas 对象的LineTo 等方法,可以绘制基本图形。 二、单项选择题(20分,每题2分) 1、下面哪句话比较准确地定义了Delphi ( A )。 A .面向对象的可视化的开发环境 B .多媒体制作工具 C .数据库的客户端开发工具 D .高级编程语言 2、下面哪个功能键可以调出Delphi 的联机帮助信息(A ) A .F1键 B .F2键 C .F3键 D .F4键 3、“x 是小于10的非负数”的Object Pascal 表达式是( B ) A .0 ≤ x < 10 B . (x >=0) AND (x < 10) C .x >= 0, x<10 D . (x >= 0 ) OR (x<10) 4、工具栏上的一组按钮如果要构成互斥关系(如“左对齐”、“居中”、“右对齐”),它们的GroupIndex 属性正确的设置是( C ) A .GroupIndex 属性值都为0 B .GroupIndex 属性值非0,且互不相同 C .GroupIndex 属性值非0,且相同 D .GroupIndex 属性值互不相同 5、利用Image 对象的哪个属性设置,可以使Image 对象的显示区域随着调入图像的大小自动调整以显示全图( B ) A .Stretch B .AutoSize C .Align D .Center 6、现建立一个简单报表,仅包含报表标题栏、数据列标题栏和数据栏,则在Bands 属性的子属性中,不需要选择的是( D ) A .HasColumnHeader B .Detail

delphi复习题

复习题 1、在文件操作中Eof的意思是。 2、在Delphi的BDE数据集中通过控件来实现对SQL语言的支持。 3、要想使窗体中的某个控件获得焦点,则需调用方法。 4、MaskEdit是格式文本输入对象,属性为它提供了过滤文本的格式。 5、由于TDBGrid控件和TDBNavigator控件是自动地访问数据集控件中所有可以访问的字段控件的,因此它们没有属性。 6、函数format(‘本场%已进了1个球!’,[‘李铁’])返回的字符串为。 7、TEdit控件的MaxLength属性是设置。 8、想在Button按钮上设置快捷方式,需要在Caption属性中应用符号。 9、通过数据库字段对象(例如:Ttalbe部件的字段对象)的属性可以读取字段值,并且将它转换成字符串类型。 10、Delphi为用户提供一种Append方法,用来。 11、常量是一种内容不能改变的标识符,常量声明采用保留字。 12、Delphi的计时器的Interval属性设置为1000,即是每隔秒会被触发一次。 1、以下正确的枚举类型的定义是()。 (A)type vowel=(‘a’,’e’,’i’,’t’,’u’) (B)type num=(1..3, 8..10) (C)type color=(red, blue, black) (D)type realtype=(1.5, 2.5, 3.5, 4.5) 2、已知如下子界类型定义及变量声明: Type ntype= -10 .. 10; Var m: ntype; n: integer; 问下列语句哪一个可能产生错误:()。 (A)n := m; (B)m :=n; (C)n := abs(m); (D)n := n+m; 3、下列哪些符号哪一个是Delphi6中的合法变量名()。 (A)AB5 (B)0AB (C)Then (D)A[B]8 4、下面哪个是delphi工程文件的扩展名()。 (A).pas (B).dpr (C).cfg (D).dfm 5、Memo控件的Align属性用于调整该对象在窗口中的对齐方式,当需要该控件顶部对齐时,其值可以设置为()。 (A)alTop (B)alClient (C)alBotton (D)alright

完整的delphi程序设计教程课后习题答案

1.239页1题小时钟 procedure TForm1.Timer1Timer(Sender: TObject); var xt,yt:integer; h,m,s,ms:word; begin decodetime(time,h,m,s,ms); xt:=paintbox1.clientwidth div 2; yt:=paintbox1.clientheight div 2; paintbox1.refresh; paintbox1.canvas.moveto(xt,yt); paintbox1.canvas.pen.width:=3; paintbox1.canvas.lineto(xt+round(s in((60*h+m)/(12*60)*2*pi)*100), yt-round(cos((60*h+m)/(12*60)*2 *pi)*100)); paintbox1.canvas.moveto(xt,yt); paintbox1.canvas.pen.width:=2; paintbox1.canvas.lineto(xt+round(s in(m/60*2*pi)*140), yt-round(cos(m/60*2*pi)*140)); paintbox1.canvas.moveto(xt,yt); paintbox1.canvas.pen.width:=1; paintbox1.canvas.lineto(xt+round(s in(s/60*2*pi)*180), yt-round(cos(s/60*2*pi)*180)); end; end. 2.239页3题求两点间的距离procedure TForm1.Button1Click(Sender: TObject); begin paintbox1.Refresh; formpaint(sender); end; procedure TForm1.FormPaint(Sender: TObject); var xt,yt:integer; ax,ay,bx,by:integer; begin xt:=paintbox1.ClientWidth div 2; yt:=paintbox1.Clientheight div 2; paintbox1.canvas.MoveTo(xt,0); paintbox1.canvas.lineTo(xt,2*yt); paintbox1.canvas.MoveTo(0,yt); paintbox1.canvas.lineTo(2*xt,yt); ax:=strtoint(edit1.text); ay:=strtoint(edit2.text); bx:=strtoint(edit3.text); by:=strtoint(edit4.text); edit5.Text:=floattostr(sqrt((ax-bx)* (ax-bx)+(ay-by)*(ay-by))); paintbox1.canvas.MoveTo(xt+ax*1 0,yt-ay*10); paintbox1.canvas.lineTo(xt+bx*10, yt-by*10); end; end. 3.226页5题输入学生成绩 var Form1: TForm1; type studentrecord=record xh,xm:string[6]; xb:boolean; yy,sx,dz:integer; end; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var t:studentrecord; f,f1:file of studentrecord; p1,p2:boolean; begin assignfile(f,'c:\my documents\stu.dat'); reset(f); assignfile(f1,'c:\my documents\stu1.dat'); rewrite(f1); while not eof(f) do begin read(f,t); p1:=(t.sx>=85)and(t.yy>=85)and(t. dz>=85); p2:=t.sx+t.yy+t.dz>=270; if p1 or p2 then write(f1,t); end; closefile(f); closefile(f1); end; procedure TForm1.FormCreate(Sender: TObject); var t:studentrecord; f:file of studentrecord; xingbie:string; begin assignfile(f,'c:\my documents\stu.dat'); reset(f); while not eof(f) do begin read(f,t); if t.xb then xingbie:='男' else xingbie:='女'; listbox1.Items.Add(t.xh+' '+t.xm+' '+xingbie+' '+inttostr(t.sx)+ ' '+inttostr(t.yy)+' '+inttostr(t.dz)); end; closefile(f); end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; end. 4.226页8题保存获得奖学金者 var Form1: TForm1; type studentrecord=record xh,xm:string[6]; xb:boolean; yy,sx,dz:integer; end; implementation {$R *.dfm} procedure

相关文档
相关文档 最新文档