首先请注意:这不是通常所说的Modbus通信模块。而是一个具体设备的FB,和它在触摸屏上的交互界面。
Modbus是作为这个设备的IO被嵌入进FB。我追求的是:一个设备只需一个FB实例,通信只是它的IO管脚。
为什么要这样呢?因为作为买来的一个物理实体设备,485和Modbus是长在它身体里的。并不存在一个单独的可以拿在手里的实体物件叫Modbus模块,通信本来就是设备的内在功能的一项。而我喜欢抽象与现实的对称,也就是:现实中的一个可以拿在手里的完整东西,程序中就对应一个FB,这就是它的抽象孪生,除此没了。
我不想额外造出一个在现实中不存在单独对应体的抽象体。
解耦分隔在FB内部就可以了,正如现实中的一个完整设备,它的内部各个组件功能也可以相对独立一样。
设备FB内部采用的是分层解耦。
多个设备FB实例之间,是平行调用的,没有上级管理者。不管是同类设备,还是不同种类的,都可以。
开源的意义在于这个设计背后的思想。至于能理解和启发运用到什么程度,看代码吧。我在其它帖子中介绍过,其实是模仿了法治社会中的自由人的行为方式。
之所以说它是通用架构:如果你理解了,可以按照它的设计思想,很容易把它改写成任何种类Modbus设备,且可以灵活扩展和增减,适应多变且复杂的任何场景需求。这是个面向开放的设计。
其实并不局限于Modbus。任何多个实体之间,存在竞争性协调使用稀缺公共资源的场景下,都可以采用这个架构中的调度和解耦思想。这才是它的真正本意。
我以前分享过用自由口PtP做的MB-Master指令,还有可以运行在UDP上的MB-Master指令,它们可以被嵌入这个框架。
可以体验:一个设备FB,同时具备通过PLC本体485串口,和通过以太网UDP走串口服务器,可以在不同通道间,从HMI界面自由切换,来运转Modbus的效果。
项目是用博图V14Sp1的做的(PLC部分全部是SCL),体积大约40兆,归档后也有2.6兆,只好用网盘分享了,链接是永久的。
链接:
https://pan.baidu.com/s/1BrLdX9dee_lPJErdFWTbmA?pwd=qixe
提取码:qixe
项目硬件:1214C + CB1241 + TP1200 + 5个West品牌的温控器
温控器型号:在HMI首页上可以看到。这个英国品牌现在国产也不贵。如果按照首页上的型号买两个,可以连上PLC实机体验效果,能帮助理解架构设计。
PLC与HMI之间采用的是:读写分离的、接口式的、上下位交互设计。
这个项目中的UDT没用放进库。HMI上没有用面板,用了多路复用。
---------------------------------------------------------------------
退一步,用结构解决问题。不欢喜于局部算法。
用结构把复杂场景分解成简单元素。共性是一种结构,可以为元素进行分类。
把生活投射进结构设计,表里对称。