三层架构——工业控制领域简单理解

前言闲话

工业领域对好滴软件架构的需求不高,但不意味着可以用纯面向过程式编程解决问题,这样后期维护必将大乱。

曾经和一位从业30年的老电气工程师交流工业控制编程:

我问:为啥富士康这些大厂以前的机器都不联网?(挖个坑)

他答:为什么要联网,稳定就好,没什么数据要上传的。

我问:现在不是很多工厂都在弄什么智慧工厂,这不就连网了?

他回:是啊,MES系统最近10年都用得比较广泛了,但这个也是只是连内部。

我回:随着工厂的智能化,工厂内部数据的统计收集会更加广泛的,全厂数据联网云端控制是可以实现的。

他回:行业在发展,05年前没有你现在的这个职业(我从事工业软件自动化设备上位机开发),未来可期。

我问:你以前写程序用PLC写设备动作有什么好方法吗?

他回:状态机和写好注释

我回:是啊,我现在写上位机也是用状态机,很多公司也都是这种模式,但状态机有比较好的方式实现吗?

他答:有,每种设备都用不同的动作,也就是不同的状态,对于不同设备有不同的写法,不是一成不变的。(感觉像说了和没说一样)

印象中的三层架构


UI(表现层): 主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。

BLL:(业务逻辑层): UI层和DAL层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。

DAL:(数据访问层): 与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些操作都是基于UI层的。用户的需求反映给界面(UI),UI反映给BLL,BLL反映给DAL,DAL进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)

这里的三层架构在传统IT行业中的应用,但工业控制中,数据访问层貌似没有,但实际上数据访问层,应该为我们设备中的配置文件和产品信息数据,下面我们就对工业控制中的三层进行细致梳理。

工业控制中的三层

UI层:上位机的操作界面,通常会区分几个模块,自动画面,手动操作界面,参数配置界面。

BLL层:设备的动作逻辑全放在这一层,我们需要做的是尽量减少UI层对BLL的操作,但不限制UI层对BLL的读取,这个读取的主要作用是让操作者尽量多的了解设备的工作状态,这一层的构建是一门艺术,好的BLL层是可以很好的应对不同客户对同类型设备的特殊定制化需求,我们需要尽力的减少这设备各部分的动作逻辑耦合,同时提高复用,但在复用提高时不能引用太多的条件判断,过多的判断会给后面接收的同事制造很多的困难。

DAL层: 配置文件+产品信息数据,一款设备客户一般情况下会应对多款不相干产品的生产,此时DAL的作用就是存储生产时需要的动作数据信息(Recipe)。

三层以外

说到三成以外,就不得不说Mes,几乎所有的大厂都会上mes,但mes的使用程度都不尽相同,传统制造业行业(3c,新能源等)很难现在真正的黑灯工厂,主要原因是处于成本考虑,全车间自动化,搬运系统和EAP的成本非一般企业所能承受,到目前为止我也只在Fab厂里见过真正的黑灯工厂,Fab厂之所以能实现黑灯工厂,主要原因就是设备较为集中,产品的价值高,模糊的了解到一个光一套天车系统前期投资都在5-6亿,同时在半导体行业很有名的就是全部设备厂商都遵循Semi协议,只有这样才可能实现黑灯工厂,同时遵循Semi协议也给设备厂商增加了不少软件开发和维护成本,这里主要的成本就是人。简而言之卷的厂上不了EAP,人比机器便宜,除非能完成一个产品的创新化升级,能有较高的利润,同时对产品的每道工序的良率管理都有及其咳咳的行业。

一般情况,传统行业对Mes的需求主要集中在两点,当前机台状态和生成产品信息的收集;

当前机台状态

机台运行状态

机台各部件状态

机台报警

WPH

生成产品信息

良率

产品ID

产品加工前后特效

这里不在深入说了,后面会写一篇关于Mes和EAP理解文章;

对于工业控制,除了本身设备的稳定高效运行外,还需要将设备对接到工厂,这也就是三层架构以外的东西。

想法实现

实现三层架构的好处在文章开头有说:避免混乱。

这里我简单的说一下想法实现。

整个软件分为几个模块:

硬件模块

逻辑模块

数据管理模块

UI模块

进程管理模块

看门狗模块(进程管理模块双机)

各模块最好采用单独进程,之所以采用单独进程的原因主要是windous其实在某种程度上是没办法保证软件的绝对稳定,在一个模块崩溃后,不应影响整个软件运行,这是工业设备控制的一个重点(稳定),这也是为什么PLC能流行半个世纪兴盛不衰的原因之一。

各模块之间通过进程管理模块进行通讯,避免各模块的耦合,这里UI通过信号通道操作的就是逻辑模块和数据管理模块,后期Mes和EAP读取和操作的也是这两个模块。当前这里也可以用数据驱动UI,UI中预留号对应的数据槽。

上面只是提供一个简单的思路,其实有很多方法可以实现~~~

相关推荐
9527华安2 小时前
FPGA多路MIPI转FPD-Link视频缩放拼接显示,基于IMX327+FPD953架构,提供2套工程源码和技术支持
fpga开发·架构·音视频
三桥彭于晏9 小时前
B/S 跟C/S架构的区别
架构
小蜗牛慢慢爬行13 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
小扳15 小时前
微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)
java·服务器·分布式·微服务·云原生·架构
盛派网络小助手1 天前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
快乐非自愿1 天前
分布式系统架构2:服务发现
架构·服务发现
2401_854391081 天前
SSM 架构中 JAVA 网络直播带货查询系统设计与 JSP 有效实现方法
java·开发语言·架构
264玫瑰资源库1 天前
从零开始C++棋牌游戏开发之第二篇:初识 C++ 游戏开发的基本架构
开发语言·c++·架构
神一样的老师1 天前
面向高精度网络的时间同步安全管理架构
网络·安全·架构
2401_857026231 天前
基于 SSM 架构的 JAVA 网络直播带货查询系统设计与 JSP 实践成果
java·开发语言·架构