你见过好多人折腾那些什么模块化、面向对象的玩意儿,结果还是把代码搞得乱七八糟吧?现在大家都瞎搞,随便把程序切几块就以为是面向对象了。比如说吧,有些朋友喜欢把一个启保停的动作弄成一个块,然后不同的电机都调用这个块。乍一看挺好,不过要是项目里东西多了,会冒出一大堆FC。而且还会出现那种层层嵌套的情况,查个问题得像套娃一样往里钻。你要调一个电机FB测试没问题了,别人想用还得同时把它下面三个FC全带着,漏一个都不知道咋回事。很多人觉得只要把动作拆开各自弄成FC就是最好的写法,其实大错特错。 我们可以用另一种方式来对比一下。把这个电机的控制、速度还有状态封装到一起,这样是不是比之前的好?起码别人只用调这一个FB就行,不需要再复制其它FC了。这个FB是个完整的独立功能块,监控的时候也不用点好几下进去看套娃式的东西。这种方式确实比前面那群人强点。 不过这还不算最好的。虽然你明白了封装的意思,但咱们还得更上一层楼去理解面向对象。很多搞电气的朋友都有个误区,喜欢把驱动器或者执行元件当对象,我觉得这不对。真正的控制对象应该像人一样,手和脚只是人的一部分驱动,你不能光把手或脚当对象看。你得学会把人当对象,这人除了手脚(驱动执行部分),还有肤色、健康状况、体温是不是正常,还有吃饭睡觉这些动作。要是都拆分成功能块去调用的话就难办了。 所以咱们写程序的时候不能拆分人这个对象,得把它所有的驱动执行部分、属性信息和动作都包含进去。用一个FB把这些都装进去就行。 在设备控制里也一样,别光盯着执行元件看。要学会把某个设备或者设备的某个组件看成一个对象。比如一个组件可能有电机、气缸、传感器、指示信号等等。它有各种属性和事件都关联在这一个组件上。这时候你就能把它看成一个对象了。 西门子的FB284大家都知道吧?它不是把伺服电机当对象,而是把整个轴当对象。这个轴有回原点动作、绝对定位动作、相对定位动作,想干啥直接赋值就行。它还能设定速度位置显示实际值,还有报警信息和代码显示出来。它就是一个完整的轴对象。 如果你把这些属性和动作都拆成一个个小的独立FC让别人用的话就难办了。我要控制一个轴得熟悉七八个甚至几十个FC,还得把它们串起来才能用,这不是好程序。而FB284只需要你调用一个FB就能搞定所有轴控制任务。 优秀的工程师早就告诉咱们:1、别光盯着一个动作分解代码;2、要关注设备组件是啥;3、控制好一个对象就能搞定所有同类对象。