PLC编程中,我素来拒绝使用UDT。不是因为别的,只是因为没找到必须非要用UDT的场合。一些传统的大家喜爱用UDT的场合,在我看来,全都是没有必要使用UDT的。除了增加复杂程度,增加耦合难度,并没有得到任何好处。
所以,参加了标准化编程学习的学员,在拿到我给的标准化例子项目之后,会发现,我程序中没有一处用到UDT。而学员们如果真要自己下手,对我的做法升级改造,非要用UDT实现,会发现无从下手。
简单总结,杀鸡焉用宰牛刀,UDT就是那个宰牛刀。
杀鸡一把手术刀100g足够了,有人非得拖着100kG的关公的青龙偃月刀来,这一点都不牛逼,反而显得非常笨拙。
由此我写过一篇文章《【万泉河】PLC编程:反UDT同盟》
http://www.ad.siemens.com.cn/club/bbs/PostStory.aspx?a_id=1587563&b_id=82&s_id=&num=14#anch
详细阐述了其中原委。
然而,有一些读者看懂,但有一些非但没看懂,反而对我恼怒起来了:
我就奇怪了,我分享一些知识和经验,你不愿意接受,最多那就不要做我的读者,何来的那种怨气呢!建议这样的人,以后都不要读我的文章,你不配做我的读者。
我既不是你的领导,也不是你的甲方。你如何做程序,关我毛事啊!你只要觉得自己程序做的好,用的爽,想怎么干就怎么干就是了。管我的经验做啥!反而是报名参加标准化学习营的学员,要学习高效的程序设计架构,我就有必要把最高效的方法教给你,也有责任把我踩过的一些坑,我认识到的其中一些知识点,摸索到的一些技巧,有责任分享给大家。
当然,我跟学员们关系之间也是平等的,大家可以平等地交流看法,发表自己的见解,分享自己独有的经验。我从来不压制其他人有独立的想法,反而也非常迫切希望能从大家那里获取到有用的营养。
我在文章中也说了,希望有对UDT使用比较有心得的大佬,给我们传授些真正的使用UDT的经验。然而回复中大家所列出的使用UDT的快感,其应用场合,无一例外都是我文章中所抨击的。所以对于真正的需要使用UDT的场合,一直没有。
然后,到前几天,终于有了。
前天,***里有网友问,在TIA中如何实现把一批数据从DB块批量复制到输出Q点?
这在S7-300中,是非常简单的。一个BLOCK_MOVE函数就可以搞定。而且,如果是DP通讯,用SFC15也一次搞定。然而,到TIA PORTAL中,确实变得有些难度了。
大家七嘴八舌给出各种注意,实现BLOCK MOVE同样的功能。而我则有个疑问,是什么样的场合,需要这种批量复制呢?
回答说是个字符显示大屏,一个屏若干个DO点,其实是根据某些算法实现的点阵矩阵。
我一拍大腿,这就是个使用UDT的好机会啊!建议用UDT。
他用到的这个大屏,本质上是一个网关,数据接口有4*16个byte。这里128个byte,1024个离散量DO,是规律排布的, 唯一重要的是第一个点的首地址。而后面的都相对于这个点存在,每个单独的个体没有实际意义。
首先建立名字为字符屏的UDT,里面包含了需要的数据长度。
PLC变量表中,为每个屏建立地址变量。
然后建立字符屏的驱动FB,输入类型是字符串,输出类型是字符屏。我这里没有应用的需求,所以内在的逻辑暂时不关心了。而外在的被调用后的样式一定是这样:
然后就实现了对一整套数据的批量访问。
至于原本提问者提出的批量复制DB数据到Q的问题,其实原本可以不存在的呀!
总结,这个案例带给我们的启示:
1, 我们可以在自己没有应用机会的情况下, 通过关注其他人应用中遇到的问题, 而提前自己获取知识储备。
所以,不管是技术论坛还是***,关心别人的问题,看起来无用,貌似不务正业。而其实对自己水平提高是大有裨益的。
许多人不能理解这一点。
2, 程序架构实现的过程,所谓的高内聚低耦合,其实过程会是先耦合—再内聚--最后再耦合。
即我们在逻辑实现方法还没有的情况下,先脑补一个耦合的场景,然后分工做逻辑。最后才是真正的耦合。
而如果耦合的框架已经做好了,貌似难度较大的内聚逻辑真正实现起来其实又没那么难。只要把问题提出来,有了输入输出的要求,形成了充分模块化的需求后,有无数的高手可以实现。我在网上提出的优雅点亮中央声光报警系统的设想,提出后,很快就有好多网友做出来了。令众多网友敬佩不已。
所以,以往认知的为耦合难度小,内聚难度大。其实是不精确的。准确提出耦合的需求框架才更难。
有网友在***中提出要付费找人帮做个恒压供水的按水泵寿命的切换功能块,我目睹了其中完整的谈判过程,以及最后的验收公正及费用担保。
其实原本程序不需要经我手的。然而设计者因为个人对我的仰慕还把程序发给我让我帮忙点评,我看了下比较头晕,因为他们双方并没有约定清晰的耦合接口,他等于是帮人完完整整做了一个多水泵的恒压供水控制程序!
3, 我现在使用的软件是TIAPORTAL V16,我没有验证过,但我猜,PLC变量表能支持UDT并没多久。有可能上一个或两个版本时还不支持。说明,西门子整个系统在逐渐更新迭代,逐渐适应符号寻址后的各种需求。
这也是在PORTAL系统内一直存在各种支持绝对寻址的函数以及功能。比如数据块可以设置为非优化。而早晚一天,这些功能都会逐渐被抛弃。我们要习惯于只在符号寻址下解决问题,而不是总是习惯性地用过去的绝对寻址的思维来规划程序架构。
我们现在的标准化编程,就可以实现不使用绝对寻址,数据全是优化的。
4, PLC标准化框架实现的基础是无数的技术知识点。在这些知识点的基础上辅助以标准化的原理思想,最终实现了完整的标准化系统架构。而这些技术知识点大部分是基于厂商产品的,所以,即便暂时还没有发展进化到以标准化方法设计PLC程序的层次,我们分享的这些单个的技术点对每个人也同样有参考意义。
这从另外一个方面,体现了标准化其实就是知识的模块化。
【万泉河】把所有的IP段设置在1个网卡上
【万泉河】WinCC 与1500通讯,如何组态Group display?
【万泉河】那些你们舍不得割舍的M变量
【万泉河】在S7-1200/1500的FB中,如何获取CPU启动首次循环的状态?
【万泉河】来自一线学员的真实声音
【万泉河】工业以太网IP地址规划
【万泉河】工业以太网IP地址再规划
更多精彩文章:
【万泉河】论PLC编程中的高内聚与低耦合
【万泉河】来自一线学员的真实声音
【万泉河】就是要用中文编程
【万泉河】每一个合格的工控工程师都应该反感中文
【万泉河】实战WINCC VBA
【万泉河】OUTPUT的三重门
【万泉河】Input管脚的纠结
【万泉河】标准化不是标准库,分享一组西门子官方的库函数
【万泉河】给WANQ增配导轨支架
【万泉河】工业控制系统中的Tik-Tok
【万泉河】PLC标准化编程方法演示:再封装(继承)一个电机块
【万泉河】S7-200 SMART 浮点数累积通用功能块分享
【万泉河】分享一个SMART 200 /S7-200 自由口通讯的例子
【万泉河】SCL程序与LAD梯形图程序的互相转换教程(全文)
【万泉河】自带轮询功能的MODBUS并行通讯
【万泉河】关于浮点数累积的终极解决方案
【万泉河】WANQ问答(更新)
【万泉河】PLC标准化培训咨询问答(2020-06更)
【万泉河】标准化知识库:S7-200 SMART库函数多次调用的方法