2025-09-17 20:04:00 +08:00
|
|
|
using JinYuan.CommunicationLib.Enum;
|
|
|
|
|
using JinYuan.ControlLib;
|
|
|
|
|
using JinYuan.Helper;
|
|
|
|
|
using JinYuan.Models;
|
|
|
|
|
using JinYuan.VirtualDataLibrary;
|
|
|
|
|
using Microsoft.Win32;
|
|
|
|
|
using MiniExcelLibs;
|
2026-07-02 17:22:02 +08:00
|
|
|
using PLCCommunication;
|
2025-09-17 20:04:00 +08:00
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Drawing;
|
2026-07-02 17:22:02 +08:00
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using static Org.BouncyCastle.Math.EC.ECCurve;
|
2025-09-17 20:04:00 +08:00
|
|
|
|
|
|
|
|
namespace LargeSquareOne
|
|
|
|
|
{
|
|
|
|
|
public partial class FrmSystemSet : Form
|
|
|
|
|
{
|
|
|
|
|
private string FdConfigFilePath = "fd_config.xlsx";
|
|
|
|
|
private List<FDConfig> fdConfigs;
|
|
|
|
|
private List<string> PLCTypes = new List<string>();
|
|
|
|
|
private List<string> NGLDTypes1 = new List<string>();//NG拉带类型
|
|
|
|
|
private List<string> NGLDTypes2 = new List<string>();//NG拉带类型
|
|
|
|
|
private List<string> NGLDTypes3 = new List<string>();//NG拉带类型
|
|
|
|
|
private bool isFDEditing = false;
|
|
|
|
|
private int editingFDRowIndex = -1;
|
2025-09-18 11:11:38 +08:00
|
|
|
//档位
|
|
|
|
|
private string Grading1 = "一档";
|
|
|
|
|
private string Grading2 = "二档";
|
|
|
|
|
private string Grading3 = "三档";
|
|
|
|
|
private string Grading4 = "四档";
|
|
|
|
|
private string Grading5 = "五档";
|
|
|
|
|
private string Grading6 = "六档";
|
2025-09-17 20:04:00 +08:00
|
|
|
private readonly string configFolderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config");
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 打印日志方法
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="Message"></param>日志信息
|
|
|
|
|
/// <param name="FileName"></param>文件夹名字
|
|
|
|
|
public static void LogMessage(string Message, string FileName)
|
|
|
|
|
{
|
|
|
|
|
string filePath = FileName + "//" + DateTime.Now.ToString("yyyy-MM-dd"); // 日志文件存放路径,默认在debug目录下
|
|
|
|
|
string filePath2 = FileName + "//" + DateTime.Now.ToString("yyyy-MM-dd") + "//Mylog.txt";//也可以加上时间
|
|
|
|
|
//string file=DateTime.Now+"log.txt";
|
|
|
|
|
//检查文件夹是否存在,否则新建
|
|
|
|
|
if (!Directory.Exists(filePath))
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(filePath);
|
|
|
|
|
}
|
|
|
|
|
string logMessage = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")}: {Message}";//打印出现的时间
|
|
|
|
|
// 将消息写入日志文件
|
|
|
|
|
using (StreamWriter writer = new StreamWriter(filePath2, true))
|
|
|
|
|
{
|
|
|
|
|
writer.WriteLine(logMessage);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public FrmSystemSet(string devPath)
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////设置控件样式,去除缓冲
|
|
|
|
|
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.cmb_PLCType.Items.Add("OmronFinsTcp_HSL");
|
|
|
|
|
this.cmb_PLCType.Items.Add("Mitsubishi");
|
|
|
|
|
this.cmb_PLCType.Items.Add("Inovance");
|
|
|
|
|
|
|
|
|
|
FdConfigFilePath = Path.Combine(configFolderPath, "FdConfig.xlsx");
|
|
|
|
|
PLCTypes.AddRange(new string[] { "OmronFinsTCP", "OmronCipNet" });
|
|
|
|
|
NGLDTypes1.AddRange(new string[] { "面1", "面2", "面3" });
|
|
|
|
|
NGLDTypes2.AddRange(new string[] { "面1", "面2", "面3" });
|
|
|
|
|
NGLDTypes3.AddRange(new string[] { "面1", "面2", "面3" });
|
|
|
|
|
SetupFDDataGridView();
|
2025-09-18 11:11:38 +08:00
|
|
|
|
|
|
|
|
LoadFDConfig();
|
2025-09-17 20:04:00 +08:00
|
|
|
|
|
|
|
|
this.tog_AutoStart.IsChecked = CommonMethods.sysConfig.AutoStart;
|
|
|
|
|
this.tog_AutoLogin.IsChecked = CommonMethods.sysConfig.AutoLogin;
|
|
|
|
|
this.tog_AutoLock.IsChecked = CommonMethods.sysConfig.AutoLock;
|
|
|
|
|
this.up_LockPeriod.CurrentValue = CommonMethods.sysConfig.LockPeriod;
|
|
|
|
|
this.tog_AutoQieHuanM.IsChecked = CommonMethods.sysConfig.AutoQieHuanM;
|
|
|
|
|
this.up_QieHuanPeriod.CurrentValue = CommonMethods.sysConfig.QieHuanMPeriod;
|
|
|
|
|
this.up_ShowSeriesCount.CurrentValue = CommonMethods.sysConfig.ShowSeriesCount;
|
|
|
|
|
|
|
|
|
|
this.tog_SwipeCardMode.IsChecked = CommonMethods.sysConfig.SwipeCardMode;
|
|
|
|
|
this.tog_OpenMesModel.IsChecked = CommonMethods.sysConfig.MesModeSwitching;
|
|
|
|
|
this.tog_GetMesParam.IsChecked = CommonMethods.sysConfig.GetMesParam;
|
|
|
|
|
this.tog_SaveThreadTime.IsChecked = CommonMethods.sysConfig.SaveThreadTime;
|
|
|
|
|
this.tog_OKSwitching.IsChecked = CommonMethods.sysConfig.OKSwitching;
|
|
|
|
|
this.tog_AutoStart.CheckedChanged += new System.EventHandler(this.tog_AutoStart_CheckedChanged);
|
|
|
|
|
this.tog_AutoLogin.CheckedChanged += new System.EventHandler(this.tog_AutoLogin_CheckedChanged);
|
|
|
|
|
this.tog_AutoLock.CheckedChanged += new System.EventHandler(this.tog_AutoLock_CheckedChanged);
|
|
|
|
|
this.up_LockPeriod.ValueChanged += new System.EventHandler(this.up_LockPeriod_ValueChanged);
|
|
|
|
|
|
|
|
|
|
this.tog_AutoQieHuanM.CheckedChanged += new System.EventHandler(this.tog_AutoQieHuanM_CheckedChanged);
|
|
|
|
|
this.up_QieHuanPeriod.ValueChanged += new System.EventHandler(this.up_QieHuanPeriod_ValueChanged);
|
|
|
|
|
|
|
|
|
|
this.up_ShowSeriesCount.ValueChanged += new System.EventHandler(this.up_ShowSeriesCount_ValueChanged);
|
|
|
|
|
|
|
|
|
|
this.devPath = devPath;
|
|
|
|
|
|
|
|
|
|
InitParam();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private string devPath = string.Empty;
|
|
|
|
|
|
|
|
|
|
private void InitParam()
|
|
|
|
|
{
|
|
|
|
|
this.txt_IP.Text = CommonMethods.plcDevice.IPAddress;
|
|
|
|
|
this.txt_Prot.Text = CommonMethods.plcDevice.Port.ToString();
|
|
|
|
|
this.cmb_PLCType.Text = CommonMethods.plcDevice.PLCType;
|
|
|
|
|
|
|
|
|
|
this.txtFactory_code.Text = CommonMethods.mesConfig.siteCode;
|
|
|
|
|
this.txtline_No.Text = CommonMethods.mesConfig.lineCode;
|
|
|
|
|
this.txtEqp_code.Text = CommonMethods.mesConfig.equipNum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 系统相关配置
|
|
|
|
|
private void tog_AutoLogin_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.SaveAutoLogin(((Toggle)sender).IsChecked))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改软件自动登录方式:" + ((Toggle)sender).IsChecked.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void tog_AutoStart_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.SaveAutoStart(((Toggle)sender).IsChecked))
|
|
|
|
|
{
|
|
|
|
|
//写入注册表
|
|
|
|
|
AutoStart(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改软件自动启动方式:" + ((Toggle)sender).IsChecked.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void tog_AutoLock_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.SaveAutoLock(((Toggle)sender).IsChecked))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改无操作自动锁屏方式:" + ((Toggle)sender).IsChecked.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void up_LockPeriod_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.SaveLockPeriod(Convert.ToInt32(((UpDownLabel)sender).CurrentValue)))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改锁屏间隔时间:" + ((UpDownLabel)sender).CurrentValue.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void tog_AutoQieHuanM_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.SaveAutoQieHuanM(((Toggle)sender).IsChecked))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改无操作自动切换监控界面方式:" + ((Toggle)sender).IsChecked.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void up_QieHuanPeriod_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.SaveQieHuanMPeriod(Convert.ToInt32(((UpDownLabel)sender).CurrentValue)))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改切换监控界面间隔时间:" + ((UpDownLabel)sender).CurrentValue.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void up_ShowSeriesCount_ValueChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.SaveShowSeriesCount(Convert.ToInt32(((UpDownLabel)sender).CurrentValue)))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改曲线显示数量:" + ((UpDownLabel)sender).CurrentValue.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void tog_SwipeCardMode_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.SaveSwipeCardMode(((Toggle)sender).IsChecked))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改刷卡模式:" + ((Toggle)sender).IsChecked.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
if (CommonMethods.sysConfig.SwipeCardMode && CommonMethods.IsLoginOk)
|
|
|
|
|
{
|
|
|
|
|
DialogResult dialogResult1 = new FrmMsgBoxWithAck("当前已登录,是否切换刷卡模式!", "提示").ShowDialog();
|
|
|
|
|
if (dialogResult1 == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, $"切换刷卡模式成功,当前用户已注销");
|
|
|
|
|
CommonMethods.IsLoginOk = false;
|
|
|
|
|
CommonMethods.sysConfig.SwipeCardMode = true;
|
|
|
|
|
this.tog_SwipeCardMode.IsChecked = CommonMethods.sysConfig.SwipeCardMode;
|
|
|
|
|
CommonMethods.SaveSwipeCardMode(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
//切屏
|
|
|
|
|
CommonMethods.sysConfig.ScreenCutting = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.IsLoginOk = true;
|
|
|
|
|
CommonMethods.sysConfig.SwipeCardMode = false;
|
|
|
|
|
this.tog_SwipeCardMode.IsChecked = CommonMethods.sysConfig.SwipeCardMode;
|
|
|
|
|
CommonMethods.SaveSwipeCardMode(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void tog_OpenMesModel_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.plcDevice.IsConnected && CommonMethods.sysConfig.MesModeSwitching)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.sysConfig.MesModeSwitching = true;
|
|
|
|
|
this.tog_OpenMesModel.IsChecked = CommonMethods.sysConfig.MesModeSwitching;
|
|
|
|
|
CommonMethods.SaveOpenMesModel(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "先停止运行再切换MES", "提示").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (CommonMethods.plcDevice.IsConnected && !CommonMethods.sysConfig.MesModeSwitching)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.sysConfig.MesModeSwitching = false;
|
|
|
|
|
this.tog_OpenMesModel.IsChecked = CommonMethods.sysConfig.MesModeSwitching;
|
|
|
|
|
CommonMethods.SaveOpenMesModel(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "先停止运行再切换MES", "提示").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (CommonMethods.SaveOpenMesModel(((Toggle)sender).IsChecked))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改MES/非MES模式切换:" + ((Toggle)sender).IsChecked.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
if (CommonMethods.sysConfig.MesModeSwitching)
|
|
|
|
|
{
|
|
|
|
|
FrmLoginMes frmLoginMes = new FrmLoginMes();
|
|
|
|
|
if (frmLoginMes.ShowDialog() != DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.sysConfig.MesModeSwitching = false;
|
|
|
|
|
this.tog_OpenMesModel.IsChecked = CommonMethods.sysConfig.MesModeSwitching;
|
|
|
|
|
CommonMethods.SaveOpenMesModel(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DialogResult dialogResult = new FrmMsgBoxWithAck("是否关闭MES模式!", "提示").ShowDialog();
|
|
|
|
|
if (dialogResult == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, $"关闭MES模式成功,MES用户已注销");
|
|
|
|
|
CommonMethods.sysConfig.MesModeSwitching = false;
|
|
|
|
|
this.tog_OpenMesModel.IsChecked = CommonMethods.sysConfig.MesModeSwitching;
|
|
|
|
|
CommonMethods.SaveOpenMesModel(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.sysConfig.MesModeSwitching = true;
|
|
|
|
|
this.tog_OpenMesModel.IsChecked = CommonMethods.sysConfig.MesModeSwitching;
|
|
|
|
|
CommonMethods.SaveOpenMesModel(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void tog_GetMesParam_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.SaveGetMesParam(((Toggle)sender).IsChecked))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改获取MES参数:" + ((Toggle)sender).IsChecked.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void tog_SaveThreadTime_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (CommonMethods.SaveSaveThreadTime(((Toggle)sender).IsChecked))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "修改线程耗时日志保存:" + ((Toggle)sender).IsChecked.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 修改程序在注册表的 键值
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="isAuto"></param>
|
|
|
|
|
private void AutoStart(bool isAuto = true)
|
|
|
|
|
{
|
|
|
|
|
if (isAuto == true)
|
|
|
|
|
{
|
|
|
|
|
RegistryKey R_local = Registry.CurrentUser;
|
|
|
|
|
RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\windows\CurrentVersion\Run");
|
|
|
|
|
R_run.SetValue("KYJPro", System.Windows.Forms.Application.ExecutablePath);
|
|
|
|
|
R_run.Close();
|
|
|
|
|
R_local.Close();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RegistryKey R_local = Registry.CurrentUser;
|
|
|
|
|
RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\windows\CurrentVersion\Run");
|
|
|
|
|
R_run.DeleteSubKey("KYJPro", false);
|
|
|
|
|
R_run.Close();
|
|
|
|
|
R_local.Close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
private void btn_GroupConfig_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
new FrmGroupConfig().ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btn_VarConfig_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
new FrmVariableConfig().ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void btn_Sure_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
bool result = IniConfigHelper.WriteIniData("设备参数", "IP地址", this.txt_IP.Text.Trim(), devPath);
|
|
|
|
|
IniConfigHelper.WriteIniData("设备参数", "端口号", this.txt_Prot.Text.Trim(), devPath);
|
|
|
|
|
IniConfigHelper.WriteIniData("设备参数", "PLC类型", this.cmb_PLCType.Text.Trim(), devPath);
|
|
|
|
|
|
|
|
|
|
IniConfigHelper.WriteIniData("MES配置", "工厂代码", this.txtFactory_code.Text.Trim());
|
|
|
|
|
IniConfigHelper.WriteIniData("MES配置", "产线编号", this.txtline_No.Text.Trim());
|
|
|
|
|
IniConfigHelper.WriteIniData("MES配置", "设备编号", this.txtEqp_code.Text.Trim());
|
|
|
|
|
|
|
|
|
|
if (result)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.plcDevice.IPAddress = this.txt_IP.Text.Trim();
|
|
|
|
|
CommonMethods.plcDevice.Port = Convert.ToInt32(this.txt_Prot.Text.Trim());
|
|
|
|
|
CommonMethods.plcDevice.PLCType = cmb_PLCType.Text;
|
|
|
|
|
|
|
|
|
|
CommonMethods.mesConfig.siteCode = this.txtFactory_code.Text.Trim();
|
|
|
|
|
CommonMethods.mesConfig.lineCode = this.txtline_No.Text.Trim();
|
|
|
|
|
CommonMethods.mesConfig.equipNum = this.txtEqp_code.Text.Trim();
|
|
|
|
|
|
|
|
|
|
DialogResult dialogResult = new FrmMsgBoxOutWithAck(1, "参数修改成功", "参数设置").ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(3, "通信参数设置失败", "通信设置").Show();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 取消
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void btn_Cancel_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
this.txt_IP.Text = CommonMethods.plcDevice.IPAddress;
|
|
|
|
|
this.txt_Prot.Text = CommonMethods.plcDevice.Port.ToString();
|
|
|
|
|
this.cmb_PLCType.Text = CommonMethods.plcDevice.PLCType;
|
|
|
|
|
|
|
|
|
|
this.txtFactory_code.Text = CommonMethods.mesConfig.siteCode;
|
|
|
|
|
this.txtline_No.Text = CommonMethods.mesConfig.lineCode;
|
|
|
|
|
this.txtEqp_code.Text = CommonMethods.mesConfig.equipNum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 减少闪烁
|
|
|
|
|
protected override CreateParams CreateParams
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
CreateParams cp = base.CreateParams;
|
|
|
|
|
cp.ExStyle |= 0x02000000;
|
|
|
|
|
return cp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
private void tog_OKSwitching_CheckedChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (CommonMethods.plcDevice.IsConnected && CommonMethods.sysConfig.OKSwitching)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.sysConfig.OKSwitching = true;
|
|
|
|
|
this.tog_OKSwitching.IsChecked = CommonMethods.sysConfig.OKSwitching;
|
|
|
|
|
CommonMethods.SaveOpenOKModel(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "先停止运行再切换强制OK模式", "提示").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (CommonMethods.plcDevice.IsConnected && !CommonMethods.sysConfig.OKSwitching)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.sysConfig.OKSwitching = false;
|
|
|
|
|
this.tog_OKSwitching.IsChecked = CommonMethods.sysConfig.OKSwitching;
|
|
|
|
|
CommonMethods.SaveOpenOKModel(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "先停止运行再切换强制OK模式", "提示").ShowDialog();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (CommonMethods.SaveOpenOKModel(((Toggle)sender).IsChecked))
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, "强制OK/正常NG模式切换:" + ((Toggle)sender).IsChecked.ToString());
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
if (CommonMethods.sysConfig.OKSwitching)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.sysConfig.OKSwitching = true;
|
|
|
|
|
this.tog_OKSwitching.IsChecked = CommonMethods.sysConfig.OKSwitching;
|
|
|
|
|
CommonMethods.SaveOpenOKModel(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DialogResult dialogResult = new FrmMsgBoxWithAck("是否关闭强制OK模式!", "提示").ShowDialog();
|
|
|
|
|
if (dialogResult == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.AddOPLog(false, $"关闭强制OK模式成功");
|
|
|
|
|
CommonMethods.sysConfig.OKSwitching = false;
|
|
|
|
|
this.tog_OKSwitching.IsChecked = CommonMethods.sysConfig.OKSwitching;
|
|
|
|
|
CommonMethods.SaveOpenOKModel(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.sysConfig.OKSwitching = true;
|
|
|
|
|
this.tog_OKSwitching.IsChecked = CommonMethods.sysConfig.OKSwitching;
|
|
|
|
|
CommonMethods.SaveOpenOKModel(((Toggle)sender).IsChecked);
|
|
|
|
|
CommonMethods.GetSysConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string OKMessage = "调用了强制结果开关,当前状态(true:启用,false:未启用)为: " + CommonMethods.sysConfig.OKSwitching.ToString();
|
|
|
|
|
LogMessage(OKMessage, "强制结果OK日志");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 分档设置
|
|
|
|
|
private void LoadFDConfig()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (File.Exists(FdConfigFilePath))
|
|
|
|
|
{
|
|
|
|
|
using (var stream = File.OpenRead(FdConfigFilePath))
|
|
|
|
|
{
|
|
|
|
|
var devices = MiniExcel.Query<FDConfig>(stream).ToList();
|
|
|
|
|
fdConfigs = devices.Select(device => new FDConfig
|
|
|
|
|
{
|
|
|
|
|
FdNum = device.FdNum,
|
|
|
|
|
OKLD1Type = device.OKLD1Type,
|
|
|
|
|
OKLD2Type = device.OKLD2Type,
|
|
|
|
|
OKLD3Type = device.OKLD3Type,
|
|
|
|
|
OKLD4Type = device.OKLD4Type,
|
2025-09-18 11:11:38 +08:00
|
|
|
OKLD5Type = device.OKLD5Type,
|
|
|
|
|
OKLD6Type = device.OKLD6Type,
|
|
|
|
|
//NGLD5Type = device.NGLD5Type,
|
|
|
|
|
//NGLD6Type = device.NGLD6Type,
|
|
|
|
|
//NGLD7Type = device.NGLD7Type,
|
2025-09-17 20:04:00 +08:00
|
|
|
IsFDActive = device.IsFDActive,
|
|
|
|
|
IsNGActive = device.IsNGActive
|
|
|
|
|
}).ToList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
fdConfigs = new List<FDConfig>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RefreshFDDataGridView();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show($"加载配置文件失败:{ex.Message}", "错误",
|
|
|
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
fdConfigs = new List<FDConfig>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
private void SetColumnsFDReadOnly(bool readOnly)
|
|
|
|
|
{
|
|
|
|
|
foreach (DataGridViewColumn col in dgvFdConfigs.Columns)
|
|
|
|
|
{
|
|
|
|
|
// PlcNum 列始终保持只读
|
|
|
|
|
if (col.Name == "FdNum")
|
|
|
|
|
{
|
|
|
|
|
col.ReadOnly = true;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 按钮列不需要设置 ReadOnly 属性
|
|
|
|
|
if (col is DataGridViewButtonColumn)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
// 其他列根据参数设置
|
|
|
|
|
col.ReadOnly = readOnly;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 初始化分档DataGrid
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void SetupFDDataGridView()
|
|
|
|
|
{
|
|
|
|
|
// 设置基本属性
|
|
|
|
|
dgvFdConfigs.AutoGenerateColumns = false;
|
|
|
|
|
dgvFdConfigs.MultiSelect = false;
|
|
|
|
|
|
|
|
|
|
// 添加数据列
|
|
|
|
|
dgvFdConfigs.Columns.AddRange(new DataGridViewColumn[]
|
|
|
|
|
{
|
|
|
|
|
new DataGridViewTextBoxColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "FdNum",
|
|
|
|
|
HeaderText = "分档编号",
|
|
|
|
|
DataPropertyName = "FdNum",
|
|
|
|
|
ReadOnly = true,
|
|
|
|
|
Width = 80,
|
|
|
|
|
ValueType = typeof(int)
|
|
|
|
|
},
|
|
|
|
|
#region 分档类型
|
|
|
|
|
new DataGridViewTextBoxColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "OKLD1Type",
|
|
|
|
|
HeaderText = "OK拉带类型1",
|
|
|
|
|
DataPropertyName = "OKLD1Type",
|
|
|
|
|
Width = 120,
|
|
|
|
|
ValueType = typeof(string)
|
|
|
|
|
},
|
|
|
|
|
new DataGridViewTextBoxColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "OKLD2Type",
|
|
|
|
|
HeaderText = "OK拉带类型2",
|
|
|
|
|
DataPropertyName = "OKLD2Type",
|
|
|
|
|
Width = 120,
|
|
|
|
|
ValueType = typeof(string)
|
|
|
|
|
},
|
|
|
|
|
new DataGridViewTextBoxColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "OKLD3Type",
|
|
|
|
|
HeaderText = "OK拉带类型3",
|
|
|
|
|
DataPropertyName = "OKLD3Type",
|
|
|
|
|
Width = 120,
|
|
|
|
|
ValueType = typeof(string)
|
|
|
|
|
},
|
|
|
|
|
new DataGridViewTextBoxColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "OKLD4Type",
|
|
|
|
|
HeaderText = "OK拉带类型4",
|
|
|
|
|
DataPropertyName = "OKLD4Type",
|
|
|
|
|
Width = 120,
|
|
|
|
|
ValueType = typeof(string)
|
|
|
|
|
},
|
2025-09-18 11:11:38 +08:00
|
|
|
new DataGridViewTextBoxColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "OKLD5Type",
|
|
|
|
|
HeaderText = "OK拉带类型5",
|
|
|
|
|
DataPropertyName = "OKLD5Type",
|
|
|
|
|
Width = 120,
|
|
|
|
|
ValueType = typeof(string)
|
|
|
|
|
},
|
|
|
|
|
new DataGridViewTextBoxColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "OKLD6Type",
|
|
|
|
|
HeaderText = "OK拉带类型6",
|
|
|
|
|
DataPropertyName = "OKLD6Type",
|
|
|
|
|
Width = 120,
|
|
|
|
|
ValueType = typeof(string)
|
|
|
|
|
},
|
2025-09-17 20:04:00 +08:00
|
|
|
#endregion
|
|
|
|
|
#region NG拉带类型
|
2025-09-18 11:11:38 +08:00
|
|
|
// new DataGridViewComboBoxColumn
|
|
|
|
|
//{
|
|
|
|
|
// Name = "NGLD5Type",
|
|
|
|
|
// HeaderText = "NG拉带类型5",
|
|
|
|
|
// DataPropertyName = "NGLD5Type",//NG拉带
|
|
|
|
|
// DataSource = new List<string>(NGLDTypes1), // 使用新列表避免引用问题
|
|
|
|
|
// Width = 160,
|
|
|
|
|
// ValueType = typeof(string),
|
|
|
|
|
// FlatStyle = FlatStyle.Flat,
|
|
|
|
|
// DefaultCellStyle = new DataGridViewCellStyle
|
|
|
|
|
// {
|
|
|
|
|
// BackColor = Color.FromArgb(14, 23, 38), // 深色背景
|
|
|
|
|
// ForeColor = Color.White, // 白色文字
|
|
|
|
|
// SelectionBackColor = Color.FromArgb(0, 122, 204), // 选中时的背景色
|
|
|
|
|
// SelectionForeColor = Color.White, // 选中时的文字颜色
|
|
|
|
|
// Font = new Font("微软雅黑", 9F) // 字体设置
|
|
|
|
|
// }
|
|
|
|
|
//},
|
|
|
|
|
//new DataGridViewComboBoxColumn
|
|
|
|
|
//{
|
|
|
|
|
// Name = "NGLD6Type",
|
|
|
|
|
// HeaderText = "NG拉带类型6",
|
|
|
|
|
// DataPropertyName = "NGLD6Type",//NG拉带
|
|
|
|
|
// DataSource = new List<string>(NGLDTypes2), // 使用新列表避免引用问题
|
|
|
|
|
// Width = 160,
|
|
|
|
|
// ValueType = typeof(string),
|
|
|
|
|
// FlatStyle = FlatStyle.Flat,
|
|
|
|
|
// DefaultCellStyle = new DataGridViewCellStyle
|
|
|
|
|
// {
|
|
|
|
|
// BackColor = Color.FromArgb(14, 23, 38), // 深色背景
|
|
|
|
|
// ForeColor = Color.White, // 白色文字
|
|
|
|
|
// SelectionBackColor = Color.FromArgb(0, 122, 204), // 选中时的背景色
|
|
|
|
|
// SelectionForeColor = Color.White, // 选中时的文字颜色
|
|
|
|
|
// Font = new Font("微软雅黑", 9F) // 字体设置
|
|
|
|
|
// }
|
|
|
|
|
//},
|
|
|
|
|
//new DataGridViewComboBoxColumn
|
|
|
|
|
//{
|
|
|
|
|
// Name = "NGLD7Type",
|
|
|
|
|
// HeaderText = "NG拉带类型7",
|
|
|
|
|
// DataPropertyName = "NGLD7Type",//NG拉带
|
|
|
|
|
// DataSource = new List<string>(NGLDTypes3), // 使用新列表避免引用问题
|
|
|
|
|
// Width = 160,
|
|
|
|
|
// ValueType = typeof(string),
|
|
|
|
|
// FlatStyle = FlatStyle.Flat,
|
|
|
|
|
// DefaultCellStyle = new DataGridViewCellStyle
|
|
|
|
|
// {
|
|
|
|
|
// BackColor = Color.FromArgb(14, 23, 38), // 深色背景
|
|
|
|
|
// ForeColor = Color.White, // 白色文字
|
|
|
|
|
// SelectionBackColor = Color.FromArgb(0, 122, 204), // 选中时的背景色
|
|
|
|
|
// SelectionForeColor = Color.White, // 选中时的文字颜色
|
|
|
|
|
// Font = new Font("微软雅黑", 9F) // 字体设置
|
|
|
|
|
// }
|
|
|
|
|
//},
|
2025-09-17 20:04:00 +08:00
|
|
|
#endregion
|
|
|
|
|
#region 开启分档
|
|
|
|
|
new DataGridViewCheckBoxColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "IsFDActive",
|
|
|
|
|
HeaderText = "开启分档",
|
|
|
|
|
DataPropertyName = "IsFDActive",
|
|
|
|
|
Width = 80,
|
|
|
|
|
ValueType = typeof(bool),
|
|
|
|
|
TrueValue = true,
|
|
|
|
|
FalseValue = false
|
|
|
|
|
},
|
|
|
|
|
new DataGridViewCheckBoxColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "IsNGActive",
|
|
|
|
|
HeaderText = "NG电池不分类排出",
|
|
|
|
|
DataPropertyName = "IsNGActive",
|
|
|
|
|
Width = 80,
|
|
|
|
|
ValueType = typeof(bool),
|
|
|
|
|
TrueValue = true,
|
|
|
|
|
FalseValue = false
|
|
|
|
|
},
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
new DataGridViewButtonColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "Edit",
|
|
|
|
|
HeaderText = "操作",
|
|
|
|
|
Text = "修改",
|
|
|
|
|
UseColumnTextForButtonValue = true,
|
|
|
|
|
Width = 80
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 设置列为只读
|
|
|
|
|
SetColumnsFDReadOnly(false);
|
|
|
|
|
|
|
|
|
|
// 绑定事件
|
|
|
|
|
dgvFdConfigs.CellClick += DgvFdConfigs_CellClick;
|
|
|
|
|
dgvFdConfigs.CellValidating += DgvFdConfigs_CellValidating;
|
|
|
|
|
dgvFdConfigs.CellValueChanged += DgvFdConfigs_CellValueChanged;
|
|
|
|
|
dgvFdConfigs.DataError += DgvFdConfigs_DataError;
|
|
|
|
|
|
|
|
|
|
// 设置自动调整行高
|
|
|
|
|
dgvFdConfigs.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
|
|
|
|
|
dgvFdConfigs.RowHeadersVisible = false;
|
|
|
|
|
}
|
|
|
|
|
private void DgvFdConfigs_CellClick(object sender, DataGridViewCellEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.RowIndex < 0) return;
|
|
|
|
|
|
|
|
|
|
var columnName = dgvFdConfigs.Columns[e.ColumnIndex].Name;
|
|
|
|
|
|
|
|
|
|
// 如果正在编辑其他行,阻止操作
|
|
|
|
|
if (isFDEditing && editingFDRowIndex != e.RowIndex)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("请先完成当前编辑操作", "提示",
|
|
|
|
|
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var fdConfig = fdConfigs[e.RowIndex];
|
|
|
|
|
|
|
|
|
|
switch (columnName)
|
|
|
|
|
{
|
|
|
|
|
case "Edit":
|
|
|
|
|
HandleFDEdit(e.RowIndex);
|
|
|
|
|
break;
|
|
|
|
|
case "CommConfig":
|
|
|
|
|
HandleCommFdConfig(fdConfig);
|
|
|
|
|
break;
|
|
|
|
|
case "VariableConfig":
|
|
|
|
|
HandleVariableFdConfig(fdConfig);
|
|
|
|
|
break;
|
|
|
|
|
case "Delete":
|
|
|
|
|
HandleFdDelete(e.RowIndex, fdConfig);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void HandleFDEdit(int rowIndex)
|
|
|
|
|
{
|
|
|
|
|
if (!isFDEditing)
|
|
|
|
|
{
|
|
|
|
|
// 开始编辑
|
|
|
|
|
isFDEditing = true;
|
|
|
|
|
editingFDRowIndex = rowIndex;
|
|
|
|
|
SetColumnsFDReadOnly(false); // 设置其他列为可编辑
|
|
|
|
|
|
|
|
|
|
// 更改编辑按钮文本为"保存"
|
|
|
|
|
dgvFdConfigs.Rows[rowIndex].Cells["Edit"].Value = "保存";
|
|
|
|
|
|
|
|
|
|
// 禁用其他行的按钮
|
|
|
|
|
foreach (DataGridViewRow row in dgvFdConfigs.Rows)
|
|
|
|
|
{
|
|
|
|
|
if (row.Index != rowIndex)
|
|
|
|
|
{
|
|
|
|
|
if (row.Cells["Edit"] is DataGridViewButtonCell editCell)
|
|
|
|
|
editCell.Value = "";
|
|
|
|
|
if (row.Cells["CommConfig"] is DataGridViewButtonCell configCell)
|
|
|
|
|
configCell.Value = "";
|
|
|
|
|
if (row.Cells["Delete"] is DataGridViewButtonCell deleteCell)
|
|
|
|
|
deleteCell.Value = "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 禁用添加按钮
|
|
|
|
|
//btAddPLC.Enabled = false;
|
|
|
|
|
}
|
|
|
|
|
else if (rowIndex == editingFDRowIndex)
|
|
|
|
|
{
|
|
|
|
|
// 保存更改
|
|
|
|
|
//if (ValidateRow(rowIndex))
|
|
|
|
|
{
|
|
|
|
|
SaveFDChanges(rowIndex);
|
|
|
|
|
EndFDEditing();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void EndFDEditing()
|
|
|
|
|
{
|
|
|
|
|
isFDEditing = false;
|
|
|
|
|
editingFDRowIndex = -1;
|
|
|
|
|
SetColumnsFDReadOnly(true);
|
|
|
|
|
|
|
|
|
|
// 恢复所有按钮文本和状态
|
|
|
|
|
foreach (DataGridViewRow row in dgvFdConfigs.Rows)
|
|
|
|
|
{
|
|
|
|
|
row.Cells["Edit"].Value = "编辑";
|
|
|
|
|
// row.Cells["CommConfig"].Value = "通信组";
|
|
|
|
|
// row.Cells["Delete"].Value = "删除";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 启用添加按钮
|
|
|
|
|
//btAddPLC.Enabled = true;
|
|
|
|
|
}
|
|
|
|
|
private void HandleCommFdConfig(FDConfig fdconfig)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
private void HandleVariableFdConfig(FDConfig fdconfig)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
private void HandleFdDelete(int rowIndex, FDConfig fdconfig)
|
|
|
|
|
{
|
|
|
|
|
if (MessageBox.Show($"确定要删除 分档 {fdconfig.FdNum} 吗?", "确认删除",
|
|
|
|
|
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
|
|
|
|
{
|
|
|
|
|
fdConfigs.RemoveAt(rowIndex);
|
|
|
|
|
SaveFDConfig();
|
|
|
|
|
RefreshFDDataGridView();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void SaveFDChanges(int rowIndex)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
2026-07-02 17:22:02 +08:00
|
|
|
|
|
|
|
|
int result = CommonMethods.PlcLink.ReadInt16("D88");//判断是否停机 1为停机,0为正在运行
|
|
|
|
|
if (result == 1)
|
|
|
|
|
{
|
|
|
|
|
var row = dgvFdConfigs.Rows[rowIndex];
|
|
|
|
|
var config = fdConfigs[rowIndex];
|
2025-09-17 20:04:00 +08:00
|
|
|
|
2026-07-02 17:22:02 +08:00
|
|
|
// 更新配置对象
|
|
|
|
|
config.OKLD1Type = row.Cells["OKLD1Type"].Value?.ToString() ?? "";
|
|
|
|
|
config.OKLD2Type = row.Cells["OKLD2Type"].Value?.ToString() ?? "";
|
|
|
|
|
config.OKLD3Type = row.Cells["OKLD3Type"].Value?.ToString() ?? "";
|
|
|
|
|
config.OKLD4Type = row.Cells["OKLD4Type"].Value?.ToString() ?? "";
|
|
|
|
|
config.OKLD5Type = row.Cells["OKLD5Type"].Value?.ToString() ?? "";
|
|
|
|
|
config.OKLD6Type = row.Cells["OKLD6Type"].Value?.ToString() ?? "";
|
|
|
|
|
//config.NGLD5Type = row.Cells["NGLD5Type"].Value?.ToString() ?? "";
|
|
|
|
|
//config.NGLD6Type = row.Cells["NGLD6Type"].Value?.ToString() ?? "";
|
|
|
|
|
//config.NGLD7Type = row.Cells["NGLD7Type"].Value?.ToString() ?? "";
|
2025-09-17 20:04:00 +08:00
|
|
|
|
2026-07-02 17:22:02 +08:00
|
|
|
config.IsFDActive = row.Cells["IsFDActive"].Value != null &&
|
|
|
|
|
Convert.ToBoolean(row.Cells["IsFDActive"].Value);
|
|
|
|
|
config.IsNGActive = row.Cells["IsNGActive"].Value != null &&
|
|
|
|
|
Convert.ToBoolean(row.Cells["IsNGActive"].Value);
|
2025-09-17 20:04:00 +08:00
|
|
|
|
2026-07-02 17:22:02 +08:00
|
|
|
// 保存更改
|
|
|
|
|
SaveFDConfig();
|
|
|
|
|
//加载
|
|
|
|
|
CommonMethods.WriteGrading();
|
|
|
|
|
MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("机器正在运行不能修改", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-17 20:04:00 +08:00
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
// 这里只显示错误信息,不再抛出异常
|
|
|
|
|
MessageBox.Show($"保存失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void DgvFdConfigs_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.RowIndex < 0 || !isFDEditing || e.RowIndex != editingFDRowIndex) return;
|
|
|
|
|
|
|
|
|
|
string newValue = e.FormattedValue.ToString();
|
|
|
|
|
var column = dgvFdConfigs.Columns[e.ColumnIndex];
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
private void DgvFdConfigs_CellValueChanged(object sender, DataGridViewCellEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.RowIndex < 0) return;
|
|
|
|
|
dgvFdConfigs.Rows[e.RowIndex].ErrorText = string.Empty;
|
|
|
|
|
}
|
|
|
|
|
private void DgvFdConfigs_DataError(object sender, DataGridViewDataErrorEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
e.ThrowException = false;
|
|
|
|
|
string columnName = dgvFdConfigs.Columns[e.ColumnIndex].HeaderText;
|
|
|
|
|
MessageBox.Show($"'{columnName}'列的输入数据格式不正确", "数据错误",
|
|
|
|
|
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
|
|
|
}
|
|
|
|
|
private void SaveFDConfig()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
// 创建备份
|
|
|
|
|
if (File.Exists(FdConfigFilePath))
|
|
|
|
|
{
|
|
|
|
|
string backupFile = $"{FdConfigFilePath}.bak";
|
|
|
|
|
File.Copy(FdConfigFilePath, backupFile, true);
|
|
|
|
|
}
|
2025-09-18 11:11:38 +08:00
|
|
|
//
|
|
|
|
|
Grading1 = fdConfigs[0].OKLD1Type;
|
|
|
|
|
Grading2 = fdConfigs[0].OKLD2Type;
|
|
|
|
|
Grading3 = fdConfigs[0].OKLD3Type;
|
|
|
|
|
Grading4 = fdConfigs[0].OKLD4Type;
|
|
|
|
|
Grading5 = fdConfigs[0].OKLD5Type;
|
|
|
|
|
Grading6 = fdConfigs[0].OKLD6Type;
|
|
|
|
|
SaveFD2xml();
|
2025-09-17 20:04:00 +08:00
|
|
|
// 直接保存到目标文件
|
|
|
|
|
MiniExcel.SaveAs(FdConfigFilePath, fdConfigs, overwriteFile: true);
|
|
|
|
|
}
|
|
|
|
|
catch (IOException ex)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show($"保存文件时发生IO错误:{ex.Message}\n请确保文件未被其他程序占用。",
|
|
|
|
|
"保存错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
catch (UnauthorizedAccessException ex)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show($"没有足够的权限保存文件:{ex.Message}\n请确保有写入权限。",
|
|
|
|
|
"权限错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show($"保存配置时发生错误:{ex.Message}",
|
|
|
|
|
"保存错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void RefreshFDDataGridView()
|
|
|
|
|
{
|
|
|
|
|
dgvFdConfigs.DataSource = null;
|
|
|
|
|
dgvFdConfigs.DataSource = new BindingList<FDConfig>(fdConfigs);
|
2025-09-18 11:11:38 +08:00
|
|
|
}
|
|
|
|
|
private void SaveFD2xml()
|
|
|
|
|
{
|
|
|
|
|
CommonMethods.mesConfig.Grading1 = Grading1;
|
|
|
|
|
CommonMethods.mesConfig.Grading2 = Grading2;
|
|
|
|
|
CommonMethods.mesConfig.Grading3 = Grading3;
|
|
|
|
|
CommonMethods.mesConfig.Grading4 = Grading4;
|
|
|
|
|
CommonMethods.mesConfig.Grading5 = Grading5;
|
|
|
|
|
CommonMethods.mesConfig.Grading6 = Grading6;
|
|
|
|
|
//档位
|
|
|
|
|
IniConfigHelper.WriteIniData("MES配置", "Grading1", Grading1);
|
|
|
|
|
IniConfigHelper.WriteIniData("MES配置", "Grading2", Grading2);
|
|
|
|
|
IniConfigHelper.WriteIniData("MES配置", "Grading3", Grading3);
|
|
|
|
|
IniConfigHelper.WriteIniData("MES配置", "Grading4", Grading4);
|
|
|
|
|
IniConfigHelper.WriteIniData("MES配置", "Grading5", Grading5);
|
|
|
|
|
IniConfigHelper.WriteIniData("MES配置", "Grading6", Grading6);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-17 20:04:00 +08:00
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|