ST语言语法

PLC上用的最多的一个是梯形图,它使用起来直观方便,入门容易,非开发人员也可以很快入手,但是处理复杂的逻辑太麻烦;另外一种就是 ST(structed text, 结构化文本)语言,它写起来跟高级语言类似,学过高级语言的开发人员可以很快入手。这两种语言都是IEC 61131-3 中定义的,这个标准中还定义了其他三种语言:顺序功能图、功能块图、指令表。这里主要对ST语言的基本语法进行一些总结,主要基于codesys类的环境测试。

变量类型

基本类型

类型 关键字 位数
BIT 1
布尔型 BOOL 1
字节型 BYTE 8
字型 WORD 16
双字型 DWORD 32
长字型 LWORD 64
短整型 SINT 8
无符号短整型 USINT 8
整型 INT 16
无符号整型 UINT 16
双整型 DINT 32
无符号双整型 UDINT 32
长整型 LINT 64
实数 REAL 32
长实数 LREAL 64
字符串类型 STRING 8的倍数,不超过256乘8,默认81乘8
时间戳 TIME 32
时间 TIME_OF_DAY 32
日期 DATE 32
日期时间 DATE_AND_TIME 32

NOTE: 整形、字节型、字型都可以通过.号引出具体bit的值,e.g. i: INT;,那么 i 的第三位可以使用 i.3 引出,它的类型为BIT,可以转化为 BOOL 型。

复合类型

  • 数组
    • 关键字:ARRAY
    • 定义格式:ARRAY[开始索引…结束索引] OF 元素类型;其中包含开始和结束索引值
    • e.g. aiStatus: ARRAY[1..100] OF INT;
  • 结构体
    • 关键字:STRUCT
    • 定义格式:
      	TYPE 类型名称:
      	STRUCT
      		变量名称:变量类型;
      		...
      	END_STRUCT
      	END_TYPE
      
  • 联合体
    • 关键字:UNION
    • 定义格式:
      	TYPE 类型名称:
      	UNION
      		变量名称:变量类型;
      		...
      	END_UNION
      	END_TYPE
      
  • 枚举
    • 关键字:()
    • 定义格式:
      	TYPE 类型名称:
      		(变量名称;
      		...)  基本类型
      	END_TYPE
      

变量定义

  • 变量名称: 变量类型;
    e.g. bEnable: BOOL;

控制语句

  • 条件语句
    • 关键字:IF, ELSIF, ELSE
    • 格式:
      IF 条件表达式 THEN
      	...
      ELSIF 条件表达式 THEN
      	...
      ELSE
      	...
      END_IF
      
  • 循环语句
    • 关键字:FOR TO DO END_FOR, WHILE END_WHILE, REPEAT UNTIL END_REPEAT
    • 格式:
      	FOR 变量:=初始值 TO 目标值 DO
      		...
      	END_FOR
      
      	WHILE 条件表达式 DO
      		;
      	END_WHILE
      	
      	REPEAT 
      		...
      	UNTIL 条件表达式
      	END_REPEAT
      
  • CASE语句
    • 关键字:CASE OF
    • 格式:
      CASE 变量名称 OF
      变量值1:
      	...
      变量值2:
      	...
      ...
      ELSE
      	...
      END_CASE
      
  • 跳转语句
    • EXIT
      跳出当前循环,相当于C的 break
    • CONTINUE
      跳出循环的当次执行,与C的continue类似
    • RETURN
      返回,后面程序不再执行,与C的return有一定区别,ST的函数返回值不用RETURN返回,直接函数名接受值
    • JMP
      跳转到指定标签位置,相当与C的goto

POU

POU(Programming Organisation Unit) 是IEC 61131-3 标准中最重要的基本编程单元,它包含如下三种类型

  • 功能块
    功能块实现了数据和操作的封装,类似与C++中的类,但调用起来又有很多不同之处,功能块中定义的变量如果没有特别声明为TEMP临时变量,那么都为静态变量
  • 函数
    函数对操作进行了封装,与C++中的函数概念类似,函数中定义的变量如果没有特别声明为STAT静态变量,那么都是临时变量
  • 程序
    程序就是一段顺序执行的代码,当然里面可以调用其他程序,使用函数、功能块

你可能感兴趣的:(ST,工控)