网站首页 > 技术文章 正文
在上一篇文章中给大家介绍了#西门子#S7-1200 PLC的基本数据类型,点击回顾:S7-1200 PLC的基本数据类型,了解多少?
对于S7-1200 PLC,除了支持基本数据类型之外,还支持一些复杂的数据类型,包括结构数据类型Struct、PLC数据类型UDT、、系统数据类型SDT、硬件数据类型DB_ANY、参数数据类型Variant、String和Char数据类型、WString和WChar数据类型、DTL数据类型等。
那么这篇文章就来给大家介绍一下复杂的数据类型吧。
结构数据类型Struct与PLC数据类型UDT
Struct类型和UDT类型都是一种由多个不同数据类型元素组成的数据结构,其元素可以是基本数据类型,也可以是Struct、数组等复杂数据类型以及PLC数据类型UDT等。
Struct 类型可以在DB、OB/FC/FB接口区、PLC数据类型UDT 处定义使用。UDT类型可以在DB、OB/FC/FB接口区处使用。
从TIA 博途 V13SP1 开始,S7-1200 V4.0开始,PLC变量表中的I和Q也可以使用UDT类型。
UDT类型作为整体使用时,可以与Variant、DB_ANY类型及相关指令默契配合。Struct数据类型使用非常灵活,随时可以使用,但是相对于PLC数据类型 UDT有一些缺点,所以建议需要使用Struct类型时,可以使用PLC数据类型UDT代替。
理论上来说,UDT是Struct类型的升级替代,功能基本完全兼容Struct类型。
数组Array
数组表示的是由固定数目的同一数据类型的元素组成的一个域,格式为:域名:ARRAY[最小索引值..最大索引值]of数据类型,比如DATA:ARRAY[0..7] of INT。
数组可以使用单个数组元素例如"DB1".Static_1[1],也可以使用整个数组例如"DB1".Static_1。
多维数组可以降维使用,例如三维数组:3D[0..2,0..3,0..4]of Int是一个3×4×5大小的Int数组,3D[0]是一个4×5大小的二维Int数组,3D[0,1]是一个5个元素的一维Int数组,当然多维数组下标也可以换成变量,例如3D[Tag_1,1]这种。
系统数据类型SDT
系统数据类型SDT是由系统提供,并且具有预定义的结构,它的结构由固定数目的具有各种数据类型的元素构成,不能更改系统数据类型的结构。
系统数据类型只能用于特定指令,比如定时器使用的IEC_TIMER 16数据类型,可用于“TP”、“TOF”、“TON”、“TONR”、“RT”和“PT”指令。系统数据类型还有很多个,具体可以参考手册哦,这里不做详细介绍。
硬件数据类型
硬件数据类型是由 CPU 提供的,可用硬件数据类型的数目取决于 CPU。根据硬件配置中设置的模块存储特定硬件数据类型的常量。
在用户程序中插入用于控制或激活已组态模块的指令时,可将这些可用常量用作参数。
比如说REMOTE数据类型,用于S7通信PUT/GET指令中指定远程CPU的数据地址,必须以P#指针的形式作为实参,例如P#DB1.DBX0.0 BYTE 10。
硬件数据类型还有很多,具体可以参考手册哦,同样这里不做详细介绍。
参数数据类型Variant
参数数据Variant类型只能出现在除FB的静态变量以外的OB/FC/FB接口区。Variant类型的实参是一个可以指向不同数据类型变量的指针。它可以指向基本数据类型,也可以指向复杂数据类型、UDT等。
调用某个块时,可以将该块的Variant参数连接任何数据类型的变量。除了传递变量的指针外,还会传递变量的类型信息。该块中可以利用Variant的相关指令,将其识别出并进行处理。
Variant指向的实参,可以是符号寻址,也可以是绝对地址寻址,还可以是比如P#DB1.DBX0.0 BYTE 10这种指针形式的寻址。
P#DB1.DBX0.0 BYTE 10这种结构起源于S7-300/S7-400的Any指针,S7-1200无法像S7-300/S7-400一样定义以及拆解Any指针,但是在参数类型为Variant时,可以输入这种指针,并且S7-1200将识别其为数组。
P#DB1.DBX0.0 BYTE 10的解释:指向从DB1.DBX0.0开始的10个字节,并且DB1必须包含有10字节长度的变量。
时间数据类型DTL
日期和时间的数据类型 DTL 用于存储日期和时间信息。它主要由几个部分组成,每一部分都包含不同的数据类型和取值范围。指定值的数据类型必须与相应元素的数据类型相匹配。下图给出了数据类型 DTL 的格式、结构组成及其属性:
时间数据类型什么时候会用到呢,比如我们要读取S7-1200CPU的系统/本地时钟,就需要在DB块中创建数据类型为DTL的变量。
以上就是S7-1200 PLC的复杂数据类型啦,一对比,就会发现这明显比S7-200/200SMART PLC复杂多了,是吧?
没关系,我们可以先掌握一些比较常用的,比如说数组ARRAY数据类型等,其他的可以等需要用到再查手册呗~(技成培训原创,作者:蔡慧荥,未经授权不得转载,违者必究!)
那么,这次的分享学习就到这里了,欢迎评论区留言并转发,下期精彩内容请关注@技成电工课堂!
- 上一篇: 漫画 | Linux 并发和竞态问题究竟是什么?
- 下一篇: Excel里降维函数讲解 降维的算法
猜你喜欢
- 2024-10-12 Excel查找重复次数最多的项目 excell查找重复数据
- 2024-10-12 经典动态规划题——打家劫舍 打家劫舍猜一肖
- 2024-10-12 函数公式的左膀右臂:ROW、COLUMN函数知多少
- 2024-10-12 C|二维数组做函数参数求矩阵乘积 c二维数组作为函数参数
- 2024-10-12 sum() 函数性能堪忧,列表降维有何良方?
- 2024-10-12 【译】Vue 何以对 React“降维打击”?
- 2024-10-12 奇异值分解与主成分分析,一文带你理解Spark分布式降维方法
- 2024-10-12 收下这波 JS 技巧,从此少加班 js怎么做加法
- 2024-10-12 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法
- 2024-10-12 盘ES6、ES7、ES8、ES9、ES10 es6解构赋值
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)