在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开始做了两年web、期间也整了一段时间winform。后来做了两年工控上位机,也就是做工控这两年发现机器跟面向对象真是如此贴切,也是我从处理数据和流程的思维转变为面向对象思维的开始。这对我后来学习mvc5、owin、.net core以及其它各种框架的学习有非常大的帮助,我发现我能看懂源码,也能理解这些大牛为什么要这么去设计这些类,这些类是如何协同工作去实现一个复杂的可扩展的框架,因为这些框架、设计模式最最根本还是以面向对象的思维来处理具体场景的具体问题。这一瞬间有一百万种可能,转变思路也许就在一瞬间。 本篇以一个机器上的一个组件来聊下面向对象这回事。以及c#开发工控是多么的方便,其它方式我不咋懂,大概晓得有MFC/QT/PLC之类的 二、案例动态称重鱼分选机视频:案例视频 初代版本,虽然看着挺low,但是功能性和效率还是挺高的。分拣效率150条/分钟 精度±0.5g,带按数量或重量自动分包功能 功能:人工摆鱼上料,经过称重台称重,上位机实时获取重量计算得到鱼的重量,根据设置决定应该分拣到哪个料斗。上位机程序发送开关量指令控制分选。 物流包裹分拣系统视频:案例视频 视频没拍全 功能:人工上包裹,经过扫码、称重、 由上位机将条码发往海关接口 ,海关返回包裹状态,由上位机根据状态控制分拣设备进行分拣 别人家的是视频,但是看样子不如我们公司的,我们分拣速度比它快,而且是双边分的 二、面向对象在自动化设备中的应用
省略扫码、称重、API请求等步骤,我们单单来看看这个分拣机部分,从图中我们可以看到有包裹、光电、分拣机。 流程和功能非常简单,现在想想你会怎么来实现....... 问题来了,公司考虑成本,和机器不断改进,无论是结构上还是选用的设备上都可能不断变化 现在再思考下,这些要求合理吗?你会怎么做? 面向对象的思想来说就是每个东西对应一个对象,变化地方用接口隔离 条码、重量、状态、等熟悉; 光电: 将它定义为一个抽象类或接口,因为它内部包含一个通讯接口,比如某些时候我们用的输入模块来作为信号采集,那么我们同学组件要有一个实现类,某些时候我们是通过工控电脑直接连的光电,就直接调用win32API。但是对于我们光电类,它只要关心获取当前光电状态就行了,不关心到底通过什么样的方式去获取 分拣机: 分拣机的主要工作是当光电触发时从包裹队列去除第一个包裹,检查状态,调用通讯模块发送指令。因此它内部包含一个光电对象,并注册光电的相关事件。关于通讯又得做成接口,以应对不同的控制方式 三、总结哈哈,触不及防的总结。因为不想写了。总之就是这个场景,如果你来做会怎么做?思考下把机器的各个部件都定义为类,会怎么样,整个机器哪些地方会可能变化,类与类之间尽量用组合,界面与这些机器对象如何保持同步。 这样设计出来的上位机控制程序,相比PLC还是有极大的优势,至少应对变化,比如换另外一种机器,你的大部分组件可能都可以复用。 我们的思想被三层机构坑了,看了太多的分层业务逻辑要么在aspx.cs里 要么在controller里,要么在dal里 还有很多车主存储过程里。如果你考虑下所有对象都在内存里,不考虑持久化,也许更能理解。 我TM写了些啥...
|
请发表评论