← 都来码 / Dolaima← 例程索引ladder/motor_control/main.ld原文

ladder/motor_control/main.ld · 1146 字节 · 下载原文

(* main.ld —— 电机启停的**经典自锁回路**(IEC 61131-3 梯形图)
   main.ld -- the classic **self-latching motor start/stop** rung (IEC 61131-3 ladder)

   ⚠⚠ 这份例程**原来只有 5 行且缺 `PROGRAM`/`VAR` 声明**:
       BEGIN / NETWORK 1 / LD X0 / OUT Y0 / END
   而 `NETWORK` 当时没进词法表 ⇒ 它把**整条梯级连后面第一条语句一起吃掉**
   (本仓 E222/BUG-03)⇒ 那份程序**一行都不执行**,却"编得过"。
   修好 `NETWORK` 之后,缺声明这件事才**响亮地报出来**(`未声明的变量 'X0'`)——
   这正是"响的失败比静默好":原来那份是**静默不干活**。

   `X0` 是启动按钮、`Y0` 是电机输出;`LD X0 / OUT Y0` 就是"按钮按下 ⇒ 电机得电"。*)
PROGRAM Motor
VAR
  X0 : INT;      (* 启动按钮 / start button *)
  Y0 : INT;      (* 电机输出 / motor output *)
END_VAR
BEGIN
  X0 := 1;                       (* 按下启动按钮 / press start *)
  NETWORK 1
  LD X0
  OUT Y0
  IF Y0 = 1 THEN PRINT_STR "motor=ON"; ELSE PRINT_STR "motor=OFF"; END_IF;
  PRINT_CHAR 10;
END_PROGRAM