// using DevExpress.Xpo.DB; // using FastReport.Export.Dbf; // using HslCommunication; // using Mesnac.Action.ChemicalWeighing.Entity; // using Mesnac.Codd.Session; // using Mesnac.DoUtils; // using Mesnac.PlcUtils; // using System; // using System.Collections.Generic; // using System.Data; // using System.Linq; // using System.Text; // using System.Threading; // using static DevExpress.Xpo.Helpers.AssociatedCollectionCriteriaHelper; // // namespace Mesnac.Action.ChemicalWeighing.FinishBatch.SaveHelper // { // public class AlarmSaveHelper // { // /// // /// 报警保存事件定义 // /// // // public event EventHandler OnAlarmSave; // // public event EventHandler OnAlarmSaveExtend; // public object sender = null; // public object senderExtend = null; // private int WordLength = 16; //定义字长 // // // private PlcBusiness plcBusiness = PlcBusiness.Instance; // // // private DoControl doControl = DoControl.Instance; // // private static readonly Lazy lazy = new Lazy(() => new AlarmSaveHelper()); // // public static AlarmSaveHelper Instance // { // get // { // return lazy.Value; // } // } // // private AlarmSaveHelper() { } // // /// // /// 保存报警信息 // /// // public void Save() // { // List _alarmInfoList = Cache.CacheHelper.AlarmInfoList; // List _alarmBlockWordList = Cache.CacheHelper.BlockWordList; // ICSharpCode.Core.LoggingService.Debug("报警参数-实时刷新自动保存报警..."); // // #region 读取PLC的报警数据 原方法 Delete By wenjy 2023-08-07 17:10:07 // //foreach (Entity.AlarmInfo info in _alarmInfoList) // //{ // // Int16[] buff = null; // // if (BasePlcHelper.Instance.PlcRead(info.AlarmPLC, info.AlarmBlock, info.Start, info.Length, out buff)) // // { // // foreach (Entity.SimpleAlarmInfo sai in _alarmBlockWordList) // // { // // if (sai.AlramPLC == info.AlarmPLC && sai.AlarmBlock == info.AlarmBlock) //匹配数据块 // // { // // sai.AlarmData = buff[sai.AlarmAddress - info.Start]; //对起始字偏移,为当前字的报警值 // // sai.AlarmData = Mesnac.Basic.DataProcessor.Swap(sai.AlarmData); //注意:西门子PLC需要高低位转换 // // } // // } // // } // // else // // { // // ICSharpCode.Core.LoggingService.Warn(String.Format("从PLC读取报警数据失败:PLC={0},Block={1},Start={2},Len={3}", info.AlarmPLC, info.AlarmBlock, info.Start, info.Length)); // // } // // //} // // #endregion // // #region 保存报警数据 原方法 Delete By wenjy 2023-08-07 18:05:06 // // //foreach (Entity.SimpleAlarmInfo sai in _alarmBlockWordList) // //{ // // int[] binaryAlarmData = Mesnac.Basic.DataProcessor.ParseBinaryValue(sai.AlarmData, WordLength); // // for (int i = 0; i < WordLength; i++) // // { // // if (sai.IsSaveAlarm[i] == true && binaryAlarmData[i] == 0) // // { // // //更新报警状态 // // Entity.PmtAlarmInfo alarmInfo = Cache.CacheHelper.GetPmtAlarmInfoFromCache(sai.AlramPLC, sai.AlarmBlock, sai.AlarmAddress, i); // // if (alarmInfo != null) // // { // // Alarm.AlarmHelper.UpdateAlarmLogData(alarmInfo.Alarm_ID,DateTime.Now.ToString()); // // //清除显示的报警列表信息 // // if(Global.PublicVar.Instance.AlarmStrList.Exists(x => x == alarmInfo.AlarmName)) // // { // // Global.PublicVar.Instance.AlarmStrList.Remove(alarmInfo.AlarmName); // // Global.PublicVar.Instance.isFlashFlag = true; // // Global.PublicVar.Instance.isFlashFlagExtend = true; // // } // // } // // } // // if (binaryAlarmData[i] == 0) // // { // // sai.IsSaveAlarm[i] = false; // // } // // if (sai.IsSaveAlarm[i] == false && binaryAlarmData[i] == 1) // // { // // sai.IsSaveAlarm[i] = true; // // //数据保存 // // Entity.PmtAlarmInfo alarmInfo = Cache.CacheHelper.GetPmtAlarmInfoFromCache(sai.AlramPLC, sai.AlarmBlock, sai.AlarmAddress, i); // // if (alarmInfo != null) // // { // // Entity.LR_Alarmlog alarmLogData = new Entity.LR_Alarmlog(); // // alarmLogData.Equip_Code = alarmInfo.Equip_Code; // // alarmLogData.Alarm_ID = alarmInfo.Alarm_ID; // // alarmLogData.Alarm_OccurTime = DateTime.Now.ToString(); // // alarmLogData.Alarm_ClearTime = String.Empty; // // alarmLogData.Alarm_Status = 1; // // alarmLogData.Alarm_GUID = Guid.NewGuid().ToString().ToUpper(); // // Alarm.AlarmHelper.InsertAlarmLogData(alarmLogData); // // Global.PublicVar.Instance.AlarmStrList.Add(alarmInfo.AlarmName); // // Global.PublicVar.Instance.isFlashFlag = true; // // Global.PublicVar.Instance.isFlashFlagExtend = true; // // } // // } // // } // //} // // #endregion // // try // { // foreach (Entity.AlarmInfo info in _alarmInfoList) // { // string address = $"DB{info.AlarmBlock}.DBX{info.AlarmWord}.{info.AlarmBit}"; // // OperateResult result = plcBusiness.readBoolValue(address); // // ICSharpCode.Core.LoggingService.Debug(string.Format("{0}读取{1}", address, result.IsSuccess == true ? $"成功;读取结果:{result.Content}" : "失败")); // // if (result.IsSuccess == true) // // { // // if (result.Content) // // { // // AlarmLogicalProcessing(_alarmBlockWordList, info); // // } // // } // // AlarmLight(result.Content); //控制报警灯 True红灯;False绿灯 // } // // #region 触发事件 // // // if (OnAlarmSave != null && Global.PublicVar.Instance.isFlashFlag) // // { // // OnAlarmSave(sender, System.EventArgs.Empty); // // } // // if (OnAlarmSaveExtend != null && Global.PublicVar.Instance.isFlashFlagExtend) // // { // // OnAlarmSaveExtend(senderExtend, System.EventArgs.Empty); // // } // // #endregion // } // catch (Exception ex) // { // ICSharpCode.Core.LoggingService.Error(String.Format("AlarmSaveHelper逻辑异常:{0}", ex.Message), ex); // } // } // // /// // /// 报警逻辑处理 // /// // /// // /// // private void AlarmLogicalProcessing(List _alarmBlockWordList, Entity.AlarmInfo info) // { // if(_alarmBlockWordList != null) // { // foreach (Entity.SimpleAlarmInfo sai in _alarmBlockWordList) // { // if (sai.AlramPLC == info.AlarmPLC && sai.AlarmBlock == info.AlarmBlock && sai.AlarmBit == info.AlarmBit) //匹配数据块 // { // sai.AlarmData = 1; //对起始字偏移,为当前字的报警值 // // Entity.PmtAlarmInfo alarmInfo = Cache.CacheHelper.GetPmtAlarmInfoFromCache(sai.AlramPLC, sai.AlarmBlock, sai.AlarmAddress, Convert.ToInt32(sai.AlarmBit)); // if (alarmInfo != null) // { // UpdateAlarmLogData(alarmInfo); //更新报警状态 // InsertAlarmLogData(alarmInfo); //保存报警信息 // } // } // } // } // } // // /// // /// 更新报警状态 // /// // /// // private void UpdateAlarmLogData(Entity.PmtAlarmInfo alarmInfo) // { // if (alarmInfo != null) // { // Alarm.AlarmHelper.UpdateAlarmLogData(alarmInfo.Alarm_ID, DateTime.Now.ToString()); // //清除显示的报警列表信息 // if (Global.PublicVar.Instance.AlarmStrList.Exists(x => x == alarmInfo.AlarmName)) // { // Global.PublicVar.Instance.AlarmStrList.Remove(alarmInfo.AlarmName); // Global.PublicVar.Instance.isFlashFlag = true; // Global.PublicVar.Instance.isFlashFlagExtend = true; // } // } // } // // /// // /// 保存报警信息 // /// // /// // private void InsertAlarmLogData(Entity.PmtAlarmInfo alarmInfo) // { // if (alarmInfo != null) // { // //保存报警信息 // Entity.LR_Alarmlog alarmLogData = new Entity.LR_Alarmlog(); // alarmLogData.Equip_Code = alarmInfo.Equip_Code; // alarmLogData.Alarm_ID = alarmInfo.Alarm_ID; // alarmLogData.Alarm_OccurTime = DateTime.Now.ToString(); // alarmLogData.Alarm_ClearTime = String.Empty; // alarmLogData.Alarm_Status = 1; // alarmLogData.Alarm_GUID = Guid.NewGuid().ToString().ToUpper(); // // Alarm.AlarmHelper.InsertAlarmLogData(alarmLogData); // Global.PublicVar.Instance.AlarmStrList.Add(alarmInfo.AlarmName); // Global.PublicVar.Instance.isFlashFlag = true; // Global.PublicVar.Instance.isFlashFlagExtend = true; // } // // } // // /// // /// 报警灯控制 // /// // /// 是否报警 // private void AlarmLight(bool flag) // { // // if(flag) // // { // // //打开报警灯:FIRST 关闭绿灯 SECOND 打开红灯 // // doControl.DOControl(DoUtils.enumInfo.DOName.Green, DoUtils.enumInfo.DOOnOff.Off); // // doControl.DOControl(DoUtils.enumInfo.DOName.Red, DoUtils.enumInfo.DOOnOff.On); // // } // // else // // { // // // 关闭报警灯:FIRST 打开红灯 SECOND 关闭绿灯 // // doControl.DOControl(DoUtils.enumInfo.DOName.Red, DoUtils.enumInfo.DOOnOff.Off); // // doControl.DOControl(DoUtils.enumInfo.DOName.Green, DoUtils.enumInfo.DOOnOff.On); // // } // } // } // }