遍历结构体_三菱ST语言编程(3)——结构体变量

e9c9760c4a73b1d45a16c4852240fd9e.gif

上篇文章介绍了数组,是一组相同类型数据的列表,那么不同类型的数据能否组合到一起用一个标签表示呢?答案当然是可以的,而实现这个功能的就是结构体(struct)。

建立结构体

在三菱结构化编程的界面中左侧程序部件里可以找到结构体标签栏:

645faa361e631505ff5ab690a6dcd3be.png

结构体

右键-新建数据-输入数据名-确定:

622f9a61fcde408303b5b757e9063222.png

建立结构体

确定后出现结构体设置窗口,在这个窗口中声明这个结构体中想要包含的变量,这里随便写一些:

c24beacf8ef900ecf689fb85de74f4e0.png

编辑变量

结构体建立完成。

结构体中声明的便签与程序中直接声明的标签相比,它能够声明的只有基本数据,而在标准的ST语言中,结构体中声明的变量可以是另一个结构体,甚至可以是功能块,这里三菱PLC的结构体并不是完整版的结构体。

结构体的使用

与数组不同,结构体建立完成后并不能直接使用,需要在程序中声明成标签。可以将结构体看做是比位(bit),字(word)等基本数据类型更高级的数据类型。将上面建立的结构体声明标签并在程序中赋值:

bc861ea1248fdc2a044f1822a1246e14.png

声明结构体标签

声明标签设置数据类型时,在类型分类勾选结构体,然后在右侧列表里找到想要声明的结构体。

3375db7d76f57c094f37d043938b1f6a.png

变量调用

可以看到,在程序中写出结构体标签名stExample后面加上符号“.”会自动出现表格,而表格中的内容就是刚刚在结构体中建立的所有标签,用鼠标或者方向键选中想要的标签,回车确定即可写入程序中:

d6991e53d112ecbe0010decff0b82211.png

变量赋值

结构体内部变量的赋值与普通变量没有区别,相当于为每个变量加了一个前缀。

除了单个变量的赋值之外,结构体还可以整体赋值,例如将上面的结构体stExample的数据赋给新的结构体stCopy:

7a0c10d478810dd1b925a707638ae997.png

整体赋值

通过监看stCopy可以看到它的值与数据源stExample一致。只有两个标签的数据类型为相同结构体才可以整体赋值。

结构体有什么用?

这里只介绍了部分的了解

1.与数组配合,制作产品信息列表

相信工控人都听过产品一词,所有自动化设备都是在为产品服务。结构体可以用来记录一个产品的多种信息。例如某电池生产线生产多种电池,每个电池有独立的标签,出厂前要测量每个电池的电压,和外观检测。

根据需求可以建立如下结构体:

27fa11528385d5708077e13ddbb6b008.png

这个结构体中包含了一个电池的所有信息,然后根据需要把它声明称一定数量的数组:

afa544b7efeab4a0fb648d61eb9b72c9.png

声明数组

这样就stBattery这个标签可以存储100个电池的所有信息,我们在线监看一下这个结构体数组:

58dacb5af2fa58f020d28517af51acb0.png

监看结构体

在实际的项目中,可以用视觉判断电池类型和外观检测,可以用扫码器读码,电压表测量电压。每一块电池的所有信息都可以很方便的缓存到这个结构体中,以便用于分拣、替废等工序。我们可以写一小段程序来筛选出不同类型合格的产品,例如:将电池分为4个类型,A电池电压3.5V,B为2.7V,C为4.0V,D为1.5V,外形检测正常的为合格电池。

3845a8dc3ff88762b2d7ba51ed0c5478.png

筛选电池

通过for循环遍历列表中的所有电池结构体,将符合条件的电池信息按类型分别填入stBatteryA,stBatteryB,stBatteryC,stBatteryD四个结构体列表中。由于数据太多模拟的话一个一个赋值太费劲了,这里就不再仿真验证了。

2.用于做功能块(fb)的接口

在复杂的项目中,我们可能会用到输入输出变量非常多的自建功能块,将有相同属性的变量整合为结构体,会使程序变得清爽,例如:

2a182f36b9ad88644ca4fbe5281216dc.png

功能块接口

图中是使用FBD(功能块图,三菱叫结构化梯形图)展现的一个自建功能块,它的输入结构体stDeviceStates包含34个bit变量,输出结构体包含8个bit,如果全部写成基本变量那这个功能块就太长了,恐怕一个屏幕都装不下,赋值也会变得困难。

在标准的ST语言中结构体的作用远不止于此,但是本人用到的也比较少。

89740268cd16cbac42c2c61707aab639.png

d642e013c2967e5f1f172b8fe39f8671.gif

文章来源:综合网络,侵权联删,谢谢。

99ea51f97e5cf0b6c14fc4efbbe5f769.gif戳这里,实用案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于微信小程序swiper的问题

关于小程序swiper的问题 代码 在官方示例上给swiper添加了currentbindchangecircular添加了一个buttonbindtap用于切换下一张 index.wxml <swiper indicator-dots"{{indicatorDots}}"bindchange"swiperChange"current"{{index}}"circular&quo…

PyQt5案例汇总(完整版)

个人博客点这里 PyQt5案例汇总(完整版) 起步 PyQt5是一套绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是可用的。该教程使用的是Python3.x。 Qt库是一套最有用的GUI库。 PyQt5是作为一套Python模块实现的。他已经超过620个类和6000个函数与方法。他是一个运行在所有主…

中的 隐藏鼠标菜单_Mac移动隐藏删除顶部菜单栏图标教程

苹果菜单栏贯穿 Mac 的屏幕顶部。左侧是苹果菜单和应用菜单&#xff0c;应用菜单一般显示你当前使用的Mac软件的所有功能菜单。右侧通常是以图标显示的状态菜单&#xff0c;帮助你快速查看Mac的状态以及快速访问某些Mac软件。移动图标位置若想要重新排列状态菜单栏的图标&#…

可以用什么代替平面镜

答案是镜面 潜望镜是利用平面镜来改变光路转载于:https://www.cnblogs.com/lidepeng/p/7280593.html

[hadoop] kettle spoon 基础使用 (txt 内容抽取到excel中)

spoon.bat 启动kettle。 测试数据 1. 新建转换 输入中选择文本文件输入 双击设置文本输入 字符集、分隔符设置 获取对应的字段&#xff0c;预览记录。 拖入 excel输出&#xff0c;设置转换关系 设置输出路径 获取字段 启动转换 导入的excel数据&#xff08;设置好格式,图中ID,A…

ffmpeg提取音频播放器总结

ffmpeg提取音频播放器总结&#xff1b; 一&#xff1a;简介 从编写音频播放器代码到完成播放器编写&#xff0c;测试&#xff0c;整整5天的时间&#xff0c;这时间还不算之前对 ffmpeg熟悉的时间&#xff0c;可以说是历经千辛万苦&#xff0c;终于搞出来了&#xff0c;虽然最…

【BZOJ 4103】 [Thu Summer Camp 2015]异或运算 可持久化01Trie

我们观察数据&#xff1a;树套树 PASS 主席树 PASS 一层一个Trie PASS 再看&#xff0c;异或&#xff01;我们就把目光暂时定在01Tire然后我们发现&#xff0c;我们可以带着一堆点在01Trie上行走&#xff0c;因为O(n*q*30m*30)是一个可选复杂度。 我们想一下我们正常的时候…

Docker学习笔记——Java及Tomcat Dockerfile

1、Java Dockerfile创建项目目录java&#xff0c;目录下上传所需java版本压缩包&#xff0c;并创建Dockerfile文件&#xff0c;项目结构如下&#xff1a;java-Dockerfile-jdk-8u111-linux-x64.gzDockerfile内容&#xff1a;# JAVA # Version 1.8.0_111 # SOURCE_IMAGE FROM cen…

rabbitmq接口异常函数方法_RabbitMQ监控(三):监控队列状态

#RabbitMQ 监控(三)验证RabbitMQ健康运行只是确保消息通信架构可靠性的一部分&#xff0c;同时&#xff0c;你也需要确保消息通信结构配置没有遭受意外修改&#xff0c;从而避免应用消息丢失。RabbitMQ Management HTTP API提供了一个方法允许你查看任何vhost上的任何队列&…

FFMpeg语法参数中文参考手册

要查看你的ff mpeg支持哪些 格式&#xff0c;可以用如下命令&#xff1a;$ ffmpeg -formats | less还可以把 视频文件导出成jpg序列帧&#xff1a;$ ffmpeg -i bc-cinematic-en.avi example.%d.jpgdebian下安装ffmpeg很简单&#xff1a;&#xff03;apt-get install ffmpegffmp…

Java类集框架 —— LinkedHashMap源码分析

前言 我们知道HashMap底层是采用数组单向线性链表/红黑树来实现的&#xff0c;HashMap在扩容或者链表与红黑树转换过程时可能会改变元素的位置和顺序。如果需要保存元素存入或访问的先后顺序&#xff0c;那就需要采用LinkedHashMap了。 LinkedHashMap结构 LinkedHashMap继承自H…

apache 支持.htaccess重写url

1. httpd.conf 添加&#xff1a; <Directory />Options Indexes FollowSymLinks MultiviewsAllowOverride allRequire all grantedRewriteEngine On</Directory> 开启&#xff1a; 在phpinfo里找到&#xff1a; 说明开启成功。 2.httpd-vhosts.conf &#xff08;开…

oom 如何避免 高并发_【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!...

【高并发】高并发环境下如何防止Tomcat内存溢出&#xff1f;看完我懂了&#xff01;&#xff01;发布时间&#xff1a;2020-04-19 00:47,浏览次数&#xff1a;126, 标签&#xff1a;Tomcat写在前面随着系统并发量越来越高&#xff0c;Tomcat所占用的内存就会越来越大&#xff0…

[JSOI2008]最小生成树计数

OJ题号&#xff1a;  BZOJ1016 题目大意&#xff1a;   给定一个无向带权图&#xff0c;求最小生成树的个数。 思路&#xff1a;   先跑一遍最小生成树&#xff0c;统计相同权值的边出现的个数。   易证不同的最小生成树&#xff0c;它们不同的那一部分边的权值实际上是…

vuex webpack 配置_vue+webpack切换环境和打包之后服务器配置

import axios from ‘axios‘import store from ‘../store/index‘const rootUrl process.env.API_ROOT//创建axios实例const service axios.create({timeout:30000 //超时时间})//添加request拦截器service.interceptors.request.use(config >{if (Object.keys(config.hea…

redis基本用法学习(C#调用FreeRedis操作redis)

FreeRedis属于常用的基于.net的redis客户端&#xff0c;EasyCaching中也提供适配FreeRedis的包。根据参考文献4中的说法&#xff0c;FreeRedis和CsRedis算是近亲&#xff08;都是GitHub中账号为2881099下的开源项目&#xff09;&#xff0c;因此其用法特别相似。FreeRedis的主要…

opencv:图像的基本变换

0.概述 图像变换的基本原理都是找到原图和目标图的像素位置的映射关系&#xff0c;这个可以用坐标系来思考&#xff0c;在opencv中&#xff0c; 图像的坐标系是从左上角开始(0,0)&#xff0c;向右是x增加方向(cols)&#xff0c;向下时y增加方向(rows)。 普通坐标关系&#xff1…

FFMpeg在Windows环境下的编译

1&#xff0e;安装MinGW &#xff08;1&#xff09;下载文件&#xff1a;MinGW-5.1.4.exe&#xff0c; &#xff08;2&#xff09;安装时选择下列组件&#xff1a; binutils-2.19.1-mingw32-bin.tar.gz gcc-core-3.4.5-20060117-3.tar.gz gcc-g-3.4.5-20060117-3.tar.gz …

中通知设置响铃_主动切断干扰源——手机“通知”精细化管理

上周去参加我福福幼儿园的母亲节活动&#xff0c;内容是孩子和家长一起穿手链。期间我发现和我同桌的一个家长的手机不停在响&#xff0c;当然伴随着注意力被打断。不仅是这位家长自己&#xff0c;连我也受到了干扰。于是职业病又犯了&#xff0c;我悄悄的看了一眼这位家长的手…

OCM_第十九天课程:Section9 —》Data Guard _ DATA GUARD 原理/DATA GUARD 应用/DATA GUARD 搭建...

注&#xff1a;本文为原著&#xff08;其内容来自 腾科教育培训课堂&#xff09;。阅读本文注意事项如下&#xff1a;1&#xff1a;所有文章的转载请标注本文出处。2&#xff1a;本文非本人不得用于商业用途。违者将承当相应法律责任。3&#xff1a;该系列文章目录列表&#xf…