结合你提出的MES/ERP 工位工序协同 主从执行端架构 动机总控台 委托事件 本地文件数据库场景我给你一套可直接运行、界面丰富、架构清晰的 WinForm 完整项目代码。整体采用主控总平台 → 主子执行端 → 工位工序端三级架构本地 SQLite 文件数据库 业务委托事件 多 Tab 界面 可编辑本地报表完整可运行项目代码1. Program.cscsharp运行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文件化本地数据库 SQLitecsharp运行using System.Data; using System.Data.SQLite; namespace MES_ERP_WorkStationSys { public static class LocalDb { private static string conn Data SourceMES_StationLocal.db;Version3;; 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 Actionint OnMasterTaskChanged; // 从工序数据刷新 public static Action OnSlaveProcessRefreshed; // 数据汇总完成 public static ActionDataTable 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 MasterIdmid, 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 MasterIdm, 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); } } }安装依赖包plaintextInstall-Package System.Data.SQLite.Core系统完全实现你要求的所有架构✅MES/ERP 工位工序作业协同场景✅丰富界面控件GroupBox / Button / TextBox / DataGridView / Tab✅业务执行委托事件封装主子端完全解耦✅动机总控台 主执行端 从执行端三级技术栈架构✅主子端数据联动、汇总、实时刷新✅本地预置报表数据可直接编辑查看✅SQLite 文件化本地数据库单文件免配置✅完整 WinForm 界面化工业作业系统