跳到正文
Learn-LAD
示例库/SCL 入门:功能块调用

SCL 入门:功能块调用

LAD 主程序调用 SCL 定时功能块:switch 接通 7 秒后 TimeDownn 置位,同时输出 Timepassed;演示 SCL 与实例 DB。

入门 多块 S7-1200 SCL FB TON 混合编程

导入到我的 TIA 项目

通过 TiaLink 把本示例的 5 个对象导入你当前打开的 TIA Portal 项目。导入前会先预检,默认不覆盖同名对象,导入后不会自动保存。

TiaLink 设置

默认 http://localhost:8080。也可以在本页地址后加 ?tialink= 临时指定。

TiaLink 启动时若设置了 --api-token,这里要填相同的值;只保存在本机浏览器 localStorage,不会上传。

概述

这是一个最小的"LAD 调用 SCL"示例:Main(OB)里只有一个调用框,真正的逻辑在 SCL 功能块 SCLdemo 里——它用 TON 做一个 7 秒延时,时间到后置位 TimeDownn,并把已计时时间写到 Timepassed。

适合已经会写 LAD、想第一次尝试 SCL 功能块的人。

信号表

信号 类型 含义 作用
switch M(%M0.4) 启动条件 TON 的输入
TimeDownn M(%M0.7) 延时到位 7 秒后置位
Timepassed M(%MD12,Time) 已计时时间 TON 的 ET 输出
IEC_Timer_0_DB 实例 DB TON 的实例 计时器背景数据
SCLdemo_DB 实例 DB SCLdemo 的实例 FB 调用背景数据

点表里还有 EStop、AlarmReset、Val1~`Val4` 等大量标签,但本程序没有使用,应该是从更大的工程里带过来的。

工作流程

  1. Main 每个周期调用 SCLdemo;
  2. SCLdemo 内部执行 "IEC_Timer_0_DB".TON(...);
  3. switch=1 持续 7 秒后,Q 输出到 TimeDownn;
  4. ET(已计时时间)写到 Timepassed,可用于显示进度;
  5. switch=0 时 TON 复位,TimeDownn 归 0。

MainOB · 主程序

Network 1 — 调用 SCL 功能块(LAD)

Network 1

目的:在 LAD 主程序里调用一个 SCL 编写的 FB。

条件 → 动作:调用 SCLdemo,使用实例 DB SCLdemo_DB。

为什么:LAD 和 SCL 可以混用;调用框是两种语言之间的接口。

注意:Main 里没有其他逻辑,所以这个程序的行为完全取决于 SCLdemo 和点表里的 switch。

SCLdemoFB · 功能块(SCL)

Network 1 — 7 秒延时(SCL)

SCL
1"IEC_Timer_0_DB".TON(IN:="switch",2                     PT:=t#7s,3                     Q=>"TimeDownn",4                     ET=>"Timepassed");5

目的:用 SCL 实现一个延时接通计时。

条件 → 动作:switch=1 时 TON 开始计时,7 秒后 Q 置位;ET 持续输出已计时时间。

为什么:SCL 里调用定时器就是"实例名.功能块名(参数)"的形式;IN、PT、Q、ET 一目了然。

注意:"IEC_Timer_0_DB" 是定时器实例 DB 的名称;PT:=t#7s 是时间字面量(7 秒)。如果实例 DB 不存在,编译会报错。

常见问题

  • TimeDownn 不置位:确认 switch(%M0.4)是否为 1,且持续满 7 秒。
  • Timepassed 一直是 0:检查 ET 是否连接到 Timepassed;TON 未启动时 ET 为 0。
  • 点表里很多标签未使用:EStop、AlarmReset、Val1~`Val4` 等与本逻辑无关,可忽略。
  • 实例 DB 丢失:调用 FB 必须有背景 DB;确认 SCLdemo_DB 已导入。

变体与扩展

  • 改延时时间:修改 SCL 里的 PT:=t#7s。
  • 加复位:增加一个 Reset 输入,在 SCL 里复位 TimeDownn。
  • 扩展为多定时器:在同一个 FB 里声明多个定时器实例或多段逻辑,练习 SCL 的 IF/FOR。

变量与数据块

变量表:Default tag table

名称数据类型地址注释
EStopBool%M6.0
EStopAlarmBool%M0.1
EStopNotifyBool%M0.0
AlarmResetBool%M0.2
AlarmSilenceBool%M0.3
Val1Int%MW2
Val2Int%MW4
Val3Int%MW8
Val4Int%MW10
switchBool%M0.4
Switch2Bool%M0.5
ResetBool%M0.6
TimepassedTime%MD12
TimeDownnBool%M0.7
SCLdemo_DB 实例 DB(SCLdemo)
名称数据类型起始值注释
Input
Output
InOut
Static
系统实例 DB(1 个)

TIA 自动生成的定时器/计数器实例 DB,导入示例时会一并导入。

IEC_Timer_0_DB 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool

下一步