2024年2月19日发(作者:)
ST语言编程手册
目录
1. ST基本原理 .......................................................................................................... 6
1.1语言描述 .......................................................................................................... 6
1.1.1语法图 ....................................................................................................... 6
1.1.2语法图中的块 ............................................................................................. 6
1.1.3规则的意义(语义) .................................................................................. 7
1.2基本元素的语言 ................................................................................................ 7
1.2.1 ST字符组 .................................................................................................. 7
1.2.2 ST中的标识符 ........................................................................................... 8
1.2.2.1标识符的规则 .................................................................................... 8
1.2.2.2标识符举例 ........................................................................................ 9
1.2.3预留标识符 ................................................................................................ 9
1.2.3.1保护标识符 ...................................................................................... 10
1.2.4数字和布尔值 ........................................................................................... 16
1.2.4.1整数 ................................................................................................. 16
1.2.4.2浮点数 ............................................................................................. 17
1.2.4.3指数 ................................................................................................. 17
1.2.4.4布尔值 ............................................................................................. 17
1.2.4.5数字的数据类型 ............................................................................... 18
1.2.5字符串 ..................................................................................................... 18
1.3 ST源文件的结构 ............................................................................................ 19
1.3.1语句 ......................................................................................................... 20
1.3.2注释 ......................................................................................................... 21
1.4数据类型 ........................................................................................................... 22
1.4.1基本数据类型 ........................................................................................... 22
1.4.1.1基本数据类型 .................................................................................. 22
1.4.1.2基础数据类型的值的范围限制 ......................................................... 24
1.4.1.3普通的数据类型 ............................................................................... 25
1.4.1.4基础系统数据类型 ........................................................................... 26
1.4.2用户定义的数据类型 ................................................................................ 26
1.4.2.1用户定义的数据类型 ........................................................................ 26
1.4.2.2用户定义的数据类型的语法(类型声明) ....................................... 27
1.4.2.3基础派生或派生的数据类型 ............................................................. 28
1.4.2.4 派生数据类型ARRAY .................................................................... 29
1.4.2.5 派生的数据类型—枚举 ................................................................... 30
1.4.2.6派生的数据类型STRUCT(结构) ................................................. 31
1.4.3技术目标数据类型 .................................................................................... 33
1.4.3.1技术目标数据类型的描述 ................................................................ 33
1.4.3.2轴属性的继承 .................................................................................. 34
1.4.3.3技术目标数据类型的例子 ................................................................ 35
1.4.4系统数据类型 ........................................................................................... 36
1.5变量声明 ........................................................................................................ 36
1.5.1变量声明的语法 ....................................................................................... 36
1.5.2所有变量声明的概述 ................................................................................ 38
1.5.3变量或数据类型的初始值 ......................................................................... 39
1.6赋值和表达式 ................................................................................................. 42
1.6.1赋值 ......................................................................................................... 43
1.6.1.1赋值的语法图 .................................................................................. 43
1.6.1.2基础数据类型的变量的数值指定 ...................................................... 44
1.6.1.3串基础数据类型的变量数值指定 ...................................................... 44
1.6.1.4位数据类型的变量的数值指定 ......................................................... 45
1.6.1.5派生的枚举数据类型的变量的数值指定 ........................................... 47
1.6.1.6派生的阵列数据类型的变量的数值指定 ........................................... 47
1.6.1.7派生的STRUCT数据类型的变量数值指定 ..................................... 47
1.6.2表达式 ..................................................................................................... 48
1.6.2.1表达式结果 ...................................................................................... 48
1.6.2.2表达式的解释顺序 ........................................................................... 49
1.6.3运算对象 .................................................................................................. 49
1.6.4算术表达式 .............................................................................................. 50
1.6.4.1算术表达式的例子 ........................................................................... 53
1.6.5关系表达式 .............................................................................................. 53
1.6.6逻辑表达式和位串行表达式 ...................................................................... 55
1.6.7运算符的优先级 ....................................................................................... 56
1.7控制语句 ........................................................................................................ 57
1.7.1 IF语句 ..................................................................................................... 57
1.7.2 CASE语句 .............................................................................................. 59
1.7.3 FOR语句 ................................................................................................ 60
1.7.3.1处理FOR语句 ................................................................................ 61
1.7.3.2 FOR语句规则 ................................................................................. 61
1.7.3.3FOR语句例子 .................................................................................. 62
1.7.4WHILE语句 .............................................................................................. 62
1.7.5REPEAT语句 ........................................................................................... 63
1.7.6EXIT语句 ................................................................................................. 63
1.7.7RETURN语句 .......................................................................................... 64
1.7.8WAIFORCONDITION语句 ....................................................................... 64
1.7.9GOTO语句 .............................................................................................. 66
1.8数据类型转换 ................................................................................................. 66
1.8.1基础数据类型转换 .................................................................................... 66
1.8.1.1隐式数据类型转换 ........................................................................... 67
1.8.1.2显式数据类型转换 ........................................................................... 69
1.8.2补充的转换 .............................................................................................. 70
2.功能,功能块和程序 ............................................................................................. 70
2.1创建和调用功能和功能块 ................................................................................ 71
2.1.1定义功能 .................................................................................................. 71
2.1.2定义功能块 .............................................................................................. 72
2.1.3FC和FB的声明部分 ................................................................................ 72
2.1.4FB和FC部分的语句 ................................................................................ 74
2.1.5功能和功能块的调用 ................................................................................ 75
2.1.5.1参数转移的原则 ............................................................................... 75
2.1.5.2转移给输入参数的参数 .................................................................... 76
2.1.5.3参数转移给in/out参数 .................................................................... 77
2.1.5.4参数转移到输出参数(仅对FB) .................................................... 78
2.1.5.5参数访问时间 .................................................................................. 78
2.1.5.6调用一个功能 .................................................................................. 78
2.1.5.7调用功能块(实例调用) ................................................................ 79
2.1.5.8 在FB外访问FB输出参数.............................................................. 80
2.1.5.9在FB外访问FB输入参数 .............................................................. 81
2.1.5.10FB调用时的错误源 ........................................................................ 81
2.2功能和功能块的比较 ....................................................................................... 82
2.2.1例子说明 .................................................................................................. 82
2.2.2带注释的源文件 ....................................................................................... 83
2.3程序 ............................................................................................................... 84
2.4表达式 ............................................................................................................ 86
3.在SIMOTION中ST的集成 .................................................................................. 88
3.1源文件部分的使用 .......................................................................................... 88
3.1.1源文件部分的使用 .................................................................................... 88
3.1.1.1interface部分 ................................................................................... 88
3.1.1.2implementation部分 ........................................................................ 90
3.1.1.3程序组织单元(POU) ................................................................... 90
3.1.1.4功能(FC) ..................................................................................... 91
3.1.1.5功能块(FB) ................................................................................. 91
3.1.1.6程序 ................................................................................................. 92
3.1.1.7表达式 ............................................................................................. 93
3.1.1.8声明部分 .......................................................................................... 93
3.1.1.9语句部分 .......................................................................................... 94
3.1.1.10数据类型定义 ................................................................................ 94
3.1.1.11变量声明 ........................................................................................ 95
3.1.2在ST源文件之间的导入和导出 ............................................................... 97
3.1.2.1单元标识符 ...................................................................................... 97
3.1.2.2一个导出单元的interface部分 ........................................................ 98
3.1.2.3一个导出单元的例子 ........................................................................ 98
3.1.2.4在一个导入单元的USES语句 ........................................................ 99
3.1.2.5一个导入单元的例子 ...................................................................... 100
3.2在SIMOTION中的变量................................................................................ 101
3.2.1变量模型 ................................................................................................ 101
3.2.1.1单元变量 ........................................................................................ 103
3.2.1.2不保留的单元变量 ......................................................................... 104
3.2.1.3保持单元变量 ................................................................................ 105
3.2.1.4本地变量(静态和临时变量) ....................................................... 106
3.2.1.5静态变量 ........................................................................................ 108
3.2.1.6临时变量 ........................................................................................ 109
3.2.2全局设备变量的使用 .............................................................................. 110
3.2.3变量类型的存储范围 .............................................................................. 111
3.2.3.1存储区域的例子,有效关于KernelV3.1 ........................................ 112
3.2.3.2本地数据栈变量的存储要求(kernel V3.1或更高) ...................... 115
3.2.4变量初始化的时间 .................................................................................. 117
3.2.4.1保留全局变量的初始化 .................................................................. 117
3.2.4.2不保留的全局变量的初始化 ........................................................... 118
3.2.4.3本地变量的初始化 ......................................................................... 119
3.2.4.4静态编程变量的初始化 .................................................................. 120
3.2.4.5功能块实例的初始化 ...................................................................... 121
3.2.4.6技术目标的系统变量的初始化 ....................................................... 121
3.2.4.7全局变量的版本ID和下载时的初始化 ........................................... 122
3.2.5变量和HMI设备 .................................................................................... 123
3.3访问输入和输出(过程图像,I/O变量) ...................................................... 125
3.3.1访问输入和输出的概述 ........................................................................... 125
3.3.2直接访问和过程图像访问的重要特征...................................................... 126
3.3.3直接访问和循环任务的过程图像 ............................................................. 127
3.3.3.1 直接访问和循环任务的过程图像的I/O地址的规则 ....................... 128
3.3.3.2为直接访问和循环任务的过程图像创建一个I/O变量 .................... 129
3.3.3.3输入I/O地址的语法图 ................................................................... 130
3.3.3.4可能的I/O变量的数据类型 ........................................................... 131
3.3.4背景任务的固定过程图像的访问 ............................................................. 131
3.3.4.1背景任务的固定过程图像的绝对访问(绝对PI访问) .................. 132
3.3.4.2一个绝对过程图像访问的标识符语法 ............................................ 133
3.3.4.3背景任务的固定过程图像的符号访问(符号PI访问) .................. 134
3.3.4.4可能的符号PI访问的数据类型 ...................................................... 135
3.3.4.5符号PI访问的例子 ........................................................................ 135
3.3.4.6为访问背景任务固定过程图像而创建一个I/O变量 ....................... 135
3.3.5访问I/O变量 ......................................................................................... 136
3.4使用库 .......................................................................................................... 136
3.4.1编辑一个库 ............................................................................................ 137
3.4.2库的know-how保护 .............................................................................. 138
3.4.3从库中使用数据类型,功能和功能块...................................................... 139
3.5相同的标识符和命名空间的使用 ................................................................... 140
3.5.1相同的标识符的使用 .............................................................................. 140
3.5.2命名空间 ................................................................................................ 142
3.6参考数据 ...................................................................................................... 145
3.6.1交叉对照表 ............................................................................................ 146
3.6.1.1创建一个交叉对照表单 .................................................................. 146
3.6.1.2交叉对照表的内容 ......................................................................... 146
3.6.1.3交叉对照表的使用 ......................................................................... 147
3.6.2程序结构 ................................................................................................ 147
3.6.2.1程序结构的内容 ............................................................................. 148
3.6.3代码属性 ................................................................................................ 148
3.6.3.1代码属性内容 ................................................................................ 149
3.7控制预处理器和pragma编辑 ....................................................................... 149
3.7.1控制一个预处理器 .................................................................................. 149
3.7.1.1预处理器语句 ................................................................................ 150
3.7.1.2预处理器语句的例子 ...................................................................... 153
3.7.2属性控制编辑器 ..................................................................................... 154
3.8跳转语句和标签 ............................................................................................ 156
4.错误源和程序调试 ...............................................................................................157
4.1避免错误和有效编程的注释 .......................................................................... 157
4.2程序调试 ...................................................................................................... 157
4.2.1程序测试的模式 ..................................................................................... 157
4.2.1.1SIMOTION设备模式 ...................................................................... 157
4.2.1.2life-sign监视的重要信息................................................................. 159
4.2.1.3life-sign监视参数 ........................................................................... 160
4.2.2符号浏览器 ............................................................................................ 161
4.2.2.1符号浏览器的属性 ......................................................................... 161
4.2.2.2使用符号浏览器 ............................................................................. 161
4.2.3在watch表中监视变量 .......................................................................... 163
4.2.3.1在watch表中的变量 ..................................................................... 163
4.2.3.2使用watch表格 ............................................................................ 163
4.2.4程序运行 ................................................................................................ 164
4.2.4.1程序运行:显示代码位置和调用路径 ............................................ 164
4.2.4.2参数调用栈程序运行 ...................................................................... 165
4.2.4.3程序运行工具栏 ............................................................................. 165
4.2.5程序状态 ................................................................................................ 165
4.2.5.1程序状态的属性 ............................................................................. 165
4.2.5.2使用状态程序 ................................................................................ 166
4.2.5.3程序状态的调用路径 ...................................................................... 168
4.2.5.4参数调用路径状态程序 .................................................................. 169
4.2.6断点 ....................................................................................................... 169
4.2.6.1设置断点的普通步骤 ...................................................................... 169
4.2.6.2设置debug模式 ............................................................................ 170
4.2.6.3定义debug任务组 ........................................................................ 171
4.2.6.4debug任务组参数 .......................................................................... 172
4.2.6.5debug表格参数 .............................................................................. 173
4.2.6.6设置断点 ........................................................................................ 173
4.2.6.7断点工具栏 .................................................................................... 175
4.2.6.8定义一个单独断点的调用路径 ....................................................... 175
4.2.6.9断点调用路径/任务选择参数 .......................................................... 177
4.2.6.10定义所有断点的调用路径 ............................................................ 178
4.2.6.11每个POU所有断点的调用路径/任务选择参数 ............................ 179
4.2.6.12激活断点 ...................................................................................... 180
4.2.6.13显示调用栈 .................................................................................. 181
4.2.6.14断点调用栈参数 ........................................................................... 182
4.2.7追溯 ....................................................................................................... 182
1. ST基本原理
此章节描述了ST中的语言资源和使用方法。请注意此章节中描述了功能、功能块和任务控制系统。一个完整正式的语言描述包括语法图。
1.1语言描述
在本手册的下列章节中语法图用作语言描述的基础,为你提供了对ST语法结构的新认识。
1.1.1语法图
语法图是对语法结构的图形式的阐述。结构是由一系列的规则描述组成。可以基于现有的规则生成新的规则。
上图中的语法图需从左至右读。需要注意下列规则结构:
●序列:块的序列
●选项:可以跳过的语句
●迭代:一个或多个语句的重复
●替代:Branch
1.1.2语法图中的块
块是基本元素。下图显示了代表块而使用的符号类型。
要更多解释的基本元素 由更多的语法图解释的复合单元
当输入源文本时需要注意格式化规则和非格式化规则。比如:把语法图中的块或元素转化为源文本(见帮助中的语言描述,第291页)
1.1.3规则的意义(语义)
规则能仅代表语言的格式结构。意义(语义)一般不明显。由于这个原因,如果意义很关键,则需要在规则旁边写上额外的信息。
●如果同类型的元素意义不同,需要附上额外的命名。例如,额外指定每个十进制字符串元素—年,月或日(见308页)。名称表示了用途
● 重要的限制也列出。如:整数规则中对于—(负号),标明负号只能在SINT, INT, and DINT数据类型之前出现(见308页)
1.2基本元素的语言
ST语言的基本元素包括ST字符组, 根据ST字符组(如:语言命令)创建的预留标识符,自定义的标识符和数字。
ST字符组合预留标识符都是基本的元素(terminals),因为是无需另外的规则来描述。自定义的标识符和数字不是terminals,因为它们是由另外的规则来描述。
在语法图中,终端是由圆形或者椭圆形符号来表示,但是复合单元由长方形来表示(见语法图中的块,第72页)。下列内容是主要终端的节选,作为全局预览,参考基本元素(terminals,第294页)
1.2.1 ST字符组
ST使用ASCII字符组中的下列字母和数字
●从A到Z的大小字母
●从0到9的阿拉伯数字
字母和数字是最常用的字符。例如,标识符是字母,数字和下划线的组合。下划线是特殊的字符之一。
特殊字符在ST中有特定的含义(见第291页的正式语言描述和第294页的基本元素)
1.2.2 ST中的标识符
标识符的ST中的名称。这些名称可以根据系统来定义,例如语言命令等。但是,名称可以是用户定义,比如常量、变量或功能。
1.2.2.1标识符的规则
标识符是由字母(A到Z,a到z)、数字(0到9)或单独的下划线随意组成,但是首字符必须是字母或者下划线。大小写字母没有区分(比如,在编辑器中Anna和AnNa是一样的)。
一个正式的标识符可以由以下的语法图表示:
命名时,最好选用唯一的、有意义的命名,以便解释程序。
图表中的语法图声明了一个标识符的首字符必须是字母或者下划线。下划线必须跟着字母或数字。如:不允许连续有两根或以上的下划线。下划线可以跟着任意或者一系列的数字,下划线或字母。在这唯一的例外是两条下划线可能不会同时出现。
1.2.2.2标识符举例
有效的标识符
无效的标识符
无效标识符
4ter
*#AB
RR__20
S value
Array
原因
第一次字符必须为一个字母或者下划线
不允许特殊字符(除了下划线)
不允许有两个下划线
不允许出现空格,因为是特殊字符
虽然ARRAY是一个正式有效的标识符,但是它是一个预留标识符。,只能做预先定义使用。这意味着你不能使用这个名称,比如:变量
标识符不能用作
绝不定义标识符:
●与预留标识符一样
●与任务命名相匹配
注意:
如有可能,避免定义由下划线,struct,enum,或者command开始的标识符
虽然这些是有效的标识符,当你下载技术包时可能导致出现错误。在基础系统和在技术包中命令词语,参数或数据类型以这些字符开始。
1.2.3预留标识符
预留标识符可能和预先定义的用途不一样。你不能用预留标识符的名称来命名一个变量或者数据类型。
符号的大小写无区别。
所有标识符的预先定义的意义可以在SIMOTION基本功能功能手册中找到:
●·ST编程语言中的保护或者预留标识符,欲知更多,请见76页和81页
●·标准功能和功能定义的数据类型,欲知更多,请见251页
●系统的常规功能块
●SIMOTION设备系统功能、系统变量和数据类型
●技术目标的系统功能、系统变量和数据类型
1.2.3.1保护标识符
ST语言中的保护标识符全列在了下表中。
欲见所有预留词的简短描述,请见附录预留词语(第299页)和规则附录中的语法图(第307页)
3.2.3.2额外的预留标识符
下表包含了将来扩展所有的预留标识符。
1.2.4数字和布尔值
在ST中可以通过多种方式编写数字。数字可以包括一个符号、一个小数点或者一个指数。下列规则适用于所有的数字:
●数字中不能出现逗号和空格
●下划线允许作为视觉上的分隔线
●数字可以冠以正号(+)或者负号(—),如果没有使用符号
则认为数字为正。
●数字不能超过确定的最大值或最小值
1.2.4.1整数
整数既不包括小数点也不包括指数。一个整数是一系列的数字,也可以在前面加上一个符号。
下列为有效的整数:
0 1 +1 -1
743 -5280 60 000 -32 211 321
下列整数为无效,并且已经列出原因:
123,456 不允许有逗号
36. 整数不能包括小数点
10 20 30 不允许有空格
在ST中,你可以使用不同的编号体系来表示整数。通过插入编号系统的关键字前缀来实
现。
●2#为二进制
●8#为八进制
●16#为十六进制
十进制小数15的有效表示方式为:
2#1111 8#17 16#F
1.2.4.2浮点数
下列为有效的浮点数
0.0 1.3 -0.2 827.602
0000.0 +0.000743 60_000.15 -315.0066
下列为无效的浮点数
1. 数字必须出现在小数点之前或之后
1,000.0 不允许有逗号
1.333.333 不允许有两个小数点
1.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 E8 不允许有空格
1.2.4.4布尔值
布尔值是恒定常量。必须通过0或者1,TRUE或者FALSE来表示。
1.2.4.5数字的数据类型
编辑器根据数值和使用来自动选择适合数字的基本数据类型。
也可以直接指定数据类型。在数字前面输入数据类型(数字数据类型)和字符“#”。
1.2.5字符串
什么是字符串?
一个字符串是许多的0或在最前面或者最后面带撇号的多字符。每个字符在串中
一个字符可以如下输入:
●可打印的字符(ASCII code $20 to $7E, $80 to $FF),除了美元符号(ASCII code $24)和撇号(ASCII code $27)之外,因为这些符号在字符串中有着特殊的含义。
●美元符号($)之后的相关字符的2位的十六进制ASCII code
●根据下表组成的两个字符的组合
1.3 ST源文件的结构
一个ST源包含连续的文本,通过划分为逻辑块形成文本。详细的规则见源文件章节(第169页)。
简单的总结如下:
●一个ST源文件是可以在项目中创建的一个逻辑单元,可以出现多次。通常被称为一个单元。
●一个ST源文件的逻辑部分被称为Section(见表格)
●一个用户程序是所有程序源的集合(如:ST源文件,MCC单元)
每个ST源文件的逻辑部分的开头和结尾都有特定关键词
没有必要自己对每个功能编程,可以使用SIMOTION系统组件。这些是预先编程好的部分,如系统功能或技术目标的功能。
源文件部分
单元语句(可选的)
interface部分
implementation部分
POU(程序组织单元)
声明部分
语句部分
注意:
在线帮助中有很多可用的示范单元的模板。你可以使用作为一个新ST源文件的模板。
调用ST编辑器帮助,点击相关链接。复制文本到ST编辑器窗口,根据你的需求修改模板。
示范单元的模板包括此模板的复制件
描述
包括ST的名称
包括导入和导出变量的语句,类型和POU
包括ST源文件的执行部分
ST源文件(程序,功能,功能块)单独的可执行部分
包含声明(如变量和类型),可以被包含在interface部分和implementation部分,以及POU中
包含一个POU的可执行语句
1.3.1语句
一个POU的语句部分包括重复的单独语句。跟着POU的声明部分,以POU的结束而结束。首尾没有明显的关键词。
在ST中有三种基本语句:
●赋值:从表达式到变量的赋值,见105页变量声明
●控制语句:语句的分支的重复,见130页控制
●子程序执行:功能和功能块,见147页功能,功能块和程序
1.3.2注释
注释用作编制文件,同时也帮助用户理解源文件部分。在编制后,对于程序执行没有任何意义。
注释有两种:
●线注释
●块注释
线注释由//开始。编辑器将进行跟随的文本,知道线注释结束
你可以在很多线之后输入一个块注释,如果 (首尾都是 *)先于它。
当插入注释时注意:
●在注释中可以使用完整的扩展ASCII字符集
●在线型注释中可以忽略字符组(* 和 *)
●不允许块注释的嵌套。但是,在块注释中你可以嵌套线注释。
●可以在任意位置插入注释,但是不能在保持的规则中插入,如标识符的名称中。欲知更
多规则信息,见291页语言描述源。
1.4数据类型
使用数据类型来定义如何在程序源中使用变量或常量值。
下列数据类型对用户是可用的:
●基本数据类型
●用户定义的数据类型(UDT)
—简单的导数
—阵列
—枚举
—结构
●技术目标数据类型
●系统数据类型
见 基本数据类型(第90页)
技术目标数据类型(第101页)
系统数据类型(第104页)
1.4.1基本数据类型
1.4.1.1基本数据类型
基本数据类型定义了不能分成更小的单元的数据结构。一个基本数据类型描述了有固定长度的存储区域,代表了数字数据、整数、浮点值、时间、日期和字符串。
所有的基本数据类型在下表中列出:
类型 预留词 位宽度 值的范围
位数据类型:
此类型的数据使用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-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)
无符号双整数
32 -3.402_823_466E+38to
浮点数(per IEEE
REAL
-754)
1.175_494_351E−38, 0.0,
+1.175_494_351E−38 to
+3.402_823_466E+38
精度:23位尾数(对应6位小数),8位指数,1位字符
64 -1.797_693_134_862_315_8E+308
长浮点数LREAL
(IEEE-754) 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位字符
时间类型:此类数据用于表示不同的时间或日期
32 T#0d_0h_0m_0s_0msto
1分钟的增量的持TIME
T#49d_17h_2m_47s_295ms
续时间
天,小时,分钟的数值最多为2位。里程碑最多为3位。初始为T#0d_0h_0m_0s_0ms
32
1天的增量的日期
DATE
D#1992-01-01 to D#2200-12-31需要考虑闰年,年份为4位,月份和天数为2位。初始为D#0001-01-01
TOD#0:0:0.0 to TOD#23:59:59.999分钟为单位的当日TIME_OF_DAY(TOD) 64
时间 天,小时,分钟的数值最多为2位。里程碑最多为3位。初始为
日期和时间
DATE_AND_TIME(DT) 64
TOD#0:0:0.0
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个字符。
指定(初始)字符的数字可以少于声明的长度。
STRING 8
1字节/字符的串 ASCII code $00 到 $F的所有字符都是允许的。 默认’ ’ (空字符串)
注意:当导出变量到其他系统时,需要考虑对应的目标系统的数据类型的值的范围
1.4.1.2基础数据类型的值的范围限制
基础数据类型的值的范围作为常量可用。
1.4.1.3普通的数据类型
普通的数据类型被用作系统功能和系统功能块的输入和输出参数。子程序被称做包含在普通数据类型中的每个数据类型的变量。
下表列出了可用的普通数据类型:
1.4.1.4基础系统数据类型
在SIMOTION系统中,表格中指出的数据类型使用与基础数据类型类似。和许多系统功能一起使用。
标识符 位宽度 用途
32
alarmld的数据类型用于识StructAlarmId
别唯一的信息。alarmld用于生成信息。见功能手册SIMOTION基本功能。初始为STRUCTALARMID#NIL
32
taskld的数据类型是在执行StructTaskId
系统中识别唯一的任务。见功能手册SIMOTION基本功能。初始为STRUCTTASKID#NIL
无效的基础数据类型数值的符号常量
符号常量 数据类型 意义
STRUCTALARMID#NIL
STRUCTTASKID#NIL
StructAlarmId
StructTaskId
无效AlarmId
无效TaskId
1.4.2用户定义的数据类型
1.4.2.1用户定义的数据类型
用户定义的数据类型(UDT)通过在声明章节中随后的源文件部分和以下内容来创建TYPE/END_TYPE:
●interface部分
●implementation部分
●程序组织单元(POU)
可以使用在声明章节中创建的数据类型。源文件部分决定了类型声明的范围。
1.4.2.2用户定义的数据类型的语法(类型声明)
对于每个声明的数据类型,需要遵循以下:
1.名称:数据类型的名称必须遵循标识符的规则。
2.数据类型声明
数据类型包括(见第96页,基础派生或派生数据类型)
-基本数据类型
-之前声明的UDT
-TO数据类型
-系统数据类型
下列数据类型声明也是可能的:
-阵列数据类型声明(见派97页生数据类型ARRAY)
-枚举数据类型声明(见派99页生数据类型Enumerator)
-STRUCT数据类型声明(见派100页生数据类型STRUCT)
括号中的内容只可以参考的章节,相关的数据类型声明详细描述在这些章节中。
3.可选的初始值
你可以为每个数据类型指定初始值。如果你声明一个数据类型的变量,初始值被指定为变量。
例外:在STRUCT数据类型中,每个单独的组件的初始值范围规定在数据类型声明中
见变量或数据类型的初始化(第107页)
完整的UDT声明用END_TYPE关键词来结束。你可以使用TYPE/END_TYPE结构来创建任意数据类型的数字。你可以使用定义的数据类型来声明变量或参数。
只要语法在图标中可见,UDT可以用任意方式嵌套。例如:你可以使用之前定义的UDT或嵌套结构作为一个数据类型声明。类型声明仅可以连续使用,并不是以嵌套结构的形式。
注意:你可以学习如何在所有变量声明的概述(见106页)中声明变量和参数,以及如何在语法中使用UDT来数值指定(见113页)。
1.4.2.3基础派生或派生的数据类型
在数据类型的派生中,一个基础或用户定义的数据类型(UDT)使用TYPE/END_TYPE结构来定义。
TYPE标识符:基本数据类型{ := initialization } ; END_TYPE
TYPE标识符:用户定义数据类型{ := initialization } ; END_TYPE
一旦你已声明数据类型,你可以定义派生的数据类型标识符的变量。这等同于声明变量。
1.4.2.4 派生数据类型ARRAY
ARRAY派生数据类型包括用TYPE/END_TYPE结构来定义的同种数据类型。下图的语法图展示了这种数据类型,在预留标识符OF之后这种数据类型声明得更加详细。
TYPE标识符:ARRAY数据类型声明{ := initialization } ; END_TYPE
索引声明书描述了阵列的限制:
●阵列限制声明了索引值的最大和最小值。可以使用常量或常量表达式。数据类型为DINT(或转化为DINT-详见141页基础数据类型转化)
●阵列限制必须用两个句号隔开
●全部的索引声明须在方括号中
●索引可以为一个数据类型DINT(或转化为DINT-详见141页基础数据类型转化)的整数值
注意:如果运行时阵列超限,程序会产生过程故障(见SIMOTION基本功能功能手册)
用数据类型声明来声明阵列组件的数据类型。本章节中所描述的所有的选项都可以用作数据类型,甚至是用户定义数据(UDT)。
有多种不同的阵列类型:
●一维阵列类型为升序排列的一列数据元素
●二维阵列是一个包括行和列的数据表。第一维是指行数,第二维是指列数。
●更高维的阵列类型是二维阵列类型的扩展
二维阵列可以与带行和列的表格比较。可以通过多层次的类型声明来创建二维或多维阵列。
在例子中,你可以定义:
●表格列a[1] 到 a[3]作为一维阵列,将包含整数
●表格行矩阵1[1] 到矩阵2[4]作为一个阵列,但是作为使用表格中的列创建的阵列的数据类型声明。
当你在数据类型声明中声明阵列时,创建了一个第二维度。可以使用此方式创建更多的维度。
使用创建此表格的数据类型来声明一个变量。使用方括号为表格中的每个维度寻址。
1.4.2.5 派生的数据类型—枚举
在枚举的数据类型中,使用受限的标识符或名称来定义TYPE/END_TYPE结构。
TYPE标识符:枚举数据类型声明{ := initialization } ; END_TYPE
一旦你已声明了标识符的数据类型,可以在枚举中定义变量。在语句部分,可以从这些变量的定义标识符(枚举元素)表单中数值指定。
可以直接声明数据类型:把枚举数据类型标识符和“#”放在枚举前面。
可以包含带enum_type#MIN和enum_type#MAX结构的枚举数据类型的第一和最后一个值,enum_type为枚举数据类型标识符。
可以包含带ENUM_TO_DINT转化功能的枚举元素的数值。
注意:你将会得知枚举数据类型为系统数据类型。
枚举数据类型可以为一个结构的部分,意味着在用户定义的数据结构中可以在任意的低级别中被找到。
1.4.2.6派生的数据类型STRUCT(结构)
派生的数据类型STRUCT,或者结构包括TYPE/END_TYPE结构的固定数量的组件。这些组件的数据类型可以变化:
TYPE标识符:STRUCT数据类型声明;END_TYPE
下列为数据类型:
基础数据类型
●之前声明过的UDT
●系统数据类型
●TO数据类型
●ARRAY数据类型声明
你可以选择给组件赋初始值。继续关于变量初始值或数据类型(见107页变量或数据类型的初始值)
注意:
下列数据声明不可以在组件声明中直接使用
●STRUCT数据类型声明
●枚举数据类型声明
解决方案:用之前提到的声明在组件声明中预先声明UDT(用户定义数据类型)
这允许嵌套STRUCT数据类型
同样可能会发现STRUCT数据类型为系统数据类型
这个例子说了了一个UDT是如何定义的,在变量声明中又是如何使用的这种数据类型
1.4.3技术目标数据类型
1.4.3.1技术目标数据类型的描述
可以用技术目标来声明变量。下表给出了可用的技术目标的数据类型。
例如,可以用数据类型posaxis来声明一个变量,然后指配一个是适合的位置轴。
可以通过结构访问技术目标的元素。
1.4.3.2轴属性的继承
轴的继承声明所有的数据类型,系统变量和TO driveAxis的功能都全部包含在TO
positionAxis中。同样,位置轴页包含在TO followingAxis中,下列轴是在TO pathAxis中,有以下影响:
●如果一个功能或功能块,除了driveAxis数据类型的输入参数之外,调用时你可以使用position axis或者following axis或 path axis。
●如果有一个功能或功能块,除了posAxis数据类型的输入参数之外,调用时你可以使用following axis或 path axis。
1.4.3.3技术目标数据类型的例子
以下,你将看见可选的技术目标数据类型(你将在SIMOTION基本功能功能手册中找到强制使用TO数据类型的变量)的变量使用。第二个例子介绍了无需使用TO数据类型的变量的替代方法。
TO功能将被用为在程序的主要部分启用一个轴,因此轴能定位。在定位操作结束后,现行的轴的位置将使用结构访问来进行记录。
第一个例子使用了TO数据类型的变量来演示用途。
第二个例子未使用TO数据类型的变量。
你将在SIMOTION运动控制功能描述中招待技术目标的组态和配置细节。
1.4.4系统数据类型
有很多可用的喜悦数据类型,无需预先声明就可以使用。每个导入的技术包提供了一库的系统数据类型。
额外的系统数据类型可以找到
●在普通标准功能中的参数(见SIMOTION基本功能功能手册)
●在普通标准功能模块中的参数(见SIMOTION基本功能功能手册)
●在SIMOTION设备的系统变量中(见相关的参数手册)
●在SIMOTION设备的系统功能参数中(见相关的参数手册)
●在技术目标的系统变量和组态(见相关的参数手册)
●在技术目标的系统功能参数中(见相关的参数手册)
1.5变量声明
一个变量定义了可在ST源文件中使用的变量内容的数据项。一个变量包括一个可以自由选择的标识符(如myVar1))和一个数据类型(如BOOL)。预留的标识符(见75页预留标识符)不能作为标识符使用。
1.5.1变量声明的语法
变量通常是根据源文件声明部分的相同模式来创建的。
●通过合适的关键词来开始一个声明块(如 VAR, VAR_GLOBAL - 见106页所有变量声明的概述
●遵循实际的变量声明(见图表),也可以如你所愿尽可能的创建,顺序是任意的。
●以END_VAR来结束一个声明块
●你可以创建更多的声明块(要有同样的关键词)
注意
●变量的名称必须是一个标识符,如,只能包含字母,数字或下划线,但是不能包含特殊字符。
●允许作为数据类型的下列项:
基础数据类型
—UDT(用户定义数据类型)
—系统数据类型
—TO数据类型
—ARRAY数据类型声明
—功能块的设计
● 可以在声明语句中直接给变量赋初始值,这叫做初始化
从格式来的派生如下:
●常量声明(常量必须有初始值,见111页常量)
●过程图像访问(见106页所有变量声明的概述)
—不需要一个变量声明作为绝对过程图像访问
—不允许初始化作为符号过程访问控制
1.5.2所有变量声明的概述
在变量和参数声明中声明名称、数据类型和变量的初始值。在下列源文件的声明部分执行这些声明:
●interface部分
●执行部分
●POU(程序、功能、功能块、表达式)
源文件部分也决定了你可以声明的变量和范围
欲知源文件部分的更多信息,参见86页的ST源文件结构个169页的源文件部分。
关键词 意义 声明
VAR
暂时或静态变量的声明,见任意POU
184页变量模型
VAR_GLOBAL
单元变量声明,见184页变interface部分
量模型 implementation部分
VAR_IN_OUT
输入/出参数的变量声明;功能
POU直接访问变量(使用参功能块
考),也可直接修改。见148表达式
页定义功能,149页定义功能块
VAR_INPUT
输入参数的变量声明;数值功能
是外部赋予,不能在POU里功能块
面改变这个数值。 表达式
见148页定义功能,149页定义功能块
VAR-OUTPUT
输出参数的变量声明;数值功能块
是从功能块传递的。
见148页定义功能,149页定义功能块
VAR_TEMP
临时变量的声明 程序
见184页变量模型 功能块
RETAIN
保留变量的声明 仅作为补充
见184页的变量模型 interface和implementation部分的VAR_GLOBAL
CONSTANT
常量的声明,见111页常量 仅作为补充
在FB,FC或程序中的VAR
在interface或implementation部分的VAR_GLOBAL
1.5.3变量或数据类型的初始值
在声明中指定初始值给变量或数据类型是可选的(见图表语法:变量声明或语法:用户定义数据类型)
●如果在变量声明中没有特别指定初始值,编译程序自动给变量指定在数据类型声明中声明的初始值
●如果在数据类型声明中也没有特别指定初始值,编译程序自动给变量或数据类型指定值为0。例外:
—时间数据类型:初始值
—枚举数据类型:1.枚举值
预先给变量或用户定义的数据类型指定初始值在数据类型声明之后(见语法图表:变量初始化)
●根据语法图表:常量表达式来给基础数据类型(或从基础数据类型派生的数据类型)赋常量表达式
●根据语法图:域初始化给域(阵列)指定域初始化列表
●根据语法图:结构初始化列表来给单独的结构成分来指定结构初始化列表
●给枚举数据类型指定枚举元素
在编译程序时给变量赋的初始值是从常量表达式计算得知的。见语法图。欲知更多常量表达式的信息,见常量表达式的语法图。
注意一个变量列表(a1, a2, a3, .. : INT := .. )可以是由普通数值初始化的。在这种情况下,不需要单独初始化变量(a1 : INT := .. ; a2 : INT := .. ; etc.)
技术目标(TO)数据类型的变量由编辑器用TO#NIL初始化。任务对变量初始化的影响在SIMOTION基本功能功能手册中描述。
3.5.4常量
常量是带固定值的数据,在程序运行时不能更改固定数值。常量的声明方式与变量一样。
●本地常量的POU声明部分(见语法图:POU中的常量块和语法图:常量声明)
●在ST源文件单元常量是interface或implementation部分(见语法图:在interface或implementation部分的单元常量和语法图:常量声明)。可以在interface部分导入单元常量到其他ST源文件(见184页常量模型)
源文件部分也决定常量声明的范围。
赋给常量的值是通过在编译时计算常量表达式得出的。欲知更多常量表达式的语法图和信息,见常量表达式的语法图。
1.6赋值和表达式
你已经用字符串来创建数值指定,也许是一个作为部分例子的语句(见87页语句示范表),或者是在源文件声明部分初始化变量的时候。
然而这只是对可用的公式化指定数值的小范围的选择。手册的本章节通过使用大量的例子详细描述了这个重要的话题。
注意:在算法和逻辑表达式中,结果通常是通过最大数值格式化表达式和转化数据类型所得出的。隐式转化在数值指定时不总是可行的。欲知更多错误源文件和解决方法的信息,见SIMOTION基本功能功能手册。
1.6.1赋值
1.6.1.1赋值的语法图
使用指定的数值来给变量数值指定。重写之前的数值。在一个数字可以正确指定前,在声明部分必须声明一个变量(见105页变量声明语法图)
如下面的语法图所示,表达式位于右侧。 结果保存在变量中,变量的名称列于左侧。所有的目标变量在图表中显示
下列包含了左侧的数值指定的解释和例子:
●基础数据类型的变量数值指定(114页)
●派生的枚举数据类型的变量数值指定(117页)
●派生的阵列数据类型的变量数值指定(118页)
●派生的结构数据类型的变量数值指定(118页)
●绝对的PI访问的数值指定(给过程图像寻址),见221页绝对PI访问
1.6.1.2基础数据类型的变量的数值指定
当下列情况之一满足时,基础数据类型(90页)的表达式可以指定给一个变量:
●表达式和目标变量是一样的数据类型
注意关于字符串数据类型(114页)的下列信息
●表达式的数据类型可以隐式转化为目标变量的数据类型
1.6.1.3串基础数据类型的变量数值指定
串数据类型的变量之间的数值指定
不同长度的串基础数据类型的变量之间的数值指定没有限制,如果声明的目标变量的长度要短于现在指定的字符串的长度,字符串被截取成目标变量的长度。
例外:
in/out数值指定的应用(参数转化为in/out参数):指定变量的声明长度必须长于或者等同于目标变量(正式in/out参数)的声明长度。见154页参数转化为in/out参数。
例子:
string20 := 'ABCDEFG';
string20 := string30;
一个字符串元素的访问
一个字符串的单独元素可以用阵列[1..n]的元素的相同方式寻址。这些元素隐式转化成基础数据元素BYTE。通过这种方式,字符串元素和BYTE数据类型的变量之间的指定是可行的。
例子:
byteVar := string20[5];
string20[10] := byteVar;
需要考虑到下面的特殊情况:
1.当把BYTE数据类型的变量指定给一个字符串元素时:(e.g. stringVar[n:] := byteVar):
—给字符串元素的数值超出了声明的字符串的长度
字符串保持不变,TSI#ERRNO被设为1
—给字符串元素的数值超出了指定的字符串的长度(n > LEN(stringVar)),但是在声明的长度之内)
字符串的长度被更改,在LEN(stringvar)和N之间的字符串元素被设为$00
2.当给BYTE数据类型的一个变量指定一个字符串元素时(byteVar := stringVar[n:]):
—给字符串元素的数值超出了指定的字符串的长度(n > LEN(stringVar))
变量设为16#00, TSI#ERRNO设为 2
编辑字符串
不同的系统功能对于编辑字符串都是可用的,比如插入字符串,替换和字符等。见SIMOTION基本功能功能手册
数字和字符串之间的转换
不同的系统功能对于数字数据类型的变量和字符串之间的转换是可用的,见141页基础数据类型转化和SIMOTION基本功能功能手册
1.6.1.4位数据类型的变量的数值指定
访问单独的位数据类型的变量的二进制数字
访问单独的BYTE,WORD或DWORD数据类型的变量的二进制数字:
●通过标准功能
可以通过使用_getBit, _setBit 和 _toggleBit功能来读,写或转化任意位字符串
可以通过变量来指定位数
●直接的位访问
可以定义你需要访问的变量的位,通过变量后面的一个隔开的点
可以通过一个常量来指定位数
必须先开启编辑器功能选项“允许语言扩展”才能使用(见45全局编辑器设置和46页本地编辑器设置)
注意:访问I/O变量或者系统变量的二进制数字可以被其他任务干扰。所以不能保证一致性。
编辑位数据类型的变量
你能够:
1.可以把同数据类型的不同变量合为一种高级别的数据类型的变量(例如:BYTE数据类型的两个变量变为一种WORD数据类型)。不同的系统功能都可以使用此功能,如WORD_FROM_2BYTE
2.把一个变量拆分成低级别的几种数据类型的变量(如:SWORD数据类型的一个变量分为4个BYTE数据类型的变量)。不同的系统功能都可以使用此功能,如DWORD_TO_4BYTE
3.在一个变量中旋转或移位字节。位字符串标准功能ROL, ROR, SHL和SHR都可使用此功能
这些系统功能和系统功能块在SIMOTION基本功能功能手册中有详细描述。
逻辑运算符
位数据类型的变量可以和逻辑运算符一起结合,见127页逻辑表达式和位串行表达式。
1.6.1.5派生的枚举数据类型的变量的数值指定
每个表达式和派生的枚举数据类型的每个变量(见99页派生数据类型—枚举可以指定同数据类型的其他变量)
1.6.1.6派生的阵列数据类型的变量的数值指定
一个阵列包含不同的维度和阵列元素,所有相同类型(见97页派生数据类型—阵列)
有许多不同的方法来给变量指定阵列。你可以指定完整阵列,单独元素或部分阵列:
如果部件和阵列限制(最小和最大可能的数组下标)的数据类型相同,一个完整的阵列●可以指定给其他的阵列。有效的指定为:
array_1 := array_2;
●一个单独的阵列元素通过阵列名称(方括号中的索引值)来寻址。索引必须是数据类型SINT,USINT,INT,UINT,DINT的算术表达式
elem1 := array [i];
array_1 [2] := array_2 [5];
array [j] := 14;
●可以通过省略右边开始的方括号中阵列的每个维度来获得有效子阵列的赋值。这样解决了与剩余目录数目相同的维度数的阵列的部分区域(见下例)
所以你可以引用矩阵中的行和独立部分,但是不能引用关闭的列(关闭了意义上的从...到...)。有效的指定为:
matrix1[i] := matrix2[k];
array1 := matrix2 [k];
1.6.1.7派生的STRUCT数据类型的变量数值指定
包括STRUCT数据类型声明的用户指定数据类型的变量称为结构变量。(见100页派生数据类型)。即可代表一个完整的结构也可代表结构的一个部件。
有效的结构变量参数如下:
struct1 //Identifier for a structure
1 //Identifier for a structure component
1 //Identifier of a simple array
//within a structure
1[5]
//Identifier of an array component
//within a structure
有两种方法来给变量指定结构。可以参考完整的结构或结构成分。
●如果数据类型和结构成分名称相符,一个完整的结构仅可以被指定为其他结构。
有效的指定如下:
struct1 := struct2;
●可以指定一个类型兼容的变量,一个类型兼容的表达式或其他结构成分件给每个结构成分。
有效指定如下:
1
1
1
:= Var1;
:= 20;
:= 1;
1 := 1;
1[10] := 100;
注意:可以使用FBInstanceName和输出参数格式中的结构变量,如:myCircle.访问功能块的输出变量的环境。欲知功能块的更多信息,见148页定义功能描述和149页 定义功能块描述。
更多的结构变量的应用是为访问TO变量和基础系统的变量。
1.6.2表达式
一个表达式代表了当程序编译或执行时计算出的值。它包含运算对象(如:常量,变量或功能数值)和运算符(如. *, /, +, -)
运算对象的数据类型和相关的运算符决定了表达式的类型。ST使用下列类型的表达式
●算术表达式
●关系表达式
●逻辑表达式
●位串行表达式
1.6.2.1表达式结果
表达式的结果为:
●指定给一个变量
●用作一个控制语句的条件
●用作一个功能或功能块调用的参数
注意:仅包含下列元素的表达式可用作变量初始化和阵列声明中的索引声明(见107页变量或数据类型中初始化的常量表达式)
常量
●基本算术运算
●逻辑和关系运算
●位串行标准功能
1.6.2.2表达式的解释顺序
表达式的解释顺序基于以下:
使用的运算符的优先级别
●从左至右原则
●括号的使用(对于同级别的运算符)
根据特定的规则处理表达式:
●根据优先级别来执行运算符(见129页运算符优先级别表)
●同级别的运算符从左至右执行
●标识符前面的负号表示乘以—1
●一个算术运算符不能立即跟另外一个
表达式a * -b是无效的,但是a * (-b )是允许的
●括号重写运算符优先顺序,如:括号有最高优先级
●带括号的表达式被视为单独的运算符,最先算
●左括号的数量必须与右括号的数量一致
●算术运算符不嫩滑用做字符或逻辑数据。所以表达式(n<=0) + (n<0)是无效的
表达式的例子
testVar // Operand
A AND (B) // Logic expression
A AND (NOT B) // Logic expression with negation
(C) < (D) // Relational expression
3+3*4/2 // Arithmetic expression
1.6.3运算对象
定义:运算对象是指可以用作写成表达式的对象。运算对象可以通过语法图表示:


发布评论