跳到正文
Learn-SCL
SCL 示例库/SCL 指令手册/SCL MUX — 多路选择

SCL MUX — 多路选择

按 K 选择其中一个输入。

字逻辑 S7-1200/1500 TIA V19 别名:多路选择 / MUX

在 TIA 里试一下

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

TiaLink 设置

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

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

一句话

答案:#Result := MUX(K := #K, IN0 := ..., IN1 := ..., INELSE := ...) 按 K 选择输入;K 越界时返回 INELSE。

MUX 按 K 选择输入:#Result := MUX(K := #K, IN0 := #A, IN1 := #B, INELSE := #DefaultValue);。K=0 选 IN0,K=1 选 IN1;越界时返回 INELSE。

参数

参数方向类型存储区说明
K输入整数I, Q, M, D, L, P选择哪个输入:K=0 选 IN0,K=1 选 IN1,依此类推。
IN0...INn输入整数 / 浮点 / 位串 / 字符串 / 时间I, Q, M, D, L, P候选输入;编号从 0 开始。
INELSE输入与 IN0 相同类型I, Q, M, D, L, PK 超出已有输入编号时使用的默认值;不写时越界结果无效。
Return返回值与输入相同的类型—选中的输入值,或 INELSE。

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

最小示例

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

FB_Mux_Demo FB

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

查看 FB_Mux_Demo 的块接口
区块名称类型说明
输入KInt
输入AInt
输入BInt
输入CInt
输入DefaultValueInt
输出ResultInt
blocks/FB_Mux_Demo.scl
1FUNCTION_BLOCK "FB_Mux_Demo"
2{ S7_Optimized_Access := 'TRUE' }
3VERSION : 0.1
4   VAR_INPUT
5      K : Int := 1;             // 选择编号
6      A : Int := 10;
7      B : Int := 20;
8      C : Int := 30;
9      DefaultValue : Int := -1; // 越界默认值
10   END_VAR
11 
12   VAR_OUTPUT
13      Result : Int;             // 选中的值
14   END_VAR
15 
16BEGIN
17   REGION 多路选择
18      #Result := MUX(K := #K, IN0 := #A, IN1 := #B, IN2 := #C, INELSE := #DefaultValue);
19   END_REGION
20END_FUNCTION_BLOCK
21 

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

SCL 写法

SCL
1#Result := MUX(K := #K, IN0 := #A, IN1 := #B, IN2 := #C, INELSE := #DefaultValue);

两个输入时可以省略 IN2;越界处理建议始终写 INELSE。

怎么工作

K 结果
0 IN0
1 IN1
2 IN2
超出已有输入 INELSE
无 INELSE 且越界 无效值/诊断
  • K 从 0 开始,和数组下标一致。
  • 所有输入和 INELSE 类型要兼容;返回类型跟随输入。
  • 支持整数、浮点、位串、字符串、时间等;字符串/时间要同类型。
  • MUX 是选择器,不修改输入;DEMUX 是反向分配。

常用场景

1. 配方/工位参数选择

K 是配方号或工位号,IN0..INn 是对应参数;越界用 INELSE 给默认值。

2. 多传感器选择

诊断时选择某一路传感器值显示;K 来自 HMI 或步号。

3. 状态机输出

不同状态选不同设定值;比 CASE 更紧凑,但状态多时 CASE 更清晰。

常见坑

  • K 从 1 开始:K=0 是 IN0;按 1-based 编号会选错。
  • 越界不写 INELSE:结果无效/报诊断;一定要有默认值。
  • 输入类型不一致:Int/Real/String 混用会编译报错;先统一。
  • 输入太多:MUX 支持有限数量;超过时用数组 + 下标或 CASE。
  • 把 MUX 当 DEMUX:MUX 多选一,DEMUX 一选多。
  • 字符串长度:字符串选择要注意目标容量;结果可能被截断。

和 LAD 的区别

LAD 的 MUX 盒有 K、多个输入和 INELSE;SCL 里直接写函数调用,参数个数由调用决定。语义一样,SCL 更容易把选择逻辑写成一行。梯形图版本见 Learn-LAD 的 Mux 页。

云仿真验证

PLC 云仿真:PASS(4 次扫描)。场景:选 0、1、2 和越界。结果来自 PLC 云仿真 的 scl_run_scenario。

查看云仿真回归输出
云仿真回归输出
PASS  选 0、1、2 和越界 (4 step(s), 4 scan(s))
RESULT: ALL PASS (4 scan(s))

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

验证状态

项目结果日期证据
构建期语法/结构校验PASS2026-11-02parse + validate
PLC 云仿真PASS(4 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/MUX__Multiplex.md。中文讲解、SCL 示例、时序图和验证场景由 Learn-SCL 编写。

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

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

常见问题

MUX 的 K 从 0 还是 1 开始?

从 0 开始:K=0 选 IN0,K=1 选 IN1。

K 超出范围会怎样?

有 INELSE 就返回 INELSE;没有 INELSE 时结果无效/报诊断。

MUX 能选字符串/时间吗?

可以,但所有输入和 INELSE 的类型要兼容;返回类型跟随输入。

← 返回 SCL 指令手册