(完整word)ST语言编程手册

ST语言编程手册

目录

1。 ST基本原理 10

1。1语言描述 10

1.1。1语法图 10

1。1.2语法图中的块 10

1.1.3规则的意义(语义) 11

1.2基本元素的语言 11

1。2.1 ST字符组 11

1.2.2 ST中的标识符 12

1.2。2.1标识符的规则 12

1.2。2。2标识符举例 13

1.2.3预留标识符 13

1.2.3。1保护标识符 14

1.2.4数字和布尔值 20

1.2。4.1整数 20

1.2.4。2浮点数 21

1.2.4。3指数 21

1.2.4。4布尔值 21

1.2。4。5数字的数据类型 22

1。2.5字符串 22

1.3 ST源文件的结构 23

1。3。1语句 24

1。3。2注释 25

1.4数据类型 26

1.4.1基本数据类型 26

1.4.1.1基本数据类型 26

1。4。1.2基础数据类型的值的范围限制 28

1。4.1。3普通的数据类型 29

1。4。1.4基础系统数据类型 30

1。4。2用户定义的数据类型 30

1.4。2。1用户定义的数据类型 30

1.4.2.2用户定义的数据类型的语法(类型声明) 31

1。4。2.3基础派生或派生的数据类型 32

1.4。2。4 派生数据类型ARRAY 33

1。4.2。5 派生的数据类型—枚举 34

1。4。2。6派生的数据类型STRUCT(结构) 35

1。4.3技术目标数据类型 37

1.4。3。1技术目标数据类型的描述 37

1。4。3。2轴属性的继承 38

1.4。3.3技术目标数据类型的例子 39

1.4。4系统数据类型 40

1.5变量声明 40

1。5。1变量声明的语法 40

1。5.2所有变量声明的概述 42

1.5.3变量或数据类型的初始值 43

1.6赋值和表达式 46

1。6。1赋值 47

1.6。1。1赋值的语法图 47

1.6.1.2基础数据类型的变量的数值指定 48

1.6.1.3串基础数据类型的变量数值指定 48

1。6.1。4位数据类型的变量的数值指定 49

1.6。1.5派生的枚举数据类型的变量的数值指定 51

1。6.1。6派生的阵列数据类型的变量的数值指定 51

1。6.1.7派生的STRUCT数据类型的变量数值指定 51

1.6.2表达式 52

1。6。2。1表达式结果 52

1.6.2。2表达式的解释顺序 53

1。6。3运算对象 53

1。6.4算术表达式 54

1.6.4.1算术表达式的例子 57

1.6。5关系表达式 57

1.6。6逻辑表达式和位串行表达式 59

1.6.7运算符的优先级 60

1.7控制语句 61

1.7。1 IF语句 61

1。7.2 CASE语句 63

1.7.3 FOR语句 64

1.7。3.1处理FOR语句 65

1.7。3。2 FOR语句规则 65

1。7。3.3FOR语句例子 66

1.7.4WHILE语句 66

1.7.5REPEAT语句 67

1。7。6EXIT语句 67

1。7.7RETURN语句 68

1.7。8WAIFORCONDITION语句 68

1。7。9GOTO语句 70

1。8数据类型转换 70

1.8.1基础数据类型转换 70

1。8.1.1隐式数据类型转换 71

1。8.1.2显式数据类型转换 73

1.8.2补充的转换 74

2。功能,功能块和程序 74

2.1创建和调用功能和功能块 75

2.1.1定义功能 75

2。1.2定义功能块 76

2。1。3FC和FB的声明部分 76

2。1。4FB和FC部分的语句 78

2.1.5功能和功能块的调用 79

2.1.5。1参数转移的原则 79

2.1.5。2转移给输入参数的参数 80

2.1.5.3参数转移给in/out参数 81

2.1。5。4参数转移到输出参数(仅对FB) 82

2。1。5。5参数访问时间 82

2。1。5.6调用一个功能 82

2.1。5.7调用功能块(实例调用) 83

2。1.5.8 在FB外访问FB输出参数 84

2。1.5。9在FB外访问FB输入参数 85

2.1.5.10FB调用时的错误源 85

2。2功能和功能块的比较 86

2。2。1例子说明 86

2。2。2带注释的源文件 87

2.3程序 88

2.4表达式 90

3。在SIMOTION中ST的集成 92

3.1源文件部分的使用 92

3.1。1源文件部分的使用 92

3.1。1。1interface部分 92

3。1。1.2implementation部分 94

3。1.1。3程序组织单元(POU) 94

3。1。1。4功能(FC) 95

3。1。1。5功能块(FB) 95

3。1.1.6程序 96

3。1.1。7表达式 97

3。1。1.8声明部分 97

3。1.1。9语句部分 98

3。1.1.10数据类型定义 98

3.1.1。11变量声明 99

3。1。2在ST源文件之间的导入和导出 101

3。1.2.1单元标识符 101

3.1。2。2一个导出单元的interface部分 102

3。1.2.3一个导出单元的例子 102

3.1。2.4在一个导入单元的USES语句 103

3。1.2.5一个导入单元的例子 104

3.2在SIMOTION中的变量 105

3.2。1变量模型 105

3。2。1.1单元变量 107

3。2。1。2不保留的单元变量 108

3。2.1.3保持单元变量 109

3.2.1。4本地变量(静态和临时变量) 110

3。2。1。5静态变量 112

3.2。1.6临时变量 113

3.2。2全局设备变量的使用 114

3。2.3变量类型的存储范围 115

3。2。3.1存储区域的例子,有效关于KernelV3.1 116

3.2.3.2本地数据栈变量的存储要求(kernel V3。1或更高) 119

3。2。4变量初始化的时间 121

3.2.4.1保留全局变量的初始化 121

3.2.4。2不保留的全局变量的初始化 122

3。2。4.3本地变量的初始化 123

3.2。4.4静态编程变量的初始化 124

3.2.4.5功能块实例的初始化 125

3.2。4。6技术目标的系统变量的初始化 125

3。2。4。7全局变量的版本ID和下载时的初始化 126

3.2。5变量和HMI设备 127

3.3访问输入和输出(过程图像,I/O变量) 129

3.3。1访问输入和输出的概述 129

3。3。2直接访问和过程图像访问的重要特征 130

3.3。3直接访问和循环任务的过程图像 131

3。3。3.1 直接访问和循环任务的过程图像的I/O地址的规则 132

3。3.3。2为直接访问和循环任务的过程图像创建一个I/O变量 133

3.3。3.3输入I/O地址的语法图 134

3。3.3.4可能的I/O变量的数据类型 135

3.3.4背景任务的固定过程图像的访问 135

3。3.4。1背景任务的固定过程图像的绝对访问(绝对PI访问) 136

3.3。4。2一个绝对过程图像访问的标识符语法 137

3.3。4.3背景任务的固定过程图像的符号访问(符号PI访问) 138

3.3。4.4可能的符号PI访问的数据类型 139

3.3。4.5符号PI访问的例子 139

3。3.4.6为访问背景任务固定过程图像而创建一个I/O变量 139

3.3。5访问I/O变量 140

3.4使用库 140

3.4。1编辑一个库 141

3。4.2库的know-how保护 142

3。4。3从库中使用数据类型,功能和功能块 143

3.5相同的标识符和命名空间的使用 144

3.5。1相同的标识符的使用 144

3。5。2命名空间 146

3。6参考数据 149

3.6。1交叉对照表 150

3.6。1.1创建一个交叉对照表单 150

3.6。1.2交叉对照表的内容 150

3。6.1.3交叉对照表的使用 151

3。6.2程序结构 151

3。6.2.1程序结构的内容 152

3.6.3代码属性 152

3。6.3。1代码属性内容 153

3.7控制预处理器和pragma编辑 153

3。7。1控制一个预处理器 153

3。7。1.1预处理器语句 154

3.7.1.2预处理器语句的例子 157

3.7。2属性控制编辑器 158

3.8跳转语句和标签 160

4。错误源和程序调试 161

4.1避免错误和有效编程的注释 161

4。2程序调试 161

4。2。1程序测试的模式 161

4.2.1。1SIMOTION设备模式 161

4。2。1。2life-sign监视的重要信息 163

4。2。1.3life—sign监视参数 164

4.2.2符号浏览器 165

4。2.2。1符号浏览器的属性 165

4.2。2.2使用符号浏览器 165

4.2。3在watch表中监视变量 167

4。2.3.1在watch表中的变量 167

4。2.3。2使用watch表格 167

4。2。4程序运行 168

4.2。4.1程序运行:显示代码位置和调用路径 168

4。2。4.2参数调用栈程序运行 169

4。2。4。3程序运行工具栏 169

4.2。5程序状态 169

4。2.5.1程序状态的属性 169

4.2.5.2使用状态程序 170

4.2。5。3程序状态的调用路径 172

4.2。5.4参数调用路径状态程序 173

4.2。6断点 173

4。2。6.1设置断点的普通步骤 173

4。2。6.2设置debug模式 174

4.2.6.3定义debug任务组 175

4.2。6。4debug任务组参数 176

4。2。6.5debug表格参数 177

4.2.6。6设置断点 177

4。2。6.7断点工具栏 179

4。2。6。8定义一个单独断点的调用路径 179

4.2.6。9断点调用路径/任务选择参数 181

4.2.6.10定义所有断点的调用路径 182

4。2。6。11每个POU所有断点的调用路径/任务选择参数 183

4.2。6。12激活断点 184

4。2。6.13显示调用栈 185

4.2.6。14断点调用栈参数 186

4。2.7追溯 186

 

1. ST基本原理

此章节描述了ST中的语言资源和使用方法。请注意此章节中描述了功能、功能块和任务控制系统。一个完整正式的语言描述包括语法图。

1。1语言描述

在本手册的下列章节中语法图用作语言描述的基础,为你提供了对ST语法结构的新认识.

1.1.1语法图

语法图是对语法结构的图形式的阐述。结构是由一系列的规则描述组成。可以基于现有的规则生成新的规则。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\2)Y197GB7J79XDV9()DDGTU.jpg

上图中的语法图需从左至右读。需要注意下列规则结构:

●序列:块的序列

●选项:可以跳过的语句

●迭代:一个或多个语句的重复

●替代:Branch

1.1。2语法图中的块

块是基本元素.下图显示了代表块而使用的符号类型。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\J5H_WXI$BV~C0HIH3D3ZJJI.jpg

要更多解释的基本元素 由更多的语法图解释的复合单元

当输入源文本时需要注意格式化规则和非格式化规则。比如:把语法图中的块或元素转化为源文本(见帮助中的语言描述,第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是一样的)。

一个正式的标识符可以由以下的语法图表示:

命名时,最好选用唯一的、有意义的命名,以便解释程序.

图表中的语法图声明了一个标识符的首字符必须是字母或者下划线。下划线必须跟着字母或数字.如:不允许连续有两根或以上的下划线。下划线可以跟着任意或者一系列的数字,下划线或字母。在这唯一的例外是两条下划线可能不会同时出现。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\G25B9OC}V{XA98G$@MB33HH.jpg

1.2。2。2标识符举例

有效的标识符

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\RFH5`ZARG)[`5@7FG6@MP[L.jpg

无效的标识符

无效标识符 原因
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页)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\IN]2Y9EI{CM[RCQG_~XT6KG.jpg

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\L@D2IEF1US%W02@6H2]0YO8.jpg

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\3REH7ZN`9ZC6O(WKD748~7Q.jpg

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\CZ}NLAGWS)4}`7}2UDF_M{X.jpg

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\%@W{9B5BJ)8Z}]SS9QI6P}M.jpg

3.2.3.2额外的预留标识符

下表包含了将来扩展所有的预留标识符。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\NYGDL$)Q[{JXGN90Z4PQ20T.jpg

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\0PCF]A`6AT1UIR}MBZP(QGS.jpg

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来表示。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\48WX3NU7H(D7F{JVVHLGOAE.jpg

1。2。4。5数字的数据类型

编辑器根据数值和使用来自动选择适合数字的基本数据类型.

也可以直接指定数据类型。在数字前面输入数据类型(数字数据类型)和字符“#”。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\YM3X){NHR0IZIN(S7@N4SED.jpg

1.2。5字符串

什么是字符串?

一个字符串是许多的0或在最前面或者最后面带撇号的多字符。每个字符在串中

一个字符可以如下输入:

●可打印的字符(ASCII code $20 to $7E, $80 to $FF),除了美元符号(ASCII code $24)和撇号(ASCII code $27)之外,因为这些符号在字符串中有着特殊的含义.

●美元符号($)之后的相关字符的2位的十六进制ASCII code

●根据下表组成的两个字符的组合

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\[}{LMFG4PWE2NWB8WLM8ZDP.jpg

1.3 ST源文件的结构

一个ST源包含连续的文本,通过划分为逻辑块形成文本。详细的规则见源文件章节(第169页)。

简单的总结如下:

●一个ST源文件是可以在项目中创建的一个逻辑单元,可以出现多次。通常被称为一个单元。

●一个ST源文件的逻辑部分被称为Section(见表格)

●一个用户程序是所有程序源的集合(如:ST源文件,MCC单元)

每个ST源文件的逻辑部分的开头和结尾都有特定关键词

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\TAM3}$3]W66JE$3LN@Q96%9.jpg

没有必要自己对每个功能编程,可以使用SIMOTION系统组件。这些是预先编程好的部分,如系统功能或技术目标的功能.

源文件部分 描述
单元语句(可选的) 包括ST的名称
interface部分 包括导入和导出变量的语句,类型和POU
implementation部分 包括ST源文件的执行部分
POU(程序组织单元) ST源文件(程序,功能,功能块)单独的可执行部分
声明部分 包含声明(如变量和类型),可以被包含在interface部分和implementation部分,以及POU中
语句部分 包含一个POU的可执行语句

注意:

在线帮助中有很多可用的示范单元的模板。你可以使用作为一个新ST源文件的模板。

调用ST编辑器帮助,点击相关链接。复制文本到ST编辑器窗口,根据你的需求修改模板.

示范单元的模板包括此模板的复制件

1.3。1语句

一个POU的语句部分包括重复的单独语句。跟着POU的声明部分,以POU的结束而结束。首尾没有明显的关键词.

在ST中有三种基本语句:

●赋值:从表达式到变量的赋值,见105页变量声明

●控制语句:语句的分支的重复,见130页控制

●子程序执行:功能和功能块,见147页功能,功能块和程序

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\FWVMS3GFW1YSGDVDXKYQS8L.jpg

1。3。2注释

注释用作编制文件,同时也帮助用户理解源文件部分.在编制后,对于程序执行没有任何意义。

注释有两种:

●线注释

●块注释

线注释由//开始。编辑器将进行跟随的文本,知道线注释结束

你可以在很多线之后输入一个块注释,如果 (首尾都是 *)先于它.

当插入注释时注意:

●在注释中可以使用完整的扩展ASCII字符集

●在线型注释中可以忽略字符组(* 和 *)

●不允许块注释的嵌套。但是,在块注释中你可以嵌套线注释。

●可以在任意位置插入注释,但是不能在保持的规则中插入,如标识符的名称中。欲知更 多规则信息,见291页语言描述源。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\}@TE_VG0]%V1%1}LP~SCLRG.jpg

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)
浮点数(per IEEE —754) REAL 32 —3.402_823_466E+38to 1.175_494_351E−38, 0.0,

+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 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
日期和时间 DATE_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的所有字符都是允许的。 默认’ ‘ (空字符串)
注意:当导出变量到其他系统时,需要考虑对应的目标系统的数据类型的值的范围

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\18WZD2PA_BZZ_(L(K)Z1J9E.jpg

1.4.1。2基础数据类型的值的范围限制

基础数据类型的值的范围作为常量可用.

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\~IVVN~CHHQRKCP}G1R{0KWH.jpg

1。4。1.3普通的数据类型

普通的数据类型被用作系统功能和系统功能块的输入和输出参数。子程序被称做包含在普通数据类型中的每个数据类型的变量。

下表列出了可用的普通数据类型:

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\28T(6@W]EU_823ELEY~[~BR.jpg

1。4。1。4基础系统数据类型

在SIMOTION系统中,表格中指出的数据类型使用与基础数据类型类似.和许多系统功能一起使用.

标识符 位宽度 用途
StructAlarmId 32 alarmld的数据类型用于识别唯一的信息.alarmld用于生成信息。见功能手册SIMOTION基本功能。初始为STRUCTALARMID#NIL
StructTaskId 32 taskld的数据类型是在执行系统中识别唯一的任务。见功能手册SIMOTION基本功能.初始为STRUCTTASKID#NIL

无效的基础数据类型数值的符号常量

符号常量 数据类型 意义
STRUCTALARMID#NIL StructAlarmId 无效AlarmId
STRUCTTASKID#NIL StructTaskId 无效TaskId

1。4.2用户定义的数据类型

1。4.2。1用户定义的数据类型

用户定义的数据类型(UDT)通过在声明章节中随后的源文件部分和以下内容来创建TYPE/END_TYPE:

●interface部分

●implementation部分

●程序组织单元(POU)

可以使用在声明章节中创建的数据类型.源文件部分决定了类型声明的范围。

1。4。2。2用户定义的数据类型的语法(类型声明)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\IDBE)G])(D]0958MRU{N{0F.jpg

对于每个声明的数据类型,需要遵循以下:

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

一旦你已声明数据类型,你可以定义派生的数据类型标识符的变量。这等同于声明变量。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\]W54WBEIZVWD$[8W[AN9J[L.jpg

1。4.2。4 派生数据类型ARRAY

ARRAY派生数据类型包括用TYPE/END_TYPE结构来定义的同种数据类型。下图的语法图展示了这种数据类型,在预留标识符OF之后这种数据类型声明得更加详细.

TYPE标识符:ARRAY数据类型声明{ := initialization } ; END_TYPE

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\9)(3G_(0%V5OL81FUKJ(~KX.jpg

索引声明书描述了阵列的限制:

●阵列限制声明了索引值的最大和最小值.可以使用常量或常量表达式。数据类型为DINT(或转化为DINT-详见141页基础数据类型转化)

●阵列限制必须用两个句号隔开

●全部的索引声明须在方括号中

●索引可以为一个数据类型DINT(或转化为DINT—详见141页基础数据类型转化)的整数值

注意:如果运行时阵列超限,程序会产生过程故障(见SIMOTION基本功能功能手册)

用数据类型声明来声明阵列组件的数据类型。本章节中所描述的所有的选项都可以用作数据类型,甚至是用户定义数据(UDT)。

有多种不同的阵列类型:

●一维阵列类型为升序排列的一列数据元素

●二维阵列是一个包括行和列的数据表.第一维是指行数,第二维是指列数。

●更高维的阵列类型是二维阵列类型的扩展

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\@0J~B2(MKSYUYQ8HD4PHOJM.jpg

二维阵列可以与带行和列的表格比较.可以通过多层次的类型声明来创建二维或多维阵列。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\5F1K{{1F53RHJ@CYV~1@RLS.jpg

在例子中,你可以定义:

●表格列a[1] 到 a[3]作为一维阵列,将包含整数

●表格行矩阵1[1] 到矩阵2[4]作为一个阵列,但是作为使用表格中的列创建的阵列的数据类型声明。

当你在数据类型声明中声明阵列时,创建了一个第二维度。可以使用此方式创建更多的维度。

使用创建此表格的数据类型来声明一个变量。使用方括号为表格中的每个维度寻址。

1.4。2。5 派生的数据类型-枚举

在枚举的数据类型中,使用受限的标识符或名称来定义TYPE/END_TYPE结构。

TYPE标识符:枚举数据类型声明{ := initialization } ; END_TYPE

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\K]QVX]H6N0U9W]~LLI)ECP6.jpg

一旦你已声明了标识符的数据类型,可以在枚举中定义变量。在语句部分,可以从这些变量的定义标识符(枚举元素)表单中数值指定。

可以直接声明数据类型:把枚举数据类型标识符和“#”放在枚举前面。

可以包含带enum_type#MIN和enum_type#MAX结构的枚举数据类型的第一和最后一个值,enum_type为枚举数据类型标识符。

可以包含带ENUM_TO_DINT转化功能的枚举元素的数值。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\D5W0$1L5ZM7G_F89M{J~O$W.jpg

注意:你将会得知枚举数据类型为系统数据类型。

枚举数据类型可以为一个结构的部分,意味着在用户定义的数据结构中可以在任意的低级别中被找到。

1。4.2。6派生的数据类型STRUCT(结构)

派生的数据类型STRUCT,或者结构包括TYPE/END_TYPE结构的固定数量的组件。这些组件的数据类型可以变化:

TYPE标识符:STRUCT数据类型声明;END_TYPE

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\2Q2U7I84JZHY0G00[7VR{CP.jpg

下列为数据类型:

基础数据类型

●之前声明过的UDT

●系统数据类型

●TO数据类型

●ARRAY数据类型声明

你可以选择给组件赋初始值。继续关于变量初始值或数据类型(见107页变量或数据类型的初始值)

注意:

下列数据声明不可以在组件声明中直接使用

●STRUCT数据类型声明

●枚举数据类型声明

解决方案:用之前提到的声明在组件声明中预先声明UDT(用户定义数据类型)

这允许嵌套STRUCT数据类型

同样可能会发现STRUCT数据类型为系统数据类型

这个例子说了了一个UDT是如何定义的,在变量声明中又是如何使用的这种数据类型

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\Z~~(3Z7N761Z97V{58Q8@@S.jpg

1.4.3技术目标数据类型

1.4.3.1技术目标数据类型的描述

可以用技术目标来声明变量。下表给出了可用的技术目标的数据类型。

例如,可以用数据类型posaxis来声明一个变量,然后指配一个是适合的位置轴。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\T6]RFRN`O9YK6LK)YQ}X`@I.jpg

可以通过结构访问技术目标的元素。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\{QLE}HT6EFE5DPEO3SYJU}I.jpg

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数据类型的变量来演示用途。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\KUC$Y1}_~RVG%}DDQE30RQT.jpg

第二个例子未使用TO数据类型的变量。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\]WA17K(]ZCQEU7THMJ]~8(1.jpg

你将在SIMOTION运动控制功能描述中招待技术目标的组态和配置细节.

1.4.4系统数据类型

有很多可用的喜悦数据类型,无需预先声明就可以使用。每个导入的技术包提供了一库的系统数据类型。

额外的系统数据类型可以找到

●在普通标准功能中的参数(见SIMOTION基本功能功能手册)

●在普通标准功能模块中的参数(见SIMOTION基本功能功能手册)

●在SIMOTION设备的系统变量中(见相关的参数手册)

●在SIMOTION设备的系统功能参数中(见相关的参数手册)

●在技术目标的系统变量和组态(见相关的参数手册)

●在技术目标的系统功能参数中(见相关的参数手册)

1.5变量声明

一个变量定义了可在ST源文件中使用的变量内容的数据项。一个变量包括一个可以自由选择的标识符(如myVar1))和一个数据类型(如BOOL)。预留的标识符(见75页预留标识符)不能作为标识符使用。

1.5。1变量声明的语法

变量通常是根据源文件声明部分的相同模式来创建的。

●通过合适的关键词来开始一个声明块(如 VAR, VAR_GLOBAL – 见106页所有变量声明的概述

●遵循实际的变量声明(见图表),也可以如你所愿尽可能的创建,顺序是任意的.

●以END_VAR来结束一个声明块

●你可以创建更多的声明块(要有同样的关键词)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\7@]W6I{00K07(O[9YNKB4R7.jpg

注意

●变量的名称必须是一个标识符,如,只能包含字母,数字或下划线,但是不能包含特殊字符。

●允许作为数据类型的下列项:

基础数据类型

-UDT(用户定义数据类型)

—系统数据类型

—TO数据类型

—ARRAY数据类型声明

-功能块的设计

● 可以在声明语句中直接给变量赋初始值,这叫做初始化

从格式来的派生如下:

●常量声明(常量必须有初始值,见111页常量)

●过程图像访问(见106页所有变量声明的概述)

—不需要一个变量声明作为绝对过程图像访问

—不允许初始化作为符号过程访问控制

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\R_0@(RY~GU0`V$X`DS07@SY.jpg

1.5。2所有变量声明的概述

在变量和参数声明中声明名称、数据类型和变量的初始值。在下列源文件的声明部分执行这些声明:

●interface部分

●执行部分

●POU(程序、功能、功能块、表达式)

源文件部分也决定了你可以声明的变量和范围

欲知源文件部分的更多信息,参见86页的ST源文件结构个169页的源文件部分。

关键词 意义 声明
VAR 暂时或静态变量的声明,见184页变量模型 任意POU
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.枚举值

预先给变量或用户定义的数据类型指定初始值在数据类型声明之后(见语法图表:变量初始化)

●根据语法图表:常量表达式来给基础数据类型(或从基础数据类型派生的数据类型)赋常量表达式

●根据语法图:域初始化给域(阵列)指定域初始化列表

●根据语法图:结构初始化列表来给单独的结构成分来指定结构初始化列表

●给枚举数据类型指定枚举元素

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\JYL[$93MDNC$07DPCIRMU[1.jpg

在编译程序时给变量赋的初始值是从常量表达式计算得知的。见语法图。欲知更多常量表达式的信息,见常量表达式的语法图.

注意一个变量列表(a1, a2, a3, 。. : INT := 。. )可以是由普通数值初始化的。在这种情况下,不需要单独初始化变量(a1 : INT := 。. ; a2 : INT := .. ; etc。)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\OF]Y}TP0[`4@J[_LBSY)LXL.jpg

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\V@4OHLA@[}L%(@`U1A`]_7N.jpg

技术目标(TO)数据类型的变量由编辑器用TO#NIL初始化。任务对变量初始化的影响在SIMOTION基本功能功能手册中描述.

3。5.4常量

常量是带固定值的数据,在程序运行时不能更改固定数值。常量的声明方式与变量一样。

●本地常量的POU声明部分(见语法图:POU中的常量块和语法图:常量声明)

●在ST源文件单元常量是interface或implementation部分(见语法图:在interface或implementation部分的单元常量和语法图:常量声明)。可以在interface部分导入单元常量到其他ST源文件(见184页常量模型)

源文件部分也决定常量声明的范围。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\56%J]G({CDF4EIB~M24{C6X.jpg

赋给常量的值是通过在编译时计算常量表达式得出的.欲知更多常量表达式的语法图和信息,见常量表达式的语法图。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\5HC81CH2D2@RH$3WY%HGC21.jpg

1.6赋值和表达式

你已经用字符串来创建数值指定,也许是一个作为部分例子的语句(见87页语句示范表),或者是在源文件声明部分初始化变量的时候.

然而这只是对可用的公式化指定数值的小范围的选择。手册的本章节通过使用大量的例子详细描述了这个重要的话题。

注意:在算法和逻辑表达式中,结果通常是通过最大数值格式化表达式和转化数据类型所得出的。隐式转化在数值指定时不总是可行的。欲知更多错误源文件和解决方法的信息,见SIMOTION基本功能功能手册。

1.6。1赋值

1。6.1.1赋值的语法图

使用指定的数值来给变量数值指定.重写之前的数值.在一个数字可以正确指定前,在声明部分必须声明一个变量(见105页变量声明语法图)

如下面的语法图所示,表达式位于右侧. 结果保存在变量中,变量的名称列于左侧。所有的目标变量在图表中显示

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\GCL0ZD)]5CW}P1W~5@Z3$G9.jpg

下列包含了左侧的数值指定的解释和例子:

●基础数据类型的变量数值指定(114页)

●派生的枚举数据类型的变量数值指定(117页)

●派生的阵列数据类型的变量数值指定(118页)

●派生的结构数据类型的变量数值指定(118页)

●绝对的PI访问的数值指定(给过程图像寻址),见221页绝对PI访问

1。6。1。2基础数据类型的变量的数值指定

当下列情况之一满足时,基础数据类型(90页)的表达式可以指定给一个变量:

●表达式和目标变量是一样的数据类型

注意关于字符串数据类型(114页)的下列信息

●表达式的数据类型可以隐式转化为目标变量的数据类型

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\}CDLGJS52)O8UCHCD%1_8)B.jpg

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页本地编辑器设置)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\DL15PZ]Q4OD`]~`@]`2HRKA.jpg

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\[2FZ3RGD@)}HDURE@UGKOK8.jpg

注意:访问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

struct1。elem1 //Identifier for a structure component

struct1.array1 //Identifier of a simple array

//within a structure

struct1。array1[5] //Identifier of an array component

//within a structure

有两种方法来给变量指定结构。可以参考完整的结构或结构成分。

●如果数据类型和结构成分名称相符,一个完整的结构仅可以被指定为其他结构。

有效的指定如下: struct1 := struct2;

●可以指定一个类型兼容的变量,一个类型兼容的表达式或其他结构成分件给每个结构成分。

有效指定如下:

struct1.elem1 := Var1;

struct1.elem1 := 20;

struct1.elem1 := struct2.elem1;

struct1.array1 := struct2.array1;

struct1。array1[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运算对象

定义:运算对象是指可以用作写成表达式的对象.运算对象可以通过语法图表示:

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\OMV3@_)OB(BBF0CSB)K0SGR.jpg

1.6。4算术表达式

一个算术表达式是指由算术运算符形成的一个表达式.这些表达式允许处理数字型的数据类型。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\GLN36YV}YG({$CZ)X2@2X~X.jpg

下表显示了每个算术运算符

●算术运算符

●允许的运算符的数据类型

●结果的数据类型

使用了一些通用的数据类型(第92页)

注意

使用数字功能进行更多的操作是可行的,见SIMOTION基本功能功能手册中标准数字功能

建议使用括号来表示附属,尽管有时不需要,但是是为了提高辨识性

算法运算符根据各自对应的级别(129页)进行

运算符 数据类型
第1个运算目标 第2个运算目标 第3个运算目标
Exponential ** ANY_REAL2 ANY_REAL ANY_REAL3
Unary minus ANY_NUM (None) ANY_NUM
Multiplication ANY_NUM ANY_NUM ANY_NUM
ANY_BIT4 ANY_BIT4 ANY_BIT
TIME ANY_NUM TIME
Division / ANY_NUM ANY_NUM5 ANY_NUM
ANY_BIT4 A ANY_BIT4 5 NY_BIT
TIME ANY_NUM5 TIME
TIME TIME5 UDINT
Modulo division MOD ANY_INT ANY_INT5 ANY_INT
ANY_BIT4 ANY_BIT4 5 ANY_BIT
Addition + ANY_NUM ANY_NUM ANY_NUM
ANY_BIT4 ANY_BIT4 ANY_BIT
TIME TIME TIME6
TOD TIME TOD6)
DT TIME DT7
Subtraction ANY_NUM ANY_NUM ANY_NUM
ANY_BIT4 ANY_BIT4 ANY_BIT
TIME TIME TIME
TOD TIME8 TOD
DATE DATE TIME9
TOD TOD TIME9
DT TIME DT
DT DT TIME9
1.结果的数据类型由运算目标的最强数据类型决定。

2.第一个运算目标必须大于0

除了SIMOTION Kernel4。1版中

—如果第二个运算对象是整数,第一个运算对象必须小于0

—如果第二个运算对象是整数,第一个运算对象可以等于0

下列SIMOTION Kernel4。1版中的应用:如果第一个运算对象等于0,会得到一个带执行错误任务的错误信息

3。第一个运算目标的数据类型

4.除了布尔数据类型。使用同等字宽不带符号的整数来计算。

5。第二个运算目标必须不等于0

6.加法:也有可能溢出

7。带日期纠正的加法

8。在计算前从TIME到TOD的限制

9.这些操作是基于TIME数据类型的最大值的模数

注意:如果在运算一般的ANY_REAL数据类型的变量时超出数值范围,结果将根据IEEE754包含相同的位模式。

为了检查是否超出数值范围,可以通过使用功能——finite(见SIMOTION基本功能功能手册)来检测结果

1.6。4。1算术表达式的例子

带数字的算术表达式的例子

假设i和j是整数变量(INT数据类型),值为11和-3,一些整数表达式和对应的数值如下所示:

表达式 值

i + j 8

i — j 14

i * j —33

i MOD j —2

i / j -3

有时间说明的有效的算术表达式例子

变量 内容 数据类型

t1 T#1D_1H_1M_1S_1MS TIME

t2 T#2D_2H_2M_2S_2MS TIME

d1 D#2004—01-11 DATE

d2 D#2004-02-12 DATE

tod1 TOD#11:11:11.11 TIME_OF_DAY

tod2 TOD#12:12:12。12 TIME_OF_DAY

dt1 DT#2004—01—11-11:11:11.11 DATE_AND_TIME

dt2 DT#2004-02—12-12:12:12。12 DATE_AND_TIME

下面示范了一些带变量和值的表达式

表达式 值

t1 + t2 T#3D_3H_3M_3S_3MS

dt1 + t1 DT#2004—01-12-12:12:12.111

t1 — t2 T#48D_16H_1M_46S_295MS

t1 * 2 T#2D_2H_2M_2S_2MS

t1 / 2 T#12H_30M_30S_500MS

DATE_AND_TIME_TO_TIME_OF_DAY(dt1) TOD#11:11:11.110

DATE_AND_TIME_TO_DATE(dt1 ) D#2004-01-11

1.6.5关系表达式

定义:关系表达式是指带关系运算符的BOOL数据类型的表达式

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\14F7U]Z%$YNJF7U7IEK){F0.jpg

关系运算符比较两种运算目标的值然后得出布尔值作为结果

第一个运算对象 运算符 第二个运算对象 —>布尔值

运算符 意义
> 第一个运算目标大于第二个运算目标
< 第一个运算目标小于第二个运算目标
>= 第一个运算目标大于或等于第二个运算目标
<= 第一个运算目标小于或等于第二个运算目标
= 第一个运算目标等于第二个运算目标
<> 第一个运算目标不等于第二个运算目标

关系表达式的结果为:

●1(TRUE)当满足对比时

●0(FALSE)当不满足对比时

下表列出了允许的两个运算对象和关系运算符的数据类型的组合

数据类型 允许的关系运算符
第一个运算对象 第二个运算对象
ANY_NUM ANY_NUM1 〈, 〉, <=, 〉=, =, <〉
ANY_BIT ANY_BIT <, 〉, <=, >=, =, <〉
DATE DATE <, 〉, 〈=, >=, =, <〉
TIME_OF_DAY (TOD) TIME_OF_DAY (TOD) 〈, >, <=, >=, =, 〈>
DATE_AND_TIME (DT) DATE_AND_TIME (DT) 〈, >, <=, 〉=, =, 〈〉
TIME TIME 〈, 〉, 〈=, >=, =, 〈〉
STRING STRING2 〈, >, 〈=, >=, =, 〈>
Enumerator data type Enumerator data type3 =, 〈>
ARRAY ARRAY3 =, <〉
Structure (STRUCT) Structure (STRUCT)3 =, 〈〉
1。两种运算对象必须通过隐式转化为最强的数据类型(见141页基础数据类型转化和SIMOTION基本功能功能手册的数字数据类型和位数据类型的转化功能)

2.不考虑声明的字符串长度,字符串数据类型的变量可以进行比较

为了比较两种不同长度的字符串数据类型的变量,短的字符串通过在右侧插入$00扩展为长字符串的长度。比较基于ASCII编码中对应的字符串从左至右进行。

例如:’ABC’ 〈 ’AZ’ < ’Z’ < ’abc’ 〈 ’az’ 〈 ’z’

3。第一个运算目标的数据类型

关系标法是和BOOL数据类型的变量或常量可以一起组合成带逻辑运算符的逻辑表达式(见127页逻辑表达式)。 这启用了查询的实运用,如 If a < b and b 〈 c, then ….

注意:关系表达式运算符在表达式中比逻辑表达式级别要高。因此如果它们自身为逻辑表达式或位串行表达式,关系表达式的运算目标必须放于括号中。

注意当比较REAL或LREAL变量时会产生错误

IF A = 2 THEN

//.。.

END_IF;

var_1 := B 〈 C; // var_1 of BOOL data type

IF D 〈 E OR var_2 THEN // var_2 of BOOL data type

// 。。.

END_IF;

1。6.6逻辑表达式和位串行表达式

定义:带有逻辑运算符AND, &, XOR,和 OR,可以把运算目标和一般的数据类型ANY_BIT (BOOL, BYTE, WORD, or DWORD)的表达式组合。如果是带有逻辑运算符NOT, 那么可以否定运算目标和ANY_BIT数据类型的表达式

下表提供了可用的运算符的信息

命令 运算符 第1个运算目标 第2个运算目标 结果
Negation NOT ANY_BIT ANY_BIT
Conjunction AND or & ANY_BIT ANY_BIT ANY_BIT
Exclusive disjunction XOR ANY_BIT ANY_BIT ANY_BIT
Disjunction OR ANY_BIT ANY_BIT ANY_BIT
结果的数据类型由最强的运算目标的数据类型决定

表达式被指定为

●一个逻辑表达式,如果只使用了BOOL数据类型的运算目标

运算符对下列表格中的运算目标有影响。逻辑表达式的结果为1(TRUE)或者0(FALSE)

●位串行表达式,如果使用了BYTE, WORD, o或DWORD数据类型的运算目标。

运算符对下表中的单独的字节运算目标有影响

运算目标(数据类型BOOL) 结果(数据类型 BOOL)
a b NOT a NOT b a AND b

a & b

a XOR b a OR b
0 0 1 1 0 0 0
0 1 1 0 0 1 1
1 0 0 1 0 1 1
1 1 0 0 1 0 1

例子:

表达式(let n = 10) 值

(n〉0) AND (n〈20) TRUE

(n〉0) AND (n<5) FALSE

(n>0) OR (n〈5) TRUE

(n>0) XOR (n<20) FALSE

NOT ((n〉0) AND n〈20)) FALSE

位串行表达式

表达式 值

2#01010101 AND 2#11110000 2#01010000

2#01010101 OR 2#11110000 2#11110101

2#01010101 XOR 2#11110000 2#10100101

NOT 2#01010101 2#10101010

查询中的表达式 (let value1 be 2#01, let value2 be 2#11)

IF (value1 AND value2) = 2#01 THEN.。.

条件为TRUE,因为位串行变为 2#01.

1.6.7运算符的优先级

表达式的公式的一些基本的规则描述在119页表达式中。下表列出了在表达式中的单独运算符的优先级别。

命令 符号 优先级别
Parentheses (Expression) 最高级

最低级

Function evaluation 标识符(argument list)

如。 LN(a), EXPT (a,b) etc

Negation

Component

NOT

Exponentiation **
Multiplication

Division

Modulo

*

/

MOD

Addition

Subtraction

+

Comparison <, 〉, <=, 〉=
Equal

Not Equal

=

〈>

Boolean AND &, AND
Boolean

EXCLUSIVE OR

XOR
Boolean OR OR

1.7控制语句

源文件部分不能被编程,所有的语句以开始到结束的顺序被执行。通常,只有当条件为TRUE时才会执行一些语句,某些语句会被重复执行(循环)。在源文件部分中的程序控制语句是完成这个的方式。

1.7.1 IF语句

IF语句是条件语句。如果指定了一个或者多个选项,选择语句部分的一个(或无)来执行。

当执行条件语句时,估算指定的逻辑表达式。如果表达式的值为TRUE, 条件实现。如果只为FALSE, 条件没实现。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\C$@[)B}9KRK(TJ]03RO@CF4.jpg

根据下列规则处理IF语句:

1。如果第一个表达式的值为TRUE,执行在THEN之后的语句

在END_IF之后恢复程序.

2。如果第一个表达式的值为FALSE,ELSIF分支的表达式将估算.如果ELSIF分支的一个布尔表达式为TRUE, 执行在THEN之后的语句

在END_IF之后恢复程序。

3. 如果没有ELSIF分支的布尔表达式为TRUE,执行在ELSE之后的语句(或,如果没有ELSE分支,无更多的语句可执行)

在END_IF之后恢复程序。

ELSIF语句的任意数字都可以被编程。

注意可以没有任意的ELSIF分支和/或ELSE分支.可以用同样的方式解释犹如没有语句证明分支的存在。

使用一个或多个ELSIF分支的优势,而不是IF语句的顺序,优势在于遵循有效表达式的逻辑表达式不再需要估算.这将缩短程序要求的处理时间,阻止执行不需要的程序路径。

IF A=B THEN

n:= 0;

END_IF;

IF temperature < 5.0 THEN

%Q0.0 := TRUE;

ELSIF temperature > 10。0 THEN

%Q0.2 := TRUE;

ELSE

%Q0。1 := TRUE;

END_IF;

1.7。2 CASE语句

CASE语句被用作从N中程序选项中选择1

这种选择决定了一个选择表达式(选择器)

●一般数据类型ANY_INT的表达式

●枚举数据类型的变量

选择来自于一列表的数值(数值列表),程序的一部分被指定为每个数值或数组。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\0KQ[`Q6Y$[G1NQ_F~)08X1R.jpg

CASE语句根据下列规则被执行。

1.计算选择表达式(选择器)。必须回送一般数据类型ANY_INT(整数)或枚举数据类型的数值。

2。检查以决定选择器数值是否包含在数值列表中.每个列表中的数值代表了选择表达式允许的数值之一。

3。如果发现匹配,执行列表中被指定的程序部分

4。ELSE分支是可选的。如果没有发现匹配就执行。

5.如果ELSE分支确实,没有发现匹配,在END_CASE之后恢复程序.

数值列表包含选择表达式允许的数值.

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\8(U}WUV8O$@345MOB8_N9YE.jpg

当用公式表达数值列表时,注意以下:

●每个数值列表可以由一个常量(值),一个常量列表(值1,值2,值3等),或一个常量范围(值1到值2)开始。

●数值列表中的数值必须为整数常量或选择器中枚举数据类型的常量/元素

注意:

一个数值应该在CASE语句中的数值列表中仅出现一次。

如果一个数值多次出现,编辑器将产生报警,仅仅与首次产生数值所在的数值列表一直的语句部分会被执行.

下面的例子说明了CASE语句的使用

CASE intVar OF

1 : a := 1;

2,3 : b := 1;

4.。9 : c := 1; d:=2;

ELSE

e := 5;

END_CASE;

1。7。3 FOR语句

一个FOR语句或者一个重复语句在一个循环执行一系列的语句,此时数值会在每次通过时被指定给一个变量(一个计数变量)。计数变量必须为SINT,INT,或DINT类型的本地变量。

带FOR的一个循环的定义包括起始值和结束值的说明。两个变量必须为同计数变量一样的数据类型

注意:

在编程阶段循环通过的次数可知时,你可以使用FOR语句。如果循环通过次数未知,WHILE或REPEAT语句更适合(见136页WHILE语句和137页REPEAT语句)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\L9$5YYS8(AUF9PIQSH$EDRB.jpg

1.7.3。1处理FOR语句

根据下列规则处理FOR语句

1。在循环开始时,计数变量被设为起始值,在每次循环通过后会以指定的增量增大(正增量)或减小(负增量),知道达到结束值。在通过第一次循环之后,起始值被认为是当前值。

2。在每次通过时,系统将检查下列条件是否为TRUE

起始值或当前值〈= 结束值(正增量) 或者

起始值或当前值>= 结束值(负增量)

如果条件满足,执行语句

如果条件不满足,跳过循环和语句顺序,在END_FOR之后恢复程序。

3。因为第2不步如果没有执行FOR循环,计数变量保持当前值.

1。7.3.2 FOR语句规则

下列规则适用于FOR语句

●可以省略BY(增量)说明.如果没有指定增量,那么默认为+1

●起始值,结束值和增量为表达式(见119页表达式)。在开始FOR语句时会估算表达式。

●如果起始值和结束值为DINT数据类型,数值(结束值-起始值)必须小于双整数的最大值的范围,即小于2**31—1

●只执行选择器中第一个选择语句

●计数变量包含引起退出循环的数值,如:在退出循环前增加

●不允许在执行循环时改变结束值和增加值

1。7.3。3FOR语句例子

FOR k := 1 TO 10 BY 2 DO

l:=l+1;

// 。.。

END_FOR;

1。7。4WHILE语句

在控制迭代条件的情况下,WHILE语句允许重复执行语句顺序。迭代条件根据逻辑表达式的规定被写成公式.

注意:在编程阶段,当循环通过次数未知时,可以使用WHILE语句。如果次数已知,FOR语句更为适合(见134页FOR语句).

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\Y_Y7J)I4O]7{M}@Y@[@}(JW.jpg

重复DO之后的语句部分直到迭代条件中有TRUE. 根据下列规则处理WHILE语句:

1.每次在执行语句部分之前估算迭代条件

2。如果值为TRUE,执行语句部分

3。如果值为FALSE, 结束WHILE语句(第一次出现在估算条件时),在END_WHILE之后恢复程序。

WHILE Index 〈= 50 DO

Index:= Index + 2;

END_WHILE;

1.7.5REPEAT语句

REPEAT语句引起重复执行 REPEAT到UNTIL之间顺序的语句,直到结束条件为TRUE。结束条件根据逻辑表达式的规定被写成公式

注意:在编程阶段,当循环通过次数未知时,可以使用REPEAT语句。如果次数已知,FOR语句更为适合(见134页FOR语句)。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\WLKFRLFG2)7J1Z5]YAPVY[H.jpg

在执行完语句部分之后检查条件。这意味着语句部分至少要执行1次,即便在开始时结束语句为TRUE。

1.每次在执行语句部分之后估算迭代条件

2。如果值为FALSE,再次执行语句部分

3.如果值为TRUE, 结束REPEAT语句的执行,在END_REPEAT之后恢复程序执行.

Index:= 1;

REPEAT

Index:= Index + 2;

UNTIL Index > 50

END_REPEAT;

1.7。6EXIT语句

EXIT语句被用作在任何点退出一个循环(FOR, WHILE 或 REPEAT循环),不考虑结束条件是否为TRUE或FALSE。

这个语句对在EXIT语句直接跳出循环油影响。

在结束循环之后恢复程序。(如:END_FOR之后)

Index:= 1;

FOR Index := 1 to 51 BY 2 DO

IF %I0.0 THEN

EXIT;

END_IF;

END_FOR;

// The following value assignment is made after the execution of EXIT // or after the regular end of the FOR loop

// For the execution:

Index_find := Index_2;

1。7。7RETURN语句

RETURN语句引起结束现在运行(程序,功能,功能块)的POU.

当结束一个功能或功能块时,在调用功能或功能块所在的位置之后,在高级别的POU将继续执行程序。

Index:= 1;

FOR Index := 1 to 51 BY 2 DO

IF %I0。0 THEN

RETURN;

END_IF;

END_FOR;

// The following value assignment is made after the regular end

// of the FOR loop for the execution, however, not after the execution // of RETURN:

Index_find := Index_2;

1。7。8WAIFORCONDITION语句

可以使用WAIFORCONDITION语句来等待可编程事件或在MOTIONTask中的条件。调用MotionTask的执行语句被暂停,直到条件为TRUE.可以在表达式(166页)中对此条件进行编程。更多的WAIFORCONDITION和表达式的信息,见SIMOTION MOTION控制基本功能功能手册。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\XGIX{LHZ%TNMI6V06CW12O5.jpg

表达式标识符使用EXPRESSION声明的结构:它的数值定义(如有需要,同WITH edge 计算,如有必要)是否满足条件。

WITH edge evaluation顺序是可选的.Edge evaluation是BOOL数据类型的表达式,决定了如何干扰表达式标识符.

●Edge evaluation=TRUE:干扰表达式标识符的上升边缘。如:当表达式标识符从FALSE改为TRUE时,条件满足

●Edge evaluation=FALSE:干扰表达式标识符的静态值。如:当表达式标识符为TRUE时,满足条件。

如果没有说明WITH edge evaluation,默认设置为FALSE。如:估算表达式标识符的静态值

语句部分必须包括至少一个语句(空语句也算)

// 。。。

// Call the statement with name of expression

WAITFORCONDITION myExpression WITH TRUE DO

// Here, at least one statement will be executed with higher priority,

e。g。

%Q0.0 := TRUE;

END_WAITFORCONDITION;

// ..。

完整的例子,见表达式的描述(166页)

1.7。9GOTO语句

GOTO语句将引起至语句说明的跳转标签的跳转。(见250页跳转语句和标签)

使用GOTO语句编写跳转语句,指定跳转标签至你想要跳转的位置。跳转只允许在POU之内.

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\{RE)KLA[K3{NW@E%)){45SN.jpg

注意:

在特定的情况(如:调试检修)中只能使用GOTO语句。根据结构编程的规则不能使用GOTO语句。

跳转只允许在POU之内。

下列的跳转是非法的

●跳转至下属的控制结构(WHILE,FOR,等)

●从WAITFORCONDITION结构来的跳转

●在CASE语句中的跳转

跳转标签只能在使用的POU中被声明.如果声明了跳转标签,只能使用声明的跳转标签。

1。8数据类型转换

此节描述了在基础数据类型之间的显式和隐式转换。也包括额外的转换可能的概述。

1.8。1基础数据类型转换

下表显示在数字数据类型和字节数据类型之间的转换选项。下列是明显的转换选项。

●隐式转换:当在一个表达式中使用不同的数据类型或编辑器指定数值时自,自动转换

●显式转换:当用户调用一个转换功能时执行转换(见SIMOTION基本功能功能手册)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\V925(]F]7VW7U(9AF$HVTO4.jpg

Im:可能的隐式数据类型转换

Ex:使用Quelldatentyp_TO_Zieldatentyp类型转换功能的可能的显式数据类型转换

使用Quelldatentyp_VALUE_TO_Zieldatentyp类型转换功能的可能的显式数据类型转换

Elem:使用字符串数据类型元素的隐式数据类型转换

1.8.1。1隐式数据类型转换

如果扩大的数值范围没有引起任何数值漏失,隐式类型的转换是可能的。如:从REAL 到LREAL 或 从 INT 到 REAL.结果通常被定义。

下表提供了所有隐式转换链的基于图标的视图。在类型转换链中的每个阶段(从左至右或从上至下读)通常代表数值范围的扩大。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\5HI{EZG9W~VVCLQNX(_P@XR.jpg

下列隐式类型转换支持:

1。超过一级或多级的水平式(从左至右)(e.g。 USINT to UDINT)

2。超过一级的垂直式(从上到下)(e.g。 UINT to REAL)

隐式类型转换可以通过下列顺序组合(e.g。 INT to LREAL)。

所有其他的类型转换不能隐式执行(e.g。 UDINT to REAL),意味着必须使用显式功能

注意:

在算法表达式中,结果通常以表达式中包含的最大数值公式计算。

数值仅可以被指定给表达式,如果:

●计算的表达式和指定的变量是同种数据类型

●计算的表达式的数据类型可以被隐式转换为指定的变量的数据类型

欲知更多错误源和解决方案的信息,参考SIMOTION功能手册。

注意:如适用,显式指定数字的数据类型(如: UINT#127, 如果数字 127 i为数据类型UINT 而不是 USINT).

1。8.1.2显式数据类型转换

如果信息可能丢失,需要显式转换。例如:如果数值范围减小或精度减小,就如同从LREAL到REAL的转换一样。

数字数据类型的转换功能在SIMOTION基本功能功能手册中列出。

当检测到精度缺失的转换时编辑器输出警告。

注意:在程序运行时的类型转换将引起错误,这将引起任务组态中的错误回复。

当转换DWORD到REAL时,需要特别注意。从DWORD得来的位字符串视为REAL数值没有检查。必须确保对应标准化的浮点值的位格式在DWORD中的位字符串与IEEE一致。可以使用_finite 和 _isNaN功能达到此目标。

否则,一旦REAL值首次被用作算术运算时,会触发一个错误(例如:在程序中或监视符号浏览窗口)

注意:如果在转换LREAL到REAL时超出数值限制范围时,应用以下:

●下溢(LREAL数字的绝对值小于最小LREAL正数)

结果为0.0

●上溢(LREAL数字的绝对值大于最大LREAL正数)

触发任务组态中的指定的错误回复

1。8.2补充的转换

ST系统功能允许下列转换

●组合的比特串类型

这些功能把一个位串行数据类型的多个变量组合成一个高级别数据类型的变量

●拆分的比特串数据类型

这些功能把一个比特串数据类型的一个变量拆分为一个高级别数据类型的多个变量

●在任意数据类型和比特阵列之间的转换

通常用作在不同设备之间为数据交换创建定义转移公式

欲知更多信息(如:比特阵列的安排),见SIMOTION基本功能功能手册

●技术目标数据类型的转换

把分层的TO数据类型(driveAxis, posAxis, 或 followingAxis)的变量或普通的ANYOBJECT类型转换为兼容的TO数据类型

欲知更多的例子和信息,请见SIMOTION基本功能功能手册

2.功能,功能块和程序

此章描述了如何创建和调用用户定义的功能和功能块。标准功能在系统中的类型转换,三角法,和比特字符串处理是可用的。SIMOTION基本功能功能手册描述了如何使用系统功能和技术目标的功能。

一个功能(FC)是指无静态数据的编码块。当退出功能时所有的本地变量丢失数值,下次再调用功能时再重新启动.

一个功能块(FB)是指带静态数据的编码块.FB有内存,所以在用户程序中可以随时访问输出参数。本地变量在调用之间保持原值。

程序与FB类似,但是没有参数.然而,却可以指定执行级别和任务(见SIMOTION基础功能手册)

FC和FB有着可以重新使用的优势,因为他们是被可以指定参数的源文件部分所包含。

功能,功能块和程序为可编程组织单元(POU),如:它们是可执行的源文件部分。你将在169页找到源文件部分的概述。

2.1创建和调用功能和功能块

下列描述解释了如何创建和调用功能(FC)和功能块(FB)。一个完整的例子表明了FC和FB的区别(见161页功能和功能块的比较)

必须用来定义和调用规定的源文件部分的顺序在169页源文件部分的使用中给出。

如何导出和导入功能和功能块在179页在ST源文件部分的导入和导出部分中解释。

2。1。1定义功能

在调用源文件部分(程序,FB,FC)之前,在implementation部分的声明部分定义一个功能。

使用下面的语法图:

功能关键词由如同FC名称和回送数值的数据类型的标识符跟随。如果FC没有回送值,输入VOID为数据类型。

然后输入(见162页带注释的源文件例子)

●可选的声明部分

●语句部分

●END_FUNCTION关键词

2。1。2定义功能块

在调用源文件部分(程序,FB,或FC)中的FB之前,可以在implementation部分的声明部分定义一个功能块.

使用以下的语法图:

在FUNCTION_BLOCK关键词之后输入一个标识符作为FB名称.

然后输入(162页带注释的源文件例子)

●可选的声明部分

●语句部分

●END_FUNCTION关键词

2。1。3FC和FB的声明部分

一个声明可以被细分为不同的声明块,每个声明块由单独的一双关键词来标识。每个块包含带类似数据的声明列表,如常量,本地变量和参数。块的每个类型只能出现一次,可以出现在任意顺序中。

下列的选项对FC和FB的声明部分都是可用的

数据 语法 FB FC
常量 VAR CONSTANT

声明列表

END_VAR

X X
输入参数 VAR_INPUT

声明列表

END_VAR

X X
in/out参数 VAR_IN_OUT

声明列表

END_VAR

X X
输出参数 VAR_OUTPUT

声明列表

END_VAR

X
本地变量(FC和FB) VAR

声明列表

END_VAR

X(静态) X(临时)
本地变量(FB) VAR_TEMP

声明列表

END_VAR

X(临时)
声明列表:声明类型标识符的列表

参数为本地数据和功能或功能块的形式参数。当调用FC或FB时,形式参数由实际参数所替代,因此提供了在被调用和调用源文件部分之间的交换信息的方式。

●形式输入参数接收实际输入参数(向内数据流)

●形式输出参数(只指FB)被用作传输输出数值(向外数据流)

●作为输入和输出参数的形式in/out参数行为

下表为FB和FC的参数说明的语法图:

可以如同其他带FB或FC的变量一样使用声明的参数,以下例外,不能给输入参数指定数值:

从FB或FC的外部,你可以访问:

●通过结构变量(见94页用户定义数据类型)访问FB的输入和输出参数

只有当激活编辑器中“允许语言扩展”选项时(见45页全局编辑器设置和46页本地编辑器设置),可以访问输入参数。

输出参数的数据访问功能的标准的。

●通过使用表达式的功能和指定的FC的回送值,如:到一个变量(功能名称的说明调用功能,同时回送一个结果)

2.1.4FB和FC部分的语句

FC和FB的语句部分包含调用FC或FB时所执行的语句。与创建语句部分的正式规则相比,是一样的。但是,你必须注意下表中的信息。

注意:如何有效使用参数,请见SIMOTION基础功能手册中的优化运行时间的编程。

参数/变量 用途
输入参数 调用FC或FB,指定当前值给输入参数。使用这些数值来处理FC或FB的数据。如:对于计算而言,但是不能自行修改.只针对激活编辑器中的“允许语言扩展”选项(见45页全局编辑器设置和46页本地编辑器设置).FB的输入参数可以使用结构变量来读和写,FB之外也如此.(如调用源文件部分)
in/out参数 为了调用FB或FC指定一个变量给in/out参数。FB或FC直接访问此变量,也可立即对此进行更改。不支持类型转换。

被指定给in/out参数的变量必须可以直接被读或写。因此系统变量(SIMOTION设备或技术目标),I/O变量或过程图像访问不能被指定给一个in/out参数

输出参数(只指FB) 使用=>运算符调用FB时可以指定 一个变量给一个in/out参数。当关闭FB时输出参数(结果)的值被转移给变量。FB输出参数可以通过使用结构变量来读,FB以外的也一样。(如:在调用源文件部分)

FC没有形式输出参数,因为功能名称接收回送数值.某种程度来说功能名称自己就是一个输出参数。

本地变量 本地变量为仅在块中声明和使用的变量。

所有的本地变量(VAR 。.。 END_VAR)在FC中都是临时的。如:当FC结束时,它们的数值将丢失.下次调用FC时,将重新启动。

静态和临时的本地数据的不同在于FB:

关闭FB时,静态数据(VAR 。。. END_VAR)保持原值

关闭FB时,临时变量(VAR_TEMP .。. END_VAR)数值丢失.下次调用FC时,将重新启动。

本地变量的数值不能通过调用块直接查询.只能使用输出参数查询.

2。1。5功能和功能块的调用

这将给功能和功能块的调用提供一个概述。

2.1。5.1参数转移的原则

当你调用一个FC或FB时,数据交换在调用和被调用的块之间发生。转移的数据必须指定为调用里的一个参数列表。参数编写在括号中。多个参数由逗号隔开。

输入和in/out参数作为一个数值被指定。指定数值(实际参数)給被调用的块(形式参数)声明部分中定义的参数。

使用=>运算符来指定输出参数.指定数值(实际参数)給 被调用的块(形式参数)声明部分中定义的输出参数。

2。1。5。2转移给输入参数的参数

通过输入指定,转移数据(实际参数)给FC或FB的形式输入参数.可以通过表达式指定实际参数。FB或FC中语句的形式输入参数也可使用,但是你不能修改数值。

支持简易格式的参数转移,但是不能用于用户定义FB的兼算。简易格式只使用于某些FC,见SIMOTION基础功能手册.

实际参数的指定对FB是可选的。如果没有说明输入指定,最后调用的数值将保留,因为FB是带内存的源文件部分。

当表达式的初始化被指定为形式参数的说明时,一个实际参数的指定对FC是可选的.

同时参考156页调用功能和157页调用功能块.

任何时间在FB外也可以读和写一个FB输入参数。欲知更多信息,见:159页在FB外访问FB输入参数

2.1。5。3参数转移给in/out参数

使用in/out指定转移数据(实际参数)给FB或FC形式in/out参数.你只能同类型的一个变量给形式in/out参数,不可以转换数据类型。

你可以在FC后FB中使用和改变形式in/out参数.FC或FB直接访问实际参数的变量,也可以立即更改.

见156页调用功能和157页调用功能块

in/out指定使用字符串数据类型时,实际参数的声明长度必须大于或等于形式in/out参数的长度(见下例)

指定给一个in/out参数的变量必须能够直接读和写。因此,系统变量(SIMOTION设备或技术目标),I/O变量或过程图像访问不能被指定给一个in/out参数。

请注意不同的参数访问时间!

2。1。5。4参数转移到输出参数(仅对FB)

可以使用一个输出指定来指定一个FB形式输出参数给变量(实际参数),这个变量指当关闭FB时接收形式输出参数的数值

你可以在FB的语句中使用和更改形式输出参数.

见157页调用功能块的例子

输出指定对于参数转移是可选的.你在任何时间可以读和写一个FB输出参数,甚至在FB外也行。欲知更多,见159页访问FB外的输出参数。

2.1.5。5参数访问时间

访问的类型和参数访问时间是不同的:

●就输入指定而言,实际参数的值复制给形式参数.如果大结构(如阵列)被复制,而且FC或FB被频繁调用,这将限制性能.

●值没有复制到in/out指定。反而在形式参数的存储地址和实际参数之间创建了一个链接。因此转移变量要快于输入指定(特别是涉及到大量数据时)。但是,从FB的访问变量较之可能会慢些.

●如果你正在使用单元变量,没有内容会复制给FB或FC。因为这些变量在全部的ST源文件中是有效的.(见184页变量模型)

注意:

如果大量数据要传到功能块,使用in/out参数代替输入参数只会更快。

如果主要使用单元变量,而不是参数,产生的程序结构将很复杂和混乱:目标导向,数据封装,变量名称的多重使用(有效性范围的封装)等,这些都不再可能。

2。1。5.6调用一个功能

如下一个功能被调用:

●带回送值的功能(除了VOID的数据类型)

功能位于一个数值指定的右侧。也可在表达式中作为运算对象出现.在调用功能之后,在合适的点使用回送值来计算表达式。

●无回送值(VOID数据类型)的功能

指定仅包含功能调用。

下面的例子是有效的,假如已经定义含有in1和 in2输入参数的funct1功能和inout in/out参数。

funct1 (in1 := var11, in2 := var12, inout1 := var13);

注意:在功能中,结果(回送值)被指定为功能名称(除了VOID数据类型)

2.1.5。7调用功能块(实例调用)

在调用一个功能块(FB)之前,你必须声明一个实例。你声明一个变量,输入功能块的名称作为数据类型。声明这个实例:

●本地(在程序或功能块的声明部分VAR/END_VAR)

●全局(在implementation部分的interface中的VAR_GLOBAL/END_VAR)

●作为一个in/out参数(在功能或功能块的声明部分中的VAR_IN_OUT / END_VAR)

实例声明也可以是一个阵列,如:

FB_inst : ARRAY [1。.2] OF FB_name。

注意:不同的变量类型的不同初始化

在POU的语句部分调用一个功能块.FB参数是通过逗号隔开的输入和in/out指定。

在下表中的例子是适用的,假设已经定义了supply 和motor的功能块

●FB Supply

输入参数 in1, in2; in/out参数 inout; 输出参数 out

●FB motor

in/out参数inout1, inout2; 输出参数out1, out2

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\D$46XM@O[AITO~HDNIZ~JWY.jpg

2.1.5.8 在FB外访问FB输出参数

除了输出指定来调用一个FB之外,在FB外访问一个FB输出参数也是可能的。

如要这样做,使用FB实例名称的结构变量(100页),,输出参数格式,如Supply1。out

FB的实例名称不能在数值指定中使用。

2。1。5.9在FB外访问FB输入参数

除了输入指定调用FB之外,在FB外读写一个FB输入参数也是可能的。

如要这样做,使用FB实例名称的结构变量(100页),,输入参数格式,如Supply1。in1

注意:要使用此功能,必须激活编辑器中的允许语言扩展选项。

FB的实例名称不能在数值指定中使用。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\H$T3QF@__XE71SG54IVL)L8.jpg

2。1.5。10FB调用时的错误源

当调用一个功能块实例时注意:

●只指定带直接存储在内存中的变量的in/out参数

只有下列的变量为允许的实际参数

-全局参数(单元变量和全局设备用户变量)

—本地参数

—TO数据类型(TO实例)的变量

特别是下列内容,是被允许的

系统变量(TO变量)

—从设计系统来的技术目标的名称

—I/O变量

—绝对和符号过程图像访问

●不使用功能作为in/out参数

FC回送值,如FC调用,在in/out指定中不能为实际参数。你必须先存储在本地变量中FC的结果,然后使用此变量作为in/out指定中的实际参数。

●不使用变量作为in/out参数

只能使用变量作为in/out指定的实际参数,因为会回写数值.

●不能初始化in/out参数

2.2功能和功能块的比较

用户定义的功能和功能块的区别在下面用详细的例子来说明。

2.2。1例子说明

下面的例子说明了FB和FC之间的区别。为了简单起见,,每个类型的参数只使用一次,但是在现实的实际情况中,你可以定义多个参数。使用的术语在详细的描述148页定义功能和149页定义功能块中被定义。

一个块将在implementation部分的声明中作为一个FB和FC被创建,用作计算圆周和半径输入变量的圆圈面积。

●为半径定义输入参数

●为圆周定义in/out参数,如:在调用FC或FB时,直接指定转移变量的数值

●有多种方法定义FB和FC的圆圈面积

—对FB而言,定义输出参数

—对FC而言,使用其回送值。合适定义回送值的数据类型

●每个FB和FC会被记录在计数器中(本地变量)。对例子的解释为:我们认为这个数值将持续仅在FB中被计数。

●在编程部分,FB或FC被调用,实际参数被指定给下列形式参数:

—对FB而言,输入,in/out和输出参数

-对FC而言,输入和in/out参数

在调用FB或FC之后,对圆周和面积的数值都是可用的。

—对FB而言,在in/out和输出参数的实际参数里。

输出参数甚至可以在FB外被读出。

—对FC而言,在功能的回送值和in/out参数的实际参数值里.

2。2.2带注释的源文件

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\MI`@W5`M0V[PUYAZV0CO%[B.jpg

功能块FB 功能FC
注释
定义的预留词:

FUNCTION_BLOCK and END_FUNCTION_BLOCK

定义的预留词:

FUNCTION and END_FUNCTION

不允许回送值 回送值的数据类型必须在名称(VOID数据类型,如果没有回送值)后说明
可以使用输入参数来转移数值到FB 可以使用输入参数来转移数值到FC
可以使用In/out参数来读写FB中的转移变量 可以使用In/out参数来读写FC中的转移变量
可以使用输出参数从FB回送数值 不允许输出参数
本地变量是静态的,如:在FB调用中保留数值

计数器本地变量增加;当FB结束时保留其数值.因此每次调用FB时变量增加。

为了看见这种行为:指定本地变量数值到FB的全局变量.在重复FB调用后监视全局变量数值

本地变量是临时的,如:当功能结束后数值丢失.

虽然计数器本地变量增加,当FC退出时数值丢失。下次调用FC时变量重新恢复(例子中变为0)

为了看见这种行为:指定本地变量数值到FC的全局变量。在重复 FC调用后保持全局变量不变.

在语句部分,结果(回送值)被指定为输出或in/out参数 在语句部分,结果(回送值)被指定为功能名称(除了特别指定VOID数据类型之外)
在执行调用的块的声明部分,声明FB的一个实例:声明一个变量,指定FB名称为它的数据类型.使用声明的实例名称来调用FB,以访问输出参数。

FB的名称 不能使用在语句部分。

●在FB实例被调用时,指定一个变量到in/out参数

●调用时,可以指定输出参数给一个变量

●可以读出一个FB的输出参数,甚至在FB外。

为此,你必须使用下列格式的结构变量:

FB—instancename.outputparameter

●在FB实例被调用时,指定一个变量到in/out参数

●为获得FC的回送值

—指定一个功能到一个变量

—使用表达式右侧数值指定的的功能

执行调用的程序不能访问变量,除了in/out变量和FB的输出参数。

例外:激活编辑器的允许语言扩展功能。,调用的程序可以访问FB的输入参数。为此,使用下列格式的结构变量:

FB—instancename。inputparameter。

执行调用的程序不能访问变量,除了回送值

2。3程序

程序是在PROGRAM和END_PROGRAM之间放置的一系列语句。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\EZU]UP6}49JS$ZKCJR_EQ5U.jpg

程序在ST源文件的implementation部分被声明,并与FB比较。静态的本地变量(VAR。..END_VAR)或临时变量(VAR_TEMP。.。END_VAR)可以被创建。例如:它们没有任何的形式参数,所以不能不能通过参数调用。程序的例子见162页带注释的源文件和64页程序示范。

在执行系统中指定一个程序

默认执行系统中的程序被指定给一个任务.程序的执行动作,例如:相关的任务决定变量的初始化.欲知更多,见SIMOTION基础功能手册。这需要程序在源文件的interface部分必须指定为导出的程序组织单元.

在程序中调用一个程序(“程序中的程序”)

在不同的程序或功能块中可以调用一个程序。这需要激活编辑器的以下功能。(见45页编辑器的全局设置和46页编辑器的本地设置):

1. 调用程序或功能块程序源的“允许语言扩展”功能

2.调用程序的程序源的“仅一次创建程序实例数据“功能。调用作为带参数和回送值的功能被执行,见下面的例子。

注意:编译器的“仅一次创建程序实例数据“功能将引起:

●程序(程序实例数据)的静态变量将存储在不同的区域(194页).这将改变初始化的动作(204页).

●带相同名称的所有被调用的程序使用相同的程序实例数据。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\P{1LI4ZQ14O]}NU~M%1SW)K.jpg

这可以被用作执行指定程序到任务的大部分的程序。在执行系统中,只有每个相关的调用程序需要被指定给任务。

2.4表达式

表达式是功能说明的特例:

回送值的数据类型被定义为BOOL,并且不是明确指出。连同WAITFORCONDITION语句一起使用。

一个表达式只能在源文件的implementation部分被声明。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\6$Z1[L1~~~@5TG7$UOOFMWB.jpg

在声明部分可以声明下列内容:

●本地(临时)变量

●本地常量

●用户定义数据类型(UDT)

●输入和in/out参数

在语句部分可以访问下列内容

●本地变量的表达式

●输入和in/out参数(假如声明是被允许的)

●单元变量

●全局设备变量,I/O变量和过程图像

数据类型BOOL的表达式必须被指定给在表达式语句部分的表达式名称。

注意:表达式的语句部分不能包含任何的功能调用或循环。

下面的例子假设支程序在MOTION TASK里面运行.在Startup Task之后选择功能激活。在SIMOTION SCOUT里面运行从程序到任务的指定.

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\Y_`8SHUJ}J%LN`P_AQ%`UI6.jpg

更多的例子包含在SIMOTION运动控制基础功能手册中.特别是手册描述了使用带参数的表达式在WAITFORCONDITION语句里编写一个时间监控的程序。

3。在SIMOTION中ST的集成

本章描述了ST程序和SIMOTION SCOUNT的互操作性。

3。1源文件部分的使用

源文件部分意义的概述在86页中的ST源文件结构中有描述。此章描述了细节,如section的语法,和如何使用在许多的ST源文件中以导入和导出数据。

3.1。1源文件部分的使用

在源文件部分(模块)中,你必须遵循一些结构和语法规则,以便可以编译ST源文件.下面列出了一些基本的指南,详细内容在本章节后半部分。

●当创建源文件时,你应该注意源文件部分的顺序。即将调用的部分必须先于正在调用的部分。否则即将调用的部分不能识别正在调用的部分。

例如:变量必须在使用之前声明,功能在调用之前必须被定义。

●对于最普通的源文件部分的源文本-程序,功能或功能块—包含以下:

—从带预留词语和标识符的部分开始

声明部分(可选的)

-语句部分

-以预留词语结束的部分

●源文件部分的标识符-因此是指名称或遵循一般标识符语法规则的名称列表

注意:在线帮助中有可用的源文件部分的模板。

3.1。1.1interface部分

interface部分包含导入和导出数据(数据类型,变量,功能块,功能和程序)的语句。页可以下载技术包和库。

interface有着如下的语法:

语法 INTERFACE

// Interface statements (optional) END_INTERFACE

不能指定section的一个单独的标识符。

但是,interface语句存在于预留词语INTERFACE and END_INTERFACE的之间的顺序:

1。使用的技术包的说明,语法:

USEPACKAGE tp-name [AS namespace]

欲知更多详情,见SIMOTION基础功能手册

2。使用的库的说明,语法:

USELIB library—name-list [AS namespace]

欲知更多详情,见230页从库中使用数据类型,功能和功能块。

3。参考其他单元以便使用其导出部分,语法:

USES unit_name—list;

欲知更多详情,见181页在导入单元使用的语句

4.对导出的声明和说明

-数据类型定义(176页)

用户定义的数据类型在所有的ST源文件是有效的,需要被导出

—变量说明(177页)

单元变量和单元常量在所有的ST源文件中是有效的和导出。允许的关键词见177页变量声明

—关于要导出的程序组织单元的信息

语法:FUNCTION fc_name;

FUNCTION_BLOCK fb_name;

PROGRAM program_name;

列在interface部分的所有的技术包,库,导入单元,数据类型声明,变量说明和程序组织单元都将被导出.欲知更多的导出信息,见179页interface部分导出单元.

顺序 interface部分是ST源文件部分的第一个部分。

interface语句的顺序1到4都是固定的

在1到4中,任意的顺序都是允许的。单数据类型定义和变量定义的单独的声明块可以出现不只一次。

频次 源文件/每次
强制部分 YES
单元语句可以选择先于interface部分(见179页单元的标识符)

3。1.1。2implementation部分

implementation部分包含执行部分,是ST源文件的主要组成部分。

implementation部分语法如下:

语法 IMPLEMENTATION

// Implementation statements (optional) END_IMPLEMENTATION

不能指定部分的一个单独的标识符

implementation部分(ST源文件的主要部分)可以选择存在于预留词IMPLEMENTATION和END_IMPLEMENTATION之间的顺序中

1.参考其他单元以便使用其导出部分

USES unit_name-list;

欲知更多详情,见181页在导入单元使用的语句

2.声明

—数据类型定义(176页)

用户定义的数据类型在所有的ST源文件是有效的

-变量说明(177页)

单元变量和单元常量在所有的ST源文件中是有效的和导出。允许的关键词见177页变量声明

3.程序组织单元

顺序 总是遵循interface部分

上述implementation部分的顺序是强制的。在顺序2到3之间,任意顺序都是允许的

频次 源文件/每次
强制部分 YES

3。1.1.3程序组织单元(POU)

POU是可以被执行的源文件部分

功能(FC)(172页)

●表达式(174页)

●功能块(173页)

程序(174页)

注意:已调用的POU先于正在调用的POU,所以它们通过后者被辨识。

3。1。1。4功能(FC)

功能(FC)被列为程序组织单元(POU).功能是从程序和功能块调用的临时数据的参数化的源文件部分。当退出功能,下次调用此功能时并且重新恢复时,所有的内部变量失去数值。

FC语法如下:

语法 FUNCTION name : function_data_type

// Declaration section

// Statement section

END_FUNCTION

名称代表功能的标识符,而功能数据类型代表回送值的数据类型

在声明部分的变量说明的允许词语中,见177页变量声明

注意带功能数据类型〈> VOID的下列功能:在语句部分,功能数据类型的表达式必须被指定给功能标识符.

顺序 FC只能在implementation部分被定义。

注意顺序:FC必须在被调用的POU之前

声明部分(175页)必须先于176页的语句部分。

频次 每个ST源文件任意次
强制部分 NO

欲知FC更多信息,见147页创建和调用功能及功能块。

3。1.1.5功能块(FB)

功能块被列为POU.它们是带可以从程序和被指定的参数(在调用间内部变量保持数值不变)调用静态数据的源文件部分。。因为FB有内存,可以任何时间或从用户程序的任意点访问其输出参数.

FB语法如下:

语法 FUNCTION_BLOCK name

// Declaration section

// Statement section

END_FUNCTION_BLOCK

名称代表功能块的标识符

在声明部分的变量说明的允许词语中,见177页变量声明

特殊特征 在你调用一个功能块之前,你必须声明一个实例:你声明一个变量,然后输入功能块的标识符作为数据类型。你可以本地声明实例(在一个程序或功能块的声明部分VAR / END_VAR中)

你可以全局声明实例(在interface或implementation部分的VAR_GLOBAL / END_VAR中)。但是,不能使用在同样的ST源文件中定义的功能块。只有在功能块通过导入程序源文件和库可用的情况下才可行。

顺序 FB只能在implementation部分被定义.

注意顺序:FB必须先于一个实例被作为本地变量声明的POE

频次 每个ST源文件任意次
强制部分 NO

欲知FB更多信息,见147页创建和调用功能及功能块。

3.1.1。6程序

程序被列为POU.在目标系统中根据任务指定(见SIMOTION基础功能手册中的配置执行系统)被调用,和调用功能及功能块。

程序的语法如下:

语法 PROGRAM name

// Declaration section

// Statement section

END_PROGRAM

名称代表程序的标识符

在声明部分的变量说明的允许词语中,见177页变量声明

顺序 程序只能在implementation部分被定义。

把程序放在表达式,功能和功能块之后是由优势的。这使得程序辨别和使用源文件部分。

声明部分(175页)必须先于语句部分(176页)

频次 每个ST源文件任意次
强制部分 NO

欲知程序更多信息,见164页程序。

3。1.1。7表达式

表达式是带说明的BOOL数据类型回送值的功能说明的特列。计算在EXPRESSION(表达式标识符)到指定给功能名称的END_EXPRESSION预留值的表达式。

你可以使用WAITFORCONDITION结构来直接等待MOTION TASK里面可编程的事件或条件.语句暂停调用的任务直到条件(表达式)为TRUE

语法 EXPRESSION name

// Declaration section

// Statement section

END_EXPRESSION

名称代表表达式的标识符

在声明部分的变量说明的允许词语中,见177页变量声明。

注意:在语句部分,BOOL数据类型的表达式必须指定给表达式标识符

顺序 表达式只能在ST源文件implementation部分被定义。

因此,表达式先于被调用的WAITFORCONDITION结构的程序。

声明部分(175页)必须先于语句部分(176页).

频次 每个ST源文件任意次
强制部分 NO

欲知表达式更多信息,见166页表达式。对于WAITFORCONDITION语句,见SIMOTION基础功能手册。

3。1。1。8声明部分

程序组织单元的声明部分包含POU的数据类型定义和变量说明。

声明部分结构如下:

结构 // Data type definition

// Variable declaration

顺序 声明部分在首末没有明显的关键词。在各自的POU的关键词之后开始声明部分,在语句部分的第一个执行语句之后结束。

包含以下顺序:

数据类型定义(176页)

●用户定义数据类型,在POU中本地有效

●变量声明(177页)

变量和常量在POU中本地有效

根据各自的POU得出的允许关键词:见177页变量声明列表

注意:标识符必须在使用前声明

频次 每个POU一次
强制部分 NO

3.1.1。9语句部分

POU的语句部分包含独立的(可执行的)语句。

语句部分结构如下:

结构 // Statements
顺序 语句部分在首末没有明显的关键词。在声明部分之后开始,在各自的POU关键词之后结束.
频次 每个POU一次
强制部分 NO

欲知更多语句信息,见

●数值指定和表达式(112页)

●控制语句(130页)

●调用功能和功能块(153页)

3。1.1。10数据类型定义

对于定义数据类型,你指定用户定义数据类型(UDT)。你可以使用它作为变量说明.UDT可以在interface部分,implementation部分和FC,FB,及程序部分被说明。

数据类型定义语法如下:

语法 TYPE

name : data_type_specification; // ..。

END_TYPE

名称代表你使用的变量说明的单独的数据类型的名称。数据类型说明代表任意的数据类型或结构。在单个的数据类型TYPE和END_TYPE之间可以出现任意数字。

顺序 可以按照以下内容定义UDT:

●在interface部分

UDT在ST源文件中被识别然后导出

可以在单元变量的声明中的interface和implementation部分使用,或者是在所有POU的本地变量声明中使用。

除此之外,还可以使用在所有单元,导入ST源文件

●在implementation部分

UDT在ST源文件中被识别

可以使用于单元变量的声明部分,和所有POU的本地变量声明中。

●在一个POU(FC,FB,程序,表达式)的声明部分

UST在POU被本地识别

可以使用于POU的本地变量声明中

UDT必须在使用于变量声明之前被使用

频次 TYPE/END_VAR声明块在源文件部分出现不止一次:在一个声明块中UDT的数量是可能的
强制部分 NO

欲知更多UDT信息,见用户定义数据类型(94页)

3.1.1。11变量声明

声明部分包含变量声明,也可以被包含在FC,FB和程序(POU)之中,interface部分和implementation部分同样如此.

变量声明语法如下:

语法 variable_type

name_list : data_type;

// 。..

END_VAR

variable_type代表将要声明的变量类型的关键词。允许的关键词基于源文件部分.

name_list 是将要声明的data_type 数据类型的标识符。。

顺序 声明变量

●在ST源文件的interface部分

允许的关键词:见Field语法图表

单元变量在ST源文件中被识别,将被导出

可以在ST源文件的所有POU中使用

除此之外,还可以在导入ST源文件的所有单元中使用

●在ST源文件的implementation部分

允许关键词:见Field语法图表

单元变量在ST源文件中被识别

可以在ST源文件的所有POU中使用

●在POU(FC,FB,程序,表达式)的声明部分

允许关键词是根据POU类型定义的,见CELL语法图表

变量在POU中被本地识别

只能在POU的本地变量的说明部分中使用

例外:

可以在FB外访问一个功能块的输出参数

可以在FB外访问一个功能块的输入参数,假如:

编辑器的允许语言扩展选项被激活。见45页编辑器全局设置和46页编辑器本地设置

变量必须在使用之前被声明

频次 相关的源文件部分将定义一个指定的变量类型的variable_type / END_VAR声明块出现的次数。

●在ST源文件的interface和implementation部分

说明块可以出现不止一次

●在一个POU(FC,FB,程序和表达式)的声明部分

每个说明块(除了 VAR CONSTANT / END_VAR)在说明部分只能出现一次

允许声明块和关键词基本相关的源文件部分:见CELL语法图表

在一个说明中允许多个变量声明。

强制部分 NO

欲知更多变量声明的信息,见105页变量声明。

3.1。2在ST源文件之间的导入和导出

ST应用单元的概念,在ST中你可以访问全局变量,数据类型,功能,功能块,和程序。因此你可以编辑重复可用的子程序,使得它们为可用的程序。

3.1.2。1单元标识符

单元是指一个程序源文件(如:ST源文件,MCC源文件)。程序源文件的名称在SIMOTION SCOUT中作为标识符被定义。

你可以设置单元语句为ST源文件(先于interface部分)的第一语句.语法为:

UNIT name;

定义在SIMOTION SCOUT中的ST源文件名称对应的名称,见21页添加ST源或23页ST源文件属性的更改。

如果指定的名称不同于ST源文件的名称,那么将忽略单元语句。

3。1.2.2一个导出单元的interface部分

可以在一个导出单元的interface部分输入下列结构。结构的语法仅在此处显示,欲知更多,见170页interface部分.

●即将导出的类型说明

TYPE

带完整说明的用户定义数据类型

●即将导出的变量说明

VAR_GLOBAL, VAR_GLOBAL RETAIN, 或 VAR_GLOBAL CONSTANT

带说明的不保留和保留的单元变量和单元常量

●即将导出的POU(功能,功能块和程序)

说明每个即将导出的POU的相关关键词.输入一个分号来结束

– FUNCTION_BLOCK fb_name ;

— FUNCTION fc_name ;

– PROGRAM program_name ;

说明可以以任意顺序排列。POU在ST源文件的执行部分自行编程。

注意:在interface部分下列更多的说明是可能的,位于导出类型,变量和POU之前

1。使用的技术包的说明(USEPACKAGE …)

2。使用的库的说明(USELIB …)

3。参考其他单元以使用导出单元(USES …)

这些导入的技术包,库和单元也被导出。关于继承性,见181页在导入单元的USES语句

你必须遵循单元(ST源文件)的interface部分的说明中的顺序,见170页interface部分.否则,ST源文件的无误编辑是不可能的。

一个ST源文件的程序必须列在interface部分,以便可以被指定给执行系统的一个任务(见在SIMOTION基础功能手册配置执行系统)。如果程序不能在ST源文件的interface部分被导出,编辑器输出一个警告信息.

仅在ST源文件的功能和功能块不能被列在interface部分.

3。1。2.3一个导出单元的例子

下面是一个导出单元的例子。通过myUnit_B被导入(见183页一个导入单元的例子)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\CKASI39X`O3VOEO[)@3G}~N.jpg

3。1。2.4在一个导入单元的USES语句

在一个导入单元的interface或implementation部分输入以下语句

USES unit_name-list

单元名称列表是一个从导入的模块中通过逗号隔开的单元的列表

例子:USES unit_1, unit_2, unit_3;

这使得你可以访问在导入单元(ST源文件,MCC源)的interface部分指定或声明的的下列元素:

●用户定义数据类型(UDT)

●单元变量和单元常量

●程序,功能和功能块

●导入的技术包,库和单元

你仅可以使用导入元素犹如存在于现在的单元中。

注意:关键词USES仅可以在一个单元的interface部分或implementation部分中出现一次。当导入多个单元时,输入时用逗号隔开,以列表的形式输入在关键词USES之后。

USES语句可以在一个单元的interface部分或implementation部分中出现。这有着深远的含义:

影响 在interface部分的USES语句 在implementation部分的USES语句
继承性 现行的单元继续导出被导入的单元;导入单元通过其他可以访问现行单元的其他单元被继承

例子:

1。 Unit B 在interface部分导入 Unit A i

2。 Unit C 依次导入 Unit B。

3. Then Unit C也可自动导入Unit A

A → B → C ⇒ A → C

因为继承性,UnitA 不能明显被导入到UnitC

继承被干扰

例子:

1. Unit B在implementation部分导入 imports Unit A

2. Unit C依次导入Unit B。

3。 Then Unit C 不能自动访问Unit A。

UnitC必须明显导入UnitA,如果它需要访问UnitA

变量声明 一个导入的数据类型的单元变量声明可能在:

●interface部分

●implementation部分

一个导入的数据类型的单元变量声明只可能在implementation部分

注意:你将找到在SIMOTION功能手册中的单元变量使用的技巧:

3。1.2。5一个导入单元的例子

以下是一个导入单元(myUnit_B)的例子。导入从一个导出单元(181页)的例子中的myUnit_A

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\]U7`BTR1%%[IB7%81GXPOS5.jpg

3.2在SIMOTION中的变量

总结了ST中可用的变量

3.2。1变量模型

下表列出了用ST编程的所有可用的变量类型

●SIMOTION设备和技术目标的系统变量

●全局用户变量(I/O 变量, 设备全局变量,单元变量)

●本地用户变量(在一个程序,功能或功能块中的变量)

系统变量

变量类型 意义
SIMOTION设备的系统变量 每个SIMOTION设备和技术目标有特定的系统变量。可以如下被访问:

●在SIMOTION设备的所有程序中

●从HMI设备

你可以在符号浏览器中监视系统变量

技术目标的系统变量

全局用户变量

变量类型 意义
I/O变量 你可以分配符号名称给SIMOTION设备或者周边设备的I/O地址。这使得你有以下I/O直接访问或过程图像访问

●在SIMOTION设备的所有程序中

●从HMI设备

在你选择项目导航中的I/O元素之后,在符号浏览器中创建这些变量

你可以在符号浏览器中监视I/O变量

全局设备变量 可以通过SIMOTION设备的所有程序和HMI设备访问用户定义变量.

在你选择项目导航中的全局设备变量之后,在符号浏览器中创建这些变量

全局设备变量可以被定义为保留值。这意味着即使SIMOTION设备电源无连接时将保持存储。

你可以在符号浏览器中监视全局设备变量

单元变量 所有程序,功能块和功能(ST 源, MCC源, LAD/FBD源)可以在一个单元中访问用户定义变量。

在单元中声明这些变量:

在interface部分

你可以导入这些变量到其他的单元(ST 源, MCC源, LAD/FBD源),对于HMI设备是作为标准可用的。

在implementation部分

仅可以在相关单元中访问这些变量

可以声明单元变量为保留值.这意味着即使SIMOTION设备电源无连接时将保持存储。可以在符号浏览器中监视单元变量

本地用户变量

变量类型 意义
可以在被定义的程序(功能或功能块)中访问用户定义变量
一个程序的变量(程序变量) 变量在程序中被说明。仅可以在程序中访问变量.静态和临时数据之间的比较如下:

●根据存储区域的大小初始化静态变量.通过编辑器选项来规定存储区域。默认根据指定程序的任务来初始化静态变量。

可以在符号浏览器中监视静态变量

●每次在任务中的程序被调用时初始化临时变量

不能在符号浏览器中监视临时变量

一个功能的变量(FC变量) 变量在一个功能(FC)中被声明。只能在功能中访问变量。

FC变量是临时的,每次调用FC时被初始化。不能在符号浏览器中监视临时变量。

一个功能块的变量(FB变量) 变量在功能块源中被声明。只能在功能块中访问变量。静态和临时数据之间的比较如下:

●当FB结束时保留静态变量数值,只有当初始化FB实例时才能初始化静态变量,这基于FB的实例声明的变量类型。

可以在符号浏览器中监视静态变量

●当FB结束时临时变量丢失数值。下次调用FB时,重新恢复.

不能在符号浏览器中监视临时变量。

下列源有跟多的可用信息

●在想对应的列表手册中,你可以找到SIMOTION技术包和SIMOTION设备的所有系统变量的压缩信息

●欲知技术目标的系统变量使用的更多信息,参考SIMOTION运动控制技术目标功能手

●在SIMOTION基础功能手册中你可以找到如何访问系统变量和组态数据的信息

●文件包含下列信息:

—访问带I/O变量的I/O地址(见214页直接访问和循环任务过程图像)

—过程图像访问

—创建和使用全局设备变量(见193页全局设备变量使用)

—单元变量和本地变量的使用(静态和临时变量)

注意:下载ST源文件到目标系统和允许的任务会影响变量初始化,因此变量的内容,见200页变量初始化时间

同时,见220页背景任务的固定过程图像

3.2。1.1单元变量

在整个ST源文件中单元变量是有效的,如:在任何的源文件部分可以访问单元变量.

在ST源文件的interface和/或implementation部分可以声明单元变量;声明的位置决定了单元变量的有效期:

●如果在interface部分声明变量,你可以创建能在其他程序源(如:ST源文件,MMC单元)中使用的变量。欲知更多在程序源文件中的导入和导出信息,见179页ST源文件中导入和导出

默认这些单元变量在HMI设备上也是可用的。可以被导出到HMI设备的单元变量总大小限制为64KB/每个单元。

●如果在implementation部分声明单元变量,你可以在现行的源文件中所有的程序组织单元(POU)中创建变量

可以使用在声明块中的一个pragma来更改HMI单元变量导出的默认设置,见208页变量和HMI设备及247页带属性的的控制编辑器.

可以通过不同的行为来定义单元变量,如:电源故障

●不保留的单元变量(关键词VAR_GLOBAL):数值在电源故障时丢失

●保留的单元变量(关键词VAR_GLOBAL RETAIN):数值在电源故障时保留

●单元常量(关键词VAR_GLOBAL CONSTANT):数值保持不变(见111页常量)

你将在SIMOTION基础功能手册中找到单元变量有效使用的技巧。

3。2.1.2不保留的单元变量

在电源故障时不保留的单元变量将失去数值。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\$RLSQ}6(8~~30{O8UCX6%@X.jpg

说明块在一个interface或implementation部分中可能出现不止一次。指定变量名称和数据类型为变量说明(见106页所有变量声明的概述和107页变量或数据类型的初始化)。

声明的范围和HMI导出,见186页单元变量

注意:不保留单元变量的初始化

●见202页不保留变量的初始化

●在下载时的动作可以被设置(选项>设置菜单命令,项目下载标签,初始化所有的不保留设备全局变量和程序数据检查框)

●版本ID的类型和下载的初始化动作都基于SIMOTION Kernel版本。欲知更多,见207页全局变量的版本ID和下载时的初始化.

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\6UVE9Z)AG16RQ0V((DQ}1%3.jpg

3。2。1。3保持单元变量

保留单元变量允许变量数值的永久存储,即使在电源故障时。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\H(80}8YMJXQES1EHO9N{DO5.jpg

说明块在一个interface或implementation部分中可能出现不止一次.指定变量名称和数据类型为变量说明(见106页所有变量声明的概述和107页变量或数据类型的初始化).

声明的范围和HMI导出,见186页单元变量

注意:保留单元变量的初始化

●见201页保留全局变量的初始化

●在下载时的动作可以被设置(选项〉设置菜单命令,项目下载标签,初始化所有的不保留设备全局变量和程序数据检查框)

●版本ID的类型和下载的初始化动作都基于SIMOTION Kernel版本.欲知更多,见207页全局变量的版本ID和下载时的初始化.

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\}%_X_{VFL6)XI9KXW~6Q)LB.jpg

3.2。1。4本地变量(静态和临时变量)

本地变量仅在声明的源文件部分(如:程序,FC,FB)是有效的。我们在下列内容中加以区别:

●静态变量(192页)

静态变量在整个源文件部分(块内存)保持数值

●临时变量(204页)

临时变量在每次重新调用源文件部分的时候被初始化。见204页本地变量的初始化

注意:本地变量不能在声明的源文件部分之外被访问。

下表提供了静态和临时变量声明的概述.下表说明可在源文件部分中的哪些变量可以被声明金额使用来声明的关键词

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\AM9OW48LSFN{ZXORT_1W8RA.jpg

1。变量的初始化基于声明实例的初始化,见205页功能块的实例初始化。

2.转移变量的参考(指针)是临时的。

3.变量的初始化基于存储的内存区域。见204页静态程序变量的初始化。

注意:请注意下载ST源文件到目标系统和允许的任务会影响变量初始化,因此变量的内容,见200页变量初始化时间。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\7B4Y47}`6`SWFR%@IZ@Y4JW.jpg

3。2.1。5静态变量

当退出源文件部分时,静态变量保留其最近的数值。这个数值在下次调用时将重新使用。

下列源文件部分包含静态变量:

●程序

●功能块

静态变量在一个静态变量块中被说明

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\9XJUO9L[Y{)53@2RF`8R3AN.jpg

根据语法图,你可以在一个静态变量块中进行下列操作:

●声明变量(名称和数据类型),选择性地初始化

●声明到背景任务的过程图像的符号访问

●声明功能块的实例

对于静态变量的初始化

●在程序中:基于到指定程序的执行动作(见SIMOTION基础功能手册和204页静态程序变量的初始化)

●在功能块中:基于声明实例的初始化(见205页功能块实例的初始化)

3。2.1.6临时变量

在每次调用源文件时初始化临时变量。仅在执行源文件时数值保留.

下列源文件部分包含临时变量:

●功能块

●功能

●表达式

在功能和表达式中,你可以在FB临时变量块中声明临时变量(见下图)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\6@82$GD0Z$QA2${@YX%]VTK.jpg

在功能和表达式中,你可以在FC临时变量块中声明临时变量(见下图)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\`$[_7[N]J}Q}W8W0ZC{VA9R.jpg

3.2.2全局设备变量的使用

全局设备变量是你可以从一个SIMOTION设备的所有的程序源(如ST源文件,MCC单元)访问的用户定义的数据

全局设备变量在符号浏览器标签的细节浏览部分被创建。要使用此功能,你必须在离线模式下进行。

下列是这个规程的简要描述

1.在SIMOTION SCOUT的项目导航中,在SIMOTION设备子目录中选择GLOBAL DEVICE VARIABLES元素

2。在细节浏览中,选择符号浏览器标签,然后滚动到最末的变量表(空行)

3。在下表的最后一行,输入或选择以下:

—变量名称

—变量的数据类型(只允许基础数据类型)

4.或者你可以选择性地输入以下:

—选择保留检查框(把变量作为保留值声明,以便在电源故障时保留数值)

-阵列长度(阵列大小)

—初始值(如果阵列,每个元素)

—显示格式(如果阵列,每个元素)

现在你可以使用符号浏览器或SIMOTION设备的任意程序来访问变量。

在ST源文件中,你可以使用一个全局设备变量,如同其他变量一样.

注意:

如果你已经声明了单元变量或本地变量为同样的名称(如. var—name),指定全局设备变量为_device。var—name

另外一种全局设备变量为在隔开的单元中的单元变量的声明,隔开的单元被导入到其他单元中,这有着以下的优势:

1。可以使用变量结构

2.在停止—运行的转变时变量的初始化(通过启动任务的程序)

3。对于最新创建的全局单元变量,在运行时的一次下载是可以的.

请见SIMOTION基础功能参数

3。2。3变量类型的存储范围

不同的变量类型存储在不同的存储区域,在不同的时间被初始化,下表显示了:

●在ST源文件中声明的变量类型的可用存储区域(基于SIMOTION Kernel版本)

●每个存储区域的初始化时间

使用例子的解释包含在存储区域的例子中,作为Kernel V3。1(见196页)有效

存储区 指定的变量类型 初始化
保留内存 保留单元变量 在下载时使用下载设置
单元的用户内存 ●不保留的单元变量

●带VAR_GLOBAL声明的功能块实例,包括相关的静态变量 (VAR, VAR_INPUT,

VAR_OUTPUT)

激活编辑器中仅此一次创建程序实例数据(44页)

●带VAR声明的单元程序的本地变量

●带VAR_GLOBAL声明的功能块实例,包括相关的静态变量 (VAR, VAR_INPUT,

VAR_OUTPUT)

●当设备开启时

●在下载时使用下载设置

●在SIMOTION V4。1中,当相关的声明块指定下列pragma{ BlockInit_OnDeviceRun :=

ALWAYS; }时的运行模式的转变

见247页控制带属性的编辑器

任务的用户内存 对于44页编辑器选项“仅此一次创建程序实例数据”

●带VAR的指定程序的本地变量

●时带VAR的在指定的程序中的功能块实例,包括相关的静态变量(VAR, VAR_INPUT,

VAR_OUTPUT)

根据任务的执行动作:

●顺序任务

每次开始顺序时

●循环任务

CPU转到运行模式时

任务中的本地数据(关于于SIMOTION KernelV3。1版本)2 ●参见(指针)在任务中调用的程序

●带VAR TEMP的任务中调用的程序的声明的本地变量

在任务中每次调用程序时
●参见(指针)在任务中调用的功能块

●带VAR_TEMP声明的功能块

●带VAR_IN_OUT的声明的功能块的in/out参数

在任务中每次调用功能块实例时
●带VAR, VAR_INPUT,或

VAR_OUTPUT的声明的调用功能变量

●调用功能的回送值

在任务中每次调用功能实例时
(高于SIMOTION KernelV3。0版本)3 ●在任务中调用的程序的复制数据,包括所有相关的变量(VAR, VAR_TEMP) 在任务中每次调用程序时
●从被调用的功能块的实例中复制来的数据(VAR, VAR_INPUT,

VAR_OUTPUT, VAR_IN_OUT1,

VAR_TEMP)

在任务中每次调用功能块实例时
●带VAR, VAR_INPUT or VAR_IN_OUT1 声明被调用的功能变量

●调用的功能的回送值

在任务中每次调用功能实例时
1.参见转移的变量

2.参考SIMOTION设备编辑的库的使用和相关的SIMOTION Kernel版本(关于V3.1版本),见本地数据变量的存储要求(关于V3。1的Kernel版本)

3。基于设备编辑的库的使用(如:不参考SIMOTION设备和SIMOTION kernel版本),见本地数据变量的存储要求(高于V3。1的Kernel版本)

4。单独的变量类型的初始化动作的详细描述,见200页变量初始化的时间

3.2.3.1存储区域的例子,有效关于KernelV3。1

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\THSG0D07A923RI37@X81LPA.jpg

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\}H(7M@WF(Z07OOZLH`1JGU0.jpg

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\L~D[L60_D5%~DNT5P6`EQ{1.jpg

3.2.3。2本地数据栈变量的存储要求(kernel V3。1或更高)

存储在一个任务的本地数据栈的变量列在194页的变量类型的存储区域。在任务组态中设置栈的大小.

注意下列本地栈中的存储要求:

●临时本地变量要求在栈中有各自的大小

●全局变量和静态变量不需要在栈中要求任何资源。如果作为一个功能的输入参数使用它们,要求有各自的栈的数据大小

●即使在一个任务重多次调用一个功能,也只使用一次栈的资源

●BOOL类型的变量在栈中需要1字节

注意:

对于参考SIMOTION设备编辑的库的使用和相关的SIMOTION Kernel版本(关于V3.1版本),下列细节也是TRUE.

注意:

如果库是不基于设备的(如:不参考SIMOTION设备和SIMOTION kernel版本):这些库编译为与允许的SIMOTION kernel版本相兼容.

从这些库中调用的POU变量占用本地数据栈。见199页在本地数据栈的变量的存储要求(高于SIMOTION kernel V3.0)

3。2.3。3本地数据栈变量的存储要求(kernelV3。0或更低)

存储在一个任务的本地数据栈的变量列在194页的变量类型的存储区域。在任务组态中设置栈的大小.

注意下列本地栈中的存储要求:

●在程序中的静态变量要求在数据栈中加倍它的大小

●在FB中的静态数据变量在数据栈中需要多次,基于调用长度

●临时本地变量(在程序,FB,FC)在栈中需要各自的大小

●全局变量不占用任何的栈存储空间

如果作为功能或功能块的输入参数来使用,将会占用数据栈上的通常大小

●即使在一个任务中多次调用一个功能,仅此一次使用栈的资源

●BOOL类型的变量需要栈上1个字节的大小

注意:

当调用一个功能块实例时,所有的实例数据被复制到本地数据栈,即使实例作为VAR_GLOBAL实例被声明。

如果库是不基于设备(如:不参考SIMOTION设备和SIMOTION kernel版本):这些库编译为与允许的SIMOTION kernel版本相兼容。从这些库中调用的POU变量占用本地数据栈,在本章中描述.

在本地数据栈的存储要求大于SIMOTION kernel版本(关于kernel V3.1),见199页本地数据栈的变量的存储要求.在任务组态中设置栈大小时需要考虑这些问题。

3。2。4变量初始化的时间

变量初始化时间由下列内容决定:

●变量被指定的存储区域

●算子运作(如:源文件下载到目标系统)

●指定到程序的任务的执行动作(顺序,循环).所有的变量类型和变量初始化的时间在下表中列出。你将在SIMOTION基础功能手册中找到更多任务的信息.

在下载时变量初始化的动作可以设置。要想如此,默认设置为Options 〉 设置菜单和下载标签或定义现在下载时的设置

注意:

可以从SIMOTION设备上传单元变量或全局设备变量数值给SIMOTION SCOUT,以XML格式保存.

1。把需要的单元变量或全局设备变量数据段作为带功能_saveUnitDataSet的数据集

2。使用在SIMOTION SOCUT中的保存变量功能

你可以使用恢复的变量功能来下载这些数据集和变量到SIMOTION设备。

欲知更多信息,参考SIMOTION SCOUT组态手册。

这允许一些可能性 ,如:即使不可使用或通过一个项目下载初始化时,也可以获得数据。(见SIMOTION SCOUT版本变更)

3.2。4.1保留全局变量的初始化

保留变量在电源断开后任然保留其数值。当设备再次开启时,所有其他的数据重新启动.

保留全局变量被初始化:

●当保留数据备份或缓冲失败时

●当硬件更新时

●当执行存储重置(MRES)时

●SIMOTION P350中的重启功能(Del.SRAM)

●通过应用_resetUnitData功能(关于 kernel V3.2),有选择的保留数据的不同数据段

●根据下列描述执行下载时

变量类型 变量初始化的时间
保留全局设备变量 下载时的动作基于所有保留全局设备变量和程序数据设置1

●YES2 :所有保留全局变量被初始化

●NO3

—关于版本V3.2的SIMOTION kernel

隔开保留设备变量的版本ID.如果版本ID改变,保留全局设备变量会被初始化.

—高于版本V3.1的SIMOTION kernel

组合所有全局设备变量(保留和不保留的)的版本ID.如果版本ID改变,保留全局设备变量会被初始化。

见207页全局变量的版本号和下载时的初始化

保留单元变量 下载时的动作基于所有保留全局设备变量和程序数据设置1:

●YES2 :所有保留单元局变量(所有单元)被初始化

●NO3 :

—关于版本V3。2的SIMOTION kernel

在interface或implementation部分隔开保留单元变量的每个单独数据块( = declaration block)4的版本ID。如果版本标识符改变,只有相关的数据块会被初始化5.

—高于版本V3.1的SIMOTION kernel

所有单元变量(保留和不保留的,在interface和implementation部分)的常用的版本ID.如果版本ID改变,单元的所有单元变量被初始化.

见207页全局变量的版本号和下载时的初始化

1。默认设置Options 〉 设置菜单,下载标签,或下载时的现有设置

2。激活对应的检查框

3。关闭对应的检查框

4.许多在interface或implementation部分的保留单元变量的数据块只能在SIMOTION ST编程语言中被声明。关于SIMOTION MCC和SIMOTION LAD/FBD编程语言,只有一个保留单元变量的数据块在implementation或执行部分被创建

5.在运行时的下载,假设满足相关的条件,在相关的声明块中用一个pragma(仅对 SIMOTION ST编程语言)指定下列属性:{ BlockInit_OnChange := TRUE; }.

对于在运行中的下载,见SIMOTION基本功能手册

3.2。4。2不保留的全局变量的初始化

在电源断开时不保留全局变量丢失数值。它们被初始化:

●对于201页保留全局变量的初始化,如:在固件跟新或普通重置时(MRES)

●在上电时

●通过应用_resetUnitData功能(关于 kernel V3.2),有选择的不保留数据的不同数据段

●在下载时与下面中的描述保持一致

●仅对于SIMOTION kernelV4.1和不保留单元变量

对于转移到运行模式,相关的含PRAGMA的声明模块指定下列属性(仅对于SIMOTION ST编程语言):{ BlockInit_OnDeviceRun := ALWAYS; }

变量类型 变量初始化的时间
不保留的全局设备变量 下载时的动作基于所有不保留全局设备变量和程序数据设置1:

●YES2 :所有不保留全局变量被初始化

●NO3 :

—关于版本V3。2的SIMOTION kernel

隔开不保留设备变量的版本ID。如果版本ID改变,不保留全局设备变量会被初始化。

—高于版本V3.1的SIMOTION kernel

组合所有全局设备变量(保留和不保留的)的版本ID。如果版本ID改变,保留全局设备变量会被初始化。

见207页全局变量的版本号和下载时的初始化

不保留的单元变量 下载时的动作基于所有不保留全局设备变量和程序数据设置1

●YES2 :所有不保留单元局变量(所有单元)被初始化

●NO3

—关于版本V3.2的SIMOTION kernel

在interface或implementation部分隔开保留单元变量的每个单独数据块( = declaration block)4的版本ID。如果版本标识符改变,只有相关的数据块会被初始化5

-高于版本V3。1的SIMOTION kernel

所有单元变量(保留和不保留的,在interface和implementation部分)的常用的版本ID.如果版本ID改变,单元的所有单元变量被初始化.

见207页全局变量的版本号和下载时的初始化

1。默认设置Options > 设置菜单,下载标签,或下载时的现有设置

2。激活对应的检查框

3.关闭对应的检查框

4.许多在interface或implementation部分的不保留单元变量的数据块只能在SIMOTION ST编程语言中被声明.关于SIMOTION MCC和SIMOTION LAD/FBD编程语言,只有一个不保留单元变量的数据块在implementation或执行部分被创建

5.在运行时的下载,假设满足相关的条件,在相关的声明块中用一个pragma(仅对 SIMOTION ST编程语言)指定下列属性:{ BlockInit_OnChange := TRUE; }。

对于在运行中的下载,见SIMOTION基本功能手册

3.2。4。3本地变量的初始化

本地变量被初始化

●对于保留单元变量的初始化(201页)

●对于不保留单元变量的初始化(202页)

还有根据下面的描述:

变量类型 变量初始化的时间
本地程序变量 程序的本地变量初始化不同:

●静态变量(VAR)根据存储区域初始化,见204页静态程序变量的初始化

●临时变量(VAR_TEMP)在每次调用程序的任务时初始化

功能块的本地变量 功能块的本地变量初始化不同:

●静态变量(VAR,VAR_IN, VAR_OUT)仅在FB实例被初始化时初始化,见205页功能块实例的初始化

●临时变量(VAR_TEMP)在每次调用FB时初始化

功能的本地变量 功能的本地变量是临时的,在每次调用功能时初始化

注意:你可以获得关于在本地数据栈中使用编程结构功能(见239页)的POU的存储要求

3.2.4。4静态编程变量的初始化

下列版本影响下列静态变量:

●一个带VAR声明的单元程序的本地变量

●在一个单元程序中带VAR声明的功能块实例,包括相关的静态变量(VAR, VAR_INPUT, VAR_OUTPUT).

初始化动作由存储静态变量的存储区域决定.这是由编辑器中“仅此一次创建程序实例数据”(44页)。

●对于未激活的编辑器中“仅此一次创建程序实例数据”(默认):静态变量存储在每个指定给程序的任务中的用户内存中.

变量的初始化基于指定给程序的任务的执行动作(见SIMOTION基本功能手册)

—顺序任务(MotionTasks, UserInterruptTasks, SystemInterruptTasks,

StartupTask, ShutdownTask):每次开启任务时初始化静态变量

—循环任务(BackgroundTask, SynchronousTasks, TimerInterruptTasks):每次转到运行模式时初始化静态变量

●对于激活的编辑器中“仅此一次创建程序实例数据”:设置是必要的,例如:如果从程序内调用一个程序,静态变量仅此一次存储在任务的用户内存中。

—与不保留单元变量一起被初始化,见202页不保留全局变量的初始化

—只关于SIMOTION kernel版本V4.1

可以在转到运行模式时被初始化。要想如此,下列属性必须在相关的带pragma(仅SIMOTION ST编程语言)声明块中被指定:{ BlockInit_OnDeviceRun := ALWAYS; }

3.2。4.5功能块实例的初始化

功能块实例(157页)的初始化由声明的位置决定:

●全局声明(在implementation部分的interface的VAR_GLOBAL/END_VAR中)

作为一个不保留单元变量初始化,见202页不保留全局变量的初始化

●在程序中的本地声明(带VAR / END_VAR)

程序静态变量的初始化,见204页程序静态变量的初始化

●在一个功能块中的本地声明(带VAR / END_VAR)

作为功能块的实例初始化

●在一个功能块或功能中作为in/out参数声明(VAR_IN_OUT / END_VAR)

对于POU的初始化,只有参考(指针)被初始化,功能块的实例保持不变

注意:你可以在本地数据栈中使用程序结构(239页)功能获得POU的存储要求的信息。

3。2.4。6技术目标的系统变量的初始化

技术目标的系统变量通常是不保留的.基于技术目标,一些系统变量存储在保留的存储区域(如:绝对编码器校验)

保留和不保留全局变量的初始化动作(除了下载时)是一样的。见201页保留全局变量的初始化和202页不保留全局变量的初始化。

在下载时的动作说明如下:

●不保留系统变量

●保留系统变量

变量类型 变量初始化的时间
不保留系统变量 下载时的动作基于技术目标设置1的所有不保留数据:

●YES2 :所有技术目标被初始化

—所有的技术目标重组,所有不保留系统变量被初始化

-所有技术报警被清除

●NO3 :只有在SIMOTION SCOUT中更改的技术目标被初始化

-在问句中的技术目标重组,所有不保留系统变量被初始化

-清除所有搁置技术目标的报警

—如果一个报警只能在上电时被确认,搁置了技术目标,那么不会初始化,放弃下载

保留系统变量 只有当技术目标在SIMOTION SCOUT中更改时,保留系统变量才会被初始化。

所有其他的技术目标的保留系统变量被保存(如:绝对编码器校准)

1。默认设置Options 〉 设置菜单,下载标签,或下载时的现有设置

2.激活对应的检查框

3.关闭对应的检查框

3。2.4.7全局变量的版本ID和下载时的初始化

数据段 高于SIMOTION kernel版本V3.1
全局设备变量
保留全局设备变量 ●隔开每个数据段的全局设备变量的版本ID

●数据段的版本标识符变更:

-在数据段中添加或删除一个变量

—在数据段中标识符的变更或一个变量的数据类型

●版本ID不会变更

—其他数据段中的更改

—初始化数值的更改

在下载时2,规则是:仅版本ID更改时初始化数据段

●使用功能做数据备份和初始化是可能的

●全局设备变量的所有数据段的普通版本ID

●当数据段中的变量声明更改时,更改版本ID

●在下载时2,规则是:仅版本ID更改时初始化数据段

●使用功能来备份数据是可能的

不保留全局设备变量
一个单元的单元变量
在interface部分的保留单元变量 ●在每个数据段中有一些数据块(=声明块)3是可能的

●每个数据块的版本ID

●数据块的版本标识符更改

-在相关的声明块中添加或删除一个变量

—在相关的声明块中更改标识符或更改一个变量的数据类型

—更改在相关的声明块中使用的数据类型定义(从隔开的或导入4的单元)

-在相同的数据段中,相关的声明块之前添加或删除声明块

●版本ID不会更改

-在其他数据段添加或删除声明块

-在相同的数据段,相关的声明块之后添加或删除声明块

在其他数据块的更改

-初始化数值的更改

—不使用在相关的数据块中的数据类型定义的更改

●在下载时2,规则是:仅版本ID更改时初始化数据段

●数据备份和初始化时考虑数据块的版本ID

●在每个数据段(也指多个声明块)3中一个数据块

●在一个单元中所有全局变量的普通版本ID

●版本ID的改变要对应以下:

—在一个数据段中的变量声明

-在单元中的全局数据类型的声明

—在interface部分的导入4单元的声明

●在下载时2,规则是:仅版本ID更改时初始化数据段

●使用功能来备份数据仅可能在:在interface部分不保留单元变量

在implementation部分的保留单元变量
在interface部分的不保留单元变量
在implementation部分的不保留单元变量
1。只有初始化问题的数据块或数据段,更改的初始化数值才能生效。

2。如果所有保留全局变量和程序数据的初始化=No和所有不保留全局设备变量的初始化和程序数据=NO

在其他设置中,见201页保留全局变量的初始化和202页不保留全局变量的初始化

3.每个数据段的多个声明块仅在SIMOTION ST编程语言中可能。对于SIMOTION MCC和 SIMOTION LAD/FBD编程语言,每个数据段仅能创建一个声明块。

4。单元的导入基于编程语言,见181页相关章节

5.对于运行时的下载,假设满足相关的条件,在相关的声明块中用pragma指定下列属性(仅指SIMOTION ST编程语言):{ BlockInit_OnChange := TRUE; }

对于在运行时的下载,见SIMOTION 基础功能手册

3。2。5变量和HMI设备

下列变量被导出到可用的HMI设备:

●SIMOTION设备的系统变量

●技术目标的系统变量

●I/O变量

●全局设备变量

●interface部分的保留和不保留单元变量(默认设置).每个声明块的默认设置可以使用pragma改变:

{ HMI_Export := FALSE; }

带这种标识符声明块的单元变量不会被导出到HMI设备。HMI一致性检查在下载时也被省略。

见247页带属性的控制编辑器

下列变量不会被导出到HMI涉笔,在下列情况也不可用:

●interface部分的保留和不保留单元变量(默认设置)。每个声明块的默认设置可以使用pragma改变:

{ HMI_Export := TRUE; }

带这种标识符声明块的单元变量会被导出到HMI设备。在下载时需要接受HMI一致性检查。

见247页带属性的控制编辑器.

●一个POU的本地变量

注意:

可以导出到HMI设备的单元变量的大小被限制为64KB每单元。

pragma { HMI_Export := FALSE; } 和{ HMI_Export := TRUE; }基于SIMOTION kernel的版本

●Pragma影响从对应的声明块到HMI设备和HMI地址空间结构的导出:

—在声明块中导出到HMI设备的变量占用HMI地址空间结构

-在HMI地址空间中,变量根据声明的顺序安排

●高于SIMOTION kernelV3。2或V4.0的版本

Pragma仅仅影响对应声明块到HMI设备的导出。

HMI地址空间被没有指定给HMI设备的声明块的interface部分的单元变量占用。

在HMI地址空间中,变量以下列顺序分类:

—interface部分的保留单元变量(导出和不导出的)

—implementation部分的保留单元变量(导出的)

—interface部分的不保留单元变量(导出和不导出的)

—implementation部分的不保留单元变量(导出的)

在这些段中,变量根据声明的顺序排列

●高于SIMOTION kernel版本V3.1

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\{EN7D0BAU(DM`B)NK``OKBR.jpg

3.3访问输入和输出(过程图像,I/O变量)

3。3.1访问输入和输出的概述

SIMOTION提供访问SIMOTION设备输入和输出的多种可能性,中央和分散I/O也是入如此:

●通过直接访问I/O变量

使用直接访问来访问对应的I/O地址.

不指定任务来定义I/O变量。SIMOTION设备的整个地址空间都是可用使用的。

使用带顺序编程(在SIMOTION任务中)的直接访问:在特定的时间访问现行输入和输出值尤为重要。

更多信息,见214页直接访问和循环任务的过程图像

●使用I/O变量的循环任务的过程图像

循环任务的过程图像是SIMOTION设备RAM的存储区域,SIMOTION设备的全部I/O地址空间反射到这个区域.每个I/O地址的镜像会被指定一个循环任务,然后使用此任务更新.在整个周期中任务保持一致。当编程指定任务(循环编程)时会优先使用过程图像。

定义一个I/O变量(名称和I/O地址),然后给其指定一个任务。SIMOTION设备的全部地址区域都是可使用的。

直接访问I/O变量也是可能的:直接用_direct.varname指定直接访问。

更多信息见214页直接访问和循环任务的过程图像

●使用背景任务的固定过程图像

背景任务的过程图像是SIMOTION设备RAM的存储区域,SIMOTION设备的子集I/O地址空间反射到这个区域.每个镜像会随着背景任务一起刷新,并在整个周期中任务保持一致。当编程背景任务(循环编程)时会优先使用过程图像.

可以使用地址空间0.。。63 。执行使用循环任务的过程图像访问I/O地址。

更多信息见220页访问背景任务的过程图像

最重要的属性的比较包含在212页直接访问和过程图像的属性。

你可以像其他变量一样使用I/O变量,见226页访问I/O变量

注意:

通过过程图像访问比直接访问更有效。

3。3。2直接访问和过程图像访问的重要特征

直接访问 循环任务过程图像的访问 背景任务的固定过程图像的访问
允许的地址范围 SIMOTION设备的全部地址

例外:组成大于一个字节的I/O变量必须不能连续包含地址63和64(如:不允许PIW63或PQD62)

使用的地址必须显示在I/O,并合理配置。

0.。。63

除了在循环任务的过程图像中使用的地址。

不显示在I/O的地址和没有组态的地址也是可以使用的

指定的任务 供选择的循环任务:

● SynchronousTasks,

●TimerInterruptTasks,

● BackgroundTask.

● BackgroundTask。
更新 ● SIMOTION

设备 C230-2, C240, 和P350 Onboard I/O:

在125 µs时钟脉冲周期更新

●D4xx SIMOTION 设备的PROFIBUS DP,

PROFINET, P-Bus, DRIVE-CLiQ,

Onboard I/O:

在位置控制的时钟脉冲周期更新

更新随着指定任务发生

●在指定任务开始前读取输入,然后传给过程输出图像

●在完成指定任务之后,把过程输出图像写给输出。

随着背景任务更新

●在背景任务开始前读取输入,然后传给过程输出图像

●在完成背景任务之后,把过程输出图像写给输出

一致性 在指定任务的整个周期

例外:直接访问输出

在背景任务的整个周期

例外:直接访问输出

仅基础数据类型的一致性能确保。

当使用阵列时,用户要负责确保数据一致性

使用 在MOTION TASK中优先 在指定任务中优先 在背景任务中优先
使用绝对地址 不支持 可能,使用下列语法,如%IW62, %Q63.3
作为变量声明 必须,在符号浏览器中整个设备作为一个I/O变量 可能,但是不是必要的:

●在符号浏览器中整个设备作为一个I/O变量

●作为一个单元变量

●在程序中作为一个本地变量

给输出写保护 可能,可以选择只读状态 不支持 不支持
阵列说明 可能 不支持
更多信息 见214页直接访问和循环任务的过程图像 见220页访问背景任务的固定过程图像
对错误的反应 从用户程序访问出错时,替代反应可用:

●CPU停止1

●代替数值

●最终值

在生成过程图像时出错,替代反应可用:

●CPU停止2

●代替数值

●最终值

在生成过程图像时出错,替代反应可用:

●CPU停止2

例外:如果在相同的地址创建一个直接访问,应用此处的动作

参见SIMOTION基础功能描述
访问
●RUN模式 无限制 无限制 无限制
●启动任务时 可能限制:

●可以读取输入

●直到完成启动任务才写输出

可能限制:

●在启动任务时最先读取输入

●直到完成启动任务才写输出

可能限制:

●在启动任务时最先读取输入

●直到完成启动任务才写输出

●关闭任务时 无限制 可能限制:

●输入保持最近更新的状态

●不再写输出

可能限制:

●输入保持最近更新的状态

●不再写输出

1调用ExecutionFaultTask。

2。调用PeripheralFaultTask

3。3。3直接访问和循环任务的过程图像

属性:

直接访问输入和输出、访问循环任务的过程图像通常是通过I/O变量实现的。SIMOTION设备的所有地址范围(见下表)都是可用的。

最重要的属性的比较包含在220页访问背景任务的过程图像和212页直接访问和过程图像的属性

直接访问:

使用直接访问来访问对应的I/O地址.首先使用直接访问顺序编程(在SIMOTION TASK中)。在特定的时间访问输入和输出的现行值是尤为重要的。

对于直接访问,不用指定一个任务即可定义I/O变量(217页)

注意:通过过程图像的访问比直接访问更有效。

循环任务的过程图像

循环任务的过程图像是SIMOTION设备RAM的存储区域,SIMOTION设备的全部I/O地址空间反射到这个区域。每个I/O地址的镜像会被指定一个循环任务,然后使用此任务更新.在整个周期中任务保持一致。当编程指定任务(循环编程)时会优先使用过程图像。在任务的完整周期中保持一致性是尤为重要的。

对于循环任务的过程图像,你可以定义一个I/O变量,然后指定一个任务。

直接访问I/O变量也是可能的:直接用_direct。var—name指定直接访问。

SIMOTION设备的地址范围

基于SIMOTION kernel版本的SIMOTION设备的地址范围在下表中显示。可以使用完整的地址范围来直接访问和循环任务的过程图像.

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\XDDDJT`8M~]%6TU~IZXL`Y5.jpg

注意:见216页直接访问和循环任务的过程图像的I/O地址

3。3。3。1 直接访问和循环任务的过程图像的I/O地址的规则

注意:

在检查SIMOTION项目(如:下载时)的一致性时检查规则的符合性

1。用于I/O变量的地址必须显示在I/O中,然后在HW Config中合理配置

2. 组成大于一个字节的I/O变量必须不能连续包含地址63和64

下列I/O地址是不允许的:

-输入:PIW63, PID61, PID62, PID63

—输出:PQW63, PQD61, PQD62, PQD63

3. 组成大于一个字节的I/O变量地址必须在用HW-config配置的地址区域

4.通过单独I/O变量的数据类型BYTE, WORD 或 DWORD,或这些数据类型的阵列来使用一个I/O地址(输入或输出)。通过BOOL数据类型的I/O变量访问各自的比特也是可能的.

5。如果多个过程(如:I/O变量,技术目标,PROFIdrive telegram)访问一个I/O变量,应用下列:

—只有一个单独的过程可以写访问到一个输出的()的I/O地址

使用读访问到一个I/O变量的输出时可能的

—所有过程必须使用同样的数据类型(BYTE, WORD, DWORD 或 这些数据类型的阵列)来访问I/O地址。访问各自的比特也是可能的。

比如:如果你想使用I/O变量来读取转移的驱动PROFIBUS电报:I/O变量的长度必须与电报的长度匹配。

-从多个过程写访问到一个地址的不同位是可能的,但是,访问带BYTE, WORD 或 DWORD的数据类型是不可能的。

注意:

这些规则不适用于访问背景任务的固定过程图像。在项目(如:下载时)一致性检查时不需要考虑这些访问.

3.3。3。2为直接访问和循环任务的过程图像创建一个I/O变量

在符号浏览器的细节部分创建一个I/O变量,为此,你必须使用离线模式:

下列是这个规程的简要描述

1.在SIMOTION SCOUT的项目导航中,在SIMOTION设备子目录中选择I/O元素

2.在细节浏览中,选择符号浏览器标签,然后滚动到最末的变量表(空行)

3。在表格的最后一行,输入或选择以下:

—变量名称

—根据输入I/O地址的语法图的I/O地址(219页)

—输出的选择:

如果你只要读输入到输出,激活只读检查框

然后你可以读取正在由其他过程(一个输出CAM的输出,PROFIdrive电报)写的输出

一个只读的输出变量不能被指定给循环任务的过程图像

—变量的数据类型符合I/O变量可能的数据类型(220页

4。或者你可以选择性地输入或选择以下:(不指BOOL数据类型)

—阵列长度(阵列大小)

—过程图像或直接访问

只有清除了只读检查框才能被指定

对于过程图像,选择你要指定的I/O变量的循环任务.要选择任务,必须在执行系统中已经激活此任务。

对于直接访问,选择空白输入

—错误状态的行为策略(见SIMOTION基础功能手册)

—代替数值(如果阵列,每个元素)

-显示格式(如果阵列,每个元素),当你在符号浏览器监视变量时

现在你可以使用符号浏览器或SIMOTION设备的任意程序来访问变量。

注意:

循环任务的过程图像必须注意一以下:

●一个变量只能被指定给一个任务

●一个输出或输出的每个字节只能被指定给一个I/O变量

在BOOL数据类型中,请注意:

●不能定义循环任务的过程图像和错误的策略。通过一个I/O变量定义的全部字节的动作是适用的。(默认:直接访问或CPU停止)

●一个I/O变量独自的比特可以通过比特访问功能来访问

当改变I/O变量(插入和删除I/O变量,改变名称和地址)时,注意:

●其他I/O变量的内部地址可能改变,使得所有I/O变量不一致

●如果发生这种情况,所有包含访问I/O变量的所有程序源必须重新编辑

注意:

只能在离线模式创建I/O变量。在SIMOTION SCOUT中创建I/O变量,然后在程序源(如:ST源,MCC源,LAD/FBD源)中使用。

可以读写输出,但是输入为只读。

在你可以监视和修改新的或更新的I/O变量前,你必须下载项目到目标系统。

你可以像使用其他变量一样使用I/O变量,见226页访问I/O变量。

3.3.3.3输入I/O地址的语法图

对于直接访问或循环任务的过程图像I/O变量定义的I/O地址,使用下列语法图。这不仅说明了地址,也说明了访问的数据类型和访问模式(输入/输出)。

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\KTA{}@8~@)Z}R5SWK[W]$5X.jpg

例如:

逻辑地址1022输入,WORD数据类型: PIW1022

逻辑地址63输出,bit 3,BOOL数据类型: PQ63。3

注意:查看216页直接访问和循环任务的过程图像的I/O地址的规则

3.3.3。4可能的I/O变量的数据类型

下列数据类型可以指定给I/O变量,以直接访问或循环任务的过程图像(214页).数据类型的宽度必须与I/O地址的数据类型宽度相符合。

如果你给I/O变量指定一个数字型数据类型,你可以以整数访问这些变量

I/O地址数据类型 I/O变量可能的数据类型
BOOL (PIn.x, PQn。x) BOOL
BYTE (PIBn, PQBn) BYTE, SINT, USINT
WORD (PIWn, PQWn) WORD, INT, UINT
DWORD (PIDn, PQDn) DWORD, DINT, UDINT

3。3.4背景任务的固定过程图像的访问

背景任务的过程图像是SIMOTION设备RAM的存储区域,SIMOTION设备的子集I/O地址空间反射到这个区域.每个镜像会随着背景任务一起刷新,并在整个周期中任务保持一致。当编程背景任务(循环编程)时会优先使用过程图像.

背景任务的固定过程图像的大小为64byte(地址范围0.。。63)

最重要的属性与直接访问和循环任务过程图像的的比较包含在212页直接访问和过程图像的属性

注意:不能使用访问循环任务的过程图像的I/O地址.这些地址不能读写给背景任务的固定过程图像。

规则:

不适用216页直接访问和循环任务的过程图像的I/O地址.项目(如:下载时)一致性检查时不需要考虑这些到背景任务的固定过程图像的访问.

不显示在I/O中或不在HW config配置的的址视为普通的存储地址。

可以通过下列方法访问背景任务的固定过程图像:

●使用一个绝对PI访问(221页):绝对PI地址访问包含输入/输出地址和数量类型的标识符

●使用一个符号PI访问(223页):声明一个变量,以供相关的绝对PI访问参考

—一个单元变量

—在程序中的一个静态本地变量

●使用一个I/O变量(225页):在符号浏览器中,你为整个设备定义一个有效的I/O变量,以供相关的绝对PI访问参考

注意:

观察如果输入和输出以Little Endian字节顺序工作(如:SIMOTION设备C230-2 or C240集成数字输入),又满足下列条件:

1.输入和输出在地址0.。。62间配置

2。创建直接访问(数据类型WORD, INT 或 UINT)的I/O变量以输入和输出

3。也可以通过背景任务的固定过程图像访问这些输入和输出

下列内容是有效的:

●数据类型WORD访问通过I/O变量和背景任务的固定过程图像提供相同的结果

●带_getInOutByte function单独字节访问在Little Endian顺序中提供这些

●通过背景任务的固定过程图像访问独自的字节或位在Big EndiaN顺序中提供这些

3.3。4。1背景任务的固定过程图像的绝对访问(绝对PI访问)

通过直接使用地址(带隐式数据类型)标识符来绝对访问背景任务的固定过程图像。标识符(222页)的语法图描述在下面章节中。

你可以如同正常变量一样使用绝对PI访问的标识符。

注意:输出可以读写,但是输入为只读.

3.3。4。2一个绝对过程图像访问的标识符语法

绝对访问背景任务的固定过程图像,使用下语法图。不仅说明地址,还要说明访问的数据类型和访问模式(输入/输出).

可以使用下列标识符:

●对于背景任务的固定过程图像的符号访问的声明(见223页)

●对于创建I/O变量以访问背景任务的固定过程图像(见225页)

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\4OE]PG0M$H5J2~NBYNNOPSR.jpg

逻辑地址62输入,WORD数据类型: %IW62

逻辑地址63输出,bit 3,BOOL数据类型: %Q63。3

注意:不能使用访问循环任务的过程图像的访问地址。这些地址不能读写给背景任务的固定过程图像.

注意:

不适用216页直接访问和循环任务的过程图像的I/O地址。项目(如:下载时)一致性检查时不需要考虑这些到背景任务的固定过程图像的访问。

不显示在I/O中或不在HW config配置的的址视为普通的存储地址。

3.3。4。3背景任务的固定过程图像的符号访问(符号PI访问)

你可以符号访问背景任务的固定过程图像,不需要经常指定绝对过程图像访问。

你可以声明符号访问:

●作为一个程序的一个静态变量(在声明部分VAR/END_VAR的结构中)

●作为一个单元变量(在ST源文件的interface或implementation部分的VAR_GLOBAL / END_VAR结构中)

PI访问的符号名称声明语法图如下:

关于绝对PI访问,见222页绝对PI访问的标识符语法图.

声明的整数或bit数据类型的范围必须与绝对PI访问的范围相符合.在声明一个数字型数据类型之后,你可以把过程图像的内容作为一个整数写地址。

见224页声明的例子

3。3.4。4可能的符号PI访问的数据类型

与绝对PI访问不同的数据类型可以被指定为背景任务的固定过程图像。数据类型的宽度必须与绝对PI访问的数据类型的宽度相对应.

●符号PI访问的声明(223页)

●创建一个I/O变量(225页)

如果你给PI访问或I/O变量指定一个数字型数据类型,你可以作为整数访问这些变量。

3。3。4。5符号PI访问的例子

如果你要访问CPU存储区域(222页绝对PI访问)%IB10,但是你可以灵活的在程序中改动,然后如下在CPU存储区域中声明一个myInput变量:

如果你想使用存储区域的整数数值,如下声明myInput变量:

如果你想在程序中使用CPU存储区域,而不是%IB10,你只需要在变量声明中更改绝对PI访问。

3。3.4。6为访问背景任务固定过程图像而创建一个I/O变量

在符号浏览器的细节窗口创建I/O变量,为此,必须在离线模式下进行。

下列是这个规程的简要描述

1。在SIMOTION SCOUT的项目导航中,在SIMOTION设备子目录中选择I/O元素

2.在细节浏览中,选择符号浏览器标签,然后滚动到最末的变量表(空行)

3.在表格的最后一行,输入或选择以下:

—变量名称

—在I/O地址下,根据“一个绝对PI访问标识符的语法图(222页)”的绝对PI访问

(例外:不允许BOOL数据类型的语法%IXn.x or %QXn。x)

—根据“224页可能的符号PI访问的数据类型”的I/O变量的数据类型

4。选择使用的显示格式来监视符号浏览器中的变量

现在你可以使用符号浏览器或SIMOTION设备的其他程序来访问变量

注意:

只能在离线模式下创建I/O变量.在SIMOTION SCOUT中创建I/O变量,然后在程序源中使用。

注意你可以读写输出,但是输入是只读.

在你可以监视和修改新的或更新的I/O变量之前,你必须下载项目到目标系统.

可以如其他变量一样使用I/O变量,见226页访问I/O变量。

3.3.5访问I/O变量

你创建一个I/O变量以:

●直接访问或循环任务的过程图像(214页)

●背景任务的固定过程图像的访问(220页)。可以如其他变量一样使用I/O变量。

注意:

如果你把单元变量或本地变量声明为同样的名称(如: var-name),使用_device.var-name(预先定义的命名空间,见命名空间中的预先定义的命名空间表格)指定I/O变量.

访问作为循环任务的过程图像所创建的一个I/O变量是可能的。用_direct.var—name 或_device._direct。var-name指定直接访问。

在变量访问中发生错误时,如果你想从默认的动作中deviate,你可以使用_getSafeValue 和 _setSafeValue功能 (见SIMOTION功能手册)。

对于访问I/O变量的相关错误,见SIMOTION基础功能手册。

3。4使用库

库为你提供了用户定义的数据类型、功能和功能块,这些都可以在SIMOTION设备中使用.

库可以用所有编程语言编写,也可以在所有程序源(ST源文件,MCC单元)中使用。

在线帮助中可以通过插入和管理库获得更多细节信息。

注意:

关于程序源文件的名称的规则同样适用于库的名称,见21页插入ST源文件。特别是,名称允许的长度基于SIMOTION kernel版本

●SIMOTION kernelV4。1: 最大128个字符

●SIMOTION kernelV4。0: 最大8个字符

高于V4.0的SIMOTION kernel版本,直到一致性检查或执行项目的下载时才能检测超出库的允许长度。

3。4。1编辑一个库

在库中,你可以使用所有的ST命令,除了在下表中列出的几点。下表中列出的有些变量也不允许访问.

禁止的命令:

●_getTaskId功能(见SIMOTION基础功能手册)

●_getAlarmId功能(见SIMOTION基础功能手册)

●_checkEqualTask功能(见SIMOTION基础功能手册)

●下列功能时针对高于SIMOTION kernelV3.0的版本

—任务控制命令

—任务运行时间测量命令

—信息编程的命令

有了这些功能,配置的信息的任务名称被转移

●如果库不是基于设备的(如:不参考SIMOTION设备或SIMOTION kernel版本的编辑)

—SIMOTION设备的系统功能(SIMOTION设备的参数手册)

—基于版本的系统功能

禁止的变量访问:

●单元变量(保留和不保留)

●全局设备变量(保留和不保留)

●I/O变量

●技术目标的实例和系统变量

●任务名称和配置信息的变量(_task 和 _alarm namespaces)

●如果库不是基于设备的(如:不参考SIMOTION设备或SIMOTION kernel版本的编辑)

—SIMOTION设备的系统变量(SIMOTION设备的参数手册)

—技术目标的配置数据(见SIMOTION技术包配置数据的参数手册)

注意:在库中程序状态debug功能是不可用的.

编辑一个独自的库

编辑一个独自的库的规程如下:

1.在项目导航中选择库

2。选择编辑>目标属性菜单命令

3.选择TPs>TOs标签

4。选择能作为编辑库的基础使用的SIMOTION 设备(在SIMOTION kernel版本)和技术包,见SIMOTION基础功能手册

5。从文本菜单中选择接受和编辑

参考所有选择的SIMOTION设备、版本和技术包(和独立设备)编辑库

注意:

如果编辑库导入另一个库,注意以下:

1.对于导入的库,至少相同设备和SIMOTION kernel版本必须作为导入库选择。

如果满足预先条件(参考SIMOTION基础功能手册),可以编辑独立设备为导入库

2.导入库必须参考所有的组态设备,kernel版本和技术包各自编译。

作为项目—范围编辑的部分的库的编辑通常不是很有效。

作为项目-wide编辑的部分的库的编辑

当你编辑整个SIMOTION项目时(例如:通过选择项目〉保存和重新编辑所有或通过一个XML导入),使用的库页同样被编辑。

注意:

当执行项目-范围编辑时,注意以下:

1.系统自动识别库之间的相关性,选择合适的编辑顺序

2。编辑一个库只能参考在项目中配置的和使用库的SIMOTION设备(包括SIMOTION kernel版本)

3。忽略为库设置的其他SIMOTION设备和kernel版本

3。4。2库的know—how保护

你可以保护库和源文件免受第三方未授权的访问。保护库或源只能通过输入密码以 纯文本打开或导出。

你可以:

●给一个库的源提供KNOW—HOW保护

只有源有未授权访问保护

SIMOTION设备的设置包括SIMOTION kernel和所有技术包,库在这些地方进行编辑。用户也可以更改和接受。请参见SIMOTION基础功能手册。

用户可以为SIMOTION其他设备和kernel版本使用库

●给库提供KNOW—HOW保护

下列有未授权访问保护:

—库的所有源

—SIMOTION设备的设置包括SIMOTION kernel和所有技术包,库在这些地方进行编辑

这样就阻止了用户为SIMOTION其他设备和kernel版本使用库.

如果要想达到此目标,使用此设置。

注意:如果以XML格式导出,库或源以加密方式导出。当导入编码的XML文件时,包括登陆和密码的KNOW—HOW保护原地保持可用。

3.4.3从库中使用数据类型,功能和功能块

在从库中使用数据类型,功能和功能块时,你必须使这些对ST源文件已知。为此,,在ST源文件interface部分使用下列结构

USELIB library—name [AS namespace];

库名为显示在项目导航中的名称。当需要说明多个库时,用逗号隔开作为一个列表输入,如:

USELIB library—name_1 [AS namespace_1],

library—name_2 [AS namespace_2],

library—name_3 [AS namespace_1], 。。.

你可以使用选项AS 命名空间 add-on来定义一个命名空间(见233页)

●在有和SIMTION设备的ST源文件相同名称的库中你可以访问数据类型、功能和功能块

●你可以在库中使用命名空间来改变数据类型、功能和功能块的名称,以便他们名称不同

你也可以给不同的库指定相同的命名空间。

3.5相同的标识符和命名空间的使用

3.5。1相同的标识符的使用

使用相同名称的单元变量和本地变量(程序变量、FB变量、FC变量)是可以的。当编辑一个程序源时,编辑器搜寻带现行POU的标识符。小的有效范围优先于大的有效范围.

因此你可以在不同的源文件部分使用相同的标识符,只要遵循下列规则。如果一个高级别的标识符在一个单元或POE中被隐藏,编辑器产生一个报警。

注意:

在确定的情况下,如果相关的技术包没有被导入,编辑器不会产生报警.

在一个程序组织单元(POU)中的标识符

在一个POU中下列标识符必须是唯一的:

●POU的本地变量

●POU的本地数据类型

下列标识符可能不一样

●预留标识符

当隐藏下列标识符时编辑器产生报警

●单元变量,数据类型和POU或相同的或导入的单元

●标准系统功能,标准系统功能块,和相关的数据类型

●SIMOTION设备系统功能和系统数据类型

●从导入的库中的POU和数据类型

—可以通过输入一个用户定义的命名空间解决

●从导入的技术包中的系统功能和系统数据类型

—可以通过输入一个用户定义的命名空间解决

●SIMOTION设备变量(系统变量,I/O变量,全局设备变量)

—可以通过输入一个预先定义的命名空间—device解决

●在SIMOTION设备中配置的技术目标

—可以通过输入一个预先定义的命名空间_to解决

在一个单元中的标识符

在一个单元中下列标识符必须是唯一的:

●单元变量(在interface或implementation部分声明的)

●数据类型(在interface或implementation部分声明的)

●POU

下列标识符不能一致

●预留标识符

●单元变量,数据类型和POU导入单元

●标准系统功能,标准系统功能块和相关的数据类型

●SIMOTION设备的系统功能,系统数据类型

●从导入的库中的POU和数据类型

—可以通过输入一个用户定义的命名空间解决

●从导入的技术包中的系统功能和系统数据类型

—可以通过输入一个用户定义的命名空间解决

当隐藏下列标识符时编辑器产生报警

●SIMOTION设备变量(系统变量,I/O变量,全局设备变量)

—可以通过输入一个预先定义的命名空间—device解决

●在SIMOTION设备中配置的技术目标

—可以通过输入一个预先定义的命名空间_to解决

在SIMOTION设备的标识符(如:I/O变量,全局设备变量)

在SIMOTION设备中下列标识符必须是唯一的:

●全局设备变量

●SIMOTION设备的系统变量

●SIMOTION设备的系统功能和系统数据类型

下列标识符不能相同:

●预留标识符

●标准系统功能,标准系统功能块和相关的数据类型

下面的例子解释了这种现象。对于单元变量(大有效范围)和FC变量(小有效范围)的相同名称的使用,只有在功能中声明的变量在源文件部分是有效的。单元变量仅在没有声明的本地变量的POU中有效。见例子:

3。5。2命名空间

可以使用名称访问定义在程序源(在库中,技术包,和SIMOTION设备上)之外的数据类型,单元变量,功能和功能块。

当编辑一个程序源时,编辑器搜寻带现行POU的标识符。在程序源中声明的数据类型、变量、功能或功能块隐藏在源之外定义的相同名称的标识符,见231页相同标识符的使用。为了访问这些隐藏的标识符,你在确定的例子中可以使用命名空间。

用户定义的命名空间

在库和技术包的导入结构中,你可以定义名称来库和技术包的搜寻数据类型、功能、功能块。

也可以使用命名空间来在不同的库中统一名称。

如果你要从一个库中或一个技术包使用一个数据类型、功能或功能块,把命名空间标识符置于名称之前,用一个句号隔开,如:namespace。fc—name, namespace.fb-name, namespace。type—name

例子

下面的例子显示了如何选择CAM技术包,指定命名空间CAM1,然后使用命名空间:

注意:如果为导入的库或技术包来定义一个命名空间或,必须被定义,如果从库或技术包使用功能、功能块或数据类型。见下例:Cam1._enableAxis,

Cam1.WHEN_COMMAND_DONE.

预先定义的命名空间

device- 、 project—specific 变量、TaskID 和 AlarmID变量的命名空间被预先定义。如有必要,在变量名称前写指定,用一个句号隔开,例如:_device.var—name 或 _task。task—name

命名空间 描述
_alarm 对于AlarmId:_alarm。name变量包含带名称标识符的信息的AlarmId(见SIMOTION基础功能手册)
_device 对于device—specific变量(SIMOTION设备全局设备变量,I/O变量和系统变量)
_direct 对于直接访问I/O变量—见214页直接访问和循环任务的过程图像

本地名称为_device.允许作为in _device._direct。name嵌套

_project 对于项目中SIMOTION设备的名称;只能和其他设备上的技术目标使用.

有唯一的技术目标的项目范围名称,使用为名称和系统变量

_task 对于TaskID:_task.name变量包含带名称标识符的任务的TaskId
_to 对于在SIMOTION设备上配置的技术目标,和系统变量和组态数据。

不对于系统功能和技术目标的数据类型.这时如有必要,为导入的技术包使用用户定义的命名空间

3.6参考数据

参考数据为你提供了一个概述:

●使用声明中的信息的标识符和使用(交叉对照表)

●功能调用和嵌套(程序结构)

●程序源中不同数据区域的存储要求(代码属性)

见:

237页交叉对照表

239页程序结构

241页代码属性

3。6.1交叉对照表

交叉对照表列出了程序源(如:ST源文件,MCC源文件)中所有标识符:

●作为变量、数据类型或程序组织单元(程序,功能,功能块)声明

●作为之前在声明中定义的数据标识符使用

●作为在一个程序组织单元中的语句部分中的变量使用

按照要求生成一个交叉对照表作为:

●一个独立的程序源(如:ST源文件,MCC源文件,LAD/FBD源)

●SIMOTION设备的所有程序源

●项目所有的程序源和库

●库(所有的库,单个的库)

3.6。1。1创建一个交叉对照表单

为创建一个交叉对照表单:

1.在项目导航中,选择要创建交叉对照表的元素

2。选择菜单编辑〉参考数据〉创建

在细节窗口的标签页显示交叉对照表

3.6。1。2交叉对照表的内容

每个标识符的交叉对照表包含:

●标识符名称(对于结构和枚举,独自的部件和元素)

●类型(如数据类型,POU类型)

●声明位置(如:程序源的名称,技术包的名称)

●标识符现行使用的信息:

—使用的类型(如:R=读访问,W=写访问,变量类型=声明)

—程序源的路径细节(SIMOTION设备,程序源的名称)

—在程序源中的区域(如:implementation部分,POU名称)

—程序源的程序语言

-在ST源文件的行号(或MCC图表中的块号,或在LAD/FBD源中的参考号)

注意:

创建的交叉对照表自动保存,在项目导航选择合适的元素之后可以显示交叉对照表。为了显示交叉对照表,选择 编辑〉参考数据 >显示> 交叉对照表菜单命令。

当再次创建一个交叉对照表时,选择性地更新(对应在项目导航中的选择元素)。其他存在的交叉对照数据被保留和显示,如适用.

注意:

在MCC编程中激活单步式监视

每个任务指定2个变量:TSI#dwuser_1 和 TSI#dwuser_2,可以读写。

当激活单步式监视时,如果至少一个MCC图表被指定给相关任务,编辑器使用这些变量来控制单步式监视。用户不能使用这些变量,因为这些内容被单步式监视覆写,可能会引起不良副作用.

3.6.1.3交叉对照表的使用

在一个交叉对照表中,你可以:

●按照字母顺序分类列的内容

●设置过滤功能(通过快捷菜单,通过点击鼠标右键)

●按照顺序复制剪贴板的内容,粘贴到一个EXCELL表格程序中

●打印内容

●打开参开的程序源和相关ST命令(或MCC,或LAD/FBD元素)行光标位置

—在交叉对照表中的对应行双击

—将光标移至交叉对照表中的对应行,然后点击进入应用按钮

更多信息见在线帮助

3.6.2程序结构

在程序中,结构是所有的功能调用和在选择的元素内的嵌套.当成功创建交叉对照表时,你可以选择性地显示程序结构为:

●一个独立的程序源(如:ST源文件,MCC源文件,LAD/FBD源)

●SIMOTION设备的所有程序源

●项目所有的程序源和库

●库(所有的库,单个的库,在一个库中的独自的程序源)

遵循以下步骤:

1.在项目导航中,选择你想显示的程序结构的元素

2.选择菜单编辑〉参考数据 >显示> 程序结构

在细节窗口中,交叉对照表的标签被程序结构标签替换

3.6.2。1程序结构的内容

树形结构出现,显示:

●作为各自的base

—在程序源中声明的程序组织单元(程序,功能,功能块)

—使用的执行系统任务

关于输入的结构,见下表:

元素 描述
Base(声明的POU或使用的任务) 用逗号隔开的列表

●POU或任务的标识符

●用add—on声明的POU或任务所在的从程序源的标识符

●最小和最大栈需求(在本地数据栈上的POU或任务),用byte(最小和最大)

●最小和最大全局栈需求(在本地数据栈,包括调用的POU上的POU或任务),用byte(最小和最大)

参考POU 用逗号隔开的列表

●POU或任务的标识符

●可选:POU声明的程序源/技术包的标识符:

Add—on (UNIT): 用户定义程序源

Add—on (LIB): 库

Add-on (TP): 从技术包来的系统功能

●仅对于功能块:实例的标识符

●仅对于功能块:实例声明的程序源的标识符

Add-on (UNIT): 用户定义程序源

Add-on (LIB): 库

●POU调用的源的行(编译);用”|”隔开行

3.6.3代码属性

你可以找到更过关于程序源的不同数据区域存储要求的信息。

成功创建交叉对照表时,你可以选择性显示代码属性为:

●一个独立的程序源(如:ST源文件,MCC源文件,LAD/FBD源)

●项目所有的程序源和库

●库(所有的库,单个的库,在一个库中的独自的程序源)

遵循以下步骤:

1。在项目导航中,选择你想显示的代码属性

2。选择菜单编辑>参考数据 >显示> 代码属性菜单

在细节窗口中,交叉对照表的标签被代码属性标签替换

3.6。3。1代码属性内容

下列内容在一个表格中显示,作为所有选择的程序源文件

●程序源文件的标识符

—动态数据:所有单元变量(保留和不保留,在interface和implementation部分)

-保留数据:在interface和implementation部分的保留变量

-interface数据:interface部分的单元变量(保留和不保留)

●参考源的编号

3。7控制预处理器和pragma编辑

使用一个pragma来插入ST源文件文本(如,语句),将影响ST源文件的编译。

pragma用在{ }括号中,包含:

●用于控制预处理器的预处理器语句,见243页控制预处理器

带包含在ST源文件中预处理器语句的pragma通过预处理器计算,作为控制语句.

●控制编辑器的选项属性,见247页用属性控制编辑器

带包含在ST源文件中预处理器语句的pragma通过预处理器计算,作为控制语句。

注意:确认使用正确的pragma语法图(如:属性的大小写符号)。

忽略未识别的pragma,不产生报警信息。

3。7.1控制一个预处理器

预处理器为编辑准备一个ST源.例如:字符串可以作为标识符的替代文本被定义,或者为编辑隐藏/显示源程序的部分.

默认预处理器是未启用的。可以如下激活:

●在项目中的程序源文件和编程语言为全局,见45页编辑器的全局设置

●程序源文件为本地,见46页本地编辑器设置

在一个程序源文件的编辑中,你将得知预处理器的动作.但是,这要求激活第7级的报警显示,见49页报警级别的意义.你为发生的报警和信息说明细节:

●在编辑器的全局或本地设置

●the _U7_PoeBld_编辑选项 :在ST源文件中= warning:n:off or warning:n:on属性,见247页控制编辑器的属性。

如编辑器信息,预处理器的信息在编辑/检查输出标签的细节窗口显示.

注意

你可以查看由预处理器修改的ST源文件的文本

1.打开ST源文件

2。选择ST源文件>执行预处理器菜单命令

修改的源文本在编辑/检查输出标签的细节窗口显示.

3。7。1.1预处理器语句

你可以通过pragma中的语句来控制预处理器。可以使用下图中的语句。这些语句作用于ST源文件的后续行.

可以在SIMOTION设备或一个库中的ST源文件使用。

在ST源文件的属性对话框中给预处理器定义(见51页定义预处理器).这使得你用KNOW-HOW保护在ST源文件中控制预处理器。(见51页ST源KNOW—HOE保护)

语句 意义
#define 指定的标识符将被下面指定的文本所代替.

允许的字符:见脚注表

#undef 删除了标识符的替换规则
#ifdef 对于不同的结构(条件编辑):

如果定义了指定的标识符,编辑器编辑程序行(直到下个pragma包含#else 或 #endif)

#ifndef 对于不同的结构(条件编辑):

如果没有定义指定的标识符,编辑器编辑程序行(直到下个pragma包含#else 或 #endif)

#else 对于不同的结构(条件编辑):

替代分支到#ifdef 或 #ifndef

如果没有满足先前#ifdef 或 #ifndef查询,编辑器编辑程序行(直到下个pragma包含#endif)

#endif 包含#ifdef 或 #ifndef不同的结构
允许的字符:

●标识符:与标识符的规则一致

●文本:任意字符的顺序,而不是\ (反斜杠), ’ (单引号) and ” (双引号)。 不允许关键词USES, USELIB 和 USEPACKAGE

注意:

每个预处理器语句必须用一个新行开始,一个换行符结束。因此包括pragma的波形括号{ }必须放在 ST源文件的单独行中!

在#定义语句中的pragma,请注意:

●导出在ST源文件的interface部分带#定义语句的pragma.用USES语句导入定义标识符到ST相同SIMOTION设备或相同库的其他源文件

●在库的pragma中定义的标识符不恩能够被导入到SIMOTION设备的ST源文件

●预留标识符的重新定义是不可能的

你也可以在ST源文件的属性对话框中定义预处理器.相同标识符的不同定义,在ST源文件中的#定义语句有优先权。

3。7.1。2预处理器语句的例子

3.7.2属性控制编辑器

属性标识符 属性值 意义
_U7_PoeBld_编辑选项 属性影响一个ST源文件中编辑器报警的输出.也影响ST源文件所有的续行。
warning:n:off 不显示数字N指定的报警
warning:n:on 显示数字N指定的报警
允许值为n

n = 0 to 7: 报警级别,见49页报警级别的意义

n = 16000 及更高: 报警的编号

HMI导出 属性默认改变在HMI设备上可用的单元变量.直接用以下声明块放在相关的关键词之后:

●VAR_GLOBAL

●VAR_GLOBAL RETAIN

仅影响相关声明块中声明的单元变量。HMI导出的详细描述,特别是基于SIMOTION kernel版本的属性的影响,见208页变量和HMI设备。

FALSE 在ST源文件的interface部分.在相关的声明块中声明的单元变量在HMI设备上不可用。
TRUE 在ST源文件的implementation部分。在相关的声明块中声明的单元变量在HMI设备上可用.
BlockInit_OnChange 只关于SIMOTION kernel V3。2

无论当相关的声明块中的版本标识符改变时下载是否可行,属性改变标准定义.只能直接放在下列声明块相关的关键词之后:

●VAR_GLOBAL(在interface或implementation部分)

●VAR_GLOBAL RETAIN(在interface或implementation部分)

●VAR(在激活仅此一次创建程序实例时,仅指单元中的程序)

仅影响相关声明块中声明的变量。见207页全局变量的版本ID和下载时的初始化

FALSE 当声明块的版本标识符改变时(默认),在RUN模式下的下载是不可能的
TRUE 即使声明块的版本标识符改变(默认),在RUN模式下的下载是可能的。初始化声明块的变量
BlockInit_OnDeviceRun 只关于SIMOTION kernel V4.1

无论当相关的声明块中的版本标识符改变时下载是否可行,属性改变标准定义.只能直接放在下列声明块相关的关键词之后:

●VAR_GLOBAL(在interface或implementation部分)

●VAR(在激活仅此一次创建程序实例时,仅指单元中的程序)

仅影响相关声明块中声明的变量.见194页变量类型的存储范围

DISABLE 在从停止转到运行模式时(默认),在相关的声明块中声明的变量没有初始化
ALWAYS 在从停止转到运行模式时(默认),在相关的声明块中声明的变量初始化
注意:确保使用正确的大小写符号的属性!

注意:在一个声明块中的HMI_Export, BlockInit_OnChange 或BlockInit_OnDeviceRun属性的插入,删除和更改不改变它的版本标识符!

3。8跳转语句和标签

除了控制语句(见130页控制语句),一个跳转语句也是可用的。

用GOTO语句编写跳转语句,指定跳转标签到你想要跳转的地方.跳转只允许在POU中发生.

在你想要重新编写的语句之前输入跳转标签(用冒号隔开)。

或者,你可以在POU中声明跳转标签(在POU中用LABEL/END_LABEL结构)。在语句部分仅可以使用声明的跳转标签。

注意:

仅在特定的条件(例如:troubleshooting)中使用GOTO语句.根据结构编程的规则不能全部使用。

只在POU中允许跳转.

下列跳转是非法的:

●跳至从属的控制结构(WHILE, FOR,等)

●从一个WAITFORCONDITION结构跳转来的

●在CASE语句中的跳转

仅在使用的POU中声明跳转标签。如果声明跳转标签,只能使用声明的跳转标签。

4.错误源和程序调试

本章描述了编程错误的不同的来源和图和有效编程。你也可以学习到程序测试可用的选项。所有可能的编辑器错误信息,即编辑器错误,见350页编辑器错误信息和解决方法.每个错误的可能解决方法都有描述。

4.1避免错误和有效编程的注释

SIMOTION基础功能手册列出了一些常见的错误源,提示编程者或阻止程序适当的执行.注释如下:

●指定算术表达式的数据类型

●在循环任务开启功能

●在循环任务中等待时间

●下载错误

●CPU没有转到运行模式

●CPU停止

●本地数据栈的大小

●等

除此之外,你还能找到关于有效编程的注释,尤其是:

●以运行时间为导向的编程

●更改优化式编程

4.2程序调试

在编译中ST编译器检查并显示的语法错误。在程序执行期间的运行时间错误由系统报警显示,或者直接导致停止运行模式。可以使用ST测试功能找到逻辑编辑错误。如:符号浏览器,状态程序,追踪等。

4.2.1程序测试的模式

4.2。1。1SIMOTION设备模式

程序测试时有多种不同的模式可用。

如何选择SIMOTION设备的模式:

1。在项目导航中突出SIMOTION设备

2。在快捷菜单中选择“测试模式”

3.选择需要的模式(见下表)

如果你选择“debug模式”

—接受安全信息

—配置life-sign监视

观察下列部分:254页life-sign监视

4.用OK确认

SIMOTION设备转到选择模式

当SIMOTION设备转到“debug模式”时

-如果SIMOTION SCOUT现在处于离线模式,自动建立(在线模式)与目标系统的通讯

—在状态栏显示激活的debug模式

显示断点工具栏

设置 意义
Process mode 优化SIMOTION设备上的程序执行以达到最佳系统性能。下面的诊断功能是可用的,虽然因为优化的最大系统性能而功能受限:

●在符号浏览器或可看的表格中的监视变量

●程序状态(仅限制)

—变量的限制监视(如:在循环中的变量,系统功能的回送值)

—关于SIMOTION kernel版本V4。0

每个任务仅监视一种程序源(如:ST源,MCC源,LAD/FBD源)

—高于SIMOTION kernel版本V3。2

只是监视一种程序源(如:ST源,MCC源,LAD/FBD源)

●对于驱动和功能生成器带测量功能的追踪工具(仅限制),见在线帮助

—每个SIMOTION设备仅一次追踪

Test mode Process mode的诊断功能在全范围内可用:

●在符号浏览器或可看的表格中的监视变量

●程序状态

-监视所有变量

—关于SIMOTION kernel版本V4。0

每个任务仅监视多种程序源(如:ST源,MCC源,LAD/FBD源)

—高于SIMOTION kernel版本V3。2

—每个任务仅监视一种程序源(如:ST源,MCC源,LAD/FBD源)

●对于驱动和功能生成器带测量功能的追踪工具(仅限制),见在线帮助

—每个SIMOTION设备仅四次追踪

注意:运行时间和存储使用随着诊断功能使用的增加而增加

Debug mode 在SIMOTIONv3。2版本可用。

除了测试模式的诊断功能,你还可以使用以下功能:

●断点

在一个程序源文件中,你可以设置断点(271页)。当达到一个激活的断点时,停止选择任务

●控制MOTION 任务

在设备诊断的任务管理器中,你可以使用MOTION TASK的任务控制命令,见SIMOTION基础功能手册

项目仅有一种SIMOTION设备可以转到DEBUG模式。SIMOTION SCOUT处于在线模式,如:与目标系统通讯。观察下列部分:life—sign监视的重要信息,见254页

4。2.1。2life—sign监视的重要信息

警告:

你必须注意合适的安全规定。

使用debug模式或仅带通过激活恰当的短期监视时间的life-sign监视功能的控制面板!否则在PC和SIMOTION设备通讯连接时会产生问题,轴会以不可控的方式运动。

仅仅为调试、诊断和服务目的开放功能。只有授权的技术人员才能使用功能。高级别控制的安全关闭没有影响。

因此,在硬件中必须有一个急停电路。用户应当采取适当措施。

接受安全注释:

在选择debug模式或控制面板之后,你必须接受安全注释。你可以给life-sign监视设置参数:

按照以下操作

1.点击设置按钮

“debug设置”窗口打开

2.如下节描述,读取安全注释,设置life—sign监视参数

life-sign监视参数设置

在life—sign监视参数设置窗口,如下列描述进行:

1.读警告

2。点击安全注释按钮来打开窗口

3.不要给默认的life—sign监视做任何的改动

仅在特别的环境中和查看所有安全警告时更改

4。点击接受以确认你已经阅读了安全注释和正确设置life—sign监视的参数

注意:

按下空格键或转到一个不同的Windows应用会导致:

●Debug模式中激活的断点

-SIMOTION设备转到停止模式

输出失效 (ODIS)

●使用控制面板(控制PC的优先级)控制一个轴或一个驱动

-停止轴或驱动

—重新设置开启

警告:在所有的运行模式不能保证此功能。因此,在硬件中必须有急停电路.用户必须采取适当措施。

4.2.1。3life-sign监视参数

Field 描述
life—sign监视 SIMOTION设备和SIMOTION SCOUT定期交换life—sign信号来确保一个正确的功能连接。如果life-sign的交换被干扰的时间长于设置的监视时间,将会产生下列:

●Debug模式中激活的断点

—SIMOTION设备转到停止模式

输出失效 (ODIS)

●使用控制面板(控制PC的优先级)控制一个轴或一个驱动

—停止轴或驱动

—重新设置开启

下列参数是可能的:

●激活的检查框

如果选择检查框,life—sign监视被激活。life—sign监视的失效不总是可能的。

●监视时间

输入超时

注意:不要给默认的life—sign监视做任何的改动

仅在特别的环境中和查看所有安全警告时更改

安全信息 请查看警告!

点击按钮来获得更多的安全信息。

见254页life—sign监视的重要信息

4.2.2符号浏览器

4.2.2.1符号浏览器的属性

在符号浏览器中,你可以查看,如有必要,更改名称、数据类型和变量数值.特别是,见下列变量:

●一个程序或功能块的单元变量和静态变量

●SIMOTION设备或技术目标的系统变量

●I/O变量或全局设备变量

对于这些变量,你可以

●查看变量值的快照

●查看更改的变量值

●更改变量值

但是,符号浏览器仅可以显示/修改变量值,如果已经在目标系统中装载项目,并建立了到目标系统的通讯。

4.2.2。2使用符号浏览器

要求:

●确保已经建立与目标系统的通讯,已经下载一个项目到目标系统。装载示范程序的项目,见66页执行示范程序

●你可以允许用户程序,但是却没有必要.如果程序没有运行,仅见变量的初始值.

基于监视的变量所在的存储区域的程序被保存。

在单元的用户内存或保留内存中的变量

●在程序源文件(单元)interface部分的保留和不保留单元变量

●在程序源文件(单元)implementation部分的保留和不保留单元变量

●实例作为单元变量声明的功能块的静态变量

●如果程序源文件用仅此一次创建程序实例的编辑选项来编辑(44页)

—程序的静态变量

-实例作为静态变量声明的功能块的静态变量

对于下列步骤:

1。在项目导航中选择程序源文件(如:ST_1)

2.在细节窗口,点击符号浏览器标签

在符号浏览器中,程序源文件的所有变量包含在单元的用户内存和保留内存中。

●程序源文件的所有单元变量

●程序源文件用仅此一次创建程序实例的编辑选项来编辑:程序源文件的程序和静态变量

(包括功能块的实例)

任务的用户内存的变量

你可以使用符号浏览器来监视包含在相关任务的用户内存中的变量,见194页变量类型的内存范围。

如果没有默认的仅此一次创建程序实例的编辑选项来编辑程序源(单元),程序指定的用户内存任务包含下列变量:

●程序的静态变量

●实例作为静态变量声明的功能块的静态变量

根据下列步骤:

1。在SIMOTION SCOUT的项目导航中,在SIMOTION设备的树形目录中选择EXECUTION SYSTEM元素

2。在细节窗口,点击符号浏览器标签

符号浏览器显示了在执行系统中所有使用的任务.在用户内容的任务中包含的相关变量列在下方。

注意:

你可以用程序状态来监视临时变量(还有单元变量和静态变量),见265页程序状态的属性

系统变量和全局设备变量

在符号浏览器中你可以监视下列变量:

●SIMOTION设备的系统变量

●技术目标的系统变量

●I/O变量

●全局设备变量

根据下列步骤:

1。在SIMOTION SCOUT项目导航中选择适当元素

2。在细节窗口,点击符号浏览器标签

在符号浏览器中显示对应的变量

状态和控制变量

在状态值一栏中,显示现行变量值,并定期更新。

你可以更改一个或多个变量值。需要更改的变量如下操作:

1.在控制数值一栏中输入一个数值

2.在栏中激活检查框

3.点击立即控制按钮

输入的数值被写给选择的变量

注意:

当你更改多个变量的数值时注意:

按照顺序给变量写值。花费几毫秒知道写下个数值。在符号浏览器中从上到下更改变量。所以一致性没有保证.

符号浏览器的显示更改

你可以固定主动对象符号浏览器的显示:

●为此,点击符号浏览器右上角 保留显示按钮。显示符号变为

目标的变量任然显示,并在符号浏览器中更新,即使在项目导航中选择另外的目标。

●为了去除显示,再次点击图标 。 显示符号又变回

显示无效的浮点数字

在符号浏览器中如下显示无效的浮点数:

LED 意义
1。#QNAN

—1.#QNAN

根据IEEE754 (NaN不是一个数字)的无效的位模式。在signaling NaN (NaNs) 和 quiet NaN (NaNq)之间没有差别
1.#INF

—1。#INF

根据IEEE754的+ infinity的位模式

根据IEEE754的— infinity的位模式

—1。#IND 不确定的Bit模式

4。2。3在watch表中监视变量

4。2.3。1在watch表中的变量

在符号浏览器中,你可以看见在项目中的一个目标的变量.用项目状态,你仅可以看见在一个自由选择监视区域的ST源文件的变量。

在watch表中,作为比对,你可以监视一个组别中不同源的选择的变量(如:程序源,技术目标,SINAMICS驱动—即使是不同的设备)

你可以在离线模式下查看变量的数据类型.你可以在离线模式下查看和修改变量的数值。

4。2。3。2使用watch表格

你可以从不同的程序源、技术目标和SIMOTION设备中(甚至在不同的设备)分组变量,在watch表中可以查看,如果必要也可以修改。

创建一个watch表

创建一个watch表和指定变量的步骤

1.在项目导航中,选择监视文件夹

2。选择插入>watch表以创建一个watch表格,然后输入表格名称。带名称的watch表会出现在监视文件夹中

3.在项目导航中,点击你想要把变量转移到watch表的目标

4.在符号浏览器,通过点击左侧栏的数字选择相应的变量行

5。从快捷菜单中选择MOVE变量到watch表,如:Watch table_1

6。如果你点击watch表,你将在watch表标签的细节窗口看见选择的变量现在在watch表中

7.重复3—6步来监视不同目标的变量

如果与目标系统通讯,你可以监视变量内容。

4.2。4程序运行

4.2.4.1程序运行:显示代码位置和调用路径

你可以在一个MOTION TASK执行和带调用路径的代码(如:一个ST源文件的行)中显示位置.

遵循以下步骤:

1。在程序运行工具栏点击“显示程序运行”按钮

2。选择想要的MOTION TASK

3。点击更新按钮

窗口显示:

●正在执行的代码中的位置说明程序源和POU

●调用执行的代码位置的其他POU的代码中的递归位置

SIMOTION程序源文件的名称显示如下:

名称 意义
taskbind.hid 执行系统
stdfunc。pck IEC库
device。pck 设备特有的库
tp—name。pck tp-name技术包的库

如:CAM技术包的库为cam。pck

4.2。4.2参数调用栈程序运行

所有的配置的任务显示如下:

●在程序代码中的现行代码位置

●代码位置的调用路径

Field 描述
选择的CPU 显示选择的SIMOTION设备
刷新 点击按钮读取从SIMOTION设备来的现行代码位置,在打开的窗口显示
调用任务 选择你想要执行代码位置的任务。

所有执行系统的配置任务

现行代码位置 显示在程序代码中执行的位置(程序源文件的名称、行数、POU名称)
调用者 递归显示(源文件名称,行数和POU名称,功能块实例的名称,如适用)代码位置调用在选择的任务中执行的代码位置

4。2。4。3程序运行工具栏

你可以在通过工具栏的调用路径MOTION TASK正在执行的代码(如:ST源文件的行)中显示位置。

符号 意义
C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\9L7_C_6[F`{KP](K)_@P457.jpg 显示程序运行

点击按钮来打开程序运行调用栈窗口。在这个窗口中,你可以显示带调用路径的主动代码位置。

见:263页程序运行:显示代码位置和调用路径

4。2。5程序状态

4.2。5。1程序状态的属性

程序状态使得在执行程序时正确监视变量

你可以在ST源文件中选择一个监视区域,然后监视.除了全局和静态本地数据,也可以监视本地变量。

●简单数据类型变量

●一个结构的单独元素,,假设有一个指定

●一个阵列的单独元素,,假设有一个指定

●枚举数据类型变量

当在ST源文件中运行选择的监视范围时,要监视的变量对应的缓冲充满SIMOTION设备上的对应数值。一旦运行选择的监视范围,格式化缓冲以在SIMOTION SCOUT中显示。SIMOTION SCOUT定期调用格式化的数值,并显示。

关于SIMOTION kernelV3.2版本,在ST源文件中你可以选择一个功能、功能块或实例调用的位置。你可以查看这次调用的变量数值。

注意:因为限制的缓冲容量和对最小运行时间的篡改的要求,不能显示下列变量:

●完整的阵列

●完整的结构

显示独自的阵列元素或结构元素,但是假设在ST源文件中发生了指定

Process mode Test mode
程序执行的优化 对于最大化的系统性能,仅限制诊断是可能的 全部的诊断选项
监视程序源(如:ST源文件、MCC源文件、LAD/FBD源)的最大数 ●关于SIMOTION kernel版本V4。0:每个任务最多一个程序源

●高于SIMOTION kernel版本V3。2:最多一个程序源

●关于SIMOTION kernel版本V4.0:每个任务多个程序源

●高于SIMOTION kernel版本V3。2:最多一个程序源

循环(如:WHILE,REPEAT,FOR) 在repeat循环,记录被干扰。

如果选择所有的循环,在第一次运行循环时显示数值

如果有repeat,记录继续。如果选择所有的循环,在最后一次运行循环时显示数值
包含内部循环的系统功能(如:过程串的功能) 在某些情况下不显示数值 正确显示数值

注意:

程序状态要求额外的CPU资源

如果要同时监视许多程序和状态程序请注意:

●必须激活测试模式(见252页SIMOTION设备操作模式)

●高于SIMOTION kernel版本V4.0,必须指定程序到不同任务

4.2.5.2使用状态程序

在你使用状态程序之前,必须命令系统运行特殊模式

1.确保在编辑时ST源文件生成额外的debug代码

—项目导航中选择ST源文件,选择编辑〉目标属性菜单命令

—选择编辑器标签来更改编辑器的本地设置(46页)

—确保激活了启动状态程序检查框,并确认

也可以在编辑器的全局设置中更改编辑器选项

2。打开ST源文件,用ST源文件>接受和编辑 来重新编辑

3。下载并以平常方式开启程序

4.点击ST编辑菜单栏中程序状态按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\WG)0~ML16O054E[NG$3_N(D.jpg ,开启测试模式

ST编辑窗口被垂直分开:你可以在左侧窗格看见ST源文件,右侧窗格显示选择的变量和数值.

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\(27GJ[Z2I@3]8]A51SD[G89.jpg

用程序状态测试的步骤如下:

1。在编辑器中,选择要测试的ST源文件的部分

2. 关于SIMOTION kernelV3.2版本:

如果你选择在一个程序源文件或多个任务中的多个位置调用的一个POU 的部分:

输入程序状态的调用路径(见268页)

对于选择的部分,你可以在屏幕右侧窗口看见变量和数值,循环更新这些变量和数值:

●在当下路径中更改的数值用红色显示

●没有更改的数值用黑色显示

●没有值的变量,如:未使用的IF分支的变量用绿色显示,并用问号标明

●点击 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\]63)@[$16W3ZQAT]OU@J]8T.jpg 按钮以停止监视ST编辑器工具栏(见43页)的程序变量,停止显示

●点击 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\5PW`3L0}A`_KVKKU1BQZQFS.jpg 按钮以继续监视ST编辑器工具栏(见43页)的程序变量,继续显示

你可以强制更新显示的数值

●点击 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\RCV@I8`5PM4H3X7YP4PCE@R.jpg 按钮以在ST编辑器工具栏上更新(见43页)

读取SIMOTION设备的缓冲,即使选择监视的范围没有被完全进行,数值也不完整.这是很有用的,例如:如果程序在等待一个WAITFORCONDITION语句.

必须激活监视程序变量。

4。2.5.3程序状态的调用路径

对于SIMOTION kernelV3。2或更高版本,在监视功能和功能块的变量数值时你可以指定调用路径。这使你能查看调用的变量数值。

处于此目的,在下列情况中主动打开调用路径窗口:

●你已经选择一个功能的部分

在SIMOTION设备程序源文件(如:ST源文件)中不同点调用功能

●你已经选择一个功能块的部分

在SIMOTION设备程序源文件中不同点有多个功能块的实例或调用的实例

●你已经选择一个程序的部分

程序被指定给多余一个的任务

如何选择调用路径

在调用路径状态程序窗口,标明的POU部分(编码位置)显示(ST源文件名称,行数和POU名称)

1.如果在多个任务中调用代码位置

—选择任务

2。选择要调用的代码位置(在调用的POU中)

你可以从下选择:

—在选择的任务中要调用的代码位置(ST源文件名称,行数和POU名称)

如果选择调用的代码位置被多个代码位置轮流调用,会显示更多的行

—所有

选择所有显示的代码位置.但是,所有的代码位置(到最顶级)是从调用的显示代码位置中选择的

高于SIMOTION kernelV3.1版设备的程序状态

注意:

如果你使用高于SIMOTION kernelV3。1版设备的程序状态:

●使用高于V3。1版的SINOTION SCOUT编辑程序,在描述格式中的调用路径不可用。你仅能使用在编辑时可用的诊断功能。

●如果使用高于V3.2版的SINOTION SCOUT编辑程序,你可以指定调用路径

当用编辑器的当前版本重新编辑时,注意以下:

●在其他影响中,在程序的数据存储区域会生成新的版本标识符

●删除和初始化SIMOTION设备上所有保留和不保留数据

●在某些情况中,要求少数程序源的更改

●当转回到原来的项目状态时,必须重新编辑程序

4.2。5。4参数调用路径状态程序

Field 描述
调用任务 选择任务

被调用的代码位置中的所有任务对于选择是可用的

现行代码位置 POU(代码位置)的选择部分显示(程序源文件的名称、行数、POU名称)
调用者 选择调用代码位置

下列内容是可用的:

●在选择的任务(程序源文件的名称、行数、POU名称)中调用的代码位置

如果选择的调用代码位置被多个代码位置轮流调用,显示更多的行

●所有

选择所有显示的代码位置。但是,所有的代码位置(到最顶级)是从调用的显示代码位置中选择的

4.2。6断点

4。2.6。1设置断点的普通步骤

你在一个程序源(ST源、MCC图表、LAD/FBD源)的POU中可以设置断点.一旦达到一个激活的断点,,带断点的POU中的任务停止。如果启动位于程序或功能块中的任务停止的断点,此POU的静态变量数值在细节变量状态中显示。不显示临时变量(功能块的IN/OUT参数也如此)。你可以监视其他POU的静态变量或符号浏览器中的单元变量.

要求:带POU的程序源(如:ST源文件,MCC图表,LAD/FBD程序)是开启的.

步骤如下:

1。在相关SIMOTION设备上选择debug模式(见271页debug模式设置)

2。给debug任务分组,见273页debug任务分组

3。设置断点,见276页断点设置

4.定义调用路径,见279页定义一个单独的断点的调用路径

5.激活断点,见285页激活断点

4.2。6.2设置debug模式

警告:

你必须注意合适的安全规定。

使用debug模式或仅带通过激活恰当的短期监视时间的life—sign监视功能的控制面板!否则在PC和SIMOTION设备通讯连接时会产生问题,轴会以不可控的方式运动。

仅仅为调试、诊断和服务目的开放功能。只有授权的技术人员才能使用功能.高级别控制的安全关闭没有影响.

因此,在硬件中必须有一个急停电路。用户应当采取适当措施。

设置debug模式的步骤如下:

1. 在项目导航中突出SIMOTION设备

2.在快捷菜单中选择测试模式

3。选择debug模式(252页)

4. 接受安全信息

5。 配置life—sign监视参数

6。确认OK

如果在目标系统(离线模式)没有建立通讯,自动建立在线模式

在状态栏显示激活的debug模式

显示断点工具栏(278页)

注意:不能在debug模式中更改程序源

注意:

按下空格键或转到一个不同的Windows应用将在debug模式中激活断点

●SIMOTION设备转到停止模式

●输出失效 (ODIS)

警告:在所有的运行模式不能保证此功能。因此,在硬件中必须有急停电路.用户必须采取适当措施.

4.2。6。3定义debug任务组

一旦达到一个激活的断点,停止指定给debug任务组别的所有任务。

要求:相关的SIMOTION设备处于debug模式

步骤如下:

如何给debug任务组指定任务:

1。 在项目导航中突出相关SIMOTION设备

2。 在快捷菜单中选择debug任务组

3。 在到达断点时选择要停止的任务

如果你仅想停止独自的任务(在运行模式):激活debug任务组选项

在到达断点时指定要停止的所有任务给停止任务列表

—如果你仅想停止独自的任务(在运HALT模式):激活所有任务选项

在这种情况下,选择在恢复程序执行后是否再次发布输出和技术目标

注意:当达到激活断点时不同的动作,见下表

属性 要停止的任务
单独选定的任务(debug任务组) 所有的任务
达到断点的动作
操作模式 RUN STOP
停止任务 仅在debug任务组的任务 所有任务
输出 ACTIVE DEACTIVATED(ODIS 激活)
技术 Closed—loop控制 不闭环控制(ODIS激活)
任务的运行时间测量 所有任务激活 所有任务不能用
任务的时间监视 在debug任务组中的任务无效 所有任务无效
实时时钟 继续运行 继续运行
重启程序执行时的动作
操作模式 RUN RUN
启动任务 所有在debug任务组的任务 所有任务
输出 ACTIVE 输出和技术目标的动作基于“继续”激活的输出(ODIS无效)检查框.

●激活:ODIS无效。发布所有的输出和技术目标

●失效:ODIS保持激活。仅在项目的另一次下载之后发布所有的输出和技术目标

技术 Closed—loop控制

注意:如果没有激活的断点,你可以对debug任务组做改动。

步骤如下:

1.设置断点(见276页断点设置)

2。定义调用路径(见279页定义一个单独断点的调用路径)

3.激活断点(见285页激活断点)

4。2。6。4debug任务组参数

使用窗口来定义debug任务组。一达到一个激活的断点,停止所有指定给debug任务组的任务.

这要求相关的SIMOTION设备处于debug模式,见252页SIMOTION设备的模式

FIELD 描述
Debug任务组 如果你仅想停止独自的任务,选择此选项.在达到激活的断点时,SIMOTION设备保持运行模式.输出和技术目标保持激活.

在达到断点时指定要停止的所有任务给任务停止列表。

所有的任务 如果你仅想停止所有用户任务,选择此选项.在达到激活的断点之后,SIMOTION设备保持停止模式。输出和技术目标失效(ODIS激活)。

在这种情况下,选择在恢复程序执行后是否再次发布输出和技术目标。

“重启”激活输出(ODIS无效) 只要选择所有任务

激活检查框,选择在恢复程序执行后再次发布输出和技术目标.

在下载带失效激活框程序之后此案呢过发布所有的输出和技术目标

注意:激活断点的不同动作基于停止的任务,见273页定义debug任务组的表格

如果没有激活的断点,可以对debug任务组做改动

4。2.6。5debug表格参数

debug表显示了在SIMOTION设备的程序源中所有的debug点

FIELD 描述
Debug点(表)
Active 显示断点的激活状态

点击检查框来更改激活状态

见285页激活断点

Source, line (POU) 代码位置以点集显示(程序源文件的名称、行数和POU名称)
Debug type 显示Debug点的类型(如:断点,追踪点)
Call path 点击按钮来定义断点的调用路径

见279页定义一个单独断点的调用路径

所有的断点
Activate 点击按钮来激活SIMOTION设备的所有断点(在所有程序源中)

见285页激活断点

Deactivate 点击按钮来失效SIMOTION设备的所有断点(在所有程序源中)

见285页激活断点

Delete 点击按钮来清除SIMOTION设备的所有断点(在所有程序源中)

见276页设置断点

4。2.6.6设置断点

要求:

1。打开带POU(如:ST源文件、MCC图表、LAD/FBD程序)的程序源

2。相关SIMOTION设备处于debug模式,见271页debug模式设置

3。定义debug任务组,见273页定义debug任务组

步骤如下:

如何设置一个端点:

1。选择没有设置断点的代码位置

—SIMOTION ST:把光标放在包含一个语句的ST源文件中的行

—SIMOTION MCC:在MCC图表中(除了注释块的模块)选择MCC命令

2.或者:

-选择 编辑〉设置断点菜单命令

在断点工具栏点击按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\18H$U%`SDPH3_JEN`4[XVF8.jpg

删除一个断点的操作步骤如下:

1。选择断点的代码位置

2.或者:

—选择 编辑〉设置断点菜单命令

在断点工具栏点击按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\18H$U%`SDPH3_JEN`4[XVF8.jpg

删除SIMOTION设备上所有断点的步骤如下:

-选择 DEBUG〉删除所有断点菜单命令

在断点工具栏点击按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\2_GH[GX4RZUCTS8]DS[KOT5.jpg

注意:

你不能设置断点:

●对于SIMOTION ST:包含ONLY语句的行中

●对于SIMOTION MCC:在模块或注释块命令中

●对于DIMOTION LAD/FBD:在一个网络中

●在其他debug点(如:trigger点)设置的代码位置

你可以在位于debug表格中列出SIMOTION设备的所有程序源

●在断点工具栏点击debug表格按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\A}3X[ELHI@PM3[)34RZUAGU.jpg

在debug表格中,你可以删除SIMMOTION设备所有断点(在程序源中)

●点击删除所有断点按钮

在离开debug模式之后设置依然保存的断点,只在debug模式时显示。

你可以在程序源文件或POU中一起使用程序状态(266页)诊断功能和断点。但是基于程序语言应用下列限制:

●SIMOTION ST:对于SIMOTION kernel V3.2版,一个断点不能包含要测试的带程序状态的(标记的)ST源文件行

●SIMOTION MCC和SIMOTION LAD/FBD:一个断点不能包含带程序状态的要测试的MCC表格(或LAD/FBD程序的网络)命令

步骤如下:

1.定义调用路径,见279页定义一个单独断点的调用路径

2。激活断点,见激活断点(285页)

4.2。6。7断点工具栏

这个工具栏包含设置和激活断点的重要操作动作

符号 意义
C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\18H$U%`SDPH3_JEN`4[XVF8.jpg 设置/删除断点

点击图标以设置选择代码位置的断点或者删除一个已存在的断点

见276页设置断点

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\BSR$R{NB1EZ(DT]LBT`%CN0.jpg 激活/失效断点

点击图标以激活或失效来设置选择代码位置的断点

见285页激活断点

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\A44I4(~~P01]2XY~@]A(4J2.jpg 编辑调用路径

点击图标来定义断点的调用路径:

●如果选择带断点的代码位置:此断点的调用路径

●如果选择不带断点的代码位置:POU所有断点的调用路径

见:279页定义一个单独断点的调用路径,282页所有断点的调用路径

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\SDUO8WMNQ9AY$4LJL1)NFLR.jpg 激活所有断点

点击图标来激活现行程序源或POU(ST源文件、MCC图表、LAD/FBD程序)中的所有断点

见285页激活断点

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\3__WTXN7MF0RL]F$0`(1M9Y.jpg 失效所有断点

点击图标来失效现行程序源或POU(ST源文件、MCC图表、LAD/FBD程序)中的所有断点

见285页激活断点

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\_LC{($~BCM3}CV@2`MH@PDV.jpg 删除所有断点

点击图标来删除现行程序源或POU(ST源文件、MCC图表、LAD/FBD程序)中的所有断点

见276页设置断点

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\B$(0YO$Z(II{UPCWB3G`YXF.jpg Debug表格

点击图标来显示debug表格

见276页debug表格参数

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\6IO%{BV}T5UE[BFMO_FK@4T.jpg 显示调用栈

在达到激活的断点之后点击图标来:

查看当前断点的调用路径

查看要停止的debug任务组中其他任务的代码位置和调用路径

见287页显示调用栈

C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\{CE08V[$Z5F5XK4N`5F)A%X.jpg 恢复

点击图标以达到激活断点之后继续程序执行

见285页激活断点和287页显示调用栈

4.2。6。8定义一个单独断点的调用路径

要求:

1.打开带POU的程序源(ST源文件、MCC图表、LAD/FBD程序)

2。相关的SIMOTION设备处于debug模式,见271页设置debug模式

3.定义了debug任务组,见273页定义debug任务组

4。设置断点,见276页设置断点

步骤如下:

1。选择已经设置断点的代码位置:

●SIMOTION ST:把光标放在ST源的合适的行中

●SIMOTION MCC:在MCC图表中选择合适的命令

●DIMOTION LAD/FBD:把光标放在LAD/FBD程序合适的网络中

2。点击断点工具栏中编辑调用路径按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\A44I4(~~P01]2XY~@]A(4J2.jpg

在路径调用/任务选择断点窗口,显示标记的代码位置(程序源文件的名称、行数和POU名称)

3。当达到选择断点时,在将要停止的用户程序(在debug任务组中的所有任务)中选择任务.

下列为可用:

—在这个调用级别开始的所有调用位置

当达到debug任务组的任意任务中激活断点时,总会开启用户程序

—可以达到的选择的断点中的独自的任务

当选择任务中的断点达到时,停止用户程序。任务必须在debug任务组中。

调用路径指定是可能的。

4.仅对功能和功能块:选择调用路径,如:要调用的代码位置(在调用的POU中):

下列为可用:

—在这个调用级别的所有调用位置

没有指定调用路径.如果调用选择任务中的POU,在激活断点停止用户程序

—选择一个单独的任务时:在选择的任务内调用代码位置(程序源文件的名称、行数和POU名称)

指定调用路径。仅当从选择的代码位置调用POU时,激活断点的用户程序停止。

如果选择调用代码位置的POU也是从其他代码位置被调用,显示更多的行

5。如果仅在代码位置达到指定时间后激活断点,选择次数

注意:在debug表格中你可以定义到独自断点的调用路径:

1。点击断点工具栏中的debug表格按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\JC1H`B8YB~(ZP@X6PEB5MTO.jpg ,打开debug表格窗口

2。在调用路径栏点击合适的按钮

3.如下所述进行步骤:

—指定任务

-定义调用路径(仅对功能和功能块)

—在断点激活后指定通过次数

如下所述进行:

激活断点,见285页激活断点

注意:

你可以使用287页“显示调用栈”功能来查看现行断点值的调用路径和debug任务组中其他停止任务的代码位置

4.2.6。9断点调用路径/任务选择参数

Field 描述
选择的CPU 显示选择的SIMOTION设备
调用任务 当达到断点时,选择要停止的用户程序(如:在debug任务组中的所有任务)所在的任务

下列是可用的:

●在此调用级别开始的所有调用位置

当达到debug任务组的任意任务中激活断点时,总会开启用户程序

●可以达到的选择的断点中的独自的任务

当选择任务中的断点达到时,停止用户程序。任务必须在debug任务组中。

调用路径指定是可能的。

现行代码位置 代码位置和设置断点(程序源文件的名称、行数和POU名称)一起显示
调用者 仅对功能和功能块:

见调用路径:如调用的代码位置(在调用的POU中)

下列为可用:

●在这个调用级别的所有调用位置

没有指定调用路径。如果达到任务中的POU,在激活断点停止用户程序

●选择一个单独的任务时:在选择的任务内调用代码位置(程序源文件的名称、行数和POU名称)。

如果选择调用代码位置的POU也是从其他代码位置被调用,显示更多的行

每次nth通过时激活断点 如果你不想激活断点,直到达到特定次数的代码位置,设置这个数字。

注意:

如果没有激活的断点,你只能更改debug任务组

4.2.6。10定义所有断点的调用路径

用这些步骤你可以:

●为所有POU中(如:MCC表格,LAD/FBD程序或ST源文件中的POU)将来的断点选择一个默认设置

●接受和比较在此POU中的先前设置的所有断点

要求:

1。打开带POU(如:ST源文件、MCC图表、LAD/FBD程序)的程序源

2.相关SIMOTION设备处于debug模式,见271页debug模式设置

3.定义debug任务组,见273页定义debug任务组

 

步骤如下:

定义POU中所有将来的断点的调用路径,步骤如下:

1.选择没有设置断点的代码位置:

●SIMOTION ST:把光标放在ST源的合适的行中

●SIMOTION MCC:在MCC图表中选择合适的命令

●DIMOTION LAD/FBD:把光标放在LAD/FBD程序合适的网络中

2.点击断点工具栏中编辑调用路径按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\A44I4(~~P01]2XY~@]A(4J2.jpg

在路径调用/每个POU任务选择所有断点窗口,显示标记的代码位置(程序源文件的名称、行数和POU名称)

3.当达到选择断点时,在将要停止的用户程序(在debug任务组中的所有任务)中选择任务.

下列为可用:

-在这个调用级别开始的所有调用位置

当达到debug任务组的任意任务中激活断点时,总会开启用户程序

—可以达到的选择的断点中的独自的任务

当选择任务中的断点达到时,停止用户程序。任务必须在debug任务组中。

调用路径指定是可能的。

4.仅对功能和功能块:选择调用路径,如:要调用的代码位置(在调用的POU中):

下列为可用:

—在这个调用级别的所有调用位置

没有指定调用路径.如果调用选择任务中的POU,在激活断点停止用户程序

—选择一个单独的任务时:在选择的任务内调用代码位置(程序源文件的名称、行数和POU名称)

指定调用路径。仅当从选择的代码位置调用POU时,激活断点的用户程序停止。

如果选择调用代码位置轮流被其他代码位置调用,显示更多的行

5。如果仅在代码位置达到指定时间后激活断点,选择次数

6.如果你想在POU中接受和比较所有先前设置的断点:

—点击接受

如下所述进行:

激活断点,见285页激活断点

注意:

你可以使用287页“显示调用栈”功能来查看现行断点值的调用路径和debug任务组中其他停止任务的代码位置

4.2.6。11每个POU所有断点的调用路径/任务选择参数

在此你可以预先定义一个POU中设置的所有将来断点的调用路径。你也可以接受此POU中所有先前设置断点的设置.

Field 描述
选择的CPU 显示选择的SIMOTION设备
调用任务 当达到POU中的断点时,选择要停止的用户程序(如:在debug任务组中的所有任务)所在的任务

下列是可用的:

●在此调用级别开始的所有调用位置

当达到debug任务组的任意任务POU中激活断点时,总会开启用户程序

●可以达到的选择的断点中的独自的任务

当选择任务中的断点达到时,停止用户程序。任务必须在debug任务组中。

调用路径指定是可能的.

现行POU 显示光标所在的POU(程序源文件的名称、行数和POU名称)
调用者 仅对功能和功能块:

见调用路径:如调用的代码位置(在调用的POU中)

下列为可用:

●在这个调用级别的所有调用位置

没有指定调用路径。如果在选择任务中调用POU,在激活断点停止用户程序

●选择一个单独的任务时:在选择的任务内调用代码位置(程序源文件的名称、行数和POU名称)。

指定调用路径.仅当从选择的代码位置调用POU时,激活断点的用户程序停止.

如果选择调用代码位置的POU也是从其他代码位置被调用,显示更多的行

每次nth通过时激活断点 如果你不想激活断点,直到达到特定次数的代码位置,设置这个数字。
应用此调用路径到此POU的所有之前断点 点击应用按钮,如果你想要应用此调用路径到此现行POU的所有之前断点。任意存在的设置将被重写

4。2.6。12激活断点

如果将对程序执行有影响,必须激活断点

要求:

1。打开带POU的程序源(ST源文件、MCC图表、LAD/FBD程序)

2.相关的SIMOTION设备处于debug模式,见271页设置debug模式

3。定义了debug任务组,见273页定义debug任务组

4.设置断点,见276页设置断点

5。定义调用路径,见279页定义一个单独断点的调用路径

如何激活一个单独的断点,步骤如下:

1。选择已经设置断点的代码位置:

●SIMOTION ST:把光标放在ST源的合适的行中

●SIMOTION MCC:在MCC图表中选择合适的命令

●DIMOTION LAD/FBD:把光标放在LAD/FBD程序合适的网络中

2。或:

—选择 debug〉激活/失效断点菜单命令

在断点工具栏点击按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\18H$U%`SDPH3_JEN`4[XVF8.jpg

激活SIMOTION设备的所有断点(在所有程序源中),步骤如下:

—选择 debug>激活/失效断点菜单命

在断点工具栏点击按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\SDUO8WMNQ9AY$4LJL1)NFLR.jpg

注意:

在debug表格中也可以激活/失效SIMOTION设备的所有程序源的断点

1。点击断点工具栏中的debug表格按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\JC1H`B8YB~(ZP@X6PEB5MTO.jpg ,打开debug表格窗口

2. 基于你想要激活/失效的断点执行下列动作

—单独的断点:检查或清除相对应的检查框

—所有断点(在所有程序源中):点击相对应的按钮

在激活断点的动作

在达到激活的断点时(使用选择的调用路径,见279页),停止所有指定给debug任务组的所有任务。动作基于debug任务组中的任务,并在273页的定义一个debug任务组中描述。断点部分被强调。

如果停止任务的断点位于一个程序或功能块中,在变量状态标签中显示此POU的静态变量。不显示临时变量(in/out参数也不显示)。你可以监视其他POU中的静态变量或在符号浏览器的单元变量(257页)。

你可以使用显示调用栈(287页)的功能来:

●查看现行断点的调用路径

●查看已经停止的debug任务组的其他任务所在的代码位置和调用路径

恢复程序执行

如何恢复程序执行:

点击断点工具栏中的按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\{CE08V[$Z5F5XK4N`5F)A%X.jpg 来恢复(ctrl+F8shortcut)

失效断点:

1.选择已经激活断点的代码位置:

2。

-选择 debug〉激活/失效断点菜单命令

在断点工具栏点击按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\18H$U%`SDPH3_JEN`4[XVF8.jpg

失效SIMOTION设备的所有断点(在所有程序源中),步骤如下:

-选择 debug〉失效断点菜单命

在断点工具栏点击按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\SDUO8WMNQ9AY$4LJL1)NFLR.jpg

4。2。6。13显示调用栈

你可以使用调用栈功能来:

●查看现行断点的调用路径

●查看已经停止的debug任务组的其他任务所在的代码位置和调用路径

要求:

在一个激活的断点停止用户程序,如:停止debug任务组中的任务

步骤如下:

调用显示调用栈的步骤如下:

在断点工具栏点击显示调用栈按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\6IO%{BV}T5UE[BFMO_FK@4T.jpg

打开断点调用栈对话框。显示现行调用路径(包括调用任务和设置通过次数)

调用路径不可更改

使用显示调用栈功能的步骤如下:

1。保持打开断点调用栈对话框

2。显示停止的其他任务和代码位置,步骤如下:

—选择合适的任务.debug任务组中的所有任务都可以选择

显示代码位置,包括调用路径。如果代码位置包含在用户程序中,打开带POU的程序源(ST源文件、MCC图表、LAD/FBD程序),标记代码位置。

3。如何恢复程序执行

在断点工具栏点击恢复(ctrl+F8shortcut)按钮 C:\Users\Administrator\AppData\Roaming\Tencent\Users\14831730\QQ\WinTemp\RichOle\{CE08V[$Z5F5XK4N`5F)A%X.jpg

当达到下一个激活的断点时,debug任务组的任务会再次停止。显示现行的调用路径,包括调用任务。

4.点击“OK”以关闭断点调用栈对话

关于SIMOTION RT程序源的名称,见263页程序运行中的表格

4.2.6。14断点调用栈参数

当达到一个激活的断点,在debug任务组中的每个任务都可以显示下列:

●在任务停止的程序代码(如:ST源文件的行)的位置

●此代码位置的调用路径

Field 描述
选择的CPU 显示选择的SIMOTION设备
调用任务 当达到断点时,选择要停止的用户程序(如:在debug任务组中的所有任务)所在的任务。

可以选择Debug任务组中的所有任务.

现行代码位置 显示停止选择的任务的程序代码的位置(程序源文件的名称,行数和POU名称)
调用者 递归显示在选择的任务内调用现行代码位置的代码位置(程序源文件的名称,行数和POU名称,功能块实例的名称,如适用)

关于SIMOTION RT程序源的名称,见263页程序运行中的表格。

4。2.7追溯

使用追溯工具,你可以记录和保存变量值超时的过程(z。B。单元变量、本地变量、系统变量、I/O变量)。这使得你可以记录下优化,如:轴线。

你可以设置记录时间,显示多达四通道,选择trigger条件,定时调整参数设置,在不同的曲线显示中选择,等。

除了isochronous记录外,你可以在代码位置选择记录.无论何时ST源文件中的特定点运行程序,这让你可以选择变量数值.

追溯工具的内容在在线帮助中有详细描述。

资源下载
下载价格30
点点赞赏,手留余香 给TA打赏

评论0

请先
支持多种货币
支持多种货币付款,满足您的付款需求
7天无忧退换
安心无忧购物,售后有保障
专业客服服务
百名资深客服7*24h在线服务
发货超时赔付
交易成功极速发货,专业水准保证时效性

站点公告

开放大学课程作业辅导,有需要扫码加微信

显示验证码

社交账号快速登录

微信扫一扫关注
扫码关注后会自动登录