用C#开发的配方管理系统(c#配置文件详解)
ccwgpt 2024-10-23 09:30 50 浏览 0 评论
开篇
目前自动化工程师学习C#的越来越多,其目的无非有二,一是拓展视野,通过软件工程的思想来提升PLC的编程技能。二是寻找机会转型,就算不转型,现在需要既懂自动化又懂C#的场景还是挺多的,这种工程师也比较难找。机会只垂青于有准备的人,多一项技能肯定不是坏事。但是实际上真正能入门,甚至能够独立承担项目的人不多。因为目前有机会接触自动化和信息化融合的项目的工程师不多,而既懂自动化又懂信息化的工程师更是少之又少。实际项目又绝非DEMO那么简单,需要考虑的东西比较多,而业务逻辑的复杂性就更不用说了。以至于很多人学习了一段时间C#,基本知识点都掌握了,但是面对项目还是不知道如何下手。
本文就一个真实项目来简单介绍其开发中的一些问题及针对客户需求的一些解决方法,供大家参考。
项目简介
有两条产线是根据配方进行生产的,需要通过独立的配方管理系统(RMS)提供对生产配方的管理功能,包括添加、修改、删除,另外还需要跟踪生产过程,生成批次报表。
控制系统采用的是西门子的PCS7系统,AS站是冗余架构。
项目特点
1、设备多,配方多,各种数据块百来个,数据量很大;
2、冗余PLC,主备自动切换;
3、可能多个岗位需要在RMS系统上进行工作;
针对这些需求,我们确定了项目采用C/S架构,数据采集、归档服务由服务端完成,客户端提供配方管理、报表查询等工作。同时通过权限管理为每个岗位分配不同的功能。
网络图
RMS部署在一台独立的服务器上,允许局域网里面的客户端链接访问。OS SERVER上部署PCS7系统,用于生产操作。
项目架构
RMS系统采用传统的三层架构。Infrastructure包含了项目中用到的Models、一些常规操作类库。DAL中包含了对PLC及数据库访问的操作,业务逻辑层比较简单,直接写到服务端MicroFramework中了。UI层就是Client了。
一些技术点
整个项目基于WinForm开发,没有什么太复杂的技术。对于专业的IT从业人员来说可能没什么,但是对于有志于C#开发的自动化工程师来说还是值得一说的。
WinForm
WinForm的技术虽然比较古老了,但是在工控领域还是使用非常广泛的。在微软最新的.NET6中也同样支持它,所以大家不同担心它的前景。另外就是有人吐槽WinForm界面难看,其实就算是WPF,没有第三方类库也是很难做出美观的画面的。
如果肯用心或者借助一些第三方类库,WinForm也可以制作出非常美观的画面。比如下面的这个画面,你能看出它是使用WinForm开发的吗。
PLC通信
PLC通信这块用的是Sharp7,这是网络上的一款开源S7协议库。不用担心它的稳定性,根据我们之前在其它项目中的使用经验来看,它的质量还是值得信赖的。
Sharp7虽然质量不错,但是我们通常在项目中不会直接使用它,因为效率太低。为了提高开发效率,我们都会对Sharp7进行封装。比如在我们的HwLib.Commucation中的S7通信就是对Sharp7的二次封装,实现了在C#项目中基于变量的访问。不过这个项目有点特殊,一是因为变量太多,如果按变量配置那么效率太低,所以该项目是基于Model<->DB的批量访问。二是该项目是冗余PLC,所以又额外增加了主备PLC自动切换功能。
数据库
为了项目便于部署,这里我们使用的是SQLite,而没有使用MySQL或者SQL SERVER这样的网络数据库。不用担心SQLite的性能,对于这个数量级的数据,SQLite的性能足够了。在数据表的规划上我们对配方、生产批次、实时数据进行分库分表管理,进一步规避了SQLite的性能问题。
O/RM
ORM框架我们使用的是SqlSugar,一款老牌的.NET开源ORM框架。它完美支持SQLite,且支持CodeFirst,使得开发效率高了不少。
UI界面库
WinForm的UI库非常多,最出名的非DevExpress莫属,不过它是收费的,当然也有一些免费的UI库,比如CSkin这些。另外GitHub上面也有开源的不错的UI库。
Server
SERVER主要负责和PLC的数据交互,配方上传和下载,对批次实绩的归档,数据库的管理以及为Client提供Http接口服务。SERVER的界面比较简单,如下图所示
Client
Client负责人机交互,主要是对配方的一些操作,比如增加、修改、删除等维护工作,另外提供对生产批次的查询。Client和Server之间通过HTTP进行通信,传送的报文是JSON格式的字符串。
C#与工业自动化+项目套装
如果你正有同样的问题,苦于不知道真正的C#项目是如何开发的,那么可以参考我们的<C#与工业自动化+项目实例套装>。本教程以一个应用在生产环境中的实际项目为例来一步步介绍如何开发上位机软件。它不是一个DEMO,它是切切实实运行在生产环境中的实际项目。在学习中,我建议大家跟着教程一步步重新做一遍,因为这样会加深对整个项目的理解,也利于以后在其它项目中熟练使用各个知识点,毕竟每个项目是不同的,生搬硬套未必行得通。另外在做的时候尽量手敲,而不是从项目中直接拷贝源码,这样对提升编码能力也有好处。至于第一个问题,我们设有专门的C#技术群,供大家平时学习交流。
本项目涉及下面技术:
1、泛型;
2、反射;
3、数据库(SQL封装);
4、S7通信;
5、文件操作;
6、异步;
7、自定义控件;
8、重载
9、正则表达式;
本项目具有下面特色功能:
1、PLC断线自动重连;
2、数据库自动维护;
3、PLC操作类封装;
4、数据库操作类封装;
5、O/RM;
6、MVVM;
7、自动更新;
相关推荐
- 十分钟让你学会LNMP架构负载均衡(impala负载均衡)
-
业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...
- AGV仓储机器人调度系统架构(agv物流机器人)
-
系统架构层次划分采用分层模块化设计,分为以下五层:1.1用户接口层功能:提供人机交互界面(Web/桌面端),支持任务下发、实时监控、数据可视化和报警管理。模块:任务管理面板:接收订单(如拣货、...
- 远程热部署在美团的落地实践(远程热点是什么意思)
-
Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细节。在阅读本文之前,建议大家先熟悉一下Spring源码、SpringMVC源码、SpringBoot...
- springboot搭建xxl-job(分布式任务调度系统)
-
一、部署xxl-job服务端下载xxl-job源码:https://gitee.com/xuxueli0323/xxl-job二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库三、启动...
- 大模型:使用vLLM和Ray分布式部署推理应用
-
一、vLLM:面向大模型的高效推理框架1.核心特点专为推理优化:专注于大模型(如GPT-3、LLaMA)的高吞吐量、低延迟推理。关键技术:PagedAttention:类似操作系统内存分页管理,将K...
- 国产开源之光【分布式工作流调度系统】:DolphinScheduler
-
DolphinScheduler是一个开源的分布式工作流调度系统,旨在帮助用户以可靠、高效和可扩展的方式管理和调度大规模的数据处理工作流。它支持以图形化方式定义和管理工作流,提供了丰富的调度功能和监控...
- 简单可靠高效的分布式任务队列系统
-
#记录我的2024#大家好,又见面了,我是GitHub精选君!背景介绍在系统访问量逐渐增大,高并发、分布式系统成为了企业技术架构升级的必由之路。在这样的背景下,异步任务队列扮演着至关重要的角色,...
- 虚拟服务器之间如何分布式运行?(虚拟服务器部署)
-
在云计算和虚拟化技术快速发展的今天,传统“单机单任务”的服务器架构早已难以满足现代业务对高并发、高可用、弹性伸缩和容错容灾的严苛要求。分布式系统应运而生,并成为支撑各类互联网平台、企业信息系统和A...
- 一文掌握 XXL-Job 的 6 大核心组件
-
XXL-Job是一个分布式任务调度平台,其核心组件主要包括以下部分,各组件相互协作实现高效的任务调度与管理:1.调度注册中心(RegistryCenter)作用:负责管理调度器(Schedule...
- 京东大佬问我,SpringBoot中如何做延迟队列?单机与分布式如何做?
-
京东大佬问我,SpringBoot中如何做延迟队列?单机如何做?分布式如何做呢?并给出案例与代码分析。嗯,用户问的是在SpringBoot中如何实现延迟队列,单机和分布式环境下分别怎么做。这个问题其实...
- 企业级项目组件选型(一)分布式任务调度平台
-
官网地址:https://www.xuxueli.com/xxl-job/能力介绍架构图安全性为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;调度中心和执...
- python多进程的分布式任务调度应用场景及示例
-
多进程的分布式任务调度可以应用于以下场景:分布式爬虫:importmultiprocessingimportrequestsdefcrawl(url):response=re...
- SpringBoot整合ElasticJob实现分布式任务调度
-
介绍ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控、...
- 分布式可视化 DAG 任务调度系统 Taier 的整体流程分析
-
Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关...
- SpringBoot任务调度:@Scheduled与TaskExecutor全面解析
-
一、任务调度基础概念1.1什么是任务调度任务调度是指按照预定的时间计划或特定条件自动执行任务的过程。在现代应用开发中,任务调度扮演着至关重要的角色,它使得开发者能够自动化处理周期性任务、定时任务和异...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)