五、知识链接

五、知识链接

1.在创建数据库点过程中,选择点的节点时“区域”和“单元”代表什么含义?

区域:区域是根据生产装置运行的特点将一个生产工艺过程分成几部分,设计时可以将各部分装置的数据划分在不同的区域内,也可以针对一个工厂级数据来进行管理。例如化工厂的反应工段、公用工程工段、炼油厂的催化裂化工段等,就可以分在不同的区域里。每个力控数据库系统可以支持多达31个区域。

单元:单元通常是把与一个工艺设备或完成一个工艺目标的几个相连设备有关的点集合在一起,例如一个反应器、锅炉(包括锅筒等)、再生器等设备上的监控点都可以分配到一个单元内。力控的许多标准画面是以单元为基础操作的,如:总貌画面就可以按照单元分别或集中显示点的测量值。每个点都必须分配给一个单元,而且只能分配一个单元,如图1-4-19所示。

2.什么是点的类型?点的类型有哪几种?

点的类型是实时数据库DB对具有相同特征的一类点的抽象。DB预定义了一些标准点类型,利用这些标准点类型创建的点能够满足各种常规的需要。对于较为特殊的应用,可以创建用户自定义点的类型。

实时数据库DB提供的标准点类型有:模拟I/O点、数字I/O点、累计点、控制点、运算点、组合点和雪崩过滤点等。不同的点类型完成的功能不同。比如,模拟I/O点的输入和输出量为模拟量,可完成输入信号量程变换、小信号切除、报警检查和输出限值等功能。数字I/O点输入值为离散量,可对输入信号进行状态检查。

978-7-111-54974-1-Chapter01-67.jpg

图1-4-19 数据库中区域、单元和点的关系

3.什么是点参数?

点是一组数据值(称为参数)的集合。在数据库中,用户操纵的对象是点(TAG),系统也以点为单位存放各种信息。点存放在实时数据库的点名字典中。实时数据库根据点名字典决定数据库的结构,分配数据库的存储空间。用户在点类型组态时决定点的结构,在点组态时定义点名字典中的点。

点参数是含有一个值(整型、实型、字符串型等)的数据项的名称,例如PV和DESC等。在点名字典中,每个点都包含若干参数。力控数据库系统提供了一些系统预先定义的准点参数,如NAME、DESC和PV等,用户也可以创建自定义点参数。

对一个点的访问实际上是对该点的具体某一参数的访问,对一个参数值进行访问时也必须明确指定其所属点的名称。采用“点名.参数名”的形式访问点及参数,如“TAG1.PV”表示点TAG1的PV参数。因为PV参数代表过程测量值,经常被访问,因此在力控系统中,当访问某一点而不指定具体参数名时,均表示访问的是PV参数。如:访问“TAG1”即表示访问“TAG1.PV”。

一个点可以包含任意个用户自定义参数,也可以只包含标准点参数而没有用户自定义参数。

4.组态软件中是如何定义“变量”的?

力控监控组态软件运行环境分为几个基本部分,包括人机界面(View)、数据库(DB)、通信程序(IoMoniter/NetServer),变量是人机界面进行数据处理的核心,它是View进行内部控制、运算的主要数据成员,是View中编译环境的基本组成部分,它只生存于View的环境中。

人机界面程序View运行时,工业现场的状况要以数据的形式在画面中显示,View中所有动态表现手段,如数值显示、闪烁、变色等都与这些数据相关。同时操作人员在计算机前发送的指令也要通过它发送到现场,这些代表变化数据的对象为变量,运行系统View在运行时,工业现场的生产状况将实时地反映在变量的数值中。

5.变量的类型有哪几种?分别有什么作用?

力控监控组态软件提供多种变量,包括:系统变量、窗口中间变量、数据库变量、中间变量和间接变量等。

系统变量:力控监控组态软件提供了一些已定义的中间变量,称之为系统变量。每个系统变量均有明确的意义,可以完成特定功能。例如,若要显示当前系统时间,可以将系统变量“978-7-111-54974-1-Chapter01-68.jpgtime”动画连接到一个字符串显示上。

系统变量均以符号(978-7-111-54974-1-Chapter01-69.jpg)开头,如图1-4-20所示,可以从变量管理器中查看系统变量。

978-7-111-54974-1-Chapter01-70.jpg

图1-4-20 变量管理器

窗口中间变量:窗口中间变量作用域仅限于力控应用程序的一个窗口,或者说,在一个窗口内创建的窗口中间变量,在其他窗口内是不可引用的,即它对其他窗口是不可见的。窗口中间变量是一种临时变量,它没有自己的数据源,通常用作一个窗口内动作控制的局部变量、局部计算变量,用于保存临时结果。

中间变量:中间变量的作用域范围为整个应用程序,不限于单个窗口。一个中间变量,在所有窗口中均可引用。即在对某一窗口的控制中,对中间变量的修改将对其他引用此中间变量的窗口的控制产生影响。窗口中间变量也是一种临时变量,它没有自己的数据源。中间变量适于作为整个应用程序动作控制的全局性变量、全局引用的计算变量或用于保存临时结果。

数据库变量:数据库变量与数据库DB中的点参数进行对应,完成数据交互,数据库变量是人机界面与实时数据库联系的桥梁,其中的数据库变量不但可以访问本地数据库,还可以访问远程数据库,来构成分布式结构。

数据库变量的作用域为整个应用程序。当要在界面上显示处理数据库中的数据时,需要使用数据库变量。一个数据库变量对应数据库中的一个点参数。

间接变量:间接变量的作用主要有3种,一种是当其他变量的指针使用,第二种是当普通变量使用,第三种是当数组使用。间接变量实现数组功能,可以直接使用而不需要初始化。

6.数据库变量与数据库组态中的“点”是什么关系?

一个数据库变量对应数据库中的一个点参数。数据库变量与数据库DB中的点参数进行对应,完成数据交互,数据库变量是人机界面与实时数据库联系的桥梁。

7.力控是如何管理I/O设备的?

力控对I/O设备的管理是通过工具I/O管理器(IoManager)完成的。在IoManager中可以实现I/O设备的“新建”“删除”和“测试”等操作。对I/O设备的管理主要内容要包括:根据物理I/O设备的类型和实际参数,在力控开发系统中创建对应的逻辑I/O设备并设定相应的参数,当逻辑I/O设备创建完成后,如果物理I/O设备已经连接到计算机上,可对其进行在线测试。I/O设备配置完成后,就可以在创建I/O数据连接的过程中使用这些设备。在I/O管理器中实现逻辑I/O与物理I/0的对应。

8.什么是组态软件的动画连接?

动画连接是指图形对象与变量或表达式的对应关系,建立了动画连接后,在图形界面运行环境下,图形对象将根据变量或表达式的数据变化,改变尺寸、颜色等外观。动画功能也就是图形对象的事件。

9.什么是脚本语言?

“脚本”的英文叫Script,它是一种解释性的编程语言,是从主流开发编程语言演变而来的,比如C、BASIC、PASCAL等,通常是它们的子集,脚本不能单独运行,力控软件的脚本要靠View程序解释执行,脚本可以扩充和增强View程序的功能,使系统更具灵活,根据特殊需要可进行特殊定制,使二次开发时更加灵活方便。

10.力控中脚本语言的作用是什么?

为了给用户提供最大的灵活性和功能,力控提供了动作脚本编译系统,具有自己的编程语言,语法采用类BASIC的结构。这些程序设计语言,允许在力控的基本功能的基础上,扩展自定义的功能来满足用户的要求。力控的动作脚本语言功能很强大,可以访问和控制所有组件,如实时数据、历史数据、报警、报表、趋势和安全等;同时,用户通过这类脚本语言,可以实现从简单的数字计算到用于高级控制的算法的功能。

力控中的动作脚本是一种基于对象和事件的编程语言,可以说,每一段脚本都是与某一个对象或触发事件紧密关联的,利用开发系统编译完的动作脚本,可以在运行系统中执行,运行系统通过脚本对变量、函数的操作,便可以完成对现场数据的处理和控制,进行图形化监控。

11.动作脚本的类型有哪些?分别代表什么含义?

动作脚本可以增强对应用程序控制的灵活性。比如,用户可以在按下某一个按钮、打开某个窗口或当某一个变量的值变化时,用脚本触发一系列的逻辑控制、连锁控制,改变变量的值、图形对象的颜色、大小,控制图形对象的运动等。

所有动作脚本都是事件驱动的。事件可以是数据改变、条件变化、鼠标或键盘动作、计时器动作等。处理顺序由应用程序指定,不同类型的动作脚本决定以何种方式加入控制。

动作脚本往往是与监控画面相关的一些控制,主要有以下类型:

1)窗口脚本:可以在窗口打开时执行、窗口关闭时执行或者窗口存在时周期执行。

2)应用程序脚本:可以在整个工程启动时执行、关闭工程时执行或者在运行期间周期执行。

3)数据改变脚本:当指定数据发生变化时执行。

4)键脚本:当按下键盘上某一个按键时执行指定动作。

5)条件脚本:当指定的条件发生时执行的动作。

12.如何创建动作脚本?

要创建动作脚本,需要在开发界面中的“工程”导航栏中来完成,具体的路径为“工程”→“项目”→“全局脚本”→“动作”,可以创建4种类型的动作脚本,如图1-4-21所示。双击4种中的任意一种,即可弹出该类型脚本对应的脚本编辑器。在编辑器中就可以添加动作脚本,如图1-4-22所示。

978-7-111-54974-1-Chapter01-71.jpg

图1-4-21 动作脚本路径

978-7-111-54974-1-Chapter01-72.jpg

图1-4-22 “按键动作”脚本编辑器

13.动作脚本的编程语法是什么样的?

动作脚本语言支持赋值、数学运算等基本语法,也可以书写由IF-ELSE-ENDIF等语句构成的带有分支结构的程序脚本。它由以下几个部分组成:

变量和常数:数据运算的最基本单位。

操作符:对数据实施的运算。

表达式:关键字、运算符、变量、字符串常数、数字或对象的组合。表达式可用来执行运算、操作字符或测试数据。

赋值语句:为变量或属性赋值的语句。

条件语句:使用条件语句可以根据指定的条件控制脚本的执行流程。

多分支语句:使用多分支语句可以根据指定的条件控制脚本的执行流程,在根据同一个条件处理多个分支时,它比条件语句更清晰。

循环语句:循环用于重复执行一组语句。

注释:用来解释代码如何工作的附加文本。

函数:软件提供了一些定制好的系统函数,用户也可以自定义函数。

(1)变量和常量

变量来源于数学,字面意思来看就是值可以变化的量,是计算机语言中能存储计算结果或能表示值的抽象概念。比如定义一个变量a,可以通过赋值操作来改变a的值,a的值是可变的,比如给a赋值操作:a=10,则a的值为10,给a赋值操作:a=8,则a的值变为8。

跟变量对应的就是常量,常量是在程序运行时,不会被修改的量。常量分为不同的类型,如25、0、-8为整形常量,6.8、-7.89为实型常量,a、b为字符型常量。常量一般从其字面形式即可判断。

变量是动作脚本的基本组成单位,任何在脚本中应用的变量必须预先定义过,或者在编译环境下直接进行编译,它是构成脚本的基础。

变量必须有一个合适的名字,变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线“_”组成。通常要把变量名定义为容易使用阅读和能够描述所含数据用处的名称,而不要使用一些难懂的缩写如A或B2等。比如存储水箱水位值的变量可以定义为Water_level。变量名在有效的范围内必须是唯一的,不能有重名。系统已经使用的或者保留的变量名为称为“保留字(关键字)”,保留字不能被再次命名,比如Print是系统的保留字,就不能被再次用来命名新的变量。

(2)操作符

开发系统提供了基本的赋值、算术运算、逻辑运算等功能,它们是通过操作符来完成的,操作符参数可以是数字或变量。在参数外加括号是可选的,而且操作符名称不区分大小写。

1)单目操作符是指只允许有一个操作数参与运算的操作符。关于单目操作符的使用和说明见表1-4-4。

表1-4-4 单目操作符的使用和说明

978-7-111-54974-1-Chapter01-73.jpg

位运算符说明:在计算机中整数在内存中占的长度是16位,因此整数8在内存中的状态是0000000000001000,按位取反之后就是1111111111110111,因此变量b的值转化为十进制之后就是655527。

逻辑运算符说明:计算机的逻辑运算符运算之后的结果只有两种,要么是真,要么是假,或者要么是1,要么是0。脚本语言认为所有非零数都是真,即为1;而为零的数就为假,即为0。

练习1:a=16,b=~a,则b的值为多少?

练习2:a=0,b=!a,则b的值为多少?

2)双目操作符是指有两个操作数参与运算的操作符。关于双目操作符的使用和说明见表1-4-5。

3)操作符按功能可以分为算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符。

①算术运算符。

这些二元操作符执行基本的数学操作。

表1-4-5 双目操作符的使用说明

978-7-111-54974-1-Chapter01-74.jpg

注意1:加号(+)也可以用于连接字符串型变量。

举例:语句a=“Hello”+“world!”,执行完之后,a的内容是“Hello world!”。

注意2:取余(%)是用第一个操作数去除另外一个操作数所得的余数。

举例:a=73%8,则a的结果为1。

②关系运算符。

比较操作符(<、<=、>、>=、<>、==) 常常用在IF ELSE ENDIF等表示判断的语句中,当放在该判断语句中的条件成立时,系统将执行条件成立时的一串语句,当条件不成立时,系统将执行与条件不成立相对应的语句。例如:当温度高于98℃时,调用Playsoud()函数来发出报警音。

978-7-111-54974-1-Chapter01-75.jpg

③逻辑运算符[与(&&)、或(||)、非(!)]是根据表达式的值来返回真值或是假值。需要注意的是逻辑运算后的结果只能是真(1)或假(0)。

与(&&):当表达式进行&&运算时,只要有一个为假,总的表达式就为假,只有当所有都为真时,总的式子才为真。

例如:若a=1&&0,则a的值为0;若a=1&&1,则a的值为1。

或(||):当表达式进行||运算时,只要有一个为真,总的值就为真,只有当所有的都为假时,总的式子才为假。

例如:若a=1||0,则a的值为1;若a=0||1,则a的值为1;若a=0||0,则a的值为0。

非(!):非运算是把相应的变量数据转换为相应的真/假值。若原先为假,则逻辑非以后为真,若原先为真,则逻辑非以后为假。

例如:若a=8,则!a的值为0;若a=0,则!a的值为1。

④位运算符。

按位取反(~):每一个数值变量的值都可以写成一串二进制数。按位取反就是将这串二进制数的每一位进行取反。

举例:a=7;b=~a;b的值为65528,即其二进制为1111111111111000。

按位与(&):参与按位与的两个量都需要是整型的。按位与的实质是把参与“与”操作的两个量所对应的二进制数进行按位与操作。

举例:a=3&4,a是整型量,a的结果为0。

按位或(|)异或(^):参与按位或和异或的两个量都需要是整型的。按位或和异或的实质是把参与“或”操作的两个量所对应的二进制进行按位或或者是异或操作。

举例:a=3|4,a是整型量,a的结果为7;a=3^2a的结果为1。

⑤赋值运算符(=)。赋值语句的形式为:“变量=表达式;”赋值语句用赋值运算符(“=”号)来表示,表示把“=”右边表达式的运算值赋给左边的变量。

赋值运算符左边必须是能够进行写操作的变量,常量、只读变量不能出现在赋值语句的左边。必须确保运算的结果与赋值变量的数据类型一致,否则编译时将弹出提示:“数值型数据不能与字符串混合运算,或者参数类型错!”赋值语句必须以“;”作为语句的结束符。

例如:

978-7-111-54974-1-Chapter01-76.jpg

说明:表达式4中#rectagle1是一个填充矩形的对象名称,fColor是矩形对象的属性,代表它的填充颜色。这个表达式的运行结果是将一个名为rectagle1的填充矩形的填充颜色置为编号为8的颜色。

⑥括号()主要用于限制和调整运算次序。

举例:a+b*c运算次序为a+(b*c)。

若要先运算a+b,然后再与c相乘,只需写成(a+b)*c即可。

(3)表达式

用运算符(操作符)和括号将运算对象(如常量、变量和函数等)连接起来的、符合语法规则的式子,称为表达式。

表达式分为逻辑表达式、算术表达式和字符表达式。

逻辑表达式:表达式中包含有逻辑运算符或比较运算符时,表达式的值只可能为0(条件不成立,假)或非0(条件成立,真),这类表达式称为逻辑表达式。

例:逻辑表达式x>8&&y<6,这里变量x、y为整型。

算术表达式:当表达式中包含算术运算符,表达式的运算结果为具体的数值时,这类表达式称为算术表达式。

例:算术表达式a+b-c/d,a、b、c、d四个变量为整型。

字符表达式:当表达式由字符常量、字符变量、字符运算、字符函数组成,且其运算结果也是字符时该表达式为字符表达式。

例:字符表达式‘2’+‘f’+‘d’+a,这里a为字符型变量。

(4)注释

注释是用来解释代码如何工作的附加文本,该文本只能起到解释说明的作用,不参与程序的编译,主要是让人更容易理解程序,注释是程序员之间交流的通道。给代码写上工整的注释是一个优秀工程师的良好习惯。

"//"表示该行后面的所有文本都是注释。

"/*"和"*/"必须配对使用,出现在这两者之间的所有文本都是注释。不支持嵌套,"/*"会在后续文本中找一个与它最靠近的"*/"与它配对,不管中间是否又出现了"/*"。

注释实例如下:

978-7-111-54974-1-Chapter01-77.jpg

(5)程序结构

程序结构基本分为3种:顺序程序结构、分支程序结构和循环结构。

1)顺序程序结构。

程序的执行是按顺序从第一条语句开始执行到最后一条语句,这种程序结构称为顺序结构。

2)分支程序结构(IF和Switch)。

分支程序结构由IF语句和Switch语句组成,分支程序结构意即程序运行到此处可以根据条件的真假而决定执行什么样的后继语句。

IF格式1:

978-7-111-54974-1-Chapter01-78.jpg

如果表达式的条件成立,则执行THEN和ENDIF之间的语句,否则跳过执行这些语句。注意:IF和ENDIF成对出现,一个IF对应一个ENDIF。

示例:

978-7-111-54974-1-Chapter01-79.jpg

在上例中,当液体温度超过85℃或者低于55℃,系统输出信息为“温度不正常”,同时播放报警声音alert.wav。若不满足条件则跳过,执行最后的程序语句。

IF格式2:

978-7-111-54974-1-Chapter01-80.jpg

如果表达式的条件成立,则执行执行体1,否则执行执行体2。

示例:

978-7-111-54974-1-Chapter01-81.jpg

在这个例子中,当液体温度超过98℃时,系统输出信息为“温度超高”,系统发出声音报警,否则系统的输出信息为“温度正常”。

IF格式3:

978-7-111-54974-1-Chapter01-82.jpg

IF语句可以嵌套使用,嵌套次数不受限制,嵌套使用时必须注意每一个IF必须要有配套的ENDIF。

示例:

978-7-111-54974-1-Chapter01-83.jpg

978-7-111-54974-1-Chapter01-84.jpg

在这个例子中,若液体温度超过98℃时,系统输出信息为“温度过高”,系统发出声音报警“alert1.wav”;若液体温度低于60℃时系统输出信息为“温度过低”,发出声音报警“alert2.wav”;其他情况都输出信息“温度正常”。

Switch语句也称为开关语句,它是多分支结构,而IF语句是二分支结构,多分支语句用来实现多分支选择,它能够根据表达式的值来决定控制的转向,即根据表达式的值,来决定执行几组语句中的其中之一。IF语句可以实现两路选择,而实际情况却经常需要多分支的选择。如根据炉膛温度的不同范围(如320~330;330~340;340~350;...),采取不同的处理方案。通过一条Switch语句可以清晰地对各种情况进行处理。虽然IF语句嵌套也能实现,但是层数多,不直观,可读性差。

语法:

978-7-111-54974-1-Chapter01-85.jpg

说明:

E:Switch括号内的E为必有参数,为数值表达式。当该表达式的值与下面哪一个Case语句中的常量匹配时,就将转向执行哪个Case后的语句。

c-1,…,c-n:一般为一常量,也可以是一组分界列表,形式为:c1,c2,c3,…各分界间以逗号“,”分隔。TO关键字可用来指定一个数值范围,如5TO10,表示取值为5~10之间,包括5和10。如果使用TO关键字,则一般较小的数值要出现在TO之前。当表达式E的值与c-n的任何一分界值相匹配时,便执行其后的执行语句,当执行到下一个Case或Default语句时,将跳出多分支语句。

statements-i:一条或若干条执行语句。

Default:当E不匹配Case子句的任何部分时执行其后的执行语句。当执行到下一个Case时,将跳出多分支语句。如果没有Default语句,且没有哪一个Case的界值与表达式E的值相匹配,多分支内的任何语句都不会被执行,控制将转向多分支体后的语句执行。

注意事项:

Case语句与执行语句间必须以“:”结束;Default语句可以没有,但是不能有多个;界符不能重复或交叉;Switch语句可以任意嵌套。

示例1:学生成绩分类(90分以上为A,80分以上为B,70分以上为C等),根据考试成绩grade的等级值‘A’、‘B’、‘C’、‘D’和‘E’,输出百分制分数段:

978-7-111-54974-1-Chapter01-86.jpg

示例2:

978-7-111-54974-1-Chapter01-87.jpg

在上例中,a的值为0时将执行b=b+1;a的值为1时将执行b=b+2;a为0,1以外的其他值时将执行b=b+10;

示例3:

978-7-111-54974-1-Chapter01-88.jpg

在上例中,a的值为0,1,2时将执行b=b+1;a的值为3时将执行b=b+2;a为0,1,2,3以外的其他值时将执行b=b+10。

示例4:

978-7-111-54974-1-Chapter01-89.jpg

978-7-111-54974-1-Chapter01-90.jpg

在上例中,a的值为0,1,10~15,21时将执行b=b+1;a的值为3时将执行b=b+2;a为其他值时将执行b=b+10。

3)循环结构(FOR和WHILE)。

在脚本和编程语言中,循环结构可以实现更加复杂的功能,使用更加普遍。力控提供了两种循环语句,即FOR循环和WHILE循环,下面分别介绍这两种循环。

FOR的语法为

FORI=E1TOE2[STEP E3]

执行体

NEXT

说明:

上述语法结构中的变量或表达式含义如下:

I为循环控制变量,必须为整型,一般应为中间变量,或窗口中间变量。

E1为I的初值表达式。

E2为I的上限。

E3为循环控制变量I的增量表达式。

FOR TO STEP NEXT为FOR循环保留字。

中括号中的STEP E3可以省略,如果没有STEP子句,增量默认为1。

注意:初值表达式E2、增量表达式E3在进入循环时对其求值一次,循环中不再计算。

示例1:

978-7-111-54974-1-Chapter01-91.jpg

在上例中,循环次数为4,I每次增量为1。第一次循环I取值为0,第二次循环I取值为1,第三次循环I取值为2。执行完后m的值为3。

其中I=0为循环变量初始化,I=0 TO 3表示循环的结束判断,当I=3时,则说明循环应用结束;在这个示例中STEP省略,所以增量为1进行修正。

示例2:

978-7-111-54974-1-Chapter01-92.jpg

在上例中,循环次数为6,I每次增量为2。执行完后m的值为5。

WHILE的语法为

WHILE条件表达式DO

执行体

ENDWHILE

说明:当条件表达式满足时,执行DO后的执行体,执行后重新循环,直到条件表达式不满足时,跳出循环。

示例:

978-7-111-54974-1-Chapter01-93.jpg

在上例中,n的初始值为0,只要条件表达式n<10满足,则执行m=m*n;执行完之后循环控制变量n的值加1,再次与条件表达式对比,若仍满足该条件,则再次执行一次m=m*n,直至循环到第11次时,此时n的值为10,不满足条件表达式n<10,跳出WHILE循环,执行循环后的语句。

14.什么是模拟(模拟量)?什么是开关(开关量/数字量)?什么是字符串?

在为对象创建动画连接时,数值输出一栏中有模拟、开关、字符串3个选项可以选择,那么到底应该选择哪一种?下面来详细说明。

不论是模拟量、数字量还是字符都是计算机的数据类型中的一种,在弄懂这几种数据类型的区别和意义之前需要理解什么是计算机中的数据类型。

数据是描述客观事物的数、字符以及所有能被输入到计算机中并被计算机程序加工处理的符号集合。数据既是程序处理的基本对象,也是程序的必要组成部分,又是程序运算所产生的结果。数据类型是指数据在计算机内部的表述和存储形式。不同的数据类型具有不同的存储长度、取值范围和允许的操作。计算机在处理数据之前,必须知道该数据的类型才能在计算机内部进行存储、计算、输出等操作,若无法获知该数据的类型则计算机无法处理该数据。由于在力控中使用脚本语言需要有一定的编程基础,这里就对常见的数据类型进行介绍。

常见的基本数据类型有整型、字符型、实型、字符串型和布尔型(bool)。

978-7-111-54974-1-Chapter01-94.jpg

每种数据类型都有常量和变量之分。比如整型常量、实型常量、字符型常量和字符串型常量以及整型变量、实型变量和字符型变量。

常量为程序运行过程中其值始终保持不变的量,下面分别介绍。

整型常量:整型就是整数,整型常量就是整常数。常见使用的整常数有八进制、十六进制和十进制3种表示方法。比如:十进制表示的整型常数237、-568、65535、1627,十进制整常数没有前缀;十六进制表示的整型常数0X2A(十进制为42)、0XA0(十进制为160)、0XFFFF(十进制为65535),其中OX为十六进制数的前缀;八进制表示的整型常数015(十进制为13)、0101(十进制为65)、0177777(十进制为65535)。其中最常见的是十进制表示的整型常数。

实型常量:实型就是实数,实型常量又称实数或浮点数。比如:4.6、-8.7、123.7653等。

字符型常量:单引号括起来的单个字符构成,如’a’、’y’、’#’、’*’、’3’、’6’。字符型常量只能用单引号括起来,不能用双引号或其他括号。字符型常量只能是单个字符,不能是几个字符构成的字符串。

字符串型常量:字符串型常量是一对双引号括起来的字符序列。例如下面是合法的字符串型常量:"how do you do.","CHINA","a","978-7-111-54974-1-Chapter01-95.jpg123.45"。字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符‘\0’自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占(n+1)个字节。如:“Hello”在计算机内部的占用的存储为978-7-111-54974-1-Chapter01-96.jpg

这里需要注意的是“a”与‘a’的区别,‘a’是一个字符型常量,“a”是一个字符串型常量,只不过该字符串只有一个字符a。

变量指在程序运行过程中可改变其值的量,用于存储程序运行时的临时数据,在内存中占用一定的字节空间。

变量有4个特性:名字、数据类型、作用范围和生存周期。使用前一般需先声明变量名和数据类型,以决定系统为它分配的存储单元。声明变量有两种形式:显式声明和隐式声明。声明一个变量就是指明其名称、类型、有效的作用域及其生存期。变量要按规则命名,通常要先声明后使用。最好对变量先声明再使用,要养成良好的编程习惯。如:声明变量i是一个基本整型,int i。

整型变量:有int(基本整型变量)和long(长整型变量)之分,两个类型的变量所占的内存空间和能表示的值的范围不同。每一个基本整型变量在内存中占2个字节,每一个长整型占用4个字节,见表1-4-6。

表1-4-6 整型变量的分类

978-7-111-54974-1-Chapter01-97.jpg

实型变量:实型变量有单精度实型变量(float)、双精度实型变量(double)和长双精度(long double)之分。

Float、double和long double的区别就在于取值范围和精度不同。double精度高,有效数字为16位,float精度为7位。但double消耗内存是float的两倍,double的运算速度比float慢得多。对于实型变量,小数部分位越多,精度越高。指数部分越多,表示数值范围越大,见表1-4-7。

表1-4-7 实型变量的分类

978-7-111-54974-1-Chapter01-98.jpg

实数的指数表示法:由十进制数加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为aEn(a为十进制数,n为十进制整数)其值为a*10n,如:2.1E5(等于2.1×105),3.7E-2(等于3.7×10-2),0.5E7(等于0.5×10,7),-2.8E-2(等于-2.8×10-2

字符型变量:字符型变量是用来保存单字符的一种变量,每个变量可以存放一个字符,且只能是一个字符,不能超过一个字符,在内存中占1个字节。

字符型变量的定义和使用如下:

charc;(变量声明,定义c为字符型变量)

c=’a’;(给变量赋值,赋值结束之后c的值为’a’)

字符串型变量:字符串型变量是用来保存字符串的一种变量,每个变量可以存放一个字符串。字符串型变量所占用的存储空间与字符串的长度有关。

字符串型变量的定义和使用如下:

stringa;(变量声明,定义变量a为字符串型变量)

a=“nihao”;(给变量赋值,赋值结束之后a的值为“nihao”)

a=“welcome”(给变量赋值,赋值结束之后a的值为“welcome”,由于a是变量,a的值是可以改变的,因此当第二次赋值后a的值由之前的“nihao”变为“welcome”)

布尔型变量:布尔型变量是用来保存布尔型值的一种变量。由于布尔型数值只有两个值,true(1)或者false(0),因此布尔型变量只能存放true或false。在有些编程环境中true也用1来表示,false用0来表示。

在了解了计算机语言中数据类型的知识后再回到对象动画连接中的数据输出“模拟”“开关”和“字符串”的选择上来。在力控中若要输出的变量的值是一个实数或者整数,那么需要选择“模拟”,若要输出的变量的值是布尔型数据,那么选择“开关”,若要输出的变量的值是一个字符串或者字符,那么需要选择“字符串”。

15.在动画连接和脚本语言中“=”和“==”分别代表的含义和区别?

对于初学者来说非常容易混淆“=”和“==”操作符。“=”为赋值操作符,而“==”是比较操作符,常用来做判断的条件。“=”和“==”都属于二元操作符(又叫双目操作符,即指有两个操作数参与运算的操作符,与之相对应的是单目操作符,比如逻辑非操作符“!”)。

“=”为赋值操作符,可以把值赋给一个变量。该值可以是常量也可以是另外一个变量。常量和另外一个变量的类型可以是整型、实型、字符型和字符串型。

注意1:只能把同类型的值赋给该变量。若变量a是一个整型,那么只能把整型的值赋给a,若把其他类型的值赋给a就会出现语法错误。

注意2:若多次给同一个变量赋值,则执行完后变量的值是最后一次给该变量赋的值。

示例1:

若a为实型,执行:

a=3.5;

执行完后a的值为3.5。

示例2:

若a为字符型,执行:

a=‘f’;

执行完后a的值为‘f’。

示例3:

若a为字符串型,执行:

a=“Hello World”;

执行完后a的值为“Hello World”。

示例4:

若a、b为实型,执行:

b=147.68;

a=b;

执行完后a的值为147.68。(若a,b类型不同则出现语法错误,无法编译)

示例5:

若a、b为实型,执行:

b=147.68

a=b;

a=68.0;

a=79.8

执行完后a的值为79.8。

“==”是比较操作符,例如“a==b”,这里如果a和b确实相等则(a==b)的结果为真(为1),条件成立;如果a和b的值不相等,则(a==b)的结果为假(为0),条件不成立。需要注意的是a和b可以是常量也可以是变量。可以是整型、实型、字符型和字符串型等类型。

注意:这里在力控中变量a和b的类型要求必须一致才能进行“==”操作。

示例1:

978-7-111-54974-1-Chapter01-99.jpg

这里如果说a的值确实为7则把标识变量Flag的值赋为1。

示例2:

978-7-111-54974-1-Chapter01-100.jpg

这里a的值经过赋值操作后与字符串“hello world”确实相等,因此程序执行完后标识变量Flag的值为1。