gd语言中文说明解读

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GD语言中文说明目录
一. 引言
二. 概述
三. 语言结构
3.1 语法元素
3.1.1被接受字符的设定
3.1.2 标识符
3.1.3 保留字
d 隔离符
e 数字常数
f 字符串
g 注释
(2) 数据结构
a.GDL 目标
A)目标类型
B)说明参数目录
C)状态变量关键字
D)运算符(操作码)
E)激励关键字
b 目标间的层次关系
A)数据类型和访问类型
(3)过程
a.激励条件
b.可执行指令
(4)GDL 应用程序结构
四. 语言句法
(1) GDL 文件
(2) GDL 模块
(3) 目标说明
a 说明一个局部目标
A)数组型目标
B)定义文一子关系
b 说明一个外部目标
(4)过程
a 激励器目录
b 表达式
A)代数表达式
B)关系
C)布尔表达式
C 可执行指令:赋值与操作符调用
A)赋值
B)目标操作符调用
d 可执行指令:控制处理流程
A)“IF”指令
B)“WHILE”指令
C)“RETURN”指令
五、一个简单的程序例
一、引言
由于包装机不断加快,包装机日趋复杂化以及对于内设本机生产数据处理的机床需求量日益增加,基于使用大功率控制器微处理设备的设计就必不可少了。

然而,CPU 的特点是,控制器软件是用特殊且适应微处理器的语言书写的,就其本性而言,该语言是复杂的,要求专业人员来使用。

用户在车间实际安装的是功率强大的尖端系统,具有高性能,但是,在执行维修操作或者修改机床配置时,该系统又是很复杂的。

况且机床用户还日益面临着更加复杂的市场需求,这种需求产生了生产适应性问题,面临着生产批量的不断减少及机床型号繁多的数量和种类,这种形式就更加迫切需要有一种控制系统,可以让本厂人员能进行简便的再配置,而不必依靠制造商的专业操作人员来操作。

为满足这一需求,对自动包装机械已开发出一种新的控制系统,即使在使用极大功率CPU 时,也可以通过一种专门的程序语言与用户接口,这就是GD(GD Language)语言。

实际上,GD 语言(GDL),结构化语句(structured text)描述程序设计语言,是一种高级结构程序语言,它是模块化的、能以一种简单而又快捷的方式对所有组成被控制系统的实际逻辑设备进行描述,然后,执行控制算法、过程可以在这些设备上运行。

二、概述
GDL 允许对数据结构(称为GDL 目标)定义,它们代表在机床上须受控制的实际部分或逻辑部分,GDL 还可以对控制算法(称为GDL 过程)的定义,它们为使系统在控制状态下作出所需要的行为而建立的目标应执行的动作。

这样,以说明目标和过程的说明指令以及目标本身的操作指令都定义为构成过程本身的可执行指令。

一个GDL 应用程序表示一套用来控制机床的所有目标和过程,在广义上来说是由一定的模块组成。

每一个模块内含有一定的目标所需要的说明,而对于过程,则可有可无。

在一个模块中定义的目标通常可以与在其他模块中的目标有逻辑联系。

例如:其中一个目标的特性可以根据另一个目标的特性进行独特的定义,或者一个过程的可执行指令可以参考在别处说明的目标。

对于软件本身的发展速度和维修方面说来,发展使用复合、分离模块的应用程序的可能性是主要优点之一,但是有一个有限。

在应用程序参考表示机床实际部分的条件下,识别存在目标的名称必须在整个应用程序中是唯一的,相应地,用户应当为过程的名称和模块的名称使用唯一的标识符(名称)。

三、语言结构
在这一章里,总体上对描写GDL 的元素作分析,即是基本概念,但不作详细说明。

首先,分析GDL 语法元素,然后是数据结构及意义,接着是GDL 过程的概念与执行方法,最后是
浏览应用程序软件包的总体结构。

在第四章里,详细说明写一个程序所使用的语句。

3.1 语法元素
在这一节里,要说明GDL 编译程序所接受的字符设定及语言元素的语法类型(单词),这些元素包括:标识符、保留字、隔离符、数字常量、字符串。

属于这其中一类的序列单词组成GDL 指令。

表示指令结束并属于隔离符类的单词是“;”。

3.1.1 被接受字符的设定
可以使用的字符是下列ASCII 码
A………………Z
a……………….z
0 (9)
特殊的字符是 & = + - */ ( ) ,; < > $ [ ] { } ‘ _
字符设定包括空格(SP),回车(CR),换行(CF),横向制表符(HT)。

如果在一个字符串中(即包括在二个单括号内的一组字符)插入一个横向制表符,这个制表符将转换成一个空格。

要得到所需要的空格,应当插入所需要的空格数,而不是制表键。

如果在源程序中所包含的字符有一个不属于被接受的字符,那么一个语法出错信息便会显示。

在字符串及注解中,可以有不属于被接受的字符存在。

3.1.2 标识符
标识符是定义模块名、过程名及GDL 目标名的单词。

标识符的长度可达40 个字符长度,第一个字符必须是字母或一个划线字符首字符后面的字符可以是字母、数字和划线符。

所有的标识符必须与保留字不同,参见所附的保留字目录。

3.1.3 保留字
保留字是编译程序为识别指令的语法而为其本身保留的单词,每一个保留字都不能与任何一个标识符相同,而且不能使用缩写形式。

参见附录中的保留字。

3.1.4 隔离符
几乎所有的特殊字符均为隔离符,它们分为二类:
单隔离符 = + - * / ( ) ,; < > | [ ] { } ‘
双隔离符 <> <= >=
在写双隔离符时,他们之间或他们与其他控制符之间不留空格,如:一个回车(CR),否则这个双隔离符将被解释成两个单隔离符。

3.1.5 数字常量
数字常量是一列数字字符,最长可达九个字符(最大允许值为999999999),在执行过程中,他们的值不变。

当“减号”属于隔离符类时,放在常量前面的一个最终“一目减号”(一)不是该常量
的组成部分。

GDL 不接受实数型常量,只接受整数,即十进位小数点不能使用。

3.1.6 字符串
字符串是括在一个单引号(‘)内的可打印ASCII 码序列,因此(‘)字符不是字符串一部分,注意不要把单引号(‘)字符与重音符号(`)混淆,字符串的长度允许达40 个字符。

若在一个字符内含有一个注解,这个注解就成为该字符串的一部分。

字符串还可以含有
一个横向制表字符(HT)。

但是,该字符将转换为串内的一个空格。

因此,即使在模块目录中呈现一个带有四个空格的字符串,但是程序运行中,控制系统会读已被转换的字符串,由此生成的正文显示出只带一个空格。

为避免这种情况的发生,只要不在字符串使用制表字符就可以了,以和实际需要相符的空格数来代替制表字符。

要把一个字符串拆为二行,击<ENTER>键,移至下一行,然后继续该串的后一部分,在这新的一行里,要重复单个的起始引号(‘),并用单引号(’)结束该字符串。

若要把字符串拆成二行,单个结束引号(’)只能在该串结尾处使用。

字符串的显示是不留空格的。

但可以在续行引号(‘)左面插入空格,(如,产生一个缩进的第二行部分)其他非空格字符则不能插入。

几个正确的例子:
‘string split
‘onto two lines’
‘string split
‘onto three
‘lines’
3.1.7 注解
注解的开始和结束都用特殊字符‘│’,注解可以含有无数个ASCII 码,包括CR,LF及HT
控制字符。

在一个注解中不能插入另一个注解。

但可以插入一个字符串(该字符串就成为注解的一部分)。

编译程序对所有组成注解的字符不予理睬。

注解可以在原程序的任何点出现,甚至在构成一个指令的两个单词之间也可以插入。

注解还
能用来分隔二个其他符号,就好象是一串空格。

3.2 数据结构
如前所述,GDL 提供特有的数据结构。

其中一些结构使得对受控机器的配置(‘GDL目标’)变得简单有效,而其他结构则是用来控制和检测的实际装置(‘GDL 过程’)。

这一节对GDL 目标基础的基本概念作一说明,各特征的详细列表在具体细则中介绍。

3.3 节描述‘GDL 过程’。

3.2.1 GDL 目标
程序员能够处理的GDL 目标是对机床的实际部分或者不是实际硬件装置但表示软件结构部分的描述。

按照需要,使用说明指令,在特定情况的基础上定义特性。

借助于组成GDL 过程体的执行指令可对状态进行修正。

GDL 目标描述一个机器实际器件的例子是
STEPPER$MOTER(步进电机),GDL 目标描述一个软件装置的例子是SYNOPTIC(概要)。

目标既可以是向量,也可以是数组。

一个数组目录代表一组称为数组元素的向量目标。

每一个数组元素有它自己的下标。

下标括在大括弧内,它须设定为正整数值,即数组中第一个元素的下标是1 而不是0。

可以说明一个数组目标,但不能说明它的单个的元素。

所以在写说明时,决不要指明下标。

反之,在可执行指令中,根据对下标的需要与否,可以参考全局数组及单一个别的目标。

目标类型有两大类:第一类是我们已经描述过的,即一组硬件或软件目标类型,它们描述受控系统或允许写控制过程(标准目标)。

第二大类(用户目标)含有专用软件目标类型,它们不直接控制机器,而是定义在GDL程序中有意义的变量及用于写程序的变量。

这类用户目标类型有:
—DIGITAL$VARIABLE
—INTEGER$CONSTANT
—INTEGER$VARIABLE
一个INTEGER$VARIABLE 类型目标是一个程序变量,用以存入一个完整的整型值。

与之相仿,
一个DIGITAL$VARIABLE 类型目标可以含有一个数字值,而一个INTEGER$CONSTANT 类型目标含有一个在说明阶段被赋于的整型值,该值在程序执行过程中不能改变。

标准目标与用户目标之间的区别仅仅是语义上的不同。

假定编译程序对这二大类不作正式的区分,而且程序员只见到一组数据结构,那么我们从现在起只讲‘GDL 目标’,不再区分这二大类。

GDL 目标不是一组目标,而是一组目标类型,程序员可以定义任意量的目标,即属于其中一种允许类型的单个目标,要用不同的名称去标识各单个目标。

每个名必须是唯一的,就是说,再回到前面的例子,STEPPER$MOTOR 和SYNOPTIC 是二类目标,它们可以用来定义,如
‘main_motor’和‘carriage_advance_motor’为属于第一类的二个目标。

现在让我们来分析描述一个通用类型目标的元素。

在为此类目标作说明时,就获得到达它所有元素的通道路,这样便可以与该目标本身相互配合。

3.2.1.1 目标类型
目标类型是这一范畴的具体特征,它用GDL 语言的一个保留字来表示。

几个例子如:STEPPER$MOTOR, DIGITAL$INPUT,MACHINE.
3.2.1.2 说明参数目录
属于某一类的所有元素由一列标识特征的参数作完整的描述。

这些值可以是数字常量,字符串,关键字或标识符,按需而定,一般来说,目标有所需要的特征。

要考虑到每类目标赋值的一个极限。

在某些情况下,同一目标的参数间存在着逻辑关系。

如:对于STP$MOTOR$AXIS 来说,LOWER TRAVEL LIMIT (运行下限)参数必须小于或等于UPPER TRAVEL LIMIT (运行上限),否则会触发一个错误信息。

字符串类型参数是双份的,以允许字符串以二种不同语言显示。

通过专用指令由控制台执行对语言的选择。

3.2.1.3 状态变量关键字
这些是关键字(状态变量关键字),当它们与标识属于此类范畴的一个目标名有关时,便为目标生成一个状态变量。

如: CONSTANT$STATUS 是一个状态变量关键字
‘CONSTANT$STATUS OF
main_motor 组合是目标‘main_motor’的状态变量。

整组状态变量描述了某一时刻一个目标的特定状态,并由操作系统运行时间支持(RTS)控制器作不断的修正,以响应机器上发生的事件。

这就是说,目标的状态是在不断更新的,它所表示的是系统真实的状态。

而GDL 程序员双能介入每一个单一的变量,根据目标本身的
控制要求对变量作出修改,即,当一个特定事件发生时,GDL 程序员可以改变状态并执行所需的控制功能。

如:对‘CONSTANT$STATUS OF main_motor’赋值,结果是电动机操作条件的修正,这表示,电动机可以被启动来接收能量,也可以被切断电源。

GDL 接受5 种不同的数据(V、3、2、2、1)每个状态变量只能取它的类型所许可的值,对于许可类型值的某一子集可能有进一步极限。

在整数值是,这一极限可以是静态的,也是可以是动态的。

在前一种情况中,极限对该目标类型是典型的。

因此,这些极限在手册是标明相同类型的所有目标都有相同的极限(例如:对PWM$OUTPUT ,变量VALUE 表达一个值‘每一千’)。

所以赋值不能大于1000 或小于0),而在后一种情况中,赋于说明参数的
值为目标自身获得了极限。

所以它们对于同一类型的目标可能是不同的(如:一个数组的长度限制了它的下标的最大可赋值)。

若超出了这些极限,就会显示出错信息。

对每个状态变量来说还有一个规定的访问类型
READ (r)如果只允许读变量
WRITE (w)如果只允许写变量
READWRITE (rw)如果允许读、写变量
GDL 调试工具可以强制某些目标的状态变量为所要求达到的值。

访问代码加上字母‘f’(如:‘rwf’)表示这种可能性。

3.2.1.4 操作符
对某些目标类型还有一些特殊命令,用一个指令代替一系列语句来执行复杂的状态修正操作,这些命令是宏指令。

这些操作符表示为RTS(运行时间支持)服务程序的调用,最终传送定义要执行动作所需的参数。

这后者的使用是一般可能性之外的,借助于对状态变量的赋值来改变目标状态。

每个操作符由一专用关键字,由它使用的目标各级最终参数目录来定义。

3.2.1.5 激励关键字
与状态变量关键字相似,每一个目标类型有其他有关的关键字。

当这些有关关键字的后面跟着一个标识符时,便产生另一类变量,叫做目标“激励器”。

只有当一个目标的一个激励器状态被修正,才能采取相应的动作以符合控制算法的要求,以此激励一个或者更多的GDL 过程。

所以目标激励器是释放过程执行的装置。

但是必须注意到仅仅一个激励器的变化对于释放一个过程的执行是不够的,事实上,要释放的那个过程应与一个专门激励器有关。

从相反的观点来看,每个GDL 过程在某方面必须与所有那些我们希望作为触发器使用的激励器相
连。

这种连接是由专用激励器的一个目录产生的,然后在写过程中,该目录与这个过程有关。

受控系统中发生一个事件后,RTS(运行期支援)系统收到一个与那个目标有逻辑联系的中断,一个激励器状态被RTS 系统修正,在这种情况下,含有该激励器的全部过程都被执行,因而提供了中断所需的服务。

例如, STATUS 是一个激励器关键字,‘STATUS OF
digital_input_1’ 是‘digital_input_1’的一个激励器。

当这个输入状态改变时,所有在目录中含有这个激励器的过程都被执行。

还有一种特殊类型激励器,它与任何一个具体目标都无关:全局激励器。

当一个过程的目录中包括全局激励器时,它们触发目录本身的扩展,以获得在该模块中说明的所有目标的激励器的某一子集。

外部目标(用use 语句说明)不包含在生成的目录内。

在这种情况下,应当避免用延伸形式写长目录。

如,全局激励器ANY$DIAGN$STATUS 生成一个目录,该目录中含有与所有局部说明目标的诊断状态有关的全部激励器。

3.2.2 目标间的层次关系
如果二个目标间存在父—子型关系,那么这两个目标有着上下层关系。

这种关系是一种纽带,可以是逻辑的,也可以是逻辑与物理的。

这种关系很显然是由一个事实构成的,那就是子目标在它的定义参数中有其父目标名。

一般来说,一个目标可以拥有一个以上不同类型的父目标,就象是一个目标可以拥有各种不同的子目标一样。

层次联系代表了目标间的物理的或逻辑的连接。

这就是说,在二个目标之间有一个信息流。

例如:若一块主板与一块从板相连,这二块板被说明为父与子。

因此,子目标有必要定义它打算占用父板上哪个连接通道。

这个定义是通过为一个描述了所选通道的子目标作参数说明,用一适当关键字来执行的。

编译程序执行各种层次检查以免重迭或其他错误的发生。

还有一种情况:两个目标有层次关系,但无物理连接。

例如:SYNOPTIC 。

这样一个目标,拥有由图形目标构成的子目标(如:圆、线等等),但无信号流,因为在它们之间有一种专门的逻辑关系。

在这里,无任何参数传到父目标。

还有一种特殊情况,说明参数含有一个目标名(无任何连接参数),但该名不是直接逐层连接的,就是说它不是一个“父”。

这就是SPT$MOTOR$AXI$HOME$INUT 的情况,对这种情形,参数STPMOTOR NAME 是一个目标,在这个目标中,说明必须指出在STEPPERMOTOR BOARD NAME 参数中出现的带有同名的父目标。

这个规则是常常为特殊情况而定的,无视这个规则,就会触发错误信息。

对某些目标还存在定义参数,定义目标本身的物理配置。

对于利用连接通道到达子目标的那些目标为如此。

所有这些参数描述支援连接的物理设备的存在与否。

因此可以任意配置父目标。

如果说明一
个设备不存在,其子目标便不能与它相连,也就是不能使用那些通道。

若一个设备为一特定类型的子目标而保留,同样,它也不能与其他类的目标连接。

3.2.2.1 数据类型及访问类型如前所述
如前所述,GDL 接受的数据基本类型有五种:
—整数
—数字
—设定值
—名称
—字符串
拥有它们自己类型的语言元素有:
—一个目标的说明参数
—状态变量
—有关一个操作符的参数
因此,在对一个元素赋值时,须遵循所涉及的规定类型的法则。

一个整型元素只能设定整数值,正负都可以,其绝对值范围0~999999999。

在特殊情况下,对于可接受的值有更严格的限度。

这些限度源于该元素的性质。

在任何情况下,这种进一步的限度是一个事件一事件的基础上为每一目标指明的。

一个数字型目标由专门的关键字来假设二个值ON 与OFF。

这些元素作为<digitalconstant kwd>(数字常数关键字)
一个设定值型元素由专门关键字设定一组值,这些关键字在赋值时描述元素的状态。

如:状态变量‘CONSTANT$STATUS OF main_motor’可以假设值ENABLED 和DISABLED,这些值称为<set constant kwd>(数字常数关键字)总的说来,另一个‘设定’型元素假设值要用其他关键字来表示,这就是说,一个设定要配有一组不合法的设定常数关键字,不可以用不属于它的组的<设定>常数来对一个<设定>变量赋值。

如果对一个<设定>变量赋值,而不是对<设定>常数赋值,要考虑二个权限。

第一,左右二边赋值变量须相同(不能把由PIAGN$STATUS 假设的值赋于CONTROL$STATUS)。

第二,由右边变量所赋的所有值须对左边所赋变量有效。

否则,显示出错信息。

一个‘名’ 型元素,假设一个GDL 目标的标识符作为它的值,这个目标必须属于元素允许
的目标类型的子集,它是在特定情况基础上规定的。

一个“字符串”型元素,假设一个字符串作为它的值(一个字符串定义为括在单引号内的ASCII 码序列)。

对于状态变量,规定了访问的允许类型。

READ (r)该变量是只读,即,它只能在一个表达式内出现。

WRITE(w)该变量是只写,即,它在赋值指令中只能是在左边部分。

READWRITE(rw)该变量可读可写
加在访问类型代码后的字母‘f’(如‘rwf’)表示该状态变量可以由GDL 调试程序强制。

3.3 过程
一个GDL 模块是由任意量的过程组成的,通过过程可以对目标状态作修正。

一个名标识一个过程。

这个名必须对整个应用程序是唯一的(即没有任何一个其他的过程、目标或模块具有这个相同的名)过程由二个逻辑块构成:激励器目录及含有可执行指令的体。

3.3.1 激励器条件
在收到受控机器的一个服务要求时,由控制系统作出响应执行一个过程。

换句话说,当机器上发生某个事件时,RTS 运行期支持系统探测到这个事件(收到该中断)并触发过程的执行,过程的执行完成一些动作使机器处于正常状况。

事件中涉及的目标与应执行的过程之间的联系是由激励器目录来完成的。

一个事件发生时,它引起一个或几个目标的一个或几个激励器的变化。

因此在激励目录中含有那些激励器的过程便被执行。

一个目录可以包含无数个激励器,但是,要触发一个过程,只要有一个就可以足以作这个改变。

而且,如果中断总是单个地生成,那么激励器也是一次改变一个。

因此可以说,在任何一个特定的瞬间,只有一个目录是活动的。

如果在过程执行中,属于这同一目录的另一个激励器必须有一个变化,则由RTS 系统对这新的执行要求排队,一旦第一个执行完成后,便再次激励同一过程。

如果一个以上的过程含有相同的激励器,这些激励器的激励优先级已经规定,在作模块
连接时由系统设定。

换句话说,可以作为过程执行的顺序并不是过程写入模块的顺序。

如果想以预设置的顺序同步执行二个过程,则必须定义适当类型的另一个目标(如
DIGITAL$FLAG)。

在这种方式中,一个状态变量与一个激励器有同名。

然后在修正目标状态的第一个过程加上一个指令,并且在第二个过程的激励器目录中为新目标加上激励器。

在这种方式中,外部事件能发第一个过程,它修正辅助目标的状态。

由于该状态变量也是一个激
励器,这意为模拟,由于在第二个过程的目录不存在着另一事件的等效事件,通过程序,该事件便被执行。

必须强调的是,一个过程的激励器目录不同于一个目标的激励器目录。

事实上,一个目标激励器目录是目标元素的一个集合,当它们变化时,可以用来能发一个过程的执行。

而过程目录则包含由应用程序定义的可有目标所有激励器子集,在此基础上,过程本身必须触发
执行。

下面看外例子:
假设已定义一个目标‘main_motor’类型为DC$MOTOR$AXIS,它的激励器目录是:
DIAGN$STATNS OF main_motor
OPERATING$CONDITION OF main_motor
目标‘encoder—assoluto’,类型为ABSOLUTE$ENCODER,它的目录是:
DIAGN$STATUS OF absolute—encoder,
OPERATING$CONDITION OF absolute—encoder,
CFG$STATUS OF absolute—encoder,
CFG$UPPATE$RQUEST OF absolute—encoder.
然后,假设有二个过程:过程1,有下列目录:
{OPERATING$CONDITION OF main_motor ,
OPERATING$CONDITION OF absolute—encoder}
过程2 的目录是:
{OPERATING$CONDITION OF absolute—encoder}
如果有一事件修正main_motor 的诊断条件,将没有任何过程被执行。

如果该目标的操作条件被修正,这个事件只会触发过程1。

如果目标‘absolute—encoder’的操作条件修正,将会触发过程1 和2,带有一个不确定的执行顺序。

过程激励的一个目标可以包含全局激励器,就是那样一些激励器,它们与一特定类型的目标无关,因而不包括在这些目标的激励器目录中。

全局激励器通过DECLARE(说明)指令,用来为激励器目录的过程生成目录。

这些激励器目录包括在当前模块中说明的全部目标,但不包括外部目标。

生成这些目录的标准取决于使用哪个全局激励器来定义。

有二个全局激励器:。

相关文档
最新文档