一篇WINCC实战教程
接续篇|WinCC结构变量实战教程:结构变量弹出窗口控制
建议每位读者仔细看懂,熟练掌握。 完成之后再来看本号评论:
【万泉河工控评论】
文章中所表达的方法,已经是比较老旧的实现方法了。
体现在, PLC中需要将DB数据设置为非优化,所整理的UDT数据需要严格对准偏移量。 然后在WINCC侧也同样如法炮制,建立同样数据结构的UDT,这样在WINCC中建立变量时,只需要指定一组变量的首字节地址,后面的所有变量都对齐了。
这是对旧的S7-300 PLC时的通用做法。 我的第一本书《西门子WINCC 从入门到精通》中有过详尽的讲解。
写这本书时已经是10年前了。 到今日,S7-300早已淘汰,WINCC没有什么变化,但PLC早就换成了S7-1200/1500为主流了。 如本文参考文章所述。
然而在S7-1500中,结构变量的建立早就不是这样的一笔一划地逐个建立了。而如果有大批同行仍然还停留在这样的认识里,我个人只能表示暗暗叫苦,实在爱莫能及。
现在的主流的建立WINCC结构变量的方法有两种:
一种是在WINCC与PLC建立通讯之后,WINCC直接从AS中读取变量,那些在变量表和DB块中标注了“允许从HMI读取”的变量,全部可以选择并上传到WINCC。
这时候WINCC中得到的PLC的变量的地址是一串没有意义的长地址字符,而变量是以下划线(_)分割的一个个独立的变量,在WINCC画面处理时当然也可以当作结构变量处理,只需要将分隔符由正常的点(.)改为下划线(_)即可。 所以上文的WINCC中建立窗口画面的方法仍然可用,我在WINCC书中也同样阐述过。
这个方法我在《PLC标准化编程原理与方法》中有过讲解,所以我一直讲,我做的PLC标准化编程其实是在前本WINCC书基础上的续集,不知道有没有作者在通读几本书的时候有GET到这一点.
第二种方法是西门子有提供了一个SCADA变量导出工具,在PORTAL中将需要传送到WINCC的变量导出成一个文件,然后在WINCC中导入这个文件,即生成了所有需要的变量。
由于导出文件中包含了关于UDT的定义信息,所以会在WINCC中自动生成结构变量,所以所有变量都可以以结构变量实例的方式建立。 也不仅仅WINCC,理论上讲只要读懂了导出文件的语法结构,所有SCADA软件都可以实现导入。
而有的SCADA以及触摸屏HMI编程软件,甚至可以直接通过选择PORTAL的项目文件,直接读取到结构变量信息和建立结构变量。只要能够直接导入导出或在线链接的读取变量,就可以实现HMI/SCADA与西门子PLC的符号数据通讯,不再依赖绝对地址,所以也不再强制需要非优化。
现在主流的HMI/SCADA软件基本上都已经实现了。
(还没实现的 HMI/SCADA软件,就只能认为是非主流了,请各自反思。 )
而对于同样西家的软件产品,如果还不能直接优化数据通讯,这是很可笑的,也是不可接受的。----这时候需要反思的是使用者自己。
【万泉河工控评论2】
文章的评论区里有读者回复想要WINCC脚本的源代码。我也同样替整个行业暗暗叫苦。
可怜工控行业这么多年下来,仍然是每个人在一遍遍的重复造轮子。 这套代码,我在上述提及的2本书中都有过提供。然而我自己近些年都很少推荐了。
因为有完整的例子程序可以直接使用。 西门子官方提供的BST库,LBP库,CFL库中都有。都是可以直接拿来使用的。
也有同行了解到,最新版本的WINCC将不再支持VBS脚本,而转向支持JS脚本,担忧已有的库函数中的脚本无法直接使用,这一点就不必了。
LBP和CFL中都有针对WINCC UNIFIED的画面处理,那些程序都是JS语言的。而在JS中,语言实现都非常简单,一句函数调用而已。 也完全可以相信,西门子一定会推出针对WINCC新版本的CFL库,更是可以直接拿来使用。
所以,我建议的学习原则是,轮子的制造方法你需要学会,工艺流程需要能看懂,然而真的到具体工作的时候,不要从头造轮子。