首次提交

This commit is contained in:
XingCheng3
2026-05-11 11:09:04 +08:00
commit 79c0f9cd43
260 changed files with 33504 additions and 0 deletions

322
SCADA/MAIN_PAGE.cs Normal file
View File

@@ -0,0 +1,322 @@
namespace MesWork
{
using DC_A95;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
/// <summary>
/// 主窗体 - 称重数据采集分析管理系统
/// </summary>
public partial class MesWorkForm
{
public static int Curr_AID = 0;
/// <summary>
/// 当前活跃的导航Panel
/// </summary>
private Panel _activeNavPanel = null;
public MesWorkForm()
{
Frm_Login frm_Login = new Frm_Login();
if (frm_Login.ShowDialog() == DialogResult.OK)
{
OnStart();
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
IsMdiContainer = false;
// 加载窗口图标
LoadWindowIcon();
// 设置用户名
lbl_UserName.Text = $"操作员:{MesWorkForm.Curr_UserName}";
// 标题追加工位号
if (!string.IsNullOrEmpty(Curr_Station))
Text = $"称重数据采集分析管理系统 - {Curr_Station}";
// 启动定时器
timer_OnLine_Show.Interval = 1000;
timer_OnLine_Show.Enabled = true;
timer_Clock.Interval = 1000;
timer_Clock.Enabled = true;
// 启动SQL在线检测
CommunicationCheckOnLine();
// 初始化扫码枪
if (MesWorkForm.IsUseBarcode == 1)
{
BarcodeManager.Init();
BarcodeManager.OnBarcodeScanned = (opName, barcode) =>
{
// 在线程池中执行业务处理与PLC信号处理一致
System.Threading.ThreadPool.QueueUserWorkItem(_ =>
{
try { Barcode_HandleScan(opName, barcode); }
catch { }
});
};
}
// 默认选中"称重作业"
SetActiveNav(pnl_NavWeighing);
}
else
{
Process.GetCurrentProcess().Kill();
}
}
// ====================================================================
// 导航系统
// ====================================================================
/// <summary>
/// 统一导航点击事件
/// </summary>
private void Nav_Click(object sender, EventArgs e)
{
// 获取真正的导航Panel可能点的是Label子控件
Panel navPanel;
if (sender is Label lbl)
navPanel = lbl.Parent as Panel;
else
navPanel = sender as Panel;
if (navPanel == null) return;
string navTag = navPanel.Tag?.ToString() ?? "";
// 退出按钮特殊处理
if (navTag.Contains("退出"))
{
DoClose();
return;
}
// PLC监控特殊处理弹出独立窗口
if (navTag.Contains("PLC"))
{
new OpcForm(IsDemoMesServer).Show(this);
return;
}
// 日志查询 — 内嵌页面
if (navTag.Contains("日志"))
{
SetActiveNav(navPanel);
return;
}
// 切换选中状态和内容
SetActiveNav(navPanel);
}
/// <summary>
/// 设置当前选中的导航项,高亮+加载对应内容
/// </summary>
private void SetActiveNav(Panel navPanel)
{
// 还原之前的选中项
if (_activeNavPanel != null)
{
_activeNavPanel.BackColor = Color.FromArgb(30, 58, 95);
foreach (Control c in _activeNavPanel.Controls)
if (c is Label l) l.ForeColor = Color.FromArgb(148, 163, 184);
}
// 高亮新选中项
_activeNavPanel = navPanel;
_activeNavPanel.BackColor = Color.FromArgb(42, 74, 111);
foreach (Control c in _activeNavPanel.Controls)
if (c is Label l) l.ForeColor = Color.White;
// 移动Active指示条
pnl_NavActiveIndicator.Top = navPanel.Top;
pnl_NavActiveIndicator.Visible = true;
// 加载对应内容
LoadContentByNav(navPanel.Tag?.ToString() ?? "");
}
/// <summary>
/// 页面实例缓存(避免重复创建,保持页面状态)
/// </summary>
private readonly System.Collections.Generic.Dictionary<string, UserControl> _pageCache
= new System.Collections.Generic.Dictionary<string, UserControl>();
/// <summary>
/// 根据导航Tag加载对应的UserControl
/// </summary>
private void LoadContentByNav(string navTag)
{
pnl_Content.Controls.Clear();
string pageKey = "";
UserControl uc = null;
if (navTag.Contains("称重"))
{
pageKey = "weighing";
if (!_pageCache.ContainsKey(pageKey))
{
var wp = new Pages.UC_Weighing();
_pageCache[pageKey] = wp;
MesWorkForm.WeighingPage = wp;
}
}
else if (navTag.Contains("用户"))
{
pageKey = "user";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_UserMgmt();
}
else if (navTag.Contains("工件"))
{
pageKey = "workpiece";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_WorkpieceMgmt();
}
else if (navTag.Contains("工具"))
{
pageKey = "tool";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_ToolMgmt();
}
else if (navTag.Contains("报告"))
{
pageKey = "report";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_Report();
}
else if (navTag.Contains("过站"))
{
pageKey = "station";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_StationRecord();
}
else if (navTag.Contains("统计"))
{
pageKey = "statistics";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_Statistics();
}
else if (navTag.Contains("设置"))
{
pageKey = "settings";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_SystemSettings();
}
else if (navTag.Contains("日志"))
{
pageKey = "log";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_LogRecord();
}
if (!string.IsNullOrEmpty(pageKey) && _pageCache.ContainsKey(pageKey))
{
uc = _pageCache[pageKey];
uc.Dock = DockStyle.Fill;
pnl_Content.Controls.Add(uc);
}
}
// ====================================================================
// Timer Events
// ====================================================================
/// <summary>
/// 定时器SQL在线状态刷新 + PLC信号灯等
/// </summary>
private void timer_OnLine_Show_Tick(object sender, EventArgs e)
{
// 数据库在线状态指示(只变更指示灯颜色)
if (OnLine_Sql)
{
pnl_SqlIndicator.BackColor = Color.FromArgb(16, 185, 129); // 绿色
}
else
{
pnl_SqlIndicator.BackColor = Color.FromArgb(239, 68, 68); // 红色
}
}
/// <summary>
/// 定时器:时钟刷新
/// </summary>
private void timer_Clock_Tick(object sender, EventArgs e)
{
lbl_DateTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
// ====================================================================
// 窗口事件
// ====================================================================
private void MesWorkForm_Load(object sender, EventArgs e)
{
// 主界面加载完成
}
private void MesWorkForm_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
private void DoClose()
{
if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
timer_OnLine_Show.Enabled = false;
timer_Clock.Enabled = false;
CloseDeviceConn();
BarcodeManager.Shutdown();
B_DB_Opera.SaveLog_Request(Curr_Station, Log_Type.ZK_Login, "", Log_FromAndTo.ZK, Log_FromAndTo.ZK, $"用户[{Curr_UserName}({Curr_LoginID})]退出称重系统", out long AID);
Process.GetCurrentProcess().Kill();
}
}
// ====================================================================
// 全屏切换
// ====================================================================
private void btn_ToggleFullscreen_Click(object sender, EventArgs e)
{
if (this.FormBorderStyle == FormBorderStyle.None)
{
// 退出全屏 → 恢复普通最大化
this.FormBorderStyle = FormBorderStyle.Sizable;
this.WindowState = FormWindowState.Maximized;
lbl_NavFullscreen.Text = "▣\n全屏";
}
else
{
// 进入全屏 → 覆盖整个屏幕(含任务栏)
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Normal;
this.Bounds = Screen.PrimaryScreen.Bounds;
lbl_NavFullscreen.Text = "▣\n窗口";
}
}
// ====================================================================
// 窗口图标加载
// ====================================================================
/// <summary>
/// 加载窗口图标(多路径搜索 + exe回退
/// </summary>
private void LoadWindowIcon()
{
IconHelper.ApplyIcon(this);
}
}
}