感觉好久没有认真地写一个贴子了,那都是Long long ago的事情了。 其实说起这个话题来,我是有很多话要说的,和技术有关的无关的都有。 先进入正题后续再唠叨吧。
我的项目想实现一个“快速”采集数据并进行上位机显示的功能(其实就是类似于博途内置的Trace功能),我称之为数字示波器吧。 那么这个项目有两个层面的技术需求:1是需要有上位机来“实时”显示这些数据,2是上位机得从PLC处快速采集数据。 其实在早几年前看资料知道西门子基于1500的软PLC,我知道我的方案是可以实施的。 但是,本人懒癌晚期啊! 买过一本"C#入门经典",偶尔翻一下,最后变成了"C#从入门到放弃"了!书也扔到一个角落里吃灰了... ... 正所谓祸兮福所倚,福兮祸所伏啊!影响全球的新冠病毒把我们按在家里不得动,也正好有这个时间,我又捡起了这本书,然后网上找视频,找资料,抄代码做实验,连续搞了十几天,基本是“C#从入门到不放弃”了!
短期的成果是把数据采集以1ms为周期(周期可设定),在PC上显示示波器(X轴代表时间轴,可设定,即缓存的数据量),(Y轴代表数据的物理量纲,同样可设定),也简单地实现了一个数据库的添加和导出功能,可以导出EXCEL格式或者CSV或者或者TXT格式。
等上班后,会接下来下一步工作,找1500S ODK, 首先,它包含和PLC,还可选内置的HMI,那么意味着我目前的项目直接完全移植过去就能用! 工作量几乎为零! 可能会有人问了,既然已经学了C#为什么不直接用C#写上位机,还要花钱买授权上内置的HMI Advance呢? 我的思维是,别人已经做好了,而且比我做得专业多了, 我花点钱就好了! 我把时间用在非标的的地方,才更能体现自己的价值!
通过这十几天的学习,心得有以下几点:
1、高级语言的模块化和封装性确实是目前PLC语言没法比的,我的这些代码都是网上抄的,然后试着读懂它,根据自己的需求去修改以满足我的项目需求。
2、讨论高级语言(以C#为例)的类是PLC的FB还是FC(以西门子PLC为例)? 没有意义! 这纯粹是两个不同的东西! 只能说类和FB有一个共同点都是“模板”, 但是它们的不同点更多。
2a : 类有构造数据,FB没有;
2b: 类有Static成员,FB没有(看起来FB建立的变量叫Static_1,但实际上这个Static和类的Static完全两码事,只不过碰巧叫了一个名字而已) ,类的Static是所有它的实例的公有成员,而FB的Static只属于它单个的背景数据块,只不过公开了访问。
2c: 类可以继承,FB没有;
2d:类有多态,而FB想都别想。 通过多态,实现了父类实例装子类实例,才可以很方便地进行代码的“合并同类项”。
... ....还有更多的不同,暂时我还没有消化,或者说一时也写不出来那么多。
3、C#之类的语言,并不像某些人吹嘘得如何如何高端。 我们总喜欢通过贬低别人来抬高自己。 我承认,C#的编程相对PLC编程肯定要难一些。 但是,它并不会是什么高深的技术,有高中基础的人通过一些培训班后多加练习也照样可以掌握(我看的视频,就是基础班的,并不需要多少基础)。 最近几年看论坛上各种讨论高级语言的时候,都喜欢把PLC编程贬得一无是处。 对! PLC编程是相对简单,可是工控就仅仅是PLC编程吗? 我今天的工资待遇,PLC编程只比较小的一部分,更多的是我对行业工艺的理解,我对客户需求的提炼,我对现场问题的反映速度和处理能力!这才是我值钱的地方,PLC编程只不过是个工具而已。 更直接的例子比如机械设计用画图软件ProE或者SolidWork之类, 很多大学生都掌握得很好了, 可是刚毕业的大学生能把机械设计好吗? 他知道要选什么材料?什么热处理方式?怎么加工更方便? 相对来讲,IT人士倒是基本只要编程了! 可是仅仅会编程的IT人士待遇又能如何呢? 更值钱的怕是那些提炼客户需求,搭建产品架构的人士吧?
暂时只想说这么多了,后续再加吧。 本来想传个视频的,结果不让传,只能截个图了,目前只是做好了框架,后续根据实际情况完善了。