跳到正文
Learn-SCL
SCL 示例库/SCL 指令手册/SCL DEMUX — 多路分配

SCL DEMUX — 多路分配

把输入送到 K 指定的输出。

字逻辑 S7-1200/1500 TIA V19 别名:多路分配 / DEMUX

在 TIA 里试一下

通过 TiaLink 把本页示例(FB_Demux_Demo)作为“外部源”导入你当前打开的 TIA Portal 项目:预检、生成块、编译,并清理外部源。导入后不会自动保存;FB 导入后需要在 OB 里调用。

TiaLink 设置

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

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

一句话

答案:DEMUX(K := #K, IN := #Value, OUT0 => ..., OUTELSE => ...) 把 IN 写到 K 选中的输出;其他输出保持原值。

DEMUX 把输入写到 K 选中的输出:DEMUX(K := #K, IN := #Value, OUT0 => #Out0, OUTELSE => #DefaultOut);。只有选中的输出被写入,其他输出保持原值。

参数

参数方向类型存储区说明
K输入整数I, Q, M, D, L, P选择哪个输出:K=0 写 OUT0,K=1 写 OUT1,依此类推。
IN输入整数 / 浮点 / 位串 / 字符串 / 时间I, Q, M, D, L, P要分配的值。
OUT0...OUTn输出与 IN 相同类型I, Q, M, D, L, P候选输出;只有 K 选中的那个被写入,其他保持原值。
OUTELSE输出与 IN 相同类型I, Q, M, D, L, PK 超出已有输出编号时的默认输出;不写时越界结果无效。

参数表以 TIA Portal V19 帮助为事实核对;S7-1200/1500 有差异时在类型列并列显示。存储区是 TIA 允许的范围,实际可用范围还受块接口和优化属性影响。

最小示例

下面是一个完整块,页面展示的源码就是 TiaLink 导入的同一份源码。页面的场景已在 PLC 云仿真里跑过,输出见“云仿真验证”。

FB_Demux_Demo FB

最小示例 · 21 行 · 源文件 blocks/FB_Demux_Demo.scl

查看 FB_Demux_Demo 的块接口
区块名称类型说明
输入KInt
输入ValueInt
输出Out0Int
输出Out1Int
输出Out2Int
输出DefaultOutInt
blocks/FB_Demux_Demo.scl
1FUNCTION_BLOCK "FB_Demux_Demo"
2{ S7_Optimized_Access := 'TRUE' }
3VERSION : 0.1
4   VAR_INPUT
5      K : Int := 0;             // 选择输出
6      Value : Int := 7;         // 要分配的值
7   END_VAR
8 
9   VAR_OUTPUT
10      Out0 : Int;
11      Out1 : Int;
12      Out2 : Int;
13      DefaultOut : Int;         // 越界默认输出
14   END_VAR
15 
16BEGIN
17   REGION 多路分配
18      DEMUX(K := #K, IN := #Value, OUT0 => #Out0, OUT1 => #Out1, OUT2 => #Out2, OUTELSE => #DefaultOut);
19   END_REGION
20END_FUNCTION_BLOCK
21 

块接口表由源码自动生成;# 前缀表示块内局部变量,实际工程里也可以是全局标签或 DB 变量。

SCL 写法

SCL
1DEMUX(K := #K, IN := #Value, OUT0 => #Out0, OUT1 => #Out1, OUT2 => #Out2, OUTELSE => #DefaultOut);

DEMUX 是语句,不是带返回值的函数;输出用 => 接。

怎么工作

K 写入
0 OUT0
1 OUT1
2 OUT2
超出已有输出 OUTELSE
无 OUTELSE 且越界 无效/诊断
  • K 从 0 开始。
  • 没选中的输出保持原值,不会自动清零;需要清零就自己复位。
  • 所有输出和 IN 类型要兼容。
  • 和 MUX 相反:MUX 多选一,DEMUX 一选多。

常用场景

1. 按工位分发参数

把设定值分发给选中的工位/通道;其他工位保持原值,不会误清零。

2. 报警/消息分发

按类别把消息写到对应缓冲区;K 选择目标。

3. 测试通道

测试时只把测试值写到一个输出,其他输出不受影响。

常见坑

  • K 从 1 开始:K=0 是 OUT0;按 1-based 编号会写错。
  • 以为其他输出会清零:不会;只写选中的输出。
  • 越界不写 OUTELSE:结果无效/报诊断;给默认输出更安全。
  • 输出类型不一致:所有 OUT 和 IN 要兼容;字符串注意容量。
  • 把 DEMUX 当 MUX:DEMUX 一选多,MUX 多选一。
  • 忘记初始化输出:第一次扫描前输出可能是旧值;上电初始化。

和 LAD 的区别

LAD 的 DEMUX 盒有 K、IN、多个输出和 OUTELSE;SCL 里直接写语句,输出用 => 接。语义一样,SCL 更容易把分发逻辑写成一行。梯形图版本见 Learn-LAD 的 Demux 页。

云仿真验证

PLC 云仿真:PASS(3 次扫描)。场景:K=0 写 OUT0;K=2 写 OUT2;K 越界写 OUTELSE。结果来自 PLC 云仿真 的 scl_run_scenario。

查看云仿真回归输出
云仿真回归输出
PASS  K=0 写 OUT0 (1 step(s), 1 scan(s))
PASS  K=2 写 OUT2 (1 step(s), 1 scan(s))
PASS  K 越界写 OUTELSE (1 step(s), 1 scan(s))
RESULT: ALL PASS (3 scan(s))

云仿真验证语法、结构和逐扫描行为,不等同于 TIA 编译;TIA 状态见下方“验证状态”。

验证状态

项目结果日期证据
构建期语法/结构校验PASS2026-11-02parse + validate
PLC 云仿真PASS(3 scans)2026-11-02scl_run_scenario / scl_validate
TIA 导入编译PASS(0 error / 0 warning)2026-11-02TiaLink + TIA Portal

“待实测”表示还没有在 TIA Portal 里导入编译,不代表代码有问题;上机前请先在测试项目编译。云仿真在 tia.hubwiz.com/sim 执行,不替代 TIA 编译。

来源与说明

参数、行为和数据类型的核对来源:TIA Portal V19 帮助的 Instructions/Instructions/Basic_instructions/SCL/Word_logic_operations/DEMUX__Demultiplex.md。中文讲解、SCL 示例、时序图和验证场景由 Learn-SCL 编写。

K/IN/OUT0..OUTn/OUTELSE 参数和越界规则以 TIA Portal V19 帮助为事实核对;中文讲解、SCL 示例和验证场景由 Learn-SCL 编写。

Siemens 文档与截图的版权归 Siemens;本站只引用事实参数,不复制官方描述段落和图片。官方参考:Siemens TIA Portal。

常见问题

DEMUX 的 K 从 0 还是 1 开始?

从 0 开始:K=0 写 OUT0,K=1 写 OUT1。

没选中的输出会清零吗?

不会。DEMUX 只写选中的输出,其他输出保持原值;需要清零就自己复位。

K 越界会怎样?

有 OUTELSE 就写 OUTELSE;没有时结果无效/报诊断,其他输出不变。

← 返回 SCL 指令手册