百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

西门子SCL编程入门教程连载(19)——可变限值数组

yuyutoo 2025-02-04 16:55 1 浏览 0 评论

收到后台一个小伙伴的疑问:

西门子S7-1200/1500是否支持动态数组?

我理解他说的动态数组,是指数组的上、下限值可动态修改。

我的回答是:不支持。

但是S7-1200/1500确实支持使用可变限值数组作为函数/函数块的参数。具体来说:

①对于函数块(FB)而言,仅其输入输出(InOut)参数支持可变限值数组;

②对于函数(FC)而言,其输入、输出及输入/输出参数都支持可变限值数组;

今天这篇文章,我们来详细聊聊可变限值数组。

在西门子S7-1200/1500 SCL语言编程中,数组是一种复杂数据类型,它是数量固定的、数据类型相同的元素的集合。数组有两大特点:

①元素数量是固定的;

②元素的数据类型是相同的;

数组可以是一维的,也可以是多维的。一维数组的定义采用下面的格式:

Array[下限..上限] of <数据类型>

一旦数组的上、下限值确定了,数组中元素的数量也就确定了。我们可以在数据块(DB)、函数块(FB)的静态变量、临时变量区中声明数组。比如下图中我们在数据块DBRcvData中声明了一个具有100个字节的数组arrRcv:

数组arrRcv的下限值是1,上限值是100。一旦定义完成,我们没有办法在运行过程中动态修改它的上、下限值。

在一些计算机高级语言中,比如VB,可以在运行过程中动态修改数组的维度(上限值)。比如下面的VB代码定义了一个下限值为0,上限值为100的整数数组(该数组具有101个元素):

 Dim tmpArray (100) As Integer

使用ReDim语句可以动态修改该数组的上限值,比如下面的代码将其上限值修改为199:

 ReDim tmpArray(199)

目前S7-1200/1500并不支持这种动态修改,这也是我对那位小伙伴问题的回答。

不过,虽然不支持动态修改数组限值,我们却可以在参数传递时使用可变限值数组。

可变限值数组是指用通配符(*)取代数组的上、下限值,一维可变限值数组格式如下:

Array[*] of <数据类型>

类似的,二维可变限值数组的格式如下:

Array[*,*] of <数据类型>

S7-1200/1500最多支持6维数组。

可变限值数组仅可用于参数的传递。比如我之前的文章《西门子SCL语言编程实例——冒泡排序》就用到了可变限值数组,如下图所示:

可变限值数组仅是一个接口(形参),在实际使用时需要为其赋值(实参)才能正常工作。实参的数据类型、维数要与形参相同,即数组的结构要相同。

比如在上述冒泡排序的文章中,我们在DB200中定义了数组arraySort,如下图所示:

在主程序中调用函数FC101_BubbleSort,为其形参“arraySort”赋值“DB200_Global.arraySort”,如下图所示:

对于可变限值数组,很多时候需要知道其上、下限值。可以使用系统提供的指令LOWER_BOUND读取其下限值,使用UPPER_BOUND读取其上限值。这两个指令都支持多维数组。

我之前还写过一篇数组及其指令的文章,链接如下:

西门子SCL编程入门教程连载(12)-数组及其指令

好了,关于S7-1200/1500的可变限值数组就先介绍到这里。

我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》的第10章复杂数据类型也有介绍,如果你感兴趣的话,可以点击下面的链接看看。

相关推荐

微软Win10/Win11版Copilot上线:支持OpenAI o3推理模型

IT之家4月3日消息,科技媒体WindowsLatest昨日(4月2日)发布博文,报道称Windows10、Windows11新版Copilot应用已摘掉Beta帽...

WinForm 双屏幕应用开发:原理、实现与优化

在当今的软件开发领域,多屏幕显示技术的应用越来越广泛。对于WinForm应用程序来说,能够支持双屏幕显示不仅可以提升用户体验,还能满足一些特定场景下的业务需求,比如在演示、监控或者多任务处理等场景...

推荐一个使用 C# 开发的 Windows10 磁贴美化小工具

...

OpenJDK 8 安装(openjdk 8 windows)

通常OpenJDK8和11都能互相编译和通用。我们建议使用11,但是如果你使用JDK8的话也是没有问题的。建议配置使用OpenJDK,不建议使用OracleJDK,主要是因为版...

基于 Linux 快速部署 OpenConnect VPN 服务(ocserv 实战指南)

一、前言在如今远程办公和内网穿透需求日益增长的背景下,搭建一套安全、稳定、高效的VPN系统显得尤为重要。OpenConnectServer(ocserv)是一个开源、高性能的VPN服务端软件...

巧妙设置让Edge浏览器更好用(edge怎么设置好用)

虽然现在新版本的Edge浏览器已经推出,但是毕竟还处于测试的状态中。而Win10系统里面自带的老版Edge浏览器,却越来越不被人重视。其实我们只需要根据实际情况对老版本的Edge浏览器进行一些简单的设...

WPF做一个漂亮的登录界面(wpf页面设计)

...

微软开源博客工具Open Live Writer更新:多项Bug修复

OpenLiveWriter前身是WindowsLiveWriter,是微软WindowsLive系列软件之一,曾经是博主们非常喜爱的一款所见即所得博文编辑工具,支持离线保存,还支持图像编辑...

基于OpenVINO的在线设计和虚拟试穿 | OPENAIGC大赛企业组优秀作品

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。...

C#开源免费的Windows右键菜单管理工具

...

Windows10或11中隐藏的功能,用它再也不用担心电脑中病毒!

...

Python open函数详解(python open函数源码)

演示环境,操作系统:Win1021H2(64bit);Python解释器:3.8.10。open是Python的一个内置函数,一般用于本地文件的读写操作。用法如下。my_file=open(fi...

Windows 11 安装 Docker Desktop(Windows 11 安装助手 Windows 易升 关系)

...

Windows 11 新版发布:屏幕亮度自适应控制,小组件界面重新设计!

...

世界上最好用的Linux发行版之一,OpenSUSE安装及简单体验

背景之前无意在论坛里看到openSUSE的Linux发行版,被称为世界上最好用的Linux发行版之一(阔怕),一直想体验一下,于是这期做一个安装和简单体验教程吧。...

取消回复欢迎 发表评论: