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

前言闲话

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Web】CTFSHOW 文件上传刷题记录(全)

期末考完终于可以好好学ctf了,先把这些该回顾的回顾完,直接rushjava! 目录 web151 web152 web153 web154-155 web156-159 web160 web161 web162-163 web164 web165 web166 web167 web168 web169-170 web151 如果直接上传php文…

Android现代开发推荐 | Android Showcase 2.0

Android现代开发推荐 | Android Showcase 2.0 Android Showcase是一个完整的Android应用程序示例,它使用了现代的Android应用程序开发方法,集成了流行的开发工具、库和代码检查工具,以及强大的测试框架和持续集成(CI)…

【Vue】Vue 路由的配置及使用

目录捏 前言一、路由是什么?1.前端路由2.后端路由 二、路由配置1.安装路由2.配置路由 三、路由使用1.route 与 router2. 声明式导航3. 指定组件的呈现位置 四、嵌套路由(多级路由)五、路由重定向1.什么是路由重定向?2.设置 redire…

CSS 设置背景图片

文章目录 设置背景颜色设置背景图片背景图片偏移量计算原点背景图片尺寸设置背景图片位置设置背景图片重复方式设置背景范围设置背景图片是否跟随元素移动测试背景图片 本文概念部分参考:CSS背景background设置 设置背景颜色 background-color 设置背景颜色 设置…

算法训练 day24 | 77. 组合

77. 组合 题目链接:组合 视频讲解:带你学透回溯算法-组合问题 回溯其实和递归是密不可分的,解决回溯问题标准解法也是根据三部曲来进行的。 1、递归函数的返回值和参数 对于本题,我们需要用一个数组保存单个满足条件的组合,还需要另一个结果数…

安全帽识别-赋能深圳自贸中心智慧工地

在当今的建筑行业中,安全管理一直是一个至关重要的议题。深圳自贸中心项目在这方面进行了一次有益的尝试——实施智慧工地安全帽识别系统。本文将对这一创新举措进行简要介绍。 项目背景 深圳自贸中心,作为一项标志性建设项目,承载着城市发展…

acwing讲解篇之93. 递归实现组合型枚举

文章目录 题目描述题解思路题解代码 题目描述 题解思路 本题相当于二叉树的深度优先遍历,树的第i层表示第i个数选或不选,当选择了m次左节点后退出 我们记录当前递归的深度deep 然后用state进行状态压缩,state第i位是1表示选第i个数&#xff…

Linux中测试内存卡的读写速度方法

Linux下有很多工具可以测试内存卡的读写速度。以下是几个常用的工具: dd命令:dd命令可以用来复制文件和设备。通过指定数据块大小,可以测试内存卡的读写速度。例如,可以使用以下命令测试内存卡的写速度: dd if/dev/zer…

浪花 - 搜索标签前后端联调

前传:浪花 - 根据标签搜索用户-CSDN博客 目录 一、完善后端搜索标签接口 二、前后端搜索标签接口的对接 1. 使用 Axios 发送请求 2. 解决跨域问题 3. Axios 请求传参序列化 4. 接收后端响应数据 5. 处理后端响应数据格式 6. 搜索结果为空的页面展示 附&am…

第十一站:多态练习ODU

实现动态切换 ODU.h #pragma once #include <iostream> using namespace std; #define ODU_TYPE_311_FLAG "311" #define ODU_TYPE_335_FLAG "335" enum class ODU_TYPE {ODU_TYPE_311,ODU_TYPE_335,ODU_TYPE_UNKNOW };class ODU{ public:ODU();//发…

linux sudo指令提权

sudo指令 sudo 是在linux中用于以超级用户&#xff08;root&#xff09;权限执行命令的命令。它允许普通用户在执行特定命令时提升其权限&#xff0c;以完成需要超级用户权限的任务。sudo 的名称是 "superuser do" 的缩写。 格式 接受权限的用户登陆的主机 &#xff…

[AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯

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

C#,入门教程(21)——命名空间(namespace)与程序结构的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(20)——列表&#xff08;List&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124094382 编写软件&#xff08;大软件称为系统&#xff09;与盖大楼一个道理。 假设咱们现在需要盖一座名为“天梯大厦”的…

elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示

Upload 上传组件的使用 官方文档链接使用el-upload组件上传文件 具体参数说明&#xff0c;如何实现上传、下载、删除等功能获取文件列表进行file-list格式匹配代码 文件展示列表自定义为表格展示 使用的具体参数说明文件大小展示问题&#xff08;KB/MB&#xff09;文件下载代码…

RDMA Scatter Gather List详解

1. 前言 在使用RDMA操作之前&#xff0c;我们需要了解一些RDMA API中的一些需要的值。其中在ibv_send_wr我们需要一个sg_list的数组&#xff0c;sg_list是用来存放ibv_sge元素&#xff0c;那么什么是SGL以及什么是sge呢&#xff1f;对于一个使用RDMA进行开发的程序员来说&#…

全开源多城市同城信息小程序源码(Laravel 框架),同城分类信息发布便民小程序系统【非DZ】

同城生活分类信息小程序&#xff0c;人才招聘、房产二手 多城市地区同城分类信息发布&#xff0c;商家入驻等功能 小程序前后端代码开源无加密&#xff0c;可进行二次开发 【源码运行要求】 1、需要已认证的微信小程序 2、已备案的域名及服务器空间 推荐使用宝塔面板LinuxPHP…

全球 TOP 20 免费恢复删除的文件/照片的数据恢复软件

如今几乎一切都是数字化的。大多数人选择以数字方式存储所有重要文件、图片和其他数据&#xff0c;因为纯粹是为了方便。虽然数字存储使存储大量数据变得很方便&#xff0c;但它也面临着自己的挑战。 意外删除文件就像将它们存储在硬盘、SD 卡或 USB 驱动器上一样简单。这就是…

带你学C语言-指针(4)

目录 ​编辑 ⚾0.前言 &#x1f3c0;1.回调函数 ⚽2.qsort &#x1f3c9;2.1 qsort函数的模拟实现 &#x1f3be;3.sizeof与strlen对比 &#x1f3be;4.结束语 ⚾0.前言 言C之言&#xff0c;聊C之识&#xff0c;以C会友&#xff0c;共向远方。各位CSDN的各位你们好啊&…

7. UE5 RPG修改GAS的Attribute的值

前面几节文章介绍了如何在角色身上添加AbilitySystemComponent和AttributeSet。并且还实现了给AttributeSet添加自定义属性。接下来&#xff0c;实现一下如何去修改角色身上的Attribute的值。 实现拾取药瓶回血功能 首先创建一个继承于Actor的c类&#xff0c;actor是可以放置到…

python-基础篇-高级变量类型

文章目录 高级变量类型目标知识点回顾 01. 列表1.1 列表的定义1.2 列表常用操作del 关键字&#xff08;科普&#xff09;关键字、函数和方法&#xff08;科普&#xff09; 1.3 循环遍历1.4 **应用场景** 02. 元组2.1 元组的定义创建空元组元组中 **只包含一个元素** 时&#xf…