news 2026/9/1 5:08:47

西门子Variant变量介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
西门子Variant变量介绍

为什么要使用Variant?

如果我们在编写FB或者FC块时,使用了输入参数或者输出参数,那么我们必须先给这个参数定义一个数据类型,例如int, real,string等。

而我们要调用这个FC块或者FB块的时候,也必须给对应的形参提供正确数据类型的实参。

但如果有些块的功能,它们逻辑完全一样,只有输入的数据类型不同呢?那我们是不是应该每种数据类型都编写一个块呢?有没有方法可以实现,就算输入不同的数据类型,也能得到对应的结果呢?答案就是我们今天要讲的这个variant数据类型。

简单来说,如果你不确定输入是一个什么类型的数据,你可以先把它定义成variant,然后当你输入实参时,再去判断你输入的数据类型,然后根据不同的数据类型进行不同的操作,最后得出结果。

如何使用Variant?

说得可能比较抽象,那么我们直接举个例子来说明这个variant的用法吧。

假设我要创建一个FB块,它实现一个累加的功能,它的输入是一个数组,这个数组的长度不确定,数组里面元素的数据类型也不确定,要求我们把数组里面的所有项相加起来,得出一个总和。

为了简化这个模型,我们假设输入只有两种数据类型,分别是int和real。

整体思路大概如下。

下面是具体的实现方法。

首先我们先创建一个FB块,选择SCL语言编写。先定义一下输入输出引脚。这里要注意的是,variant只能作为输入或者输入输出,而不能作为输出。

这里我们需要两个输入,分别是arrayInput和start。其中前一个参数是用来接收一个数组对象。而start参数则用来控制求和开始。

如果发生报警,error为true。

sum则是我们的求和结果。

然后其他变量定义如下,具体有什么作用?后面我们使用时会介绍。

开始我们要判断输入对象是不是一个数组?这里我们要用到IS_ARRAY()这个函数,如果是数组的话,返回true,否则返回false。

首先,不是数组的话,我们直接把error置true。

反之,如果结果是数组,接着我们要计算数组的长度。这里用CountOfelements()这个函数。

接着,我们就要判断这个数组它的元素类型。TypeOfElement()就可以实现这个功能。它会返回一个数据类型,然后我们把这个返回值跟int,还有real做对比。

假设它返回的是一个int数组,那么我们就把这个输入的数组赋值给一个int数组。

同理,如果返回的是real数组,那么我就把arrayList赋值给real数组。int数值和real数组,它的求和就比较简单了。这里就忽略不讲了。最后我们求出来的那个和,它是一个int类型,但这样子是不满足需求的。因为假设我们输入的是一个real数组,那么我们不可能输出一个int值的和。

所以我们要把这个int值再转化成variant类型。real写法也是同样道理。那样我们的这个FB块就完成了,下面是具体的写法。

写完之后,我们再创建一个DB块。在里面添加两个数组,分别是int类型和real类型。还有两个和。然后把两个数组按照以下的初始值来给它设定。

最后我们在主程序里面调用两次FB块,并在FB块填入data数据块里面的值。然后使用一个M10.0作为触发按钮。

然后把程序下载到plc里面,点击自动运行,切换到在线监控。然后我们手动把那个M10.0切换成true。可以看到两个fb实例的那个和的值已经出来了。一个是15,另一个是16.5。一个是整形,一个是浮点数。说明这个fb块基本实现它的功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 5:08:41

mpx原型工具实战:PX与PT换算及悬浮窗尺寸最佳实践

先说一个很多原型设计师都会遇到的场景:评审会上,产品经理指着屏幕说“这个悬浮窗再往右边挪一点,再大一点”,你当场把宽度从 320 改到 360,看起来一切都好。等开发还原完,真机一跑,悬浮窗把文章…

作者头像 李华
网站建设 2026/9/1 5:08:13

京东秋招技术通用岗笔试全攻略:题型解析与备考策略

秋招这个节点,投完简历最怕的就是突然收到笔试通知,尤其是京东这种大厂的技术通用岗位,发笔试和筛简历一样都是批量操作,不给你太长的准备期。我自己走完2023年秋招第五批笔试之后最大的感受是:这场笔试并不靠某一道偏…

作者头像 李华
网站建设 2026/9/1 5:05:47

从仿真到硬件:拆解Unitree机器人技术栈与开发实践

如果你最近关注机器人领域,可能会被一个视频刷屏:一个名为“Unitree”的机器人,在演示中展现了惊人的奔跑、跳跃、后空翻甚至“飞檐走壁”的能力,被网友戏称为“超人”。这不仅仅是又一个炫技视频,它背后代表的技术突破…

作者头像 李华
网站建设 2026/9/1 5:04:22

QAT伪量化

QAT伪量化 QAT伪量化为什么可行?你的理解和QAT真实逻辑差异你的直觉:真实硬件推理流程输入浮点 → 量化转 int8权重浮点 → 量化转 int8int8 int8 整数卷积/矩阵乘,得到int32中间结果反量化/偏移缩放 → 输出int8全程算子内部全部整数运算&a…

作者头像 李华
网站建设 2026/9/1 5:02:14

Windows下部署OpenClaw:从WSL2到本地大模型的AI代理实战指南

简介:面向 Windows 开发者的 OpenClaw 部署指南,以 WSL2Ubuntu 源码编译和 Git Bash 直接运行两条路径为主线,覆盖环境准备、依赖安装、源码编译、配置向导,以及 SSH 权限异常、国内镜像加速等常见排错场景,适合需要在…

作者头像 李华
网站建设 2026/9/1 5:01:29

2025阿里云研发岗春招笔试全解析:考察逻辑与备战策略

2025年阿里云研发岗第二批春招笔试,刚结束的那批题目和往年比确实有一些新变化。我结合身边同学的面经反馈和近三年阿里云笔试的题型演化,把这轮笔试的考察逻辑、核心考点和备战路线完整拆一遍。这篇文章不押题,只讲考察逻辑和应对框架&#…

作者头像 李华