在打通上位机和PLC的基本通信后,今天进入系统设计的核心部分DevMangement,可以说舞台机械控制系统的核心就是围绕着Dev展开的。在系统中所有的被控对象都抽象为设备,包括我们常见的吊杆,升降台,也包括来自音频的TIMECODE或者来自灯光的DMX512信号,在系统中都是演艺设备EntertainmentDev。
在曾经的设计中,苦于TIA不支持OOP,故设备的描述并不能层层抽象继承完成,故我们常常建立一个很大的结构数据,把所有设备的属性都包含其中,只是对于不适用于该设备的属性不使用,这导致数据结构相当的臃肿。
同时TIA中也不存在继承关系,为了保持程序架构的相对稳定,故不同的设备或者变频器驱动只能用switch case分类调用,这导致的结果是我常常为S7-1200的工作存储器空间发愁。
今天本是早早地做好准备工作,面对AX这样的OOP利器,计划大展身手的。但是面对如何OOP,如何设计这个层次结构,我是犯难了,几乎是直到晚上才开始动笔。还好PLCOpen有很好的OOP Application Examples。
同时AX中有很好的例程《Motion OOP application example》。
在我的开发经验中,面对新的设计模式或者开发工具时,我一般是坚持书读百遍其意自现这个道理的。所有今天在我至少把这两个文档读了3遍后,终于有了状态。
在上图的启发下,把所有演艺设备的行为都抽象成了操作接口,通过不同设备类和具体Drv层进行Attach。
对于复杂设备,比如三维威亚,全向车台或者演播演艺临时多个吊挂设备组成的编组,通过AxisGroup抽象。
思路确定后及开始实施,今天先确定部分行为接口,做MVP测试,部分接口如下:
此刻,休息的闹钟已第二次敲响,为了不重蹈上周低产出的覆辙,此刻我还是从长计议,选择关机睡觉,明天继续......