三菱 PLC ST 语言说明

一、语法介绍

(一)变量定义

  1. 基本数据类型
    • 布尔型(BOOL):只有两个值,TRUE(1)和 FALSE(0),常用于表示开关量状态,如按钮的按下与松开。
    • 整型(INT):用于表示整数,范围根据 PLC 型号不同有所差异,例如 -32768 到 32767。
    • 实数型(REAL):用于表示浮点数,可精确到一定小数位,如 3.14
  2. 变量声明语法
    VAR
        VariableName : DataType := InitialValue;
    END_VAR
    • VariableName 为变量名,需遵循命名规则(一般以字母开头,由字母、数字和下划线组成)。
    • DataType 是数据类型,如 BOOLINT 等。
    • InitialValue 是变量的初始值,可省略。例如:
      VAR
      StartButton : BOOL := FALSE;
      Counter : INT := 0;
      Temperature : REAL;
      END_VAR

(二)运算符

  1. 算术运算符
    • +(加)、-(减)、*(乘)、/(除)。例如:
      VAR
      a : INT := 5;
      b : INT := 3;
      result : INT;
      BEGIN
      result := a + b; // result 的值为 8
      END
  2. 逻辑运算符
    • AND(与)、OR(或)、NOT(非)。用于布尔值的逻辑运算,常用于条件判断。例如:
      VAR
      condition1 : BOOL := TRUE;
      condition2 : BOOL := FALSE;
      result : BOOL;
      BEGIN
      result := condition1 AND NOT condition2; // result 的值为 TRUE
      END
  3. 比较运算符
    • =(等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、<>(不等于)。用于比较两个值的关系,结果为布尔值。例如:
      VAR
      num1 : INT := 10;
      num2 : INT := 5;
      result : BOOL;
      BEGIN
      result := num1 > num2; // result 的值为 TRUE
      END

(三)控制结构

  1. IF - THEN - ELSE 语句:用于条件判断执行不同的代码块。
    VAR
        temperature : REAL := 25.0;
    BEGIN
        IF temperature > 30.0 THEN
            // 当温度大于 30 时执行的代码
            // 例如启动冷却风扇
            CoolingFan := TRUE;
        ELSE
            // 当温度小于等于 30 时执行的代码
            CoolingFan := FALSE;
        END_IF;
    END
  2. CASE 语句:根据表达式的值选择执行不同的分支。
    VAR
        operationMode : INT := 2;
    BEGIN
        CASE operationMode OF
            1: // 模式 1 执行的代码
                // 例如设置设备为低速运行
                Speed := 100;
            2: // 模式 2 执行的代码
                // 设置设备为中速运行
                Speed := 200;
            3: // 模式 3 执行的代码
                // 设置设备为高速运行
                Speed := 300;
            ELSE
                // 其他情况执行的代码
                Speed := 0;
        END_CASE;
    END
  3. FOR 循环:用于重复执行一段代码指定的次数。
    VAR
        i : INT;
        sum : INT := 0;
    BEGIN
        FOR i := 1 TO 10 DO
            sum := sum + i;
        END_FOR;
        // sum 的值为 55
    END

二、常用案例

(一)电机起保停控制

// 定义变量区域
VAR
    // 启动按钮输入,连接到 PLC 的某个输入点,假设为 X0
    StartButton : BOOL := FALSE;
    // 停止按钮输入,连接到 PLC 的某个输入点,假设为 X1
    StopButton : BOOL := FALSE;
    // 过载保护输入,连接到 PLC 的某个输入点,假设为 X2
    Overload : BOOL := FALSE;
    // 电机输出,连接到 PLC 的某个输出点,假设为 Y0
    MotorOutput : BOOL := FALSE;
END_VAR

// 主程序部分
PROGRAM MAIN
    // 启动逻辑
    IF StartButton AND NOT StopButton AND NOT Overload THEN
        // 如果启动按钮按下,停止按钮未按下且无过载,启动电机
        MotorOutput := TRUE;
    END_IF;

    // 停止逻辑
    IF StopButton OR Overload THEN
        // 如果停止按钮按下或者出现过载,停止电机
        MotorOutput := FALSE;
    END_IF;
END_PROGRAM

(二)计数器案例

// 定义变量区域
VAR
    // 计数脉冲输入,假设连接到 X3
    CountPulse : BOOL := FALSE;
    // 复位按钮输入,假设连接到 X4
    ResetButton : BOOL := FALSE;
    // 计数值
    CounterValue : INT := 0;
END_VAR

// 主程序部分
PROGRAM MAIN
    IF ResetButton THEN
        // 复位计数器
        CounterValue := 0;
    ELSIF CountPulse THEN
        // 上升沿检测,每来一个脉冲计数加 1
        CounterValue := CounterValue + 1;
    END_IF;
END_PROGRAM

三、注意事项

(一)变量作用域

  1. 在功能块(FB)或函数(FC)内定义的变量,作用域仅限于该功能块或函数内部。
  2. 在程序(PROGRAM)中定义的变量,作用域为整个程序。避免不同程序或功能块中变量名冲突。

(二)数据类型匹配

  1. 进行运算或赋值操作时,确保参与运算的变量数据类型匹配。例如,不能将布尔型变量赋值给整型变量,除非进行适当的类型转换。
  2. 不同 PLC 型号对数据类型的支持和范围可能略有不同,编写程序前需了解目标 PLC 的具体规格。

(三)内存管理

  1. PLC 的内存资源有限,避免定义过多不必要的变量,尤其是大型数组或结构体变量,以免耗尽内存。
  2. 注意及时释放不再使用的内存,例如在使用动态内存分配函数(如果支持)后,要进行相应的释放操作。

(四)程序调试

  1. 使用 PLC 编程软件提供的调试工具,如监视变量值、设置断点等,逐步排查程序中的逻辑错误。
  2. 在程序中添加适当的注释,方便理解和调试,尤其是复杂的逻辑部分。