2025-09-17 20:04:00 +08:00
|
|
|
using JinYuan.ControlCenters;
|
|
|
|
|
using JinYuan.ControlLib;
|
|
|
|
|
using JinYuan.Helper;
|
|
|
|
|
using JinYuan.Models;
|
|
|
|
|
using JinYuan.VirtualDataLibrary;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Drawing.Text;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace LargeSquareOne
|
|
|
|
|
{
|
|
|
|
|
public partial class FrmMain : Form
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//实时更新的定时器
|
|
|
|
|
private System.Windows.Forms.Timer updateTimer;
|
|
|
|
|
public FrmMain()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
|
|
|
|
#region 字体加载
|
|
|
|
|
// 加载字体文件
|
|
|
|
|
font.AddFontFile(Environment.CurrentDirectory + "\\Assts\\Fonts\\FZY4JW.ttf");
|
|
|
|
|
//定义成新的字体对象
|
|
|
|
|
FontFamily myFontFamily = new FontFamily(font.Families[0].Name, font);
|
|
|
|
|
myFont = new Font(myFontFamily, 21, System.Drawing.FontStyle.Regular);
|
|
|
|
|
lbl_TitleBar.Font = myFont;
|
|
|
|
|
// 设置背景图片
|
|
|
|
|
//this._backgroundImage = Image.FromFile(System.Windows.Forms.Application.StartupPath + "\\Assts\\Image\\BackGround.png");
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 添加工具栏
|
|
|
|
|
naviButton2s.Add(this.nav_Monitor);
|
|
|
|
|
naviButton2s.Add(this.nav_DataMonitor);
|
|
|
|
|
naviButton2s.Add(this.nav_CPK);
|
|
|
|
|
naviButton2s.Add(this.nav_AlarmLog);
|
|
|
|
|
naviButton2s.Add(this.nav_HistotryData);
|
|
|
|
|
naviButton2s.Add(this.nav_SetSystem);
|
|
|
|
|
naviButton2s.Add(this.nav_System);
|
|
|
|
|
naviButton2s.Add(this.nav_User);
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
|
|
|
|
this.SetStyle(ControlStyles.DoubleBuffer, true);
|
|
|
|
|
this.SetStyle(ControlStyles.ResizeRedraw, true);
|
|
|
|
|
this.SetStyle(ControlStyles.Selectable, true);
|
|
|
|
|
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
|
|
|
|
|
this.SetStyle(ControlStyles.UserPaint, true);
|
|
|
|
|
|
|
|
|
|
storeTimer = new System.Timers.Timer();
|
|
|
|
|
storeTimer.Interval = 1000;
|
|
|
|
|
storeTimer.AutoReset = true;
|
|
|
|
|
storeTimer.Elapsed += StoreTimer_Elapsed;
|
|
|
|
|
//开启定时器
|
|
|
|
|
storeTimer.Start();
|
|
|
|
|
|
|
|
|
|
updateTimer = new System.Windows.Forms.Timer();
|
|
|
|
|
updateTimer.Interval = 200;
|
|
|
|
|
updateTimer.Tick += UpdateTimer_Tick;
|
|
|
|
|
updateTimer.Start();
|
|
|
|
|
|
|
|
|
|
CommonMethods.listener.ScanerEvent += Listener_ScanerEvent;
|
|
|
|
|
CommonMethods.listener.Start();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.Load += FrmMain_Load;
|
|
|
|
|
this.FormClosing += FrmMain_FormClosing;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//加载字体
|
|
|
|
|
private PrivateFontCollection font = new PrivateFontCollection();
|
|
|
|
|
Font myFont = null;
|
|
|
|
|
private Image _backgroundImage;
|
|
|
|
|
|
|
|
|
|
//定时存储定时器
|
|
|
|
|
private System.Timers.Timer storeTimer;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 时间更新委托
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="time"></param>
|
|
|
|
|
public delegate void ShowTimeHandler(DateTime time);
|
|
|
|
|
|
|
|
|
|
//当前页面索引
|
|
|
|
|
private int CurrentIndex = 0;
|
|
|
|
|
private List<NaviButton2> naviButton2s = new List<NaviButton2>();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 全局钩子
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void FrmMain_Load(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
InitReadInI();
|
|
|
|
|
UserTimeOut(30);
|
|
|
|
|
|
|
|
|
|
ControlCenter controlCenter = ControlCenter.Instance;
|
|
|
|
|
|
|
|
|
|
//1.设置登录用户
|
|
|
|
|
this.lbl_LoginLevel.Text = CommonMethods.currentAdmin?.LoginLevel;
|
|
|
|
|
this.lbl_LoginName.Text = CommonMethods.currentAdmin?.LoginName;
|
|
|
|
|
|
|
|
|
|
//2.打开日志报警窗体
|
|
|
|
|
CommonNaviButton_Click(this.nav_AlarmLog, null);
|
|
|
|
|
//2.打开图表窗体
|
|
|
|
|
CommonNaviButton_Click(this.nav_Monitor, null);
|
|
|
|
|
//打开集中监控窗体
|
|
|
|
|
CommonNaviButton_Click(this.nav_DataMonitor, null);
|
|
|
|
|
//登录日志
|
|
|
|
|
CommonMethods.AddOPLog(false, $"登录成功,登录用户:{CommonMethods.currentAdmin?.LoginName},权限:{CommonMethods.currentAdmin?.LoginLevel}");
|
|
|
|
|
|
|
|
|
|
//自动锁屏
|
|
|
|
|
if (CommonMethods.sysConfig.AutoLock)
|
|
|
|
|
{
|
|
|
|
|
//开启监听键盘和鼠标操作
|
|
|
|
|
Application.AddMessageFilter(new MessageFilter());
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
if (CommonMethods.sysConfig != null)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddLog(false, "加载系统配置成功");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddLog(true, "加载系统配置失败");
|
|
|
|
|
}
|
|
|
|
|
if (CommonMethods.sysConfig.MesModeSwitching && !CommonMethods.mesConfig.IsLoginMesOK)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "当前为MES模式,请登录!", "MES未登录").ShowDialog();
|
|
|
|
|
FrmLoginMes frmLoginMes = new FrmLoginMes();
|
|
|
|
|
|
|
|
|
|
frmLoginMes.ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 读取配置文件
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 读取配置文件
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void InitReadInI()
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.sysConfig.MesModeSwitching = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "MES/非MES模式切换", "False"));
|
|
|
|
|
CommonMethods.sysConfig.GetMesParam = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "是否获取MES参数", "False"));
|
|
|
|
|
CommonMethods.mesConfig.IsGet_Server = IniConfigHelper.ReadIniData("配置信息", "是否获取服务器数据", "1") == "1" ? true : false;
|
|
|
|
|
CommonMethods.sysConfig.OKSwitching = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "强制OK/正常NG模式切换", "False"));
|
|
|
|
|
CommonMethods.mesConfig.IsGet_3C = IniConfigHelper.ReadIniData("配置信息", "是否存储C模块数据", "1") == "1" ? true : false;
|
|
|
|
|
CommonMethods.mesConfig._外观检测条码计数 = Convert.ToInt32(IniConfigHelper.ReadIniData("配置信息", "外观检测条码计数", "false"));
|
|
|
|
|
|
|
|
|
|
CommonMethods.mesConfig.siteCode = IniConfigHelper.ReadIniData("MES配置", "工厂代码", "false");
|
|
|
|
|
CommonMethods.mesConfig.lineCode = IniConfigHelper.ReadIniData("MES配置", "产线编号", "false");
|
|
|
|
|
CommonMethods.mesConfig.equipNum = IniConfigHelper.ReadIniData("MES配置", "设备编号", "false");
|
|
|
|
|
CommonMethods.mesConfig.electricMeterNum.Clear();
|
|
|
|
|
string str = IniConfigHelper.ReadIniData("MES配置", "智能电表编号", "1");
|
|
|
|
|
if (str.Contains(','))
|
|
|
|
|
{
|
|
|
|
|
string[] strArray = str.Split(',');
|
|
|
|
|
for (int i = 0; i < strArray.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.mesConfig.electricMeterNum.Add(strArray[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CommonMethods.mesConfig.listAntiDustAirSpeedNum.Clear();
|
|
|
|
|
CommonMethods.mesConfig.AntiDustAirSpeedCount = Convert.ToInt32(IniConfigHelper.ReadIniData("风速仪", "AntiDustAirSpeedCount", "0"));
|
|
|
|
|
for (int i = 0; i < CommonMethods.mesConfig.AntiDustAirSpeedCount; i++)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.mesConfig.listAntiDustAirSpeedNum.Add(IniConfigHelper.ReadIniData("风速仪", $"AntiDustAirSpeed{i + 1}", "0"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CommonMethods.mesConfig.EquStatuasTime = int.Parse(IniConfigHelper.ReadIniData("MES配置", "EquStatuasTime", "0"));
|
|
|
|
|
CommonMethods.ChangeClassTime = IniConfigHelper.ReadIniData("MES配置", "白夜班交替时间", "0");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CommonMethods.strDeletepath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\";
|
|
|
|
|
CommonMethods.strAlarmLogspath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\AlarmLogs\\";
|
|
|
|
|
CommonMethods.strMesLogspath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\MesLogs";
|
|
|
|
|
CommonMethods.strSystemLogspath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\SystemLogs";
|
|
|
|
|
CommonMethods.strErrorLogspath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\ErrorLogs";
|
|
|
|
|
CommonMethods.strsqlLogspath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\SqlLogs\\";
|
|
|
|
|
CommonMethods.strWattrMeterpath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\智能电表数据\\";
|
|
|
|
|
|
|
|
|
|
CommonMethods.mesConfig.RotueServerIP = IniConfigHelper.ReadIniData("MES配置", "存储服务器IP地址", "192.168.2.108");
|
|
|
|
|
CommonMethods.mesConfig.LoginMesUrl = IniConfigHelper.ReadIniData("MES配置", "员工权限校验", "0");
|
|
|
|
|
CommonMethods.mesConfig.ParamSetpointRequestMesUrl = IniConfigHelper.ReadIniData("MES配置", "设备参数设定值请求", "0");
|
|
|
|
|
CommonMethods.mesConfig.ChangeParamSetValueMesUrl = IniConfigHelper.ReadIniData("MES配置", "设备参数设定值变更", "0");
|
|
|
|
|
CommonMethods.mesConfig.InPutStationMesUrl = IniConfigHelper.ReadIniData("MES配置", "产品进站", "0");
|
|
|
|
|
CommonMethods.mesConfig.EquProcessProcessParamMesUrl = IniConfigHelper.ReadIniData("MES配置", "产品过程加工参数", "0");
|
|
|
|
|
CommonMethods.mesConfig.ResultProcessParamMesUrl = IniConfigHelper.ReadIniData("MES配置", "产品结果加工参数", "0");
|
2025-09-18 15:58:49 +08:00
|
|
|
//CommonMethods.mesConfig.OkNgParamMesUrl = IniConfigHelper.ReadIniData("MES配置", "分档参数", "0");
|
2025-09-17 20:04:00 +08:00
|
|
|
CommonMethods.mesConfig.OutStationMesUrl = IniConfigHelper.ReadIniData("MES配置", "产品出站", "0");
|
|
|
|
|
CommonMethods.mesConfig.AlarmCurrencyMesUrl = IniConfigHelper.ReadIniData("MES配置", "设备报警", "0");
|
|
|
|
|
CommonMethods.mesConfig.StatusMesUrl = IniConfigHelper.ReadIniData("MES配置", "设备状态", "0");
|
|
|
|
|
CommonMethods.mesConfig.WattrMeterUrl = IniConfigHelper.ReadIniData("MES配置", "能耗", "0");
|
|
|
|
|
CommonMethods.mesConfig.CollectData = IniConfigHelper.ReadIniData("MES配置", "风速仪", "0");
|
2025-09-18 15:58:49 +08:00
|
|
|
CommonMethods.mesConfig.GradingMesUrl = IniConfigHelper.ReadIniData("MES配置", "分档参数", "0");
|
2025-09-17 20:04:00 +08:00
|
|
|
|
|
|
|
|
//CommonMethods.ProdDRFIDNgQty = Convert.ToInt32(IniConfigHelper.ReadIniData("统计计数", "ProdDRFIDNgQty", "0"));
|
|
|
|
|
//CommonMethods.ProdDXNgQty = Convert.ToInt32(IniConfigHelper.ReadIniData("统计计数", "ProdDXNgQty", "0"));
|
|
|
|
|
//CommonMethods.ProdGRFIDNgQty = Convert.ToInt32(IniConfigHelper.ReadIniData("统计计数", "ProdGRFIDNgQty", "0"));
|
|
|
|
|
//CommonMethods.ProdYLZNgQty = Convert.ToInt32(IniConfigHelper.ReadIniData("统计计数", "ProdYLZNgQty", "0"));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 无操作 系统锁屏+切换到主监控界面
|
|
|
|
|
private void UpdateTimer_Tick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (CommonMethods.sysConfig.AutoLock)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.tickCount++;
|
|
|
|
|
if (CommonMethods.tickCount == CommonMethods.sysConfig.LockPeriod * 60 * 1000 / this.updateTimer.Interval)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//锁屏
|
|
|
|
|
LockWorkStation();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (CommonMethods.sysConfig.AutoQieHuanM)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.tickHomeCount++;
|
|
|
|
|
if (CommonMethods.tickHomeCount == CommonMethods.sysConfig.QieHuanMPeriod * 60 * 1000 / this.updateTimer.Interval)
|
|
|
|
|
{
|
|
|
|
|
//切换集中监控窗体
|
|
|
|
|
CommonNaviButton_Click(this.nav_Monitor, null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[DllImport("user32")]
|
|
|
|
|
public static extern bool LockWorkStation();
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 刷卡事件
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="codes"></param>
|
|
|
|
|
private void Listener_ScanerEvent(ScanerHook.ScanerCodes codes)
|
|
|
|
|
{
|
|
|
|
|
//封装对象
|
|
|
|
|
SysAdmin sysAdmin = new SysAdmin()
|
|
|
|
|
{
|
|
|
|
|
LoginUid = codes.Result,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//调用查询方法
|
|
|
|
|
sysAdmin = CommonMethods.db.Query<SysAdmin>(it => it.LoginUid == sysAdmin.LoginUid);
|
|
|
|
|
if (sysAdmin == null)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
new FrmMsgBoxOutWithAck(3, "登录用户或密码错误!!!", "登录提示").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.DialogResult = DialogResult.OK;
|
|
|
|
|
CommonMethods.IsLoginOk = true;
|
|
|
|
|
//存储用户对象
|
|
|
|
|
CommonMethods.currentAdmin = sysAdmin;
|
|
|
|
|
//1.设置登录用户
|
|
|
|
|
this.lbl_LoginLevel.Text = CommonMethods.currentAdmin?.LoginLevel;
|
|
|
|
|
this.lbl_LoginName.Text = CommonMethods.currentAdmin?.LoginName;
|
|
|
|
|
//登录日志
|
|
|
|
|
CommonMethods.AddOPLog(false, $"登录成功,登录用户:{CommonMethods.currentAdmin?.LoginName},权限:{CommonMethods.currentAdmin?.LoginLevel}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void StoreTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
#region 时间异步
|
|
|
|
|
DateTime time = DateTime.Now;
|
|
|
|
|
ShowTimeHandler handler = ShowButtonEven_Run;
|
|
|
|
|
IAsyncResult result = handler.BeginInvoke(time, null, handler);
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 获取日期/星期,班次信息,更新
|
|
|
|
|
private void ShowButtonEven_Run(DateTime time)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
this.Invoke(new Action(() =>
|
|
|
|
|
{
|
|
|
|
|
//this.led_StopState.Value = CommonMethods.EMCStatues;
|
|
|
|
|
|
|
|
|
|
this.lbl_DateTime.Text = CurrentTime + " " + week + " " + $"{CommonMethods.strClass}";
|
|
|
|
|
if (CommonMethods.plcDevice != null)
|
|
|
|
|
{
|
|
|
|
|
this.led_PLCState.Value = CommonMethods.plcDevice.IsConnected;
|
|
|
|
|
}
|
|
|
|
|
if (CommonMethods.sysConfig.MesModeSwitching && CommonMethods.mesConfig.IsLoginMesOK)//MES
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.mesConfig.isUpMes = true;
|
|
|
|
|
this.led_MESState.Value = true;
|
|
|
|
|
lblMS.Visible = true;
|
|
|
|
|
lblMES.Visible = true;
|
|
|
|
|
lblMES.Text = CommonMethods.mesConfig.mesUserName;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.mesConfig.isUpMes = false;
|
|
|
|
|
lblMS.Visible = false;
|
|
|
|
|
lblMES.Visible = false;
|
|
|
|
|
this.led_MESState.Value = false;
|
|
|
|
|
}
|
|
|
|
|
if (CommonMethods.sysConfig.SwipeCardMode && !CommonMethods.IsLoginOk)//刷卡模式
|
|
|
|
|
{
|
|
|
|
|
lbl_LoginName.Visible = false;
|
|
|
|
|
lbl_LoginLevel.Text = "未登录";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
lbl_LoginName.Visible = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CommonMethods.sysConfig.ScreenCutting)
|
|
|
|
|
{
|
|
|
|
|
CommonNaviButton_Click(this.nav_DataMonitor, null);
|
|
|
|
|
CommonMethods.sysConfig.ScreenCutting = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (CommonMethods.Statues != null && CommonMethods.Statues.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
this.led_RunState.Value = CommonMethods.Statues[0];
|
|
|
|
|
//this.led_StopState.BlinkOn = CommonMethods.Statues[1];
|
|
|
|
|
this.led_AlarmState.BlinkOn = CommonMethods.Statues[2];
|
|
|
|
|
this.led_IldeState.BlinkOn = CommonMethods.Statues[3];
|
|
|
|
|
|
|
|
|
|
if (!CommonMethods.Statues[2])
|
|
|
|
|
{
|
|
|
|
|
string SlideAlarm = "当前无报警";
|
|
|
|
|
this.ucRollText1.Text = SlideAlarm;
|
|
|
|
|
this.ucRollText1.ForeColor = Color.White;
|
|
|
|
|
CommonMethods.SlideAlarmText = "";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.ucRollText1.Text = CommonMethods.SlideAlarmText;
|
|
|
|
|
this.ucRollText1.ForeColor = Color.Red;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}));
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LoggerHelp.WriteEX(ex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private string CurrentTime
|
|
|
|
|
{
|
|
|
|
|
get { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string[] weeks = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
|
|
private string week
|
|
|
|
|
{
|
|
|
|
|
get { return weeks[Convert.ToInt32(DateTime.Now.DayOfWeek)]; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 屏蔽
|
|
|
|
|
//private void DeviceCommunication(Device device)
|
|
|
|
|
//{
|
|
|
|
|
// while (!cts.IsCancellationRequested)
|
|
|
|
|
// {
|
|
|
|
|
// if (device.IsConnected)
|
|
|
|
|
// {
|
|
|
|
|
// //通信读取
|
|
|
|
|
// foreach (var gp in device.GroupList)
|
|
|
|
|
// {
|
|
|
|
|
// byte[] data = null;
|
|
|
|
|
|
|
|
|
|
// int reqLength = 0;
|
|
|
|
|
// if (gp.StoreArea == "输入线圈" || gp.StoreArea == "输出线圈")
|
|
|
|
|
// {
|
|
|
|
|
// switch (gp.StoreArea)
|
|
|
|
|
// {
|
|
|
|
|
// case "输入线圈":
|
|
|
|
|
// //data = CommonMethods.Modbus.ReadBoolArray(gp.Start, gp.Length);
|
|
|
|
|
// reqLength = ShortLib.GetByteLengthFromBoolLength(gp.Length);
|
|
|
|
|
// break;
|
|
|
|
|
// case "输出线圈":
|
|
|
|
|
// //data = CommonMethods.Modbus.WriteBoolArray(gp.Start, gp.Length);
|
|
|
|
|
// reqLength = ShortLib.GetByteLengthFromBoolLength(gp.Length);
|
|
|
|
|
// break;
|
|
|
|
|
// default:
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// if (data != null && data.Length == reqLength)
|
|
|
|
|
// {
|
|
|
|
|
// //变量解析
|
|
|
|
|
// foreach (var variable in gp.VarList)
|
|
|
|
|
// {
|
|
|
|
|
// DataType dataType = (DataType)Enum.Parse((typeof(DataType)), variable.DataType, true);
|
|
|
|
|
// int start = variable.Start - gp.Start;
|
|
|
|
|
|
|
|
|
|
// switch (dataType)
|
|
|
|
|
// {
|
|
|
|
|
// case DataType.Bool:
|
|
|
|
|
// variable.VarValue = BitLib.GetBitFromByteArray(data, start, variable.OffsetOrLenght);
|
|
|
|
|
// break;
|
|
|
|
|
// default:
|
|
|
|
|
// break;
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
// //处理
|
|
|
|
|
// //直接更新
|
|
|
|
|
// device.UpdataVariable(variable);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// device.IsConnected = false;
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// switch (gp.StoreArea)
|
|
|
|
|
// {
|
|
|
|
|
// case "输入寄存器":
|
|
|
|
|
// //data = CommonMethods.Modbus.(gp.Start, gp.Length);
|
|
|
|
|
// reqLength = gp.Length * 2;
|
|
|
|
|
// break;
|
|
|
|
|
// case "输出寄存器":
|
|
|
|
|
// //data = CommonMethods.Modbus.ReadOutputRegisters(gp.Start, gp.Length);
|
|
|
|
|
// reqLength = gp.Length * 2;
|
|
|
|
|
// break;
|
|
|
|
|
// default:
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// if (data != null && data.Length == reqLength)
|
|
|
|
|
// {
|
|
|
|
|
// //变量解析
|
|
|
|
|
|
|
|
|
|
// foreach (var variable in gp.VarList)
|
|
|
|
|
// {
|
|
|
|
|
// DataType dataType = (DataType)Enum.Parse((typeof(DataType)), variable.DataType, true);
|
|
|
|
|
// int start = variable.Start - gp.Start;
|
|
|
|
|
// start *= 2;
|
|
|
|
|
|
|
|
|
|
// switch (dataType)
|
|
|
|
|
// {
|
|
|
|
|
// case DataType.Bool:
|
|
|
|
|
// variable.VarValue = BitLib.GetBitFrom2BytesArray(data, start,
|
|
|
|
|
// variable.OffsetOrLenght, dataFormat == DataConvertLib.DataFormat.BADC || dataFormat == DataConvertLib.DataFormat.DCBA);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.Byte:
|
|
|
|
|
// variable.VarValue = ByteLib.GetByteFromByteArray(data,
|
|
|
|
|
// dataFormat == DataConvertLib.DataFormat.BADC || dataFormat == DataConvertLib.DataFormat.DCBA ? start : start + 1);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.Short:
|
|
|
|
|
// variable.VarValue = ShortLib.GetShortFromByteArray(data, start, dataFormat);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.Int:
|
|
|
|
|
// variable.VarValue = ShortLib.GetShortFromByteArray(data, start, dataFormat);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.UInt:
|
|
|
|
|
// variable.VarValue = UIntLib.GetUIntFromByteArray(data, start, dataFormat);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.Float:
|
|
|
|
|
// variable.VarValue = FloatLib.GetFloatFromByteArray(data, start, dataFormat);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.Double:
|
|
|
|
|
// variable.VarValue = DoubleLib.GetDoubleFromByteArray(data, start, dataFormat);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.Long:
|
|
|
|
|
// variable.VarValue = LongLib.GetLongFromByteArray(data, start, dataFormat);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.ULong:
|
|
|
|
|
// variable.VarValue = ULongLib.GetULongFromByteArray(data, start, dataFormat);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.String:
|
|
|
|
|
// variable.VarValue = StringLib.GetStringFromByteArrayByEncoding(data, start, variable.OffsetOrLenght,
|
|
|
|
|
// Encoding.ASCII);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.ByteArray:
|
|
|
|
|
// variable.VarValue = ByteArrayLib.GetByteArrayFromByteArray(data, start, variable.OffsetOrLenght);
|
|
|
|
|
// break;
|
|
|
|
|
// case DataType.HexString:
|
|
|
|
|
// variable.VarValue = StringLib.GetHexStringFromByteArray(data, start, variable.OffsetOrLenght);
|
|
|
|
|
// break;
|
|
|
|
|
// default:
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// //处理
|
|
|
|
|
// //先做线性转换,再更新
|
|
|
|
|
|
|
|
|
|
// variable.VarValue = MigrationLib.GetMigrationValue(variable.VarValue, variable.Scale.ToString(),
|
|
|
|
|
// variable.Offset.ToString()).Content;
|
|
|
|
|
|
|
|
|
|
// device.UpdataVariable(variable);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// device.IsConnected = false;
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// //非首次连接,需要延时
|
|
|
|
|
// if (device.ReConnectSign)
|
|
|
|
|
// {
|
|
|
|
|
// CommonMethods.Modbus?.DisConnect();
|
|
|
|
|
// Thread.Sleep(device.ReConnectTime);
|
|
|
|
|
// }
|
|
|
|
|
// //通信连接
|
|
|
|
|
// CommonMethods.Modbus = new ModbusTCP();
|
|
|
|
|
|
|
|
|
|
// device.IsConnected = CommonMethods.Modbus.Connect(device.IPAddress, device.Port);
|
|
|
|
|
|
|
|
|
|
// if (device.ReConnectSign)
|
|
|
|
|
// {
|
|
|
|
|
// CommonMethods.AddLog(device.IsConnected ? false : true, device.IsConnected ? "控制器重连成功" : "控制器重连失败");
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// CommonMethods.AddLog(device.IsConnected ? false : true, device.IsConnected ? "控制器初次连接成功" : "控制器初次连接失败");
|
|
|
|
|
// device.ReConnectSign = true;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 界面操作
|
|
|
|
|
|
|
|
|
|
#region 加载背景图像
|
|
|
|
|
//重绘背景放置闪烁
|
|
|
|
|
//protected override void OnPaintBackground(PaintEventArgs e)
|
|
|
|
|
//{
|
|
|
|
|
// // 使用DrawImage方法绘制背景图片
|
|
|
|
|
// e.Graphics.DrawImage(_backgroundImage, 0, 0, this.ClientSize.Width, this.ClientSize.Height);
|
|
|
|
|
//}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 减少闪烁
|
|
|
|
|
protected override CreateParams CreateParams
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
CreateParams cp = base.CreateParams;
|
|
|
|
|
cp.ExStyle |= 0x02000000;
|
|
|
|
|
return cp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 无边框拖动
|
|
|
|
|
private System.Drawing.Point mPoint;
|
|
|
|
|
private void Panel_MouseDown(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
mPoint = new System.Drawing.Point(e.X, e.Y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Panel_MouseMove(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.Button == MouseButtons.Left)
|
|
|
|
|
{
|
|
|
|
|
this.Location = new System.Drawing.Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 左右切换
|
|
|
|
|
private void btn_Left_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CurrentIndex--;
|
|
|
|
|
if (CurrentIndex >= 0)
|
|
|
|
|
{
|
|
|
|
|
CommonNaviButton_Click(naviButton2s[CurrentIndex], null);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CurrentIndex++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btn_right_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
CurrentIndex++;
|
|
|
|
|
if (CurrentIndex < naviButton2s.Count)
|
|
|
|
|
{
|
|
|
|
|
CommonNaviButton_Click(naviButton2s[CurrentIndex], null);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CurrentIndex--;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 通用窗体切换
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 通用窗体切换
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void CommonNaviButton_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (sender is NaviButton2 navi)
|
|
|
|
|
{
|
|
|
|
|
if (Enum.IsDefined(typeof(FormNames), navi.TitleName))
|
|
|
|
|
{
|
|
|
|
|
//拿到导航按钮对应的窗体枚举值
|
|
|
|
|
FormNames formNames = (FormNames)Enum.Parse(typeof(FormNames), navi.TitleName, true);
|
|
|
|
|
|
|
|
|
|
//用户权限处理
|
|
|
|
|
switch (formNames)
|
|
|
|
|
{
|
|
|
|
|
case FormNames.日志报警:
|
|
|
|
|
|
|
|
|
|
if (CommonMethods.IsLoginOk)
|
|
|
|
|
{
|
|
|
|
|
if (!CommonMethods.currentAdmin.SystemLog)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.数据分析:
|
|
|
|
|
// new FrmMsgBoxOutWithAck(2, "功能待开发中…………", "品质测量").ShowDialog();
|
|
|
|
|
//return;
|
|
|
|
|
if (CommonMethods.IsLoginOk)
|
|
|
|
|
{
|
|
|
|
|
if (!CommonMethods.currentAdmin.SystemLog)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//if (!CommonMethods.currentAdmin.CpkData)
|
|
|
|
|
//{
|
|
|
|
|
// new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog();
|
|
|
|
|
// return;
|
|
|
|
|
//}
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.数据追溯:
|
|
|
|
|
if (CommonMethods.IsLoginOk)
|
|
|
|
|
{
|
|
|
|
|
if (!CommonMethods.currentAdmin.HistoryData)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.参数设置:
|
|
|
|
|
if (CommonMethods.IsLoginOk)
|
|
|
|
|
{
|
|
|
|
|
if (!CommonMethods.currentAdmin.ParamSet)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.系统设置:
|
|
|
|
|
if (CommonMethods.IsLoginOk)
|
|
|
|
|
{
|
|
|
|
|
if (!CommonMethods.currentAdmin.UserManage)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.用户管理:
|
|
|
|
|
if (CommonMethods.IsLoginOk)
|
|
|
|
|
{
|
|
|
|
|
if (!CommonMethods.currentAdmin.SystemLog)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//窗体切换
|
|
|
|
|
OpenForm(this.MainPanel, formNames);
|
|
|
|
|
//设置Title
|
|
|
|
|
SetTitle(this.lbl_Title, formNames);
|
|
|
|
|
//设置选中
|
|
|
|
|
SetNaviButtonSelected(this.TopPanel, navi);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 通用打开窗体
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="mainPanel">容器控件</param>
|
|
|
|
|
/// <param name="formNames">窗体枚举名称</param>
|
|
|
|
|
private void OpenForm(Panel mainPanel, FormNames formNames)
|
|
|
|
|
{
|
|
|
|
|
int total = mainPanel.Controls.Count;
|
|
|
|
|
int closeCount = 0;
|
|
|
|
|
bool isFind = false;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < total; i++)
|
|
|
|
|
{
|
|
|
|
|
Control ct = mainPanel.Controls[i - closeCount];
|
|
|
|
|
if (ct is Form frm)
|
|
|
|
|
{
|
|
|
|
|
//如果当前Form是我们需要操作的窗体
|
|
|
|
|
if (frm.Text == formNames.ToString())
|
|
|
|
|
{
|
|
|
|
|
frm.BringToFront();
|
|
|
|
|
isFind = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//如果当前Form不是我们需要操作的窗体,然后判断是否为固定窗体,如果不是,则关闭,如果是,则不做处理
|
|
|
|
|
else if ((FormNames)Enum.Parse(typeof(FormNames), frm.Text, true) >= FormNames.临界窗体)
|
|
|
|
|
{
|
|
|
|
|
frm.Close();
|
|
|
|
|
closeCount++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!isFind)
|
|
|
|
|
{
|
|
|
|
|
Form frm = null;
|
|
|
|
|
|
|
|
|
|
switch (formNames)
|
|
|
|
|
{
|
|
|
|
|
case FormNames.集中监控:
|
|
|
|
|
frm = new FrmMonitor();
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.数据监控:
|
|
|
|
|
frm = new FrmDataMonitor();
|
|
|
|
|
CommonMethods.AddDataMonitorDelegate += ((FrmDataMonitor)frm).AddDataMonitorLog;//日志记录显示
|
|
|
|
|
CommonMethods.ShowFeedingDelegate += ((FrmDataMonitor)frm).ShowFeedingData;//上料显示
|
|
|
|
|
CommonMethods.ShowBlankingDelegate += ((FrmDataMonitor)frm).ShowBankdingData;//下料显示
|
|
|
|
|
CommonMethods.ChangeParamDelegate += ((FrmDataMonitor)frm).GetLocalParaData;//参数更新
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.日志报警:
|
|
|
|
|
frm = new FrmAlarmLog();
|
|
|
|
|
//绑定委托
|
|
|
|
|
CommonMethods.AddLogDelegate += ((FrmAlarmLog)frm).AddLog;//系统日志
|
|
|
|
|
CommonMethods.AddOPLogDelegate += ((FrmAlarmLog)frm).AddOPLog;//操作日志
|
|
|
|
|
CommonMethods.AddAlarmDelegate += ((FrmAlarmLog)frm).AddAlarm;//报警日志
|
|
|
|
|
CommonMethods.ShowAlarmDelegate += ((FrmAlarmLog)frm).ShowAlarm;
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.临界窗体:
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.数据分析:
|
|
|
|
|
frm = new FrmCpkCount();
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.数据追溯:
|
|
|
|
|
frm = new FrmHistory();
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.参数设置:
|
|
|
|
|
frm = new FrmRecipe();
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.系统设置:
|
|
|
|
|
frm = new FrmSystemSet(CommonMethods.devPath);
|
|
|
|
|
break;
|
|
|
|
|
case FormNames.用户管理:
|
|
|
|
|
frm = new FrmUserManage();
|
|
|
|
|
break;
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (frm != null)
|
|
|
|
|
{
|
|
|
|
|
//设置非顶层窗体
|
|
|
|
|
frm.TopLevel = false;
|
|
|
|
|
//去除边框
|
|
|
|
|
frm.FormBorderStyle = FormBorderStyle.None;
|
|
|
|
|
//填充
|
|
|
|
|
frm.Dock = DockStyle.Fill;
|
|
|
|
|
//设置父容器为容器控件
|
|
|
|
|
frm.Parent = mainPanel;
|
|
|
|
|
//置前
|
|
|
|
|
frm.BringToFront();
|
|
|
|
|
frm.Show();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置标题内容
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="label">标题控件</param>
|
|
|
|
|
/// <param name="formNames">窗体枚举名称</param>
|
|
|
|
|
private void SetTitle(Label label, FormNames formNames)
|
|
|
|
|
{
|
|
|
|
|
label.Text = formNames.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置导航按钮选中
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="topPanel">导航按钮的容器</param>
|
|
|
|
|
/// <param name="naviButton">导航按钮</param>
|
|
|
|
|
private void SetNaviButtonSelected(Panel topPanel, NaviButton2 naviButton)
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in topPanel.Controls.OfType<NaviButton2>())
|
|
|
|
|
{
|
|
|
|
|
item.IsSelected = false;
|
|
|
|
|
}
|
|
|
|
|
naviButton.IsSelected = true;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 退出确认
|
|
|
|
|
private void btExit_MouseDown(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btnScale_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
this.Visible = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void FrmMain_SizeChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
//当窗体最小化时
|
|
|
|
|
if (!this.Visible)
|
|
|
|
|
{
|
|
|
|
|
this.Visible = false;
|
|
|
|
|
notifyIcon1.Visible = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.Visible = true;
|
|
|
|
|
notifyIcon1.Visible = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.Button == MouseButtons.Left)
|
|
|
|
|
{
|
|
|
|
|
//显示窗体
|
|
|
|
|
this.Visible = true;
|
|
|
|
|
//恢复窗体尺寸状态
|
|
|
|
|
this.WindowState = FormWindowState.Normal;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void 关于_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
FrmHelper frmHelper = new FrmHelper();
|
|
|
|
|
frmHelper.ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void 隐藏主界面_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
this.Visible = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void 显示主界面_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
//显示窗体
|
|
|
|
|
this.Visible = true;
|
|
|
|
|
//恢复窗体尺寸状态
|
|
|
|
|
this.WindowState = FormWindowState.Normal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void 退出_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
DialogResult dialogResult = new FrmMsgBoxWithAck("是否确定要退出系统", "退出系统").ShowDialog();
|
|
|
|
|
if (dialogResult == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
//关闭存储定时器
|
|
|
|
|
this.storeTimer.Stop();
|
|
|
|
|
this.updateTimer.Stop();
|
|
|
|
|
CommonMethods.listener.Stop();
|
|
|
|
|
//关闭线程
|
|
|
|
|
CommonMethods.IsExit = true;
|
|
|
|
|
CommonMethods.plcDevice?.Cts?.Cancel();
|
|
|
|
|
CommonMethods.PlcLink?.Disconnect();
|
|
|
|
|
Thread.Sleep(500);
|
|
|
|
|
notifyIcon1.Dispose();
|
|
|
|
|
this.Dispose();//清理正在使用的资源 `在这里插入代码片`
|
|
|
|
|
System.Environment.Exit(0);//退出全部线程
|
|
|
|
|
System.Diagnostics.Process.GetCurrentProcess().Kill();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
e.Cancel = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取鼠标光标的当前位置
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="pt"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[DllImport("user32.dll")]
|
|
|
|
|
public static extern bool GetCursorPos(out Point pt);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 刷卡用户登录超时检查
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="secTime"></param>
|
|
|
|
|
private void UserTimeOut(int secTime)
|
|
|
|
|
{
|
|
|
|
|
Task task = Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < secTime; i++)
|
|
|
|
|
{
|
|
|
|
|
GetCursorPos(out Point sourcePoint);
|
|
|
|
|
System.Threading.Thread.Sleep(1000);
|
|
|
|
|
GetCursorPos(out Point currentPoint);
|
|
|
|
|
if (sourcePoint.X != currentPoint.X | sourcePoint.Y == currentPoint.Y)
|
|
|
|
|
{
|
|
|
|
|
i = 0;
|
|
|
|
|
}
|
|
|
|
|
if (CommonMethods.LoginOut)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
LoginLocalOut();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void LoginLocalOut()
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, $"退出成功,退出用户:{CommonMethods.currentAdmin?.LoginName},权限:{CommonMethods.currentAdmin?.LoginLevel}");
|
|
|
|
|
LoggerHelp.WriteLog($"用户:" + CommonMethods.currentAdmin?.LoginName + "-退出");
|
|
|
|
|
CommonMethods.LoginOut = true;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 非刷卡模式
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void 非刷卡模式ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
FrmLogin frmLogin = new FrmLogin();
|
|
|
|
|
if (frmLogin.ShowDialog() == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
CommonMethods.sysConfig.SwipeCardMode = false;
|
|
|
|
|
IniConfigHelper.WriteIniData("配置信息", "开启刷卡模式", CommonMethods.sysConfig.SwipeCardMode.ToString());
|
|
|
|
|
lbl_LoginLevel.Text = CommonMethods.currentAdmin?.LoginLevel;
|
|
|
|
|
lbl_LoginName.Text = CommonMethods.currentAdmin?.LoginName;
|
|
|
|
|
lbl_LoginName.Visible = true;
|
|
|
|
|
//登录日志
|
|
|
|
|
CommonMethods.AddOPLog(false, $"登录成功,登录用户:{CommonMethods.currentAdmin?.LoginName},权限:{CommonMethods.currentAdmin?.LoginLevel}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void label8_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btn_Return_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
DialogResult dialogResult1 = new FrmMsgBoxWithAck("是否退出登录!", "提示").ShowDialog();
|
|
|
|
|
if (dialogResult1 == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
this.lbl_LoginName.Text = "";
|
|
|
|
|
this.lbl_LoginLevel.Text = "";
|
|
|
|
|
CommonMethods.AddOPLog(false, $"退出登录成功,当前用户已注销");
|
|
|
|
|
CommonMethods.IsLoginOk = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 消息筛选器
|
|
|
|
|
internal class MessageFilter : IMessageFilter
|
|
|
|
|
{
|
|
|
|
|
//0x0200:鼠标移动
|
|
|
|
|
//0x0202:鼠标左键UP
|
|
|
|
|
//0x201:鼠标左键Down
|
|
|
|
|
//0x0203:鼠标左键双击
|
|
|
|
|
//0x0205:鼠标右键UP
|
|
|
|
|
//0x0204:鼠标右键Down
|
|
|
|
|
//0x020a:鼠标滚轮
|
|
|
|
|
//0x100:键盘按下
|
|
|
|
|
public bool PreFilterMessage(ref Message m)
|
|
|
|
|
{
|
|
|
|
|
//throw new NotImplementedException();
|
|
|
|
|
if (m.Msg == 0x0200 || m.Msg == 0x0202 || m.Msg == 0x201 || m.Msg == 0x0203 || m.Msg == 0x0205 || m.Msg == 0x204 || m.Msg == 0x20a || m.Msg == 0x100)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.tickCount = 0;
|
|
|
|
|
CommonMethods.tickHomeCount = 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
}
|