西门子博途(TIA Portal)数据结构UDT &
结构体(Struct) & 数组的使用
第一次写博客,初来乍到。平时自己在网上也看过不少人写博客,基本上都是一些大神记录自己的心得和体会并拿出来与大家分享,我想,作为一个经常写博客的人,不单单是为了与大家分享自己的心得体会,同时也是为了给自己在这个知识片内做复习和总结吧。
作为一个工控行内人,着重技术这块来讲,写博客就是为了和大家分享一些我自己在实际项目中的技术和经验,如果写得不好,请路过的同行指点一二。
TIA博途是全集成自动化软件TIA
portal的简称,是西门子工业自动化集团发布的一款全新的全集成自动化软件。它是业内首个采用统一的工程组态和软件项目环境的自动化软件,几乎适用于所有自动化任务。借助该全新的工程技术软件平台,用户能够快速、直观地开发和调试自动化系统。
西门子的数据结构和一些高级语言的数据结构有相似之处,例如西门子的结构体和C#中的结构体:
博途中的结构体:
C#中的结构体:
博途中的数组:
C#中的数组:
数据也可以组合使用,博图里有一个非常强大的数据结构(用户自定义数据类型(UDT)),这样在我们编程处理数据接口的时候就方便了很多,比如我们写了一个FC/FB功能块,接口处有很多不同类型的参数,而且又调用了很多次。这种情况我们还是按照传统的方法去定义每个变量就显得程序杂乱无章,当程序量大的时候不管是编写还是排查时都显得很吃力。数组的列表数量我们可以随便定义,UDT是一个固定的数据类型集合(一旦定义,不能更改),把UDT当做数组的其中一个元素,这样我们数组定义的长度是多少就有多少这样的数据类型,再分别传给每个FC/FB块,这样我们的整个程序就显得层次分明。下面来看实际操作:
在UDT里定义数据类型,此数据一定要和FC/FB接口处一样,否则实参没法传入形参。
这里我们定义两个结构体数据,以便待会做元素下的多类型数据。
数据类型已经定义好,接下来在数据库或者FB背景数据库里定义结构体数组,这样的数据结构非常清晰。
FC/FB里的数据结构也要一致。
接下来就是在程序里调用FC/FB了,这样是不是和高级语言一样了?数据只调用集合不调用成员,这样的编程结构让我们的程序看起来非常简洁。
接下来再为大家提供一个在此基础上稍加变换的方法(不定数组)。有时候我们做一个FC块,接口的参数同样用上述的结构体方法来传送参数,但有时候会碰到传入的数组元素数量不确定的情况,比如我们做一个FC来对模拟量进行转换运算,想要做一个通用的FC,通道数量能够任意改变,又不想在接口处定义太多参数,此时我们就要用到数组元素初始化时不指定元素数量了。
这一个模拟量转换的FC,数据类型数组没有去指定数量,也就是说外部的数组传进来可以是1个也可以是100个,只要不超过CPU内存范围。
我们的数据库内定义的数组数量是可以任意更改的,比如我们这套配置有6个模拟量输入,那么数组就定义为6个,FC内部会进行数组数量的运算你,自动获取每个元素内的成员数据。
这篇文章主要是介绍下数据结构的灵活使用,能使我们的程序结构清晰,代码简洁,易排查问题。