using JinYuan.CommunicationLib; using JinYuan.CommunicationLib.Base; using JinYuan.CommunicationLib.Enum; using JinYuan.DAL; using JinYuan.Helper; using JinYuan.MES; using JinYuan.Models; using JinYuan.Models.SysCfg; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; using System.Windows.Forms; namespace JinYuan.VirtualDataLibrary { public class CommonMethods { /// /// 本地数据库 /// public static ISugarHepler db = new SQLSugarService(); /// /// 远程服务段数据库 /// public static ISugarHepler dbServer = new SQLSugarService(); /// /// MES接口 /// public static IMes hbgMes = new MesDataProcess(); /// /// 参数 /// public static ProductModelParam parRange = new ProductModelParam(); /// /// 全局钩子 /// public static ScanerHook listener = new ScanerHook(); /// /// 创建个全局焊接功率队列数据存储 /// public static List> QWeldingPowerData = new List>(); /// /// 创建个全局入壳推力队列数据存储 /// public static List> QPlanenessData = new List>(); /// /// 创建全局的登录对象 /// public static SysAdmin currentAdmin = null; /// /// 登录是否成功 /// public static bool IsLoginOk = false; /// /// 创建一个设备对象 /// public static Device plcDevice; /// /// ModbusTCP通信对象 /// //public static OmronFinsTCP plc = new OmronFinsTCP(); //创建一个全局的配置对象 public static SysConfig sysConfig = new SysConfig(); /// /// 创建全局的登录对象 /// public static List listNgCodeEntity = new List(); public static int InvadTime; /// /// 智能电表 /// public static List listElectricEnergy = new List(); /// ///是否开启刷新 /// public static bool isRefreshTimerWeeding = false; /// /// SQL语句 /// public static DBSQL dBSQL { get; } = new DBSQL(); /// /// MES配置文件类 /// public static MesConfig mesConfig = new MesConfig(); public static short[] MESGradingSet = new short[] { 0,0,0,0,0,0}; ///创建一个全局的连接状态 public static bool connectState = false; /// /// 滴答次数 /// public static int tickCount = 0; /// /// QIEHUAN /// public static int tickHomeCount = 0; /// /// 报警信息 /// public static string SlideAlarmText = "当前无报警"; /// /// 退出 /// public static bool IsExit = false; /// /// 是否登出账户 /// public static bool LoginOut = false; /// /// 是否上传MES /// public static bool IsUpMes { get; set; } /// /// 是否运行 /// public static bool IsRun { get; set; } = false; /// ///第一次读取 /// public static bool IsFirst = false; /// /// 焊接功率波形图显示条数 /// public static int ChatLineCount = 3; /// /// 员工号 /// public static string strWorker { get; set; } /// /// 是否开启智能电表 /// public static bool IsStartZNDB { get; set; } = false; /// /// 白夜班 /// public static string strClass { get; set; } = "白班"; /// /// 时间变更 /// public static string ChangeClassTime { get; set; } = "20:30:00"; /// /// 设备状态 /// public static List Statues { get; set; } /// /// 服务器链接状态 /// public static bool EMCStatues { get; set; } #region 小时产能 /// /// 上个时间点的总数 /// public static int LastTotalNum { get; set; } = 0; /// /// 上个时间点良品数 /// public static int LastOkNum { get; set; } = 0; /// /// 上一次重置计数的时间 /// public static string LastResetTime { get; set; } /// /// 上一次的小时 /// public static int LastHour { get; set; } #endregion /// /// /// public static List ListOmronGroups { get; set; } /// /// 12小时产能 /// public static List Lst_Prod12HourData = new List(); /// /// 不良选项(检测项不良) /// public static List Lst_DefectTypeQty = new List(); /// /// PLC报警前10项 /// public static List Lst_AlarmTop10_Qty = new List(); /// /// 参数项设置 /// public static List paramlists { get; set; } /// /// 线程控制 /// public static ManualResetEvent ResetEventRecv = new ManualResetEvent(true); #region 计数项 /// /// 生产总数 /// public static int TotalQty = 0; public static int ProOKQty = 0; public static int Ppm = 0; public static double JiaDL = 0.0; public static List AntiDustAirSpeed = new List(); /// /// PLC开机/运行时间 /// public static List PlcOpenAndRunTime = new List(); /// /// PLC开机/运行时间地址 /// public static List PlcOpenAndRunTimeAdress = new List { "D50", "D52", "D54", "D56", "D58", "D60" }; public static int ProdDRFIDNgQty = 0;//低托杯 public static int ProdDXNgQty = 0;//卷心码 public static int ProdGRFIDNgQty = 0;//高托杯 public static int ProdYLZNgQty = 0;//压力 #endregion private static PlcReadWriteBase _PlcLink; /// /// PLC客户端 /// public static PlcReadWriteBase PlcLink { get { if (_PlcLink == null) { _PlcLink = PlcNewClass.GetPLC(CommonMethods.plcDevice.IPAddress, CommonMethods.plcDevice.Port, (PLCType)Enum.Parse(typeof(PLCType), (string)CommonMethods.plcDevice.PLCType, false)); } return _PlcLink; } } #region 首次连接PLC public static bool ConnectPLC() { try { if (CommonMethods.plcDevice != null) { //判断是否为第一次连接 if (!CommonMethods.plcDevice.IsFirstConnect) { Thread.Sleep(CommonMethods.plcDevice.ReConnectTime); CommonMethods.PlcLink.Disconnect(); } string msg = ""; var result = CommonMethods.PlcLink.Connect(ref msg); if (result) { CommonMethods.plcDevice.IsConnected = true; CommonMethods.AddLog(false, CommonMethods.plcDevice.IsFirstConnect ? $"PLC初次连接成功:{msg}" : $"PLC重新连接成功:{msg}"); return true; } else { CommonMethods.plcDevice.IsConnected = false; CommonMethods.AddLog(true, CommonMethods.plcDevice.IsFirstConnect ? "PLC初次连接失败" : "PLC重新连接失败"); } //如果是第一次连接,将标志位复位 if (CommonMethods.plcDevice.IsFirstConnect) { CommonMethods.plcDevice.IsFirstConnect = false; } } } catch (Exception) { new MsgshowTip("与PLC链接断开,请检查通讯线路!").ShowDialog(); } return false; } #endregion #region 写入分档 public static bool WriteGrading() { var res = false; try { if (plcDevice != null && plcDevice.IsConnected) { DateTime Date = DateTime.Now; MESGradingSet = new short[6]; #region 档位写入 //var gradingMap = new Dictionary(); //var gGradingMap = new Dictionary(); //short normalStart = 21; //short gStart = 31; //string[] specialGrading = new string[] { "NG", "扫码NG" }; //var gradings = new[] { // mesConfig.Grading1.Trim(), // mesConfig.Grading2.Trim(), // mesConfig.Grading3.Trim(), // mesConfig.Grading4.Trim(), // mesConfig.Grading5.Trim(), // mesConfig.Grading6.Trim() //}; //for (int i = 0; i < gradings.Length; i++) //{ // string grading = gradings[i]; // if (!specialGrading.Contains(grading) && grading.EndsWith("G")) // { // if (gGradingMap.TryGetValue(grading, out short value)) // MESGradingSet[i] = value; // else // { // MESGradingSet[i] = gStart; // gGradingMap.Add(grading, gStart); // gStart++; // } // } // else // { // if (gradingMap.TryGetValue(grading, out short value)) // MESGradingSet[i] = value; // else // { // MESGradingSet[i] = normalStart; // gradingMap.Add(grading, normalStart); // normalStart++; // } // } //} //#region 更新默认档位 //for (int i = 0; i < gradings.Length; i++) //{ // switch (gradings[i]) // { // /* 性能NG */ // case "NG": // MESGradingSet[i] = 98; // break; // /* 外观检NG // case "E63yG": // MESGradingSet[i] = 31; // break; // case "F63yG": // MESGradingSet[i] = 32; // break; // */ // /* 其它NG */ // case "拦截": // case "扫码NG": // case "其它": // MESGradingSet[i] = 97; // break; // /* 性能NG */ // case "不设置": // MESGradingSet[i] = 0; // break; // } //} //#endregion #endregion // 读取Chanel列表的默认值写入PLC if (mesConfig.ChannelConfig?.Channels == null || mesConfig.ChannelConfig.Channels.Count != 6) { throw new ArgumentOutOfRangeException("Channel.json 不满足要求,文件不存在或没有6个通道"); } var channels = mesConfig.ChannelConfig.Channels; for (int i = 0; i < channels.Count; i++) { MESGradingSet[i] = (short)channels[i].DefaultValue; } // For Test //string testStr = "E63y,F63y"; //string[] mesChannels = testStr.Split(','); //var channel = channels.FirstOrDefault(it => StrUtil.IsExist(it.Gears, mesChannels)); var isWrite1 = PlcLink.WriteValue("D2600", MESGradingSet[0], Data_Type.Short); var isWrite2 = PlcLink.WriteValue("D2601", MESGradingSet[1], Data_Type.Short); var isWrite3 = PlcLink.WriteValue("D2602", MESGradingSet[2], Data_Type.Short); var isWrite4 = PlcLink.WriteValue("D2603", MESGradingSet[3], Data_Type.Short); var isWrite5 = PlcLink.WriteValue("D2604", MESGradingSet[4], Data_Type.Short); var isWrite6 = PlcLink.WriteValue("D2605", MESGradingSet[5], Data_Type.Short); if (isWrite1.IsSuccess && isWrite2.IsSuccess && isWrite3.IsSuccess && isWrite4.IsSuccess && isWrite5.IsSuccess && isWrite6.IsSuccess) { AddDataMonitorLog(0, $"OK分档档位写入PLC成功![2600~2605]{string.Join(",", MESGradingSet)}"); return true; } } } catch (Exception ex) { AddLog(true, ex.ToString()); } return false; } #endregion #region 写入PLC信息 //public static OperateResult CommonWrite(string varName, string varValue) //{ // //先通过变量名称找到对象 // var variable = plcDevice.VarList.Find(c => c.VarName == varName); // if (variable != null) // { // DataConvertLib.DataType dataType = (DataConvertLib.DataType)Enum.Parse(typeof(DataConvertLib.DataType), variable.DataType, true); // var result = MigrationLib.SetMigrationValue(varValue, dataType, variable.Scale.ToString(), variable.Offset.ToString()); // if (result.IsSuccess) // { // try // { // switch (dataType) // { // case DataConvertLib.DataType.Bool: // return plc.WriteBool(variable.VarAddress, result.Content == "1" || result.Content.ToUpper() == "TRUE"); // case DataConvertLib.DataType.Byte: // return plc.WriteByte(variable.VarAddress, Convert.ToByte(result.Content)); // case DataConvertLib.DataType.Short: // return plc.WriteShort(variable.VarAddress, Convert.ToInt16(result.Content)); // case DataConvertLib.DataType.UShort: // return plc.WriteUShort(variable.VarAddress, Convert.ToUInt16(result.Content)); // case DataConvertLib.DataType.Int: // return plc.WriteInt(variable.VarAddress, Convert.ToInt32(result.Content)); // case DataConvertLib.DataType.UInt: // return plc.WriteUInt(variable.VarAddress, Convert.ToUInt32(result.Content)); // case DataConvertLib.DataType.Float: // return plc.WriteFloat(variable.VarAddress, Convert.ToSingle(result.Content)); // case DataConvertLib.DataType.Double: // return plc.WriteDouble(variable.VarAddress, Convert.ToDouble(result.Content)); // case DataConvertLib.DataType.Long: // return plc.WriteLong(variable.VarAddress, Convert.ToInt64(result.Content)); // case DataConvertLib.DataType.ULong: // return plc.WriteULong(variable.VarAddress, Convert.ToUInt64(result.Content)); // case DataConvertLib.DataType.String: // return plc.WriteByteArray(variable.VarAddress, ByteArrayLib.GetByteArrayFromString(result.Content, Encoding.ASCII)); // default: // return OperateResult.CreateFailResult("暂不支持此数据类型"); // } // } // catch (Exception ex) // { // return OperateResult.CreateFailResult("数据转换出错:" + ex.Message); // } // } // else // { // return OperateResult.CreateFailResult(result.Message); // } // } // else // { // return OperateResult.CreateFailResult("请检查变量名称是否存在"); // } //} #endregion #region 配置信息 public static string devPath = Application.StartupPath + "\\Config\\Device.ini"; public static string groupPath = Application.StartupPath + "\\Config\\Group.xlsx"; public static string variablePath = Application.StartupPath + "\\Config\\Variable.xlsx"; public static string settingPath = Application.StartupPath + "\\Config\\settings.json"; /// /// 错误日志路径 /// public static string strErrorLogspath = System.Windows.Forms.Application.StartupPath + "\\Logs\\ErrorLogs"; public static string strSystemLogspath = System.Windows.Forms.Application.StartupPath + "\\Logs\\SystemLogs"; public static string strAlarmLogspath = System.Windows.Forms.Application.StartupPath + "\\Logs\\AlarmLogs"; public static string strsqlLogspath = ""; /// /// 删除路径 /// public static string strDeletepath = ""; /// /// 能耗保存路径 /// public static string strWattrMeterpath = System.Windows.Forms.Application.StartupPath + "\\智能电表数据"; /// 风速仪保存路径 /// /// public static string strAnemographpath = System.Windows.Forms.Application.StartupPath + "\\风速仪数据"; /// /// MES路径日志 /// public static string strMesLogspath = System.Windows.Forms.Application.StartupPath + "\\Logs\\MesLogs"; /// /// PLC读取寄存器配置文件路径 /// public static string ConfigPath = Path.Combine(System.Windows.Forms.Application.StartupPath, "ini\\PlcConfig.ini"); /// /// 系统程序配置文件路径 /// public static string iniFilePath = Path.Combine(System.Windows.Forms.Application.StartupPath, "ini\\Configure.ini"); public static string ChannelPath = Path.Combine(System.Windows.Forms.Application.StartupPath, "Config\\Channel.json"); #region 读取json配置 public static Models.ChannelConfig LoadFromJson(string filePath) { var json = File.ReadAllText(filePath); return JsonConvert.DeserializeObject(json); } // 保存 public static void SaveToJson(string filePath, ChannelConfig config) { var json = JsonConvert.SerializeObject(config, Newtonsoft.Json.Formatting.Indented); File.WriteAllText(filePath, json); } #endregion #region 读取配置文件 /// ///读取配置文件 /// public static void GetSysConfig() { try { sysConfig.AutoStart = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "开机自动启动", "false")); sysConfig.AutoLogin = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "启动自动登录", "false")); sysConfig.AutoLock = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "无操作自动锁屏", "false")); sysConfig.LockPeriod = Convert.ToInt32(IniConfigHelper.ReadIniData("配置信息", "锁屏间隔时间", "false")); sysConfig.AutoQieHuanM = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "无操作自动切换监控界面", "false")); sysConfig.QieHuanMPeriod = Convert.ToInt32(IniConfigHelper.ReadIniData("配置信息", "切换监控界面间隔时间", "false")); sysConfig.ShowSeriesCount = Convert.ToInt32(IniConfigHelper.ReadIniData("配置信息", "曲线显示数量", "false")); sysConfig.SwipeCardMode = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "开启刷卡模式", "false")); sysConfig.MesModeSwitching = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "MES/非MES模式切换", "false")); sysConfig.GetMesParam = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "获取MES参数", "false")); sysConfig.OKSwitching = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "强制OK/正常NG模式切换", "false")); sysConfig.SaveThreadTime = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "线程耗时日志保存", "false")); sysConfig.SaveThreadTime = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "线程耗时日志保存", "false")); mesConfig.Grading1 = IniConfigHelper.ReadIniData("MES配置", "Grading1", "false"); mesConfig.Grading2 = IniConfigHelper.ReadIniData("MES配置", "Grading2", "false"); mesConfig.Grading3 = IniConfigHelper.ReadIniData("MES配置", "Grading3", "false"); mesConfig.Grading4 = IniConfigHelper.ReadIniData("MES配置", "Grading4", "false"); mesConfig.Grading5 = IniConfigHelper.ReadIniData("MES配置", "Grading5", "false"); mesConfig.Grading6 = IniConfigHelper.ReadIniData("MES配置", "Grading6", "false"); mesConfig.ChannelConfig = LoadFromJson(ChannelPath); } catch (Exception) { sysConfig = null; } } #endregion #region 保存配置文件 /// /// 保存启动自动登录 /// /// /// public static bool SaveAutoStart(bool value) { return IniConfigHelper.WriteIniData("配置信息", "开机自动启动", value.ToString()); } /// /// 保存开机自动启动 /// /// /// public static bool SaveAutoLogin(bool value) { return IniConfigHelper.WriteIniData("配置信息", "启动自动登录", value.ToString()); } /// /// 保存无操作自动锁屏 /// /// /// public static bool SaveAutoLock(bool value) { return IniConfigHelper.WriteIniData("配置信息", "无操作自动锁屏", value.ToString()); } /// /// 保存锁屏间隔时间 /// /// /// public static bool SaveLockPeriod(int value) { return IniConfigHelper.WriteIniData("配置信息", "锁屏间隔时间", value.ToString()); } /// /// 保存无操作自动切换监控界面 /// /// /// public static bool SaveAutoQieHuanM(bool value) { return IniConfigHelper.WriteIniData("配置信息", "无操作自动切换监控界面", value.ToString()); } /// /// 保存切换监控界面间隔时间 /// /// /// public static bool SaveQieHuanMPeriod(int value) { return IniConfigHelper.WriteIniData("配置信息", "切换监控界面间隔时间", value.ToString()); } /// /// 保存曲线显示数量 /// /// /// public static bool SaveShowSeriesCount(int value) { return IniConfigHelper.WriteIniData("配置信息", "曲线显示数量", value.ToString()); } /// /// 开启刷卡模式 /// /// /// public static bool SaveSwipeCardMode(bool value) { return IniConfigHelper.WriteIniData("配置信息", "开启刷卡模式", value.ToString()); } /// /// MES/非MES模式 /// /// /// public static bool SaveOpenMesModel(bool value) { return IniConfigHelper.WriteIniData("配置信息", "MES/非MES模式切换", value.ToString()); } /// /// 强制OK/正常NG模式切换 /// /// /// public static bool SaveOpenOKModel(bool value) { return IniConfigHelper.WriteIniData("配置信息", "强制OK/正常NG模式切换", value.ToString()); } /// /// 获取MES参数 /// /// /// public static bool SaveGetMesParam(bool value) { return IniConfigHelper.WriteIniData("配置信息", "获取MES参数", value.ToString()); } /// /// 保存线程耗时操作 /// /// /// public static bool SaveSaveThreadTime(bool value) { return IniConfigHelper.WriteIniData("配置信息", "线程耗时日志保存", value.ToString()); } #endregion #endregion #region 委托信息 //创建委托 // 数据监视委托 public static Action AddDataMonitorDelegate; /// /// 系统日志 /// public static Action AddLogDelegate; /// /// 操作日志 /// public static Action AddOPLogDelegate; /// /// 报警日志 /// public static Action AddAlarmDelegate; /// /// 显示报警信息 /// public static Action ShowAlarmDelegate; /// /// 参数更新 /// public static Action ChangeParamDelegate; /// /// 显示上料信息 /// public static Action> ShowFeedingDelegate; /// /// 显示下料数据 /// public static Action> ShowBlankingDelegate; /// /// 数据监视委托 /// /// /// public static void AddDataMonitorLog(int type, string info) { //调用委托 if (AddDataMonitorDelegate != null) { AddDataMonitorDelegate(type, info); } } /// /// 写入系统日志 /// /// 是否为错误信息 /// 日志信息 public static void AddLog(bool isError, string info) { //调用委托 if (AddLogDelegate != null) { AddLogDelegate(isError, info); } } /// /// 写入操作日志 /// /// /// public static void AddOPLog(bool isError, string info) { //调用委托 if (AddLogDelegate != null) { AddOPLogDelegate(isError, info); } } public static void AddAlarmLog(SysLog sysLog) { //调用委托 if (AddAlarmDelegate != null) { AddAlarmDelegate(sysLog); } } /// /// 显示报警日志 /// /// public static void ShowAlarmLog(string info) { //调用委托 if (ShowAlarmDelegate != null) { ShowAlarmDelegate(info); } } public static void ChangeParamData() { //调用委托 if (ChangeParamDelegate != null) { ChangeParamDelegate(); } } #endregion } }