SCL-程序中的复杂数据类型(一) 点击:2201 | 回复:12



一世欢颜

    
  • 精华:2帖
  • 求助:0帖
  • 帖子:10帖 | 323回
  • 年度积分:275
  • 历史总积分:4170
  • 注册:2012年11月11日
发表于:2020-06-04 13:56:01
楼主

      我接触过很多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]为下图数组中的第一个整数。

                                               image.png

2、 多维数组

在TIA PORTAL中建立二维数组,如下图所示,可以将二维数组理解为一张表格,0-2为行标,0-3为列标,所以它包含3*4共计12个浮点数。理解了二维数组后,我们可以建立三维或更多维数的数组,但是通常我们用到的只有一维和二维数组。

image.png

(注意,SCL中的变量只能使用标签,不能使用绝对地址,局部变量在SCL中用#+变量名称,全局变量用双引号加“变量名”)

   学会使用数组,在我们理解了数组之后,可以通过一个小程序案例感受一下数组的使用方法:

   首先,建立数组ARRAY1,INT值i,INT值element,程序代码:#element := #ARRAY1[#i];

这个是比较简单的用法,当i=1时,#element := #ARRAY1[1];,此时element等于ARRAY数组中的第一个值,以此类推,i等于不同的值时(i必须在1-10之间),element等于数组中不同的元素值。

  比较复杂的用法在讲完流程控制语句后给程序示例。

image.png

 image.png

l  STRUCT

STRUCT是由不同数据类型组成的结构体(数据结构),比如我们伺服的控制字,包含伺服使能、位置、速度、加减速时间等,他们数据类型不同,但都用来描述对伺服的控制,我们可以把它用一个结构体来表示;再比如描述一个物料信息时,我们也可以用一个数据结构把他们所包含的不同信息进行封装,诸如ID编号、重量等等。

下图以伺服控制字的方式建立一个STRUCT数据结构,在FB中的INPUT中建立,

image.png

当调用该FB时,STRUCT数据结构,只有一个引脚,很简洁。

image.png

  STRUCT可嵌套也可以作为ARRAY元素来使用,嵌套深度最大位8层。

  下图STRUCT做为ARRAY元素

image.png

下图STRUCT作为STRUCT元素

image.png

   STRUCT可以在FB/FC/OB接口区、DB数据块处使用。

l  UDT

UDT为用户自定义数据类型,其实它也是是由不同数据类型组成的结构体,但是STRUCT和UDT仍然有很大的区别,STRUCT称为数据结构,它仅仅将不同数据进行整合,它在作为一个整体使用时,具有单一性,每个STRUCT都可以有自己的结构。

UDT称为数据类型,它的用法像WORD INT REAL,只不过我们只是提前定义了一个类似结构体的数据类型,它在定义后,在程序中可以统一更改和重复使用,一旦某个新建的UDT中包含的元素更改后,使用该数据类型的变量都会更改。

建立UDT数据类型,需要在项目树中的PLC数据类型中新建,给数据类型命名,方便后续使用。

image.png

之前使用STRUCT建立伺服控制字,如果有多个伺服需要控制,则每个伺服都需要单独建立STRUCT类型,手动添加伺服的控制数据,而使用UDT可以解决这种情况,提高数据的复用性。

首先,建立名为UDT1的自定义数据类型,然后在工作区将伺服的控制数据依次添加。

image.png

在数据块中建立数据类型为UDT1的数据,如下图,此时【伺服控制字2】将自动生成UDT1内的数据类型,且为灰色(不可更改);这样多个伺服我们只需要一次建立UDT1类型的数据就可以了。

image.png


1分不嫌少!


楼主最近还看过



一世欢颜

  • 精华:2帖
  • 求助:0帖
  • 帖子:10帖 | 323回
  • 年度积分:275
  • 历史总积分:4170
  • 注册:2012年11月11日
发表于:2020-06-04 14:00:31
1楼

有不对的地方,感谢指正,下一篇分享SCL--指针与寻址

青衫书生

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 280回
  • 年度积分:73
  • 历史总积分:1575
  • 注册:2014年12月29日
发表于:2020-06-04 14:07:15
2楼

讲的不错,可以对编程的一些基础方面进行系统的学习

fighting2020

  • [管理员]
  • 精华:4帖
  • 求助:4帖
  • 帖子:1023帖 | 7244回
  • 年度积分:1284
  • 历史总积分:18892
  • 注册:2008年11月11日
发表于:2020-06-04 14:37:31
3楼

感谢楼主的分享总结

你猜你猜

  • 精华:0帖
  • 求助:0帖
  • 帖子:98帖 | 907回
  • 年度积分:94
  • 历史总积分:3423
  • 注册:2019年2月15日
发表于:2020-06-05 10:45:03
4楼

类似的总结学习学习挺好的,感谢

sunwynne

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 374回
  • 年度积分:0
  • 历史总积分:127
  • 注册:2015年6月15日
发表于:2020-06-11 17:07:57
5楼

谢谢楼主分享

l726039

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 375回
  • 年度积分:25
  • 历史总积分:972
  • 注册:2008年12月12日
发表于:2020-07-04 19:23:38
6楼

感谢楼主的分享

开心孺子牛

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 9回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2012年11月30日
发表于:2020-09-08 09:04:58
7楼

不错,应该结合应用实例来讲,就更好了。

jy123461

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 18回
  • 年度积分:33
  • 历史总积分:118
  • 注册:2020年11月02日
发表于:2020-11-10 10:12:35
8楼

感谢楼主的分享总结

JSTOPSUN

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 1491回
  • 年度积分:0
  • 历史总积分:1647
  • 注册:2015年8月31日
发表于:2020-11-11 09:01:50
9楼

引用 "青衫书生" 的回复,发表在2楼
        内容: 讲的不错,可以对编程的一些基础方面进行系统的学习

cch827648163

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 25回
  • 年度积分:0
  • 历史总积分:71
  • 注册:2021年9月14日
发表于:2021-09-16 20:15:03
10楼

不错,应该结合应用实例来讲,就更好了。


silky_56

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 1828回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2003年8月15日
发表于:2021-09-17 10:12:21
11楼

感谢楼主分享,学习了

jiandiedy

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 77回
  • 年度积分:0
  • 历史总积分:147
  • 注册:2013年11月26日
发表于:2021-11-05 02:17:49
12楼

谢谢分享,问一下,这个SCL非常有必要学吗?


热门招聘
相关主题

官方公众号

智造工程师