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

前言闲话

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

曾经和一位从业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中预留号对应的数据槽。

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

相关推荐
weixin_437398211 小时前
转Go学习笔记
linux·服务器·开发语言·后端·架构·golang
搬砖的小码农_Sky2 小时前
XILINX Zynq-7000系列FPGA的架构
fpga开发·架构
zkmall4 小时前
企业电商解决方案哪家好?ZKmall模块商城全渠道支持 + 定制化服务更省心
大数据·运维·重构·架构·开源
美狐美颜sdk8 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
小雷FansUnion11 小时前
深入理解MCP架构:智能服务编排、上下文管理与动态路由实战
人工智能·架构·大模型·mcp
慌糖11 小时前
微服务介绍
微服务·云原生·架构
June bug12 小时前
【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动
经验分享·分布式·职场和发展·架构·学习方法·测试·软考
森焱森15 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
go546315846517 小时前
修改Spatial-MLLM项目,使其专注于无人机航拍视频的空间理解
人工智能·算法·机器学习·架构·音视频·无人机
凌辰揽月18 小时前
8分钟讲完 Tomcat架构及工作原理
java·架构·tomcat