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

前言闲话

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/334464.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自养买家号测评(补单)在亚马逊、lazada、速卖通等平台上需要注意什么?

在当今的电商环境中,许多卖家选择自己养号进行测评。然而,这种做法并非毫无风险。亚马逊、Lazada、eBay、Shopee、Wish、速卖通、沃尔玛、阿里国际、Mercari和Tik Tok等平台都存在封号的风险。特别是在每年的风险控制期内,新号被封的情况尤为…

Rectangle:圆角矩形、渐变矩形、随机颜色矩形

import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("Rectangle")//圆角Rectangle {id: rect1x: 120; y: 10width: 100; height: 200;border.color: "black"border.width: 3radius: 10}//渐变Rectangle {id: rect2x: 230; y: 10width: …

西门子WINCC常用C脚本1

1.置位,复位,取反 获取变量值:GetTagBit(可以是位也可以是字节,字,双字等具体字母不同) 设置变量值:SetTagBit 置位:SetTagBit("变量名",1) 复位&#xff…

rbash环境变量提权

rbash为一个受限制的bash shell变体,限制用户在交互式环境中可使用的操作,以此提升系统安全性 可通过环境变量提权方式,越过此限制 export -p //查看环境变量 BASH_CMDS[a]/bin/sh;a //把/bin/sh给a /bin/bash export PATH$…

StackOverflow的架构

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 ​Stack Overflow 工程主管Roberta Arcoverde在最近接受 ​Scott Hanselman采访时透露了 Stack Overflow 架构的故事。他们每秒处理超过 6000 个请求&#xff0c…

如何利用在线网络靶场将安全提升至新水平

在 Standoff 365 的在线网络靶场中,任何公司都可以试验信息安全手段和企业网络设置,优化攻击检测、响应和事件调查的技能。 2023 年,我们不仅准许攻击者使用,也准许防御者使用。我们可以根据客户要求轻松部署 10 个细分行业中的任…

大创项目推荐 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python

文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的驾…

【不用找素材】ECS 游戏Demo制作教程(3) 1.17

一、生成墓碑 新建脚本如下: using Unity.Entities; using Unity.Mathematics;namespace ECSdemo {public struct GraveyardRandom : IComponentData{public Random Value;}}扩充GraveyardMono如下: using Unity.Entities; using Unity.Mathematics; …

代码随想录算法训练营day13|239.滑动窗口最大值、347.前K个高频元素

239. 滑动窗口最大值 347.前 K 个高频元素 239. 滑动窗口最大值 (一刷至少需要理解思路) 之前讲的都是栈的应用,这次该是队列的应用了。 本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。 题目链接/文…

linux磁盘,分区,挂载等等

1. 修改磁盘分区的标签 例如:733be18b-7baf-d84c-879d-ca3db465f179太长了,修改一下。 linuxchenxiao:/media/linux/733be18b-7baf-d84c-879d-ca3db465f179$ 先 sudo blkid sudo blkid 找到你想修改的UUID(唯一标识符) /dev/sda1: UUID"733be…

C++_Lambda表达式的完整介绍

目录 1. 什么是Lambda表达式 1.1 四种表达式的含义 1.2 lambda表达式各个成员的解释 2. 捕获列表 3. 编译器如何看待Lambda表达式 参考文章 参考: C Lambda表达式的完整介绍 - 知乎 c在c11标准中引入了lambda表达式,一般用于定义匿名函数,使得代码…

ChatGPT正确打开方式与GPT-4.5的key最新获取方式

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

基于SpringBoot的乡村特产推广管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

根据基因名批量查找它的Uniprot编号

背景: 前几天老师交给我一个任务,给我一个基因列表,让我查找它们所编码的蛋白质的蛋白质序列。我上了一下uniprot数据库,发现这个任务可以分成两步: 找到这个基因在Uniprot数据库中所对应的蛋白质编码根据蛋白质编码…

SQL SERVER无法连接到服务器解决过程记录

很久没用sql server了,这几天打算更新SQL SERVER数据库:SQL看这一篇就看够了(附详细代码及截图) 这篇文章,发现连接不上服务器。 找一下解决办法。 一、打开服务界面 在键盘上按“WINR”快捷键,打开运行…

【51单片机Keil+Proteus8.9】温室盆栽灌溉系统

实验五 实验名称 温室盆栽灌溉系统 软件设计: 1. 定义对应的引脚和端口的别名。 2. 编写延时函数,用于控制程序的执行速度。 3. 编写LCD控制函数,包括发送命令和发送数据两种操作。 4. 编写显示函数,用于在LCD上显示字符串…

C# dataGridView 列的勾选框改变事件

dataGridView 增加一列 DataGridViewCheckBoxColumn 然后设置复选框值如下图: dataGridView增加两个事件 private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e){//提交改变,触发dataGridView1_CellValueChanged事件&…

3Dmax灯光学习(Vray灯光应用)

渲染效果图可以用渲染100哦,最高支持max2024,cr11,vr6.2,支持LUT和Acescg工作流等常用插件,同时森林插件7.43也进行了支持,注册填邀请码【7788】即可免费测试! 灯光应用 普通灯光/标准灯光(外景…

Unity vs Godot :哪个游戏引擎更适合你?

Unity vs Godot :哪个游戏引擎更适合你? 游戏引擎的选择对开发过程和最终产品质量有着重大影响。近年来,Godot和Unity这两款引擎受到广泛关注。本文将从多个维度对两者进行比较,以期为开发者提供正确的选择建议。 Godot和Unity都有…

mac PyCharm 上传文件到远程服务器+远程服务器下载到本地

1 部署配置 选择SFTP name:test6 输入ssh账号和密码。保存密码和30s心跳。 2 目录映射 Local path(本地mac机器):/Users/clevercode/PycharmProjects/test6 Root path(远程服务机器):/home/…