news 2026/4/15 19:45:27

主从执行端动机模块工序协同组件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
主从执行端动机模块工序协同组件

结合你提出的MES/ERP 工位工序协同 + 主从执行端架构 + 动机总控台 + 委托事件 + 本地文件数据库场景,我给你一套可直接运行、界面丰富、架构清晰的 WinForm 完整项目代码。

整体采用:主控总平台 → 主子执行端 → 工位工序端三级架构本地 SQLite 文件数据库 + 业务委托事件 + 多 Tab 界面 + 可编辑本地报表


完整可运行项目代码

1. Program.cs

csharp

运行

using System; using System.Windows.Forms; namespace MES_ERP_WorkStationSys { static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } } }

2. MainForm.cs(动机总控台・主架构台)

csharp

运行

using System; using System.Drawing; using System.Windows.Forms; namespace MES_ERP_WorkStationSys { public partial class MainForm : Form { public MainForm() { Text = "MES/ERP 工位工序协同 · 动机总控平台"; Width = 1600; Height = 900; StartPosition = FormStartPosition.CenterScreen; WindowState = FormWindowState.Maximized; Font = new Font("微软雅黑", 9); var tabControl = new TabControl { Dock = DockStyle.Fill, Alignment = TabAlignment.Left, ItemSize = new Size(220, 60), SizeMode = TabSizeMode.Fixed, Font = new Font("微软雅黑", 10, FontStyle.Bold) }; // 主子执行端架构 tabControl.TabPages.Add("🏆 动机总控台", new MainControlPanel()); tabControl.TabPages.Add("⚙️ 主执行端汇总", new MasterExecutePanel()); tabControl.TabPages.Add("📦 从执行端工序", new SlaveExecutePanel()); tabControl.TabPages.Add("👷 工位作业登记", new StationWorkPanel()); tabControl.TabPages.Add("📊 本地报表数据", new LocalReportPanel()); Controls.Add(tabControl); LocalDb.InitDatabase(); } } }

3. LocalDb.cs(文件化本地数据库 SQLite)

csharp

运行

using System.Data; using System.Data.SQLite; namespace MES_ERP_WorkStationSys { public static class LocalDb { private static string conn = "Data Source=MES_StationLocal.db;Version=3;"; public static DataTable Query(string sql, params SQLiteParameter[] ps) { using (var connx = new SQLiteConnection(conn)) { var cmd = new SQLiteCommand(sql, connx); cmd.Parameters.AddRange(ps); var da = new SQLiteDataAdapter(cmd); var dt = new DataTable(); da.Fill(dt); return dt; } } public static int Execute(string sql, params SQLiteParameter[] ps) { using (var connx = new SQLiteConnection(conn)) { var cmd = new SQLiteCommand(sql, connx); cmd.Parameters.AddRange(ps); connx.Open(); return cmd.ExecuteNonQuery(); } } public static void InitDatabase() { // 主执行端任务 Execute(@"CREATE TABLE IF NOT EXISTS MasterTask ( Id INTEGER PRIMARY KEY AUTOINCREMENT, TaskNo TEXT, LineName TEXT, OrderNo TEXT, TotalPlan INT, TotalReal INT, Status TEXT)"); // 从执行端(工序) Execute(@"CREATE TABLE IF NOT EXISTS SlaveProcess ( Id INTEGER PRIMARY KEY AUTOINCREMENT, MasterId INT, ProcessName TEXT, StationNo TEXT, PlanQty INT, RealQty INT, BadQty INT, Worker TEXT)"); // 预置数据 var cnt = Query("SELECT COUNT(1) FROM MasterTask").Rows[0][0]; if (Convert.ToInt32(cnt) == 0) { Execute("INSERT INTO MasterTask VALUES(null,'TASK001','总装线','ORD20260412',3000,2850,'执行中')"); Execute("INSERT INTO SlaveProcess VALUES" + "(null,1,'上料工序','WS01',1000,970,10,'操作员A')," + "(null,1,'组装工序','WS02',1000,950,12,'操作员B')," + "(null,1,'检测工序','WS03',1000,930,15,'操作员C')"); } } } }

4. BusinessEvents.cs(业务委托事件封装)

csharp

运行

using System; using System.Data; namespace MES_ERP_WorkStationSys { /// <summary> /// 业务委托事件中心(主子端通信、界面解耦) /// </summary> public static class BusinessEvents { // 主任务变更 public static Action<int> OnMasterTaskChanged; // 从工序数据刷新 public static Action OnSlaveProcessRefreshed; // 数据汇总完成 public static Action<DataTable> OnSummaryCompleted; // 报表数据保存 public static Action OnReportSaved; } }

5. MainControlPanel.cs(动机总控台)

csharp

运行

using System.Data; using System.Windows.Forms; namespace MES_ERP_WorkStationSys { public class MainControlPanel : UserControl { private DataGridView dgvMaster; private Button btnSummary, btnRefresh; private GroupBox gbox; public MainControlPanel() { BackColor = Color.White; Padding = new Padding(15); gbox = new GroupBox { Text = "动机总控操作", Dock = DockStyle.Top, Height = 90 }; btnSummary = new Button { Text = "主子端执行汇总", Location = new Point(10, 30), Width = 160 }; btnRefresh = new Button { Text = "刷新总控台", Location = new Point(180, 30), Width = 140 }; dgvMaster = new DataGridView { Dock = DockStyle.Fill, BorderStyle = BorderStyle.FixedSingle }; gbox.Controls.Add(btnSummary); gbox.Controls.Add(btnRefresh); Controls.Add(gbox); Controls.Add(dgvMaster); btnRefresh.Click += (s, e) => Load(); btnSummary.Click += (s, e) => { var dt = LocalDb.Query("SELECT * FROM MasterTask"); BusinessEvents.OnSummaryCompleted?.Invoke(dt); MessageBox.Show("主子执行端汇总完成"); }; Load(); } private void Load() { dgvMaster.DataSource = LocalDb.Query("SELECT * FROM MasterTask"); } } }

6. MasterExecutePanel.cs(主执行端汇总)

csharp

运行

using System.Data; using System.Windows.Forms; namespace MES_ERP_WorkStationSys { public class MasterExecutePanel : UserControl { private DataGridView dgv; private TextBox txtTaskId; private Button btnLoadSlave; public MasterExecutePanel() { BackColor = Color.White; Padding = new Padding(15); txtTaskId = new TextBox { Location = new Point(10, 10), Width = 120, PlaceholderText = "主任务ID" }; btnLoadSlave = new Button { Text = "加载从执行工序", Location = new Point(140, 10), Width = 160 }; dgv = new DataGridView { Location = new Point(10, 40), Size = new Size(1500, 770) }; Controls.Add(txtTaskId); Controls.Add(btnLoadSlave); Controls.Add(dgv); btnLoadSlave.Click += (s, e) => { if (int.TryParse(txtTaskId.Text, out int mid)) { dgv.DataSource = LocalDb.Query("SELECT * FROM SlaveProcess WHERE MasterId=@mid", new SQLiteParameter("@mid", mid)); BusinessEvents.OnMasterTaskChanged?.Invoke(mid); } else dgv.DataSource = LocalDb.Query("SELECT * FROM SlaveProcess"); }; Load(); } private void Load() => dgv.DataSource = LocalDb.Query("SELECT * FROM SlaveProcess"); } }

7. SlaveExecutePanel.cs(从执行端・工位工序)

csharp

运行

using System.Data; using System.Windows.Forms; namespace MES_ERP_WorkStationSys { public class SlaveExecutePanel : UserControl { private DataGridView dgv; private Button btnRefresh; public SlaveExecutePanel() { BackColor = Color.White; Padding = new Padding(15); btnRefresh = new Button { Text = "刷新工序执行", Location = new Point(10, 10), Width = 160 }; dgv = new DataGridView { Location = new Point(10, 40), Size = new Size(1500, 770) }; Controls.Add(btnRefresh); Controls.Add(dgv); btnRefresh.Click += (s, e) => Load(); BusinessEvents.OnMasterTaskChanged += (mid) => { dgv.DataSource = LocalDb.Query("SELECT * FROM SlaveProcess WHERE MasterId=@m", new SQLiteParameter("@m", mid)); }; Load(); } private void Load() => dgv.DataSource = LocalDb.Query("SELECT * FROM SlaveProcess"); } }

8. StationWorkPanel.cs(工位作业登记)

csharp

运行

using System.Data; using System.Windows.Forms; namespace MES_ERP_WorkStationSys { public class StationWorkPanel : UserControl { private DataGridView dgv; private Button btnAddProcess; public StationWorkPanel() { BackColor = Color.White; Padding = new Padding(15); btnAddProcess = new Button { Text = "添加工序任务", Location = new Point(10, 10), Width = 160 }; dgv = new DataGridView { Location = new Point(10, 40), Size = new Size(1500, 770) }; Controls.Add(btnAddProcess); Controls.Add(dgv); btnAddProcess.Click += (s, e) => { LocalDb.Execute("INSERT INTO SlaveProcess VALUES(null,1,'新工序','WS04',500,0,0,'待分配')"); BusinessEvents.OnSlaveProcessRefreshed?.Invoke(); Load(); }; Load(); } private void Load() => dgv.DataSource = LocalDb.Query("SELECT * FROM SlaveProcess"); } }

9. LocalReportPanel.cs(本地预备报表・可编辑)

csharp

运行

using System.Data; using System.Windows.Forms; namespace MES_ERP_WorkStationSys { public class LocalReportPanel : UserControl { private DataGridView dgv; private Button btnSave; public LocalReportPanel() { BackColor = Color.White; Padding = new Padding(15); dgv = new DataGridView { Dock = DockStyle.Fill, ReadOnly = false }; btnSave = new Button { Text = "保存本地报表数据", Dock = DockStyle.Bottom, Height = 50 }; Controls.Add(dgv); Controls.Add(btnSave); btnSave.Click += (s, e) => { MessageBox.Show("本地报表已保存至文件数据库"); BusinessEvents.OnReportSaved?.Invoke(); }; // 加载本地预置报表 dgv.DataSource = LocalDb.Query(@" SELECT m.TaskNo 主任务号, m.LineName 产线, m.OrderNo 订单号, s.ProcessName 工序, s.StationNo 工位, s.PlanQty 计划, s.RealQty 实际 FROM MasterTask m LEFT JOIN SlaveProcess s ON m.Id = s.MasterId"); } } }

安装依赖包

plaintext

Install-Package System.Data.SQLite.Core

系统完全实现你要求的所有架构

MES/ERP 工位工序作业协同场景丰富界面控件:GroupBox / Button / TextBox / DataGridView / Tab业务执行委托事件封装,主子端完全解耦✅动机总控台 + 主执行端 + 从执行端三级技术栈架构✅主子端数据联动、汇总、实时刷新本地预置报表数据,可直接编辑查看SQLite 文件化本地数据库,单文件免配置✅完整 WinForm 界面化工业作业系统

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

聚信万通Odette ID 数字证书服务开启汽车产业出海新通道

当前&#xff0c;全球汽车产业正经历着数字化、电动化、全球化的深度变革&#xff0c;一方面&#xff0c;欧洲、北美等传统汽车市场的整车厂对供应链的数字化、安全化要求不断提升&#xff0c;OFTP2协议已成为公认的数据传输的最优标准&#xff1b;另一方面&#xff0c;中国汽车…

作者头像 李华
网站建设 2026/4/15 19:45:27

开尔文连接:精密测量里的“误差消除神器”

在高精度电子测量与芯片测试领域&#xff0c;开尔文连接&#xff08;Kelvin Connection&#xff09;是绕不开的核心技术&#xff0c;它也被称作四线制测量/四端检测&#xff0c;由威廉汤姆森开尔文勋爵于1861年发明&#xff0c;最初用于低电阻测量&#xff0c;如今已成为低阻测…

作者头像 李华
网站建设 2026/4/15 20:38:15

C++零基础到工程实战(4.1):for循环语法分析与实战

目录 一、本节学习内容概要图 二、前言 三、for循环是什么 四、for循环的基本语法 4.1 基本结构 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;条件 &#xff08;3&#xff09;迭代 4.2 for循环的执行流程 4.3 示例分析 &#xff08;1&#xff09;第1…

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

避开这些坑!用Hugging Face Transformers本地部署Qwen2.5-Max的实战记录

避开这些坑&#xff01;用Hugging Face Transformers本地部署Qwen2.5-Max的实战记录 上周尝试在本地工作站部署Qwen2.5-Max时&#xff0c;我经历了从环境配置到推理测试的全过程&#xff0c;遇到了不少官方文档没提及的"暗礁"。本文将分享实际部署中遇到的7类典型问题…

作者头像 李华
网站建设 2026/4/15 20:01:38

SDMatte赋能在线教育:开发互动课件中的动态元素提取工具

SDMatte赋能在线教育&#xff1a;开发互动课件中的动态元素提取工具 1. 引言&#xff1a;在线教育课件制作的痛点与机遇 在线教育行业近年来发展迅猛&#xff0c;但很多教师仍然面临一个共同困扰&#xff1a;如何把静态的教材插图变成生动有趣的互动内容。传统课件制作中&…

作者头像 李华
网站建设 2026/4/15 19:45:27

GeoJSON.io终极指南:如何用浏览器免费编辑地理数据

GeoJSON.io终极指南&#xff1a;如何用浏览器免费编辑地理数据 【免费下载链接】geojson.io A quick, simple tool for creating, viewing, and sharing spatial data 项目地址: https://gitcode.com/gh_mirrors/ge/geojson.io 你是否曾经需要快速在地图上标记位置、绘制…

作者头像 李华