记得当年最开始用AB17691756PLC西门子300PLC就开始用到UDT尤其是AB的PLC都是标签编程采用UDT可以建立复杂的数据类型,方便进行编程。而对于300的PLC一般都是用SCL进行声明的方法进行UDT的建立,然后统一再进行编译生成;
UDT的本质,是把一组简单数据类型的数据,以一定的规律顺序组合为一个复杂数据类型。
1,可以用UDT直接建立数据块,过去主要用于给某些专用模块快速建立专用的数据。
2,可以建立全局数据块的数据,甚至包括数组。
3,可以用作FB的管脚,在程序调用的时候,减少管脚数量。改变过去大程序块的调用管脚几十个,导致窗口都显示不过来的弊病。
比如,所有用UDT的场合,原本用STRUCT结构也都可以实现同样的功能的。无非,多个同样的STRUCT,如果需要修改元素,就需要逐个修改。而UDT则只需要修改一次其原本的数据类型定义。
但对UDT的使用点,还需要或者手动更新(STEP7v5),或者编译(PORTAL),来同步这种修改。而且在STEP7V5的时代里,如果使用了UDT,而源程序丢失,那么对于从PLC上载来的程序,要修改的时候,简直是灾难。根本无法改动,即便知道UDT的定义结构,手动建立一个都不成,咋搞都是红字,错误。
现在很多PLC编程工程师偏爱使用UDT,是用于G120变频器/V90S120伺服驱动器的通讯,把接收来的或者要发送的数据,统一整理到UDT中,对于多台变频器通讯的时候,比较方便。
标准化编程框架里,所有设备都是以FB设备类型的形态出现,根本不需要用到UDT,而如果非要把FB的管脚定义为UDT,那么在FB被调用之前,还需要专门的篇幅来整理UDT数据。甚至,即便数据传到WinCC之后,也要拆分后,每个数据单独处理。毕竟,本质上,WinCC其实还不支持UDT。
在大多的PLC初学者看来,UDT属于比较高深的知识,因为不懂UDT才不会用它。就好比对指针不是很熟悉,就算懂得原理照样项目上不敢用;任何解决问题的办法总是有两面性;
所以我的建议是完全看使用场景,如果确实有大量的设备具备一样的属性,使用UDT确实很方便;当然至于WINCC端可以选择建立结构变量;所以FC+UDT+指针能实现FB所有需要的功能。话反过来说,就是FB能实现FC+UDT+指针加起来的所有功能。
UDT在软件单元间数据交换需要拆分,使用wincc需要拆分,用起来确实很不方便。但是STRUCT是匿名结构,无法进行数据类型比较,VARIANT与UDTCODSYS的私有数据类型建立在STRUCT上;
所以我的个人建议,不排除任何趋势,UDT我必用。同样FC+FB+UDT+指针VARIANTREF_TOArray[0..1]+数组不但现在会用,将一直会用。
如今的PLC其实越来越接近于高级语言,所以面向对象编程就是趋势!










