1、 目录 3. ST基本原理 7 3.1语言描述 7 3.1.1语法图 7 3.1.2语法图中的块 7 3.1.3规则的意义(语义) 8 3.2基本元素的语言 8 3.2.1 ST字符组 8 3.2.2 ST中的标识符 9 3.2.2.1标识符的规则 9 3.2.2.2标识符举例 10 3.2.3预留标识符 10 3.2.3.1保护标识符 11 3.2.4数字和布尔值 17 3.2.4.1整数 17 3.2.4.2浮点数 18 3.2.4.3指数 18 3.2.4.4布尔值 18 3.2.4.5数字的数据类型 19 3.2.5字符串 19 3.3 ST源
2、文件的结构 20 3.3.1语句 21 3.3.2注释 22 3.4数据类型 23 3.4.1基本数据类型 23 3.4.1.1基本数据类型 23 3.4.1.2基础数据类型的值的范围限制 25 3.4.1.3普通的数据类型 26 3.4.1.4基础系统数据类型 27 3.4.2用户定义的数据类型 27 3.4.2.1用户定义的数据类型 27 3.4.2.2用户定义的数据类型的语法(类型声明) 28 3.4.2.3基础派生或派生的数据类型 29 3.4.2.4 派生数据类型ARRAY 30 3.4.2.5 派生的数据类型—枚举 31 3.4.2.6派生的数据类型S
3、TRUCT(结构) 32 3.4.3技术目标数据类型 34 3.4.3.1技术目标数据类型的描述 34 3.4.3.2轴属性的继承 35 3.4.3.3技术目标数据类型的例子 36 3.4.4系统数据类型 37 3.5变量声明 37 3.5.1变量声明的语法 37 3.5.2所有变量声明的概述 39 3.5.3变量或数据类型的初始值 40 3.6赋值和表达式 43 3.6.1赋值 44 3.6.1.1赋值的语法图 44 3.6.1.2基础数据类型的变量的数值指定 45 3.6.1.3串基础数据类型的变量数值指定 45 3.6.1.4位数据类型的变量的数值指定 46
4、 3.6.1.5派生的枚举数据类型的变量的数值指定 48 3.6.1.6派生的阵列数据类型的变量的数值指定 48 3.6.1.7派生的STRUCT数据类型的变量数值指定 48 3.6.2表达式 49 3.6.2.1表达式结果 49 3.6.2.2表达式的解释顺序 50 3.6.3运算对象 50 3.6.4算术表达式 51 3.6.4.1算术表达式的例子 54 3.6.5关系表达式 54 3.6.6逻辑表达式和位串行表达式 56 3.6.7运算符的优先级 57 3.7控制语句 58 3.7.1 IF语句 58 3.7.2 CASE语句 60 3.7.3 FOR语句
5、 61 3.7.3.1处理FOR语句 62 3.7.3.2 FOR语句规则 62 3.7.3.3FOR语句例子 63 3.7.4WHILE语句 63 3.7.5REPEAT语句 64 3.7.6EXIT语句 64 3.7.7RETURN语句 65 3.7.8WAIFORCONDITION语句 65 3.7.9GOTO语句 67 3.8数据类型转换 67 3.8.1基础数据类型转换 67 3.8.1.1隐式数据类型转换 68 3.8.1.2显式数据类型转换 70 3.8.2补充的转换 71 4.功能,功能块和程序 71 4.1创建和调用功能和功能块 72 4.1
6、1定义功能 72 4.1.2定义功能块 73 4.1.3FC和FB的声明部分 73 4.1.4FB和FC部分的语句 75 4.1.5功能和功能块的调用 76 4.1.5.1参数转移的原则 76 4.1.5.2转移给输入参数的参数 77 4.1.5.3参数转移给in/out参数 78 4.1.5.4参数转移到输出参数(仅对FB) 79 4.1.5.5参数访问时间 79 4.1.5.6调用一个功能 79 4.1.5.7调用功能块(实例调用) 80 4.1.5.8 在FB外访问FB输出参数 81 4.1.5.9在FB外访问FB输入参数 82 4.1.5.10FB调用时的
7、错误源 82 4.2功能和功能块的比较 83 4.2.1例子说明 83 4.2.2带注释的源文件 84 4.3程序 85 4.4表达式 87 5.在SIMOTION中ST的集成 89 5.1源文件部分的使用 89 5.1.1源文件部分的使用 89 5.1.1.1interface部分 89 5.1.1.2implementation部分 91 5.1.1.3程序组织单元(POU) 91 5.1.1.4功能(FC) 92 5.1.1.5功能块(FB) 92 5.1.1.6程序 93 5.1.1.7表达式 94 5.1.1.8声明部分 94 5.1.1.9语句部分
8、 95 5.1.1.10数据类型定义 95 5.1.1.11变量声明 96 5.1.2在ST源文件之间的导入和导出 98 5.1.2.1单元标识符 98 5.1.2.2一个导出单元的interface部分 99 5.1.2.3一个导出单元的例子 99 5.1.2.4在一个导入单元的USES语句 100 5.1.2.5一个导入单元的例子 101 5.2在SIMOTION中的变量 102 5.2.1变量模型 102 5.2.1.1单元变量 104 5.2.1.2不保留的单元变量 105 5.2.1.3保持单元变量 106 5.2.1.4本地变量(静态和临时变量) 107
9、 5.2.1.5静态变量 109 5.2.1.6临时变量 110 5.2.2全局设备变量的使用 111 5.2.3变量类型的存储范围 112 5.2.3.1存储区域的例子,有效关于KernelV3.1 113 5.2.3.2本地数据栈变量的存储要求(kernel V3.1或更高) 116 5.2.4变量初始化的时间 118 5.2.4.1保留全局变量的初始化 118 5.2.4.2不保留的全局变量的初始化 119 5.2.4.3本地变量的初始化 120 5.2.4.4静态编程变量的初始化 121 5.2.4.5功能块实例的初始化 122 5.2.4.6技术目标的系统变
10、量的初始化 122 5.2.4.7全局变量的版本ID和下载时的初始化 123 5.2.5变量和HMI设备 124 5.3访问输入和输出(过程图像,I/O变量) 126 5.3.1访问输入和输出的概述 126 5.3.2直接访问和过程图像访问的重要特征 127 5.3.3直接访问和循环任务的过程图像 128 5.3.3.1 直接访问和循环任务的过程图像的I/O地址的规则 129 5.3.3.2为直接访问和循环任务的过程图像创建一个I/O变量 130 5.3.3.3输入I/O地址的语法图 131 5.3.3.4可能的I/O变量的数据类型 132 5.3.4背景任务的固定过程图
11、像的访问 132 5.3.4.1背景任务的固定过程图像的绝对访问(绝对PI访问) 133 5.3.4.2一个绝对过程图像访问的标识符语法 134 5.3.4.3背景任务的固定过程图像的符号访问(符号PI访问) 135 5.3.4.4可能的符号PI访问的数据类型 136 5.3.4.5符号PI访问的例子 136 5.3.4.6为访问背景任务固定过程图像而创建一个I/O变量 136 5.3.5访问I/O变量 137 5.4使用库 137 5.4.1编辑一个库 138 5.4.2库的know-how保护 139 5.4.3从库中使用数据类型,功能和功能块 140 5.5相同的
12、标识符和命名空间的使用 141 5.5.1相同的标识符的使用 141 5.5.2命名空间 143 5.6参考数据 146 5.6.1交叉对照表 147 5.6.1.1创建一个交叉对照表单 147 5.6.1.2交叉对照表的内容 147 5.6.1.3交叉对照表的使用 148 5.6.2程序结构 148 5.6.2.1程序结构的内容 149 5.6.3代码属性 149 5.6.3.1代码属性内容 150 5.7控制预处理器和pragma编辑 150 5.7.1控制一个预处理器 150 5.7.1.1预处理器语句 151 5.7.1.2预处理器语句的例子 154 5
13、7.2属性控制编辑器 155 5.8跳转语句和标签 157 6.错误源和程序调试 158 6.1避免错误和有效编程的注释 158 6.2程序调试 158 6.2.1程序测试的模式 158 6.2.1.1SIMOTION设备模式 158 6.2.1.2life-sign监视的重要信息 160 6.2.1.3life-sign监视参数 161 6.2.2符号浏览器 162 6.2.2.1符号浏览器的属性 162 6.2.2.2使用符号浏览器 162 6.2.3在watch表中监视变量 164 6.2.3.1在watch表中的变量 164 6.2.3.2使用watch表
14、格 165 6.2.4程序运行 165 6.2.4.1程序运行:显示代码位置和调用路径 165 6.2.4.2参数调用栈程序运行 166 6.2.4.3程序运行工具栏 166 6.2.5程序状态 166 6.2.5.1程序状态的属性 167 6.2.5.2使用状态程序 168 6.2.5.3程序状态的调用路径 170 6.2.5.4参数调用路径状态程序 171 6.2.6断点 171 6.2.6.1设置断点的普通步骤 171 6.2.6.2设置debug模式 172 6.2.6.3定义debug任务组 172 6.2.6.4debug任务组参数 174 6.2.6
15、5debug表格参数 174 6.2.6.6设置断点 175 6.2.6.7断点工具栏 176 6.2.6.8定义一个单独断点的调用路径 177 6.2.6.9断点调用路径/任务选择参数 178 6.2.6.10定义所有断点的调用路径 179 6.2.6.11每个POU所有断点的调用路径/任务选择参数 180 6.2.6.12激活断点 181 6.2.6.13显示调用栈 183 6.2.6.14断点调用栈参数 184 6.2.7追溯 184 3. ST基本原理 此章节描述了ST中的语言资源和使用方法。请注意此章节中描述了功能、功能块和任务控制系统。一个完整正式的语
16、言描述包括语法图,详见目录(第307页)。 3.1语言描述 在本手册的下列章节中语法图用作语言描述的基础,为你提供了对ST语法结构的新认识。 3.1.1语法图 语法图是对语法结构的图形式的阐述。结构是由一系列的规则描述组成。可以基于现有的规则生成新的规则。 上图中的语法图需从左至右读。需要注意下列规则结构: ●序列:块的序列 ●选项:可以跳过的语句 ●迭代:一个或多个语句的重复 ●替代:Branch 3.1.2语法图中的块 块是基本元素。下图显示了代表块而使用的符号类型。 要更多解释的基本元素
17、 由更多的语法图解释的复合单元 当输入源文本时需要注意格式化规则和非格式化规则。比如:把语法图中的块或元素转化为源文本(见帮助中的语言描述,第291页) 3.1.3规则的意义(语义) 规则能仅代表语言的格式结构。意义(语义)一般不明显。由于这个原因,如果意义很关键,则需要在规则旁边写上额外的信息。 ●如果同类型的元素意义不同,需要附上额外的命名。例如,额外指定每个十进制字符串元素—年,月或日(见308页)。名称表示了用途 ● 重要的限制也列出。如:整数规则中对于—(负号),标明负号只能在SINT, INT, and DINT数据类型之前出现(见308页) 3.2
18、基本元素的语言 ST语言的基本元素包括ST字符组, 根据ST字符组(如:语言命令)创建的预留标识符,自定义的标识符和数字。 ST字符组合预留标识符都是基本的元素(terminals),因为是无需另外的规则来描述。自定义的标识符和数字不是terminals,因为它们是由另外的规则来描述。 在语法图中,终端是由圆形或者椭圆形符号来表示,但是复合单元由长方形来表示(见语法图中的块,第72页)。下列内容是主要终端的节选,作为全局预览,参考基本元素(terminals,第294页) 3.2.1 ST字符组 ST使用ASCII字符组中的下列字母和数字 ●从A到Z的大小字母 ●从0
19、到9的阿拉伯数字 字母和数字是最常用的字符。例如,标识符是字母,数字和下划线的组合。下划线是特殊的字符之一。 特殊字符在ST中有特定的含义(见第291页的正式语言描述和第294页的基本元素) 3.2.2 ST中的标识符 标识符的ST中的名称。这些名称可以根据系统来定义,例如语言命令等。但是,名称可以是用户定义,比如常量、变量或功能。 3.2.2.1标识符的规则 标识符是由字母(A到Z,a到z)、数字(0到9)或单独的下划线随意组成,但是首字符必须是字母或者下划线。大小写字母没有区分(比如,在编辑器中Anna和AnNa是一样的)。 一个正式的标识符可以由以下的语
20、法图表示: 命名时,最好选用唯一的、有意义的命名,以便解释程序。 图表中的语法图声明了一个标识符的首字符必须是字母或者下划线。下划线必须跟着字母或数字。如:不允许连续有两根或以上的下划线。下划线可以跟着任意或者一系列的数字,下划线或字母。在这唯一的例外是两条下划线可能不会同时出现。 3.2.2.2标识符举例 有效的标识符 无效的标识符 无效标识符 原因 4ter 第一次字符必须为一个字母或者下划线 *#AB 不允许特殊字符(除了下划线) RR__20 不允许有两个下划线 S value 不允许出现空格,因为是特殊字符 Array 虽然A
21、RRAY是一个正式有效的标识符,但是它是一个预留标识符。,只能做预先定义使用。这意味着你不能使用这个名称,比如:变量 标识符不能用作 绝不定义标识符: ●与预留标识符一样 ●与任务命名相匹配 注意: 如有可能,避免定义由下划线,struct,enum,或者command开始的标识符 虽然这些是有效的标识符,当你下载技术包时可能导致出现错误。在基础系统和在技术包中命令词语,参数或数据类型以这些字符开始。 3.2.3预留标识符 预留标识符可能和预先定义的用途不一样。你不能用预留标识符的名称来命名一个变量或者数据类型。 符号的大小写无区别。 所有标识符的
22、预先定义的意义可以在SIMOTION基本功能功能手册中找到: ●·ST编程语言中的保护或者预留标识符,欲知更多,请见76页和81页 ●·标准功能和功能定义的数据类型,欲知更多,请见251页 ●系统的常规功能块 ●SIMOTION设备系统功能、系统变量和数据类型 ●技术目标的系统功能、系统变量和数据类型 3.2.3.1保护标识符 ST语言中的保护标识符全列在了下表中。 欲见所有预留词的简短描述,请见附录预留词语(第299页)和规则附录中的语法图(第307页) 3.2.3.2额外的预留标识符 下表包含了将来扩展所有的预留标识符。
23、 3.2.4数字和布尔值 在ST中可以通过多种方式编写数字。数字可以包括一个符号、一个小数点或者一个指数。下列规则适用于所有的数字: ●数字中不能出现逗号和空格 ●下划线允许作为视觉上的分隔线 ●数字可以冠以正号(+)或者负号(—),如果没有使用符号 则认为数字为正。 ●数字不能超过确定的最大值或最小值 3.2.4.1整数 整数既不包括小数点也不包括指数。一个整数是一系列的数字,也可以在前面加上一个符号。 下列为有效的整数: 0 1 +1 -1 743 -5280 60 000 -32 211 321 下列整数为无
24、效,并且已经列出原因: 123,456 不允许有逗号 36. 整数不能包括小数点 10 20 30 不允许有空格 在ST中,你可以使用不同的编号体系来表示整数。通过插入编号系统的关键字前缀来实现。 ●2#为二进制 ●8#为八进制 ●16#为十六进制 十进制小数15的有效表示方式为: 2#1111 8#17 16#F 3.2.4.2浮点数 下列为有效的浮点数 0.0 1.3 -0.2 827.602 0000.0 +0.000743 60_000.15 -315.0066 下列为无效的浮点数 1.
25、 数字必须出现在小数点之前或之后 1,000.0 不允许有逗号 1.333.333 不允许有两个小数点 3.2.4.3指数 指数可以用来定义小数点的位置。如果没有出现小数点,我们就假设位于数字的右侧。指数必须为正整数或负整数。基数10用字母E来表示。 3 x 108在ST中可以通过下列正确的浮点数来表示: 3.0E+8 3.0E8 3e+8 3E8 0.3E+9 0.3e9 30.0E+7 30e7 下列浮点数是无效的: 3.E+8 数字必须出现在小数点之前或之后 8e2.3 指数必须为一个整数 .333e-3 数字必须出现在小数点之前或之后 30 E
26、8 不允许有空格 3.2.4.4布尔值 布尔值是恒定常量。必须通过0或者1,TRUE或者FALSE来表示。 3.2.4.5数字的数据类型 编辑器根据数值和使用来自动选择适合数字的基本数据类型。 也可以直接指定数据类型。在数字前面输入数据类型(数字数据类型)和字符“#”。 3.2.5字符串 什么是字符串? 一个字符串是许多的0或在最前面或者最后面带撇号的多字符。每个字符在串中 一个字符可以如下输入: ●可打印的字符(ASCII code $20 to $7E, $80 to $FF),除了美元符号(ASCII code $24)和撇号(AS
27、CII code $27)之外,因为这些符号在字符串中有着特殊的含义。 ●美元符号($)之后的相关字符的2位的十六进制ASCII code ●根据下表组成的两个字符的组合 3.3 ST源文件的结构 一个ST源包含连续的文本,通过划分为逻辑块形成文本。详细的规则见源文件章节(第169页)。 简单的总结如下: ●一个ST源文件是可以在项目中创建的一个逻辑单元,可以出现多次。通常被称为一个单元。 ●一个ST源文件的逻辑部分被称为Section(见表格) ●一个用户程序是所有程序源的集合(如:ST源文件,MCC单元) 每个ST源文件的逻辑部分的开头和结尾都有特定关键词
28、 没有必要自己对每个功能编程,可以使用SIMOTION系统组件。这些是预先编程好的部分,如系统功能或技术目标的功能。 源文件部分 描述 单元语句(可选的) 包括ST的名称 interface部分 包括导入和导出变量的语句,类型和POU implementation部分 包括ST源文件的执行部分 POU(程序组织单元) ST源文件(程序,功能,功能块)单独的可执行部分 声明部分 包含声明(如变量和类型),可以被包含在interface部分和implementation部分,以及POU中 语句部分 包含一个POU的可执行语句 注意: 在线帮助中
29、有很多可用的示范单元的模板。你可以使用作为一个新ST源文件的模板。 调用ST编辑器帮助,点击相关链接。复制文本到ST编辑器窗口,根据你的需求修改模板。 示范单元的模板包括此模板的复制件 3.3.1语句 一个POU的语句部分包括重复的单独语句。跟着POU的声明部分,以POU的结束而结束。首尾没有明显的关键词。 在ST中有三种基本语句: ●赋值:从表达式到变量的赋值,见105页变量声明 ●控制语句:语句的分支的重复,见130页控制 ●子程序执行:功能和功能块,见147页功能,功能块和程序 3.3.2注释 注释用作编制文件,同时也帮助用户理解源文件部分。在
30、编制后,对于程序执行没有任何意义。 注释有两种: ●线注释 ●块注释 线注释由//开始。编辑器将进行跟随的文本,知道线注释结束 你可以在很多线之后输入一个块注释,如果 (首尾都是 *)先于它。 当插入注释时注意: ●在注释中可以使用完整的扩展ASCII字符集 ●在线型注释中可以忽略字符组(* 和 *) ●不允许块注释的嵌套。但是,在块注释中你可以嵌套线注释。 ●可以在任意位置插入注释,但是不能在保持的规则中插入,如标识符的名称中。欲知更 多规则信息,见291页语言描述源。 3.4数据类型 使用数据类型来定义如何在程序源中使用变量或常量值
31、 下列数据类型对用户是可用的: ●基本数据类型 ●用户定义的数据类型(UDT) —简单的导数 —阵列 —枚举 —结构 ●技术目标数据类型 ●系统数据类型 见 基本数据类型(第90页) 技术目标数据类型(第101页) 系统数据类型(第104页) 3.4.1基本数据类型 3.4.1.1基本数据类型 基本数据类型定义了不能分成更小的单元的数据结构。一个基本数据类型描述了有固定长度的存储区域,代表了数字数据、整数、浮点值、时间、日期和字符串。 所有的基本数据类型在下表中列出: 类型 预留词 位宽度 值的范围 位数据类型: 此
32、类型的数据使用1位、8位、16位或32位。此数据类型的变量初始值为0 位 BOOL 1 0, 1 or FALSE, TRUE 字节 BYTE 8 16#0 to 16#FF 字 WORD 16 16#0 to 16#FFFF 双字 DWORD 32 16#0to 16#FFFF_FFFF 数字类型: 此类数据类型可用于处理数值。此数据类型的变量初始值为0(全为整数)或0.0(全为浮点数) 短整数 SINT 8 -128 to 127 (-2**7 to 2**7-1) 无符号短整数 U SINT 8 0 to 255 (0 to 2**8-
33、1) 整数 INT 16 -32_768 to 32_767 (-2**15 to 2**15-1) 无符号整数 UINT 16 0 to 65_535 (0 to 2**16-1) 双整数 DINT 32 -2_147_483_648 to 2_147_483_647 (-2**31 to 2**31-1) 无符号双整数 UDINT 32 0 to 4_294_96_7295 (0 to 2**32-1) 浮点数(per IEEE -754) REAL 32 -3.402_823_466E+38to 1.175_494_351E−38, 0.0, +
34、1.175_494_351E−38 to +3.402_823_466E+38 精度:23位尾数(对应6位小数),8位指数,1位字符 长浮点数(IEEE-754) LREAL 64 -1.797_693_134_862_315_8E+308 to -2.225_073_858_507_201_4E−308, 0.0, +2.225_073_858_507_201_4E−308 to+1.797_693_134_862_315_8E+308 精度:52位尾数(对应15位小数),11位指数,1位字符 时间类型:此类数据用于表示不同的时间或日期 1分钟的增量的持续时间 TIME
35、 32 T#0d_0h_0m_0s_0msto T#49d_17h_2m_47s_295ms 天,小时,分钟的数值最多为2位。里程碑最多为3位。初始为T#0d_0h_0m_0s_0ms 1天的增量的日期 DATE 32 D#1992-01-01 to D#2200-12-31需要考虑闰年,年份为4位,月份和天数为2位。初始为D#0001-01-01 分钟为单位的当日时间 TIME_OF_DAY(TOD) 64 TOD#0:0:0.0 to TOD#23:59:59.999天,小时,分钟的数值最多为2位。里程碑最多为3位。初始为TOD#0:0:0.0 日期和时间 DAT
36、E_AND_TIME(DT) 64 DT#1992-01-01-0:0:0.0to DT#2200-12-31-23:59:59.999 日期和时间包括日期和时间的类型。初始为DT#0001-01-01-0:0:0.0 串类型: 此类数据代表字符串,每个字符使用特定字节的数字来编码。 串的长度可以在声明中定义。用"[" 和"]"来表示长度。如:STRING[100]。默认的设置包含80个字符。 指定(初始)字符的数字可以少于声明的长度。 1字节/字符的串 STRING 8 ASCII code $00 到 $F的所有字符都是允许的。 默认’ ’ (空字符串) 注意:当导
37、出变量到其他系统时,需要考虑对应的目标系统的数据类型的值的范围 3.4.1.2基础数据类型的值的范围限制 基础数据类型的值的范围作为常量可用。 3.4.1.3普通的数据类型 普通的数据类型被用作系统功能和系统功能块的输入和输出参数。子程序被称做包含在普通数据类型中的每个数据类型的变量。 下表列出了可用的普通数据类型: 3.4.1.4基础系统数据类型 在SIMOTION系统中,表格中指出的数据类型使用与基础数据类型类似。和许多系统功能一起使用。 标识符 位宽度 用途 StructAlarmId 32 alarmld的数据类型用于识别唯
38、一的信息。alarmld用于生成信息。见功能手册SIMOTION基本功能。初始为STRUCTALARMID#NIL StructTaskId 32 taskld的数据类型是在执行系统中识别唯一的任务。见功能手册SIMOTION基本功能。初始为STRUCTTASKID#NIL 无效的基础数据类型数值的符号常量 符号常量 数据类型 意义 STRUCTALARMID#NIL StructAlarmId 无效AlarmId STRUCTTASKID#NIL StructTaskId 无效TaskId 3.4.2用户定义的数据类型 3.4.2.1用户定义的数据类型
39、 用户定义的数据类型(UDT)通过在声明章节中随后的源文件部分和以下内容来创建TYPE/END_TYPE: ●interface部分 ●implementation部分 ●程序组织单元(POU) 可以使用在声明章节中创建的数据类型。源文件部分决定了类型声明的范围。 3.4.2.2用户定义的数据类型的语法(类型声明) 对于每个声明的数据类型,需要遵循以下: 1.名称:数据类型的名称必须遵循标识符的规则。 2.数据类型声明 数据类型包括(见第96页,基础派生或派生数据类型) -基本数据类型 -之前声明的UDT -TO数据类型 -系统数
40、据类型 下列数据类型声明也是可能的: -阵列数据类型声明(见派97页生数据类型ARRAY) -枚举数据类型声明(见派99页生数据类型Enumerator) -STRUCT数据类型声明(见派100页生数据类型STRUCT) 括号中的内容只可以参考的章节,相关的数据类型声明详细描述在这些章节中。 3.可选的初始值 你可以为每个数据类型指定初始值。如果你声明一个数据类型的变量,初始值被指定为变量。 例外:在STRUCT数据类型中,每个单独的组件的初始值范围规定在数据类型声明中 见变量或数据类型的初始化(第107页) 完整的UDT声明用END_TYPE关键词来结
41、束。你可以使用TYPE/END_TYPE结构来创建任意数据类型的数字。你可以使用定义的数据类型来声明变量或参数。 只要语法在图标中可见,UDT可以用任意方式嵌套。例如:你可以使用之前定义的UDT或嵌套结构作为一个数据类型声明。类型声明仅可以连续使用,并不是以嵌套结构的形式。 注意:你可以学习如何在所有变量声明的概述(见106页)中声明变量和参数,以及如何在语法中使用UDT来数值指定(见113页)。 3.4.2.3基础派生或派生的数据类型 在数据类型的派生中,一个基础或用户定义的数据类型(UDT)使用TYPE/END_TYPE结构来定义。 TYPE标识符:基本数据类型{
42、 := initialization } ; END_TYPE TYPE标识符:用户定义数据类型{ := initialization } ; END_TYPE 一旦你已声明数据类型,你可以定义派生的数据类型标识符的变量。这等同于声明变量。 3.4.2.4 派生数据类型ARRAY ARRAY派生数据类型包括用TYPE/END_TYPE结构来定义的同种数据类型。下图的语法图展示了这种数据类型,在预留标识符OF之后这种数据类型声明得更加详细。 TYPE标识符:ARRAY数据类型声明{ := initialization } ; END_TYPE 索引声明书描
43、述了阵列的限制: ●阵列限制声明了索引值的最大和最小值。可以使用常量或常量表达式。数据类型为DINT(或转化为DINT-详见141页基础数据类型转化) ●阵列限制必须用两个句号隔开 ●全部的索引声明须在方括号中 ●索引可以为一个数据类型DINT(或转化为DINT-详见141页基础数据类型转化)的整数值 注意:如果运行时阵列超限,程序会产生过程故障(见SIMOTION基本功能功能手册) 用数据类型声明来声明阵列组件的数据类型。本章节中所描述的所有的选项都可以用作数据类型,甚至是用户定义数据(UDT)。 有多种不同的阵列类型: ●一维阵列类型为升序排列的一列数据元素
44、 ●二维阵列是一个包括行和列的数据表。第一维是指行数,第二维是指列数。 ●更高维的阵列类型是二维阵列类型的扩展 二维阵列可以与带行和列的表格比较。可以通过多层次的类型声明来创建二维或多维阵列。 在例子中,你可以定义: ●表格列a[1] 到 a[3]作为一维阵列,将包含整数 ●表格行矩阵1[1] 到矩阵2[4]作为一个阵列,但是作为使用表格中的列创建的阵列的数据类型声明。 当你在数据类型声明中声明阵列时,创建了一个第二维度。可以使用此方式创建更多的维度。 使用创建此表格的数据类型来声明一个变量。使用方括号为表格中的每个维度寻址。 3.4.2.5 派生
45、的数据类型—枚举 在枚举的数据类型中,使用受限的标识符或名称来定义TYPE/END_TYPE结构。 TYPE标识符:枚举数据类型声明{ := initialization } ; END_TYPE 一旦你已声明了标识符的数据类型,可以在枚举中定义变量。在语句部分,可以从这些变量的定义标识符(枚举元素)表单中数值指定。 可以直接声明数据类型:把枚举数据类型标识符和“#”放在枚举前面。 可以包含带enum_type#MIN和enum_type#MAX结构的枚举数据类型的第一和最后一个值,enum_type为枚举数据类型标识符。 可以包含带ENUM_TO_DI
46、NT转化功能的枚举元素的数值。 注意:你将会得知枚举数据类型为系统数据类型。 枚举数据类型可以为一个结构的部分,意味着在用户定义的数据结构中可以在任意的低级别中被找到。 3.4.2.6派生的数据类型STRUCT(结构) 派生的数据类型STRUCT,或者结构包括TYPE/END_TYPE结构的固定数量的组件。这些组件的数据类型可以变化: TYPE标识符:STRUCT数据类型声明;END_TYPE 下列为数据类型: 基础数据类型 ●之前声明过的UDT ●系统数据类型 ●TO数据类型 ●ARRAY数据类型声明 你可以选择给组件赋初始值。继续关于
47、变量初始值或数据类型(见107页变量或数据类型的初始值) 注意: 下列数据声明不可以在组件声明中直接使用 ●STRUCT数据类型声明 ●枚举数据类型声明 解决方案:用之前提到的声明在组件声明中预先声明UDT(用户定义数据类型) 这允许嵌套STRUCT数据类型 同样可能会发现STRUCT数据类型为系统数据类型 这个例子说了了一个UDT是如何定义的,在变量声明中又是如何使用的这种数据类型 3.4.3技术目标数据类型 3.4.3.1技术目标数据类型的描述 可以用技术目标来声明变量。下表给出了可用的技术目标的数据类型。 例如,可以用数据类型pos
48、axis来声明一个变量,然后指配一个是适合的位置轴。 可以通过结构访问技术目标的元素。 3.4.3.2轴属性的继承 轴的继承声明所有的数据类型,系统变量和TO driveAxis的功能都全部包含在TO positionAxis中。同样,位置轴页包含在TO followingAxis中,下列轴是在TO pathAxis中,有以下影响: ●如果一个功能或功能块,除了driveAxis数据类型的输入参数之外,调用时你可以使用position axis或者following axis或 path axis。 ●如果有一个功能或功能块,除了posAxis数据类型的输入参数之
49、外,调用时你可以使用following axis或 path axis。 3.4.3.3技术目标数据类型的例子 以下,你将看见可选的技术目标数据类型(你将在SIMOTION基本功能功能手册中找到强制使用TO数据类型的变量)的变量使用。第二个例子介绍了无需使用TO数据类型的变量的替代方法。 TO功能将被用为在程序的主要部分启用一个轴,因此轴能定位。在定位操作结束后,现行的轴的位置将使用结构访问来进行记录。 第一个例子使用了TO数据类型的变量来演示用途。 第二个例子未使用TO数据类型的变量。 你将在SIMOTION运动控制功能描述中招待技术目标的组态和配置细节。
50、 3.4.4系统数据类型 有很多可用的喜悦数据类型,无需预先声明就可以使用。每个导入的技术包提供了一库的系统数据类型。 额外的系统数据类型可以找到 ●在普通标准功能中的参数(见SIMOTION基本功能功能手册) ●在普通标准功能模块中的参数(见SIMOTION基本功能功能手册) ●在SIMOTION设备的系统变量中(见相关的参数手册) ●在SIMOTION设备的系统功能参数中(见相关的参数手册) ●在技术目标的系统变量和组态(见相关的参数手册) ●在技术目标的系统功能参数中(见相关的参数手册) 3.5变量声明 一个变量定义了可在ST源文件中使用的变量内容的数据






