news 2026/4/18 0:51:49

大型源码C# MES WPF CS/BS两套 1, 整体程序由WPF(c#)开发; 2,各个文...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大型源码C# MES WPF CS/BS两套 1, 整体程序由WPF(c#)开发; 2,各个文...

大型源码C# MES WPF CS/BS两套 1, 整体程序由WPF(c#)开发; 2,各个文档齐全; 3,需要您对WPF和程序架构有比较深入理解; 4,包含服务程序; 5,包含SCADA数据采集系统; 6,包含数据看板; 7,包含各种组件; 8, 包含完整的各个处理脚本。 9, 由多个产品线程序组成。 10, 数据库的使用。 11, 远程服务器的调用。 12, 分多个生产文件夹,都是一个项目。 环境: vs2019 数据库: oracle

这坨WPF写的MES系统有点东西,十几个产品线在同一个解决方案里折腾,Oracle数据库扛着每秒上千条的生产数据。先看主界面这个三维看板,XAML里直接嵌套了HelixToolkit的视口,实时渲染设备状态:

<helix:HelixViewport3D x:Name="viewport"> <helix:SunLight/> <ModelVisual3D Content="{Binding MachineModel}"/> <CoordinateSystemVisual3D/> </helix:HelixViewport3D>

配合着MVVM模式,数据绑定直接甩给Prism的BindableBase。看这个车间状态聚合器,用TPL数据流处理实时更新,比传统事件驱动骚气多了:

var bufferBlock = new BufferBlock<DeviceData>(); var actionBlock = new ActionBlock<IEnumerable<DeviceData>>(data => { Dispatcher.Invoke(() => Machines.ObserveReplacements(d => d.Update(data))); }, new ExecutionDataflowBlockOptions{ MaxDegreeOfParallelism = 4 }); bufferBlock.LinkTo(actionBlock);

SCADA采集层更野,OPC UA客户端直接硬核封装成Windows服务。注意这个异步订阅的骚操作,避免UI线程卡成狗:

var subscription = await _session.CreateSubscriptionAsync(1000); subscription.DataChangeReceived += (_, e) => { var cache = new DataPointCache(); Parallel.ForEach(e.NotificationMessage.NotificationData, dp => { cache.QueueRawData(dp.Value); }); _dataPipeline.Enqueue(cache); };

数据库操作别傻乎乎用EF,直接上OracleCommand暴力执行存储过程。看这个批量插入的姿势,用ArrayBindingSize直接干翻Dapper:

var cmd = new OracleCommand("insert_production_data") { CommandType = CommandType.StoredProcedure, ArrayBindCount = data.Count }; cmd.Parameters.Add("p_values", OracleDbType.Double).Value = data.Select(d => d.Value).ToArray(); conn.ExecuteNonQuery(cmd);

服务层用Topshelf裹着WCF双工通信,回调机制处理实时报警。注意这个双向绑定的坑,得用SynchronizationContext.Post绕开线程问题:

OperationContext.Current.GetCallbackChannel<IMesCallback>().OnAlertReceived( new AlertPacket { Level = AlertLevel.Critical, Message = $"设备{deviceId}温度超限" });

产品线差异处理才是真功夫,用条件编译+策略模式组合拳。比如食品线和电子线不同的质检流程:

#if FOOD_LINE new VisionInspector(new FoodSpecValidator()).Execute(); #elif ELECTRONIC_LINE await new XrayScanner().ScanAsync(ct); #endif

项目结构分成二十几个模块化工程,每个产品线独立成文件夹。解决方案文件里玩条件引用,Jenkins打包时动态替换配置文件:

<ProjectReference Condition="'$(ProductLine)'=='A'" Include="..\ProductA\ProductA.csproj"/>

这套玩意最难搞的是WPF的内存泄漏,尤其是那个自定义的GanttChart控件。得用Snoop抓泄露对象,最后发现是静态事件没解注册。现在看板数据刷新时强制GC.Collect,虽然有点脏但管用。

大型源码C# MES WPF CS/BS两套 1, 整体程序由WPF(c#)开发; 2,各个文档齐全; 3,需要您对WPF和程序架构有比较深入理解; 4,包含服务程序; 5,包含SCADA数据采集系统; 6,包含数据看板; 7,包含各种组件; 8, 包含完整的各个处理脚本。 9, 由多个产品线程序组成。 10, 数据库的使用。 11, 远程服务器的调用。 12, 分多个生产文件夹,都是一个项目。 环境: vs2019 数据库: oracle

(完)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 7:42:13

学长亲荐2026TOP9AI论文软件:本科生毕业论文全场景测评

学长亲荐2026TOP9AI论文软件&#xff1a;本科生毕业论文全场景测评 推荐1&#xff1a;「千笔AI」—— 一站式学术支持“专家”&#xff0c;学术写作全场景王者&#xff08;推荐指数&#xff1a;★★★★★&#xff09; 在众多AI论文工具中&#xff0c;「千笔AI」凭借其强大的功…

作者头像 李华
网站建设 2026/4/17 19:25:14

面向 OpenHarmony 的 Flutter UI 实践:便签卡片组件从设计到落地

文章目录面向 OpenHarmony 的 Flutter UI 实践&#xff1a;便签卡片组件从设计到落地前言背景Flutter OpenHarmony 跨端开发介绍架构定位开发核心代码便签卡片组件实现代码结构解析1. 状态驱动的颜色设计2. Card InkWell 的交互组合3. 顶部信息区&#xff1a;标题 完成状态4…

作者头像 李华
网站建设 2026/4/17 19:34:25

linux 如何查看udp协议缓冲区的默认大小

在 Linux 系统中&#xff0c;UDP 协议的接收和发送缓冲区大小可以通过内核参数进行配置。要查看 UDP 缓冲区的默认大小&#xff08;即未显式设置时的初始值&#xff09;以及最大限制&#xff0c;可以使用以下方法&#xff1a;1. 查看系统级别的 UDP 缓冲区默认值和限制这些值由…

作者头像 李华
网站建设 2026/4/16 18:07:27

【AI大模型开发】-基于FAISS的语义搜索系统(实战)

向量数据库实战&#xff1a;基于FAISS的语义搜索系统 一、项目概述 1.1 什么是向量数据库&#xff1f; 向量数据库是一种专门用于存储、索引和检索高维向量数据的数据库系统。在AI领域&#xff0c;向量通常是指通过预训练模型&#xff08;如Transformer&#xff09;将文本、图像…

作者头像 李华
网站建设 2026/4/17 15:59:35

老张的AI助手,每天早上帮他念一遍:“你不是机器。”

第一章&#xff1a;晨间仪式的技术隐喻 当老张的智能音箱第七次用合成语音念出“你不是机器”时&#xff0c;他正在调试金融系统的模糊测试脚本。这个看似荒诞的晨间仪式&#xff0c;恰是软件测试从业者的生存宣言——在自动化测试覆盖率突破80%的2026年&#xff0c;人类测试工…

作者头像 李华
网站建设 2026/4/17 17:22:22

校园低碳出行路径推荐系统设计与实现

一&#xff0e;研究目的及意义 本报告紧密围绕校园低碳出行推广核心需求&#xff0c;以引导师生养成绿色出行习惯、助力校园绿色交通管理数字化升级为目标&#xff0c;设计实现适配校园场景的低碳出行路径推荐系统&#xff0c;覆盖需求分析、功能开发至测试验证全流程&#xff…

作者头像 李华