6.2.2 ST语言语法
6.2.2.1 ST语言
- ST语言运算符如下表格所示:
序号 | 运算符描述 | 符号 | 举例 | 优先顺序 |
---|---|---|---|---|
1 | 括号 | () | (A+B/C) | 1(Highest) |
2 | 调用带返回值的函数 | 函数名(参数表) | MAX(X,Y) | 2 |
3 | 解除引用 | ^ | R^ | 3 |
4 | 一元减 | - | -A | 4 |
5 | 一元加 | + | +A | 4 |
6 | 取反(求反码) | NOT | NOT C | 4 |
7 | 幂运算 | ** | A**B | 5 |
8 | 乘法 | * | A*B | 6 |
9 | 除法 | / | A/B | 6 |
10 | 模运算 | MOD | A MOD B | 6 |
11 | 加法 | + | A+B+C | 7 |
12 | 减法 | - | A-B-C | 7 |
13 | 比较大小 | < ≥ | A<B | 8 |
14 | 比较是否相等 | = | A=B | 8 |
15 | 比较是否不等 | <> | A<>B | 8 |
16 | "与"运算 | & AND | A&B A AND B | 9 |
17 | "异或"运算 | XOR | A XOR B | 10 |
18 | "或"运算 | OR | A OR B | 11 |
表达式
- 表达式:表达式将在程序运行期间运算,然后返回一个值。一个表达式由操作数(常数、变量、常量或函数调用)和与之搭配的运算符(如*、/、+或-)组成。通过运算符可以将表达式连接在一起或相互嵌套。
- 运算顺序为相关运算符的优先级、从左到右的顺序、括号
算术表达式
- 算术表达式既可以是一个数字值,也可以是由带有算术运算符的两个值或表达式组合而成。算术表达式可以处理当前CPU所支持的各种数据类型。
算术表达式支持的数据类型如下表格所示:
运算 | 运算符 | 第一个操作数 | 第二个操作数 | 结果 |
---|---|---|---|---|
幂运算 | ** | 浮点数/整型 //底数 | 整数/浮点数 //指数 | 浮点数 |
一元加或一元减 | +或- | 整数/浮点数 TIME/LTIME | - | 整数/浮点数 TIME/LTIME |
乘法 | * | 整数/浮点数 TIME/LTIME | 整数/浮点数 整数 | 整数/浮点数 TIME/LTIME |
除法 | / | 整数/浮点数 TIME/LTIME | 整数/浮点数(不等于0) 整数 | 整数/浮点数 TIME/LTIME |
模运算 | MOD | 整数 | 整数 | 整数 |
加法或减法 | +或- | 整数/浮点数 TIME LTIME TOD DATE DT LTOD LDATE LDT | 整数/浮点数 TIME,DINT(INT,UINT,SINT,USINT) LTIME(TIME),LINT(DINT,UDINT,INT,UINT,SINT,USINT) TIME,DINT(INT,UINT,SINT,USINT) DINT(INT,UINT,SINT,USINT) DINT(INT,UINT,SINT,USINT) LTIME,LINT(DINT,UDINT,INT,UINT,SINT,USINT) LINT(DINT,UDINT,INT,UINT,SINT,USINT) LTIME,LINT(DINT,UDINT,INT,UINT,SINT,USINT) | 整数/浮点数 TIME LTIME TOD DATE DT LTOD LDATE LDT |
减法 | - | TOD DATE DT LTOD LDATE LDT | TOD DATE DT LTOD LDATE,DATE LDT | TIME DINT DINT LTIME LINT LTINE |
关系表达式
- 关系表达式将两个操作数的值或数据类型进行比较,然后得到一个布尔值。如果比较结果为真,则结果为TRUE否则为FALSE
- 关系表达式支持的数据类型如下表格所示:
运算 | 运算符 | 第一个操作数 | 第二个操作数 | 结果 |
---|---|---|---|---|
比较: 等于、不等于 | =、<> | 整数/浮点数 位串 字符串 TIME、LTIME 日期和时间 | 整数/浮点数 位串 字符串 TIME、LTIME 日期和时间 | BOOL |
比较: 小于、小于等于、大于、大于等于 | <、≤、>、≥ | 整数/浮点数 位串 字符串 TIME、LTIME 日期和时间 | 整数/浮点数 位串 字符串 TIME、LTIME 日期和时间 | BOOL |
- 比较浮点数时,对于 无效运算的运算结果(如,-1的平方根),这些无效浮点数(NaN)的特定数据模式不可比较。
- STRING比较是对UTF-8编码的字符进行比较;而WSTRING比较则是对UTF-16编码的字符进行比较。在比较过程中,将比较变量的长度及各字符对应的数值。
- 只能对两个相同数据类型的时间数据,进行比较,系统无法比较无效日期和时间数据模式。
- 如果两个变量的结构数据类型相同,则可以比较这两个结构化操作数的值。(T3支持此运算)
- 要比较两个ARRAY数据类型的变量,运算符只能是“=”或“< >”。且需满足以下要求:(T3支持此运算)
- 元素的数据类型必须相同;
- 两个ARRAY的维数必须相同;
- 所有维数的元素数量必须相同,而具体的ARRAY限值(起始下标)无需相同
- 支持STRUCT数组,但是不支持FB类型数组
- 2个位串大小比较,比较的是位串对应正整数值大小的比较。位串数据类型可以和正整数进行比较。但不允许和负数进行比较。
逻辑表达式
- 逻辑表达式由两个操作数和逻辑运算符(AND、OR、XOR)或取反操作数(NOT)组成。
注意
- 如果两个操作数都是BOOL数据类型,则逻辑表达式的结果也为BOOL数据类型
- 如果两个操作数中至少有一个是位串,则结果为位串而且结果是由最高操作数的类型决定。
- 逻辑表达式支持的数据类型如下表格所示:
运算 | 运算符 | 第一个操作数 | 第二个操作数 | 结果 |
---|---|---|---|---|
取反(求反码) | NOT | BOOL 位串 | - - | BOOL 位串 |
“与”运算 | AND或& | BOOL 位串 | BOOL 位串 | BOOL 位串 |
“或”运算 | OR | BOOL 位串 | BOOL 位串 | BOOL 位串 |
“异或”运算 | XOR | BOOL 位串 | BOOL 位串 | BOOL 位串 |
无类型常数的数据类型
- 无类型常数跟随表达式数据类型隐性转化。常数是整数时,可以跟随整型变量或浮点数变量(或带类型常数) 进行隐形转换。运算结果为“强类型”(确定型类型)
6.2.2.2 ST编程
- 编程窗口
- 编程窗口组成部分:
部分 | 含义 |
---|---|
侧栏 | 在侧栏中 可以设置书签和断点 |
行号 | 行号显示在程序代码的左侧 |
轮廓视图 | 轮廓视图中将突出显示相应的代码部分 |
代码区 | 在代码区域,可对ST程序进行编辑 |
绝对操作数的显示 | 在此表格中列出了赋值给绝对地址的符号操作数 |