我接触过很多PLC的初学者,他们多数人在学习PLC时,过于专注于PLC的指令,但是对于PLC的学习而言,指令在学习过程中所占的比重不会超过一半。其中一项常常被忽略的就是PLC的数据类型,多数人在知道了二进制数、整数、浮点数等简单数据类型后,就认为已经认识了PLC的数据据类型,但这仅是PLC数据类型的皮毛。
为什么要强调数据类型呢,因为如果能在编程过程中熟练运用各种数据类型,将使程序更加简单明了,增加程序可读性,甚至可以将复杂的算法简单化。尤其在SCL语言的加持下,配合数据类型的使用,将使编程技能得到极大提升。
西门子PLC中数据类型没有明确统一的划分,我们姑且将,二进制位、整数、浮点数、时间等归类为简单数据类型,这些对于有编程基础的人而言,不用过多赘述。数据类型还有常量和变量之分,常量使用技巧可以自行学习。
下面将除简单类型数据之外的数据类型大体分为三类:复杂数据、系统数据、硬件数据。
一、 复杂数据类型
仅介绍常用的几种,有其他需要的可以自行查阅资料,学会自学才会真正进步。
l ARRAY
ARRAY,即数组,有C或其他高级编程语言的人对它应该并不陌生,它是一组固定数量的相同数据类型元素的集合。在TIA PORTAL环境下的基本用法ARRAY[1..9] OF 数据类型。ARRAY几乎支持除ARRAY本身外所有的数据类型。
我们可以将数组分类为一维数组和多维数组,TIA PORTAL最大支持6维数组。
1、 一维数组
在TIA PORTAL中建立一维数组,如下图所示,数组的下限为0,上限为3,数据类型为INT,所以这给数组包含0-3共计4个INT类型的变量,他只有一组数据。一维数组的上下限必须为固定数值,不允许使用变量。数组依靠变量名+[]索引的方式来寻址,例如ARRAY1[0]为下图数组中的第一个整数。
2、 多维数组
在TIA PORTAL中建立二维数组,如下图所示,可以将二维数组理解为一张表格,0-2为行标,0-3为列标,所以它包含3*4共计12个浮点数。理解了二维数组后,我们可以建立三维或更多维数的数组,但是通常我们用到的只有一维和二维数组。
(注意,SCL中的变量只能使用标签,不能使用绝对地址,局部变量在SCL中用#+变量名称,全局变量用双引号加“变量名”)
学会使用数组,在我们理解了数组之后,可以通过一个小程序案例感受一下数组的使用方法:
首先,建立数组ARRAY1,INT值i,INT值element,程序代码:#element := #ARRAY1[#i];
这个是比较简单的用法,当i=1时,#element := #ARRAY1[1];,此时element等于ARRAY数组中的第一个值,以此类推,i等于不同的值时(i必须在1-10之间),element等于数组中不同的元素值。
比较复杂的用法在讲完流程控制语句后给程序示例。
l STRUCT
STRUCT是由不同数据类型组成的结构体(数据结构),比如我们伺服的控制字,包含伺服使能、位置、速度、加减速时间等,他们数据类型不同,但都用来描述对伺服的控制,我们可以把它用一个结构体来表示;再比如描述一个物料信息时,我们也可以用一个数据结构把他们所包含的不同信息进行封装,诸如ID编号、重量等等。
下图以伺服控制字的方式建立一个STRUCT数据结构,在FB中的INPUT中建立,
当调用该FB时,STRUCT数据结构,只有一个引脚,很简洁。
STRUCT可嵌套也可以作为ARRAY元素来使用,嵌套深度最大位8层。
下图STRUCT做为ARRAY元素
下图STRUCT作为STRUCT元素
STRUCT可以在FB/FC/OB接口区、DB数据块处使用。
l UDT
UDT为用户自定义数据类型,其实它也是是由不同数据类型组成的结构体,但是STRUCT和UDT仍然有很大的区别,STRUCT称为数据结构,它仅仅将不同数据进行整合,它在作为一个整体使用时,具有单一性,每个STRUCT都可以有自己的结构。
UDT称为数据类型,它的用法像WORD INT REAL,只不过我们只是提前定义了一个类似结构体的数据类型,它在定义后,在程序中可以统一更改和重复使用,一旦某个新建的UDT中包含的元素更改后,使用该数据类型的变量都会更改。
建立UDT数据类型,需要在项目树中的PLC数据类型中新建,给数据类型命名,方便后续使用。
之前使用STRUCT建立伺服控制字,如果有多个伺服需要控制,则每个伺服都需要单独建立STRUCT类型,手动添加伺服的控制数据,而使用UDT可以解决这种情况,提高数据的复用性。
首先,建立名为UDT1的自定义数据类型,然后在工作区将伺服的控制数据依次添加。
在数据块中建立数据类型为UDT1的数据,如下图,此时【伺服控制字2】将自动生成UDT1内的数据类型,且为灰色(不可更改);这样多个伺服我们只需要一次建立UDT1类型的数据就可以了。
楼主最近还看过