故事作者:万泉河

最近创作

看看TA的故事

【万泉河】找到一个UDT的绝佳应用场景

已锁定

万泉河

  • 帖子

    10889
  • 精华

    132
  • 被关注

    900

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

【万泉河】找到一个UDT的绝佳应用场景

2182

1

2021-01-12 10:40:57


 

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库函数多次调用的方法

 

 

 

 


【万泉河】找到一个UDT的绝佳应用场景 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3233条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。