ソースを参照

程序崩溃修复

WIN-GH9CEESPLTB\Administrator 1 ヶ月 前
コミット
cb434aa6c6
共有1 個のファイルを変更した326 個の追加314 個の削除を含む
  1. 326 314
      MainForm/FaForm/Form_Home.cs

+ 326 - 314
MainForm/FaForm/Form_Home.cs

@@ -297,7 +297,7 @@ namespace MainForm
                             AddMessage(LogType.Info, "小米IOT MQTT初始连接成功!");
 
                             // 设置回调函数
-                            XiaomiMqttClient_Extend.SetCallbackWithDataId(CallbackWithDataId);
+                            //XiaomiMqttClient_Extend.SetCallbackWithDataId(CallbackWithDataId);
                             // 配置参数
                             XiaomiMqttLoginFunAndParam param = new XiaomiMqttLoginFunAndParam();
                             // fds
@@ -444,7 +444,7 @@ namespace MainForm
                             task.Start();
                     }
 
-                    //// 开启“获取线体报警数据”的线程
+                    //// 开启iot的线程
                     TaskReadAlarm.Start();
                     ////下传MES信息给1工位(先判断下plc对象数量)
                     //if (Funs.Count > 1)
@@ -674,333 +674,345 @@ namespace MainForm
                     //    UpdatePLCMonitor(1, -2, 0);
                     //    continue;
                     //}
-                    if (plc1Alarm.IsConnected)  // 检查PLC是否已连接上
+                    foreach (Inovance_EIP plcEIP in FunsEip.Values)
                     {
-                        #region 主页展示设备运行状态并上传到IOT中
-                        switch (xmDeviceState)
+                        if (plcEIP != null)
                         {
-                            case XiaomiDeviceState.Uninitialized:  // 未初始化状态(未初始状态,需先初始化装备才能运行)
-                                _DeviceStates = "未初始化状态";
-                                lblDeviceStates.Text = _DeviceStates;
-                                break;
-                            case XiaomiDeviceState.Initializing:   // 初始化状态(初始化进行中)
-                                _DeviceStates = "初始化状态";
-                                lblDeviceStates.Text = _DeviceStates;
-                                break;
-                            case XiaomiDeviceState.Initialized:    // 初始化完成状态(初始化完成)
-                                _DeviceStates = "初始化完成状态";
-                                lblDeviceStates.Text = _DeviceStates;
-                                break;
-                            case XiaomiDeviceState.Running:        // 运行状态(正常运行中)
-                                _DeviceStates = "运行状态";
-                                lblDeviceStates.Text = _DeviceStates;
-                                break;
-                            case XiaomiDeviceState.Paused:         // 暂停状态(设备运行中人工操作暂停,进入此状态)
-                                _DeviceStates = "暂停状态";
-                                lblDeviceStates.Text = _DeviceStates;
-                                break;
-                            case XiaomiDeviceState.Fault:          // 故障状态(发生故障后进入此状态,同时停止运行)
-                                _DeviceStates = "故障状态";
-                                lblDeviceStates.Text = _DeviceStates;
-                                break;
-                            case XiaomiDeviceState.Alarm:          // 警报状态(产生报警后进入此状态,同时停止运行)
-                                _DeviceStates = "警报状态";
-                                lblDeviceStates.Text = _DeviceStates;
-                                break;
-                        }
-
-                        if (!_DeviceStates.Equals(_DeviceStates_Old))
-                        {
-                            var iotResult = SaveDeviceStateData(stationNameStr, xmDeviceState);  // 上传+保存
-                            if (iotResult.Item1 == 1)
+                            if (plcEIP.IsConnected)
                             {
-                                _DeviceStates_Old = _DeviceStates;
-                                AddMessage_Station(stationNameStr, LogType.Info, stationNameStr + $"_上传设备状态到Iot成功!");
-                            }
-                            else
-                                AddMessage_Station(stationNameStr, LogType.Info, stationNameStr + $"_上传设备状态到Iot失败!报错信息:[{iotResult.Item1}]_{iotResult.Item2}");
-                        }
-                        #endregion 主页展示设备运行状态并上传到IOT中
-
-                        DateTime dtNow = DateTime.Now;
-                        //#region 获取设备运行信息
-                        //try
-                        //{
-                        //    LineWorkingData_ThisTime lineWorkingData1 = new LineWorkingData_ThisTime();
-                        //    lineWorkingData1.GUID = Guid.NewGuid().ToString();
-                        //    lineWorkingData1.LineName = GlobalContext.LineCode;
-
-                        //    // 
-                        //    lineWorkingData1.BootTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5500);     // 本次开机时间(整线)D5500 h
-                        //    lineWorkingData1.NormalTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5502);   // 本次开机运行时间(整线)D5502 h
-                        //    lineWorkingData1.StandbyTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5504);  // 本次开机待机时间(整线)D5504 h
-                        //    lineWorkingData1.FaultTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5506);    // 本次开机故障时间(整线)D5506 h
-                        //    lineWorkingData1.MaterialShortageTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5508);  // 本次开机缺料时间(整线)D5508 h
-                        //    lineWorkingData1.MaintenanceTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5510);       // 本次开机维修时间(整线)D5510 h
-                        //    lineWorkingData1.FaultNumber = plc1Alarm.ReadHoldingRegisters<short>(5514);      // 本次开机故障停机次数(整线)D5514
-                        //    lineWorkingData1.OutputNumber = plc1Alarm.ReadHoldingRegisters<short>(5700);     // 本次开机产量(整线) D5700
-                        //    lineWorkingData1.QualifiedNumber = plc1Alarm.ReadHoldingRegisters<short>(5704);  // 本次开机合格数量(整线) D5704
-                        //    lineWorkingData1.QualifiedRate = plc1Alarm.ReadHoldingRegisters<float>(5710);    // 本次开机合格率(整线) D5710
-                        //    lineWorkingData1.DesignRhythm = plc1Alarm.ReadHoldingRegisters<float>(5714);     // 设计节拍(整线) D5714
-                        //    lineWorkingData1.RealityRhythm = plc1Alarm.ReadHoldingRegisters<float>(5716);    // 本次开机实际节拍(整线) D5716
-                        //    lineWorkingData1.CreateTime = DateTime.Now;
-
-                        //    string lineWorkingData1_Str = JsonConvert.SerializeObject(lineWorkingData1);
-
-                        //    // UI展示-展示到设备状态页
-                        //    if (string.IsNullOrEmpty(lineWorkingData1_OldStr))  //  软件启动后第一次运行
-                        //    {
-                        //        // 查询数据库最新一条数据,确定是不是更新
-                        //        string qSql = @"SELECT top(1) [GUID]
-                        //          ,[LineName]
-                        //          ,[BootTimeLong]
-                        //          ,[NormalTimeLong]
-                        //          ,[StandbyTimeLong]
-                        //          ,[FaultTimeLong]
-                        //          ,[MaterialShortageTimeLong]
-                        //          ,[MaintenanceTimeLong]
-                        //          ,[FaultNumber]
-                        //          ,[OutputNumber]
-                        //          ,[QualifiedNumber]
-                        //          ,[QualifiedRate]
-                        //          ,[DesignRhythm]
-                        //          ,[RealityRhythm]
-                        //          ,[CreateTime]
-                        //      FROM [LineWorkingData]
-                        //      where [CreateTime] > '{0}'
-                        //      and [LineName]='{1}'
-                        //      order by [CreateTime] desc
-                        //    ";
-                        //        qSql = string.Format(qSql, DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00", lineWorkingData1.LineName);
-
-                        //        var ds = SQLHelper_New.Query(qSql, null);
-                        //        if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
-                        //        {
-                        //            var dataDBlast = new LineWorkingData_ThisTime();
-                        //            dataDBlast.GUID = ds.Tables[0].Rows[0][0].ToString();                             // 主键
-                        //            dataDBlast.LineName = ds.Tables[0].Rows[0][1].ToString();                         // 线体名称
-                        //            dataDBlast.BootTimeLong = Convert.ToSingle(ds.Tables[0].Rows[0][2].ToString());   // 本次开机时间(整线)
-                        //            dataDBlast.CreateTime = Convert.ToDateTime(ds.Tables[0].Rows[0][14].ToString());  // 创建时间
-
-                        //            if (lineWorkingData1.BootTimeLong > dataDBlast.BootTimeLong)  // 需要更新的情况;不需要更新的走后面的插入
-                        //            {
-                        //                dataDBlast.BootTimeLong = lineWorkingData1.BootTimeLong;        // 本次开机时间(整线)
-                        //                dataDBlast.NormalTimeLong = lineWorkingData1.NormalTimeLong;    // 本次开机运行时间(整线)
-                        //                dataDBlast.StandbyTimeLong = lineWorkingData1.StandbyTimeLong;  // 本次开机待机时间(整线)
-                        //                dataDBlast.FaultTimeLong = lineWorkingData1.FaultTimeLong;      // 本次开机故障时间(整线)
-                        //                dataDBlast.MaterialShortageTimeLong = lineWorkingData1.MaterialShortageTimeLong;  // 本次开机缺料时间(整线)
-                        //                dataDBlast.MaintenanceTimeLong = lineWorkingData1.MaintenanceTimeLong;            // 本次开机维修时间(整线)
-                        //                dataDBlast.FaultNumber = lineWorkingData1.FaultNumber;          // 本次开机故障停机次数(整线)
-                        //                dataDBlast.OutputNumber = lineWorkingData1.OutputNumber;        // 本次开机产量(整线)
-                        //                dataDBlast.QualifiedNumber = lineWorkingData1.QualifiedNumber;  // 本次开机合格数量(整线)
-                        //                dataDBlast.QualifiedRate = lineWorkingData1.QualifiedRate;      // 本次开机合格率(整线)
-                        //                dataDBlast.DesignRhythm = lineWorkingData1.DesignRhythm;        // 设计节拍(整线)
-                        //                dataDBlast.RealityRhythm = lineWorkingData1.RealityRhythm;      // 本次开机实际节拍(整线)
-
-                        //                string usql = dataDBlast.ToStringUpdate();
-                        //                SQLHelper_New.ExecuteSQL(usql, null);
-                        //                lineWorkingData1_OldStr = JsonConvert.SerializeObject(dataDBlast);
-
-                        //                AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyRun}完毕![{lineWorkingData1_OldStr}]");
-                        //                //AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyRun}完毕!");
-                        //            }
-                        //        }
-                        //        else
-                        //        {
-                        //            // 插入
-                        //            SQLHelper_New.ExecuteSQL(lineWorkingData1.ToStringInsert(), null);
-                        //            lineWorkingData1_OldStr = String.Copy(lineWorkingData1_Str);
-                        //            AddMessage_Station(stationNameStr, LogType.Info, $"保存{BodyRun}完毕![{lineWorkingData1_OldStr}]");
-                        //            //AddMessage_Station(stationNameStr, LogType.Info, $"保存{BodyRun}完毕!");
-                        //        }
-                        //    }
-                        //    else if (!lineWorkingData1_Str.Equals(lineWorkingData1_OldStr))  // 非“软件启动后第一次运行”
-                        //    {
-                        //        LineWorkingData_ThisTime lineWorkingData1_Old = string.IsNullOrEmpty(lineWorkingData1_OldStr) ? lineWorkingData1 : JsonConvert.DeserializeObject<LineWorkingData_ThisTime>(lineWorkingData1_OldStr);  // 上次的状态信息
-
-                        //        //// 本次开机设备运行情况
-                        //        //LineWorkingData1_ThisTime lineWorkingData_UI = JsonConvert.DeserializeObject<LineWorkingData1_ThisTime>(lineWorkingData1_OldStr);
-                        //        //Task.Run(() =>
-                        //        //{
-                        //        //    if (Form_Main.formDevAlarm != null && !Form_Main.formDevAlarm.IsDisposed && Form_Main.formDevAlarm.Visible)
-                        //        //    {
-                        //        //        Form_Main.formDevAlarm.UpdDeviceStatus_ThisTime(lineWorkingData_UI);  // UI更新
-                        //        //    }
-                        //        //});
-
-                        //        // 本日设备运行情况
-                        //        // 存数据库(开机时间>上次的开机时间,则更新上次记录;<则作为新数据插入)
-                        //        if (lineWorkingData1.BootTimeLong > lineWorkingData1_Old.BootTimeLong)
-                        //        {
-                        //            // 更新
-                        //            lineWorkingData1_Old.BootTimeLong = lineWorkingData1.BootTimeLong;        // 本次开机时间(整线)
-                        //            lineWorkingData1_Old.NormalTimeLong = lineWorkingData1.NormalTimeLong;    // 本次开机运行时间(整线)
-                        //            lineWorkingData1_Old.StandbyTimeLong = lineWorkingData1.StandbyTimeLong;  // 本次开机待机时间(整线)
-                        //            lineWorkingData1_Old.FaultTimeLong = lineWorkingData1.FaultTimeLong;      // 本次开机故障时间(整线)
-                        //            lineWorkingData1_Old.MaterialShortageTimeLong = lineWorkingData1.MaterialShortageTimeLong;  // 本次开机缺料时间(整线)
-                        //            lineWorkingData1_Old.MaintenanceTimeLong = lineWorkingData1.MaintenanceTimeLong;            // 本次开机维修时间(整线)
-                        //            lineWorkingData1_Old.FaultNumber = lineWorkingData1.FaultNumber;          // 本次开机故障停机次数(整线)
-                        //            lineWorkingData1_Old.OutputNumber = lineWorkingData1.OutputNumber;        // 本次开机产量(整线)
-                        //            lineWorkingData1_Old.QualifiedNumber = lineWorkingData1.QualifiedNumber;  // 本次开机合格数量(整线)
-                        //            lineWorkingData1_Old.QualifiedRate = lineWorkingData1.QualifiedRate;      // 本次开机合格率(整线)
-                        //            lineWorkingData1_Old.DesignRhythm = lineWorkingData1.DesignRhythm;        // 设计节拍(整线)
-                        //            lineWorkingData1_Old.RealityRhythm = lineWorkingData1.RealityRhythm;      // 本次开机实际节拍(整线)
-
-                        //            SQLHelper_New.ExecuteSQL(lineWorkingData1_Old.ToStringUpdate(), null);
-                        //            lineWorkingData1_OldStr = JsonConvert.SerializeObject(lineWorkingData1_Old);
-                        //            AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyRun}完毕![{lineWorkingData1_OldStr}]");
-                        //            //AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyRun}完毕!");
-                        //        }
-                        //        else if (lineWorkingData1.BootTimeLong < lineWorkingData1_Old.BootTimeLong)
-                        //        {
-                        //            // 插入
-                        //            SQLHelper_New.ExecuteSQL(lineWorkingData1.ToStringInsert(), null);
-                        //            lineWorkingData1_OldStr = String.Copy(lineWorkingData1_Str);
-                        //            AddMessage_Station(stationNameStr, LogType.Info, $"保存{BodyRun}完毕![{lineWorkingData1_OldStr}]");
-                        //            //AddMessage_Station(stationNameStr, LogType.Info, $"保存{BodyRun}完毕!");
-                        //        }
-
-                        //        await Task.Run(() =>
-                        //        {
-                        //            try
-                        //            {
-                        //                if (Form_Main.formDevAlarm != null && !Form_Main.formDevAlarm.IsDisposed && Form_Main.formDevAlarm.Visible)
-                        //                {
-                        //                    Form_Main.formDevAlarm.UpdDeviceStatus_Today();  // UI更新
-                        //                }
-                        //            }
-                        //            catch { }
-                        //        });
-                        //    }
-                        //}
-                        //catch (Exception ex)
-                        //{
-                        //    string str = ex.StackTrace;
-                        //    AddMessage_Station(stationNameStr, LogType.Error, $"PLC1_{stationNameStr}_获取设备运行信息出错!错误信息:" + ex.Message.ToString() + "异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1));
-                        //}
-                        //#endregion 获取设备运行信息
-
-                        #region 报警数据
-                        try
-                        {
-                            List<DeviceAlarm_Cur> deviceAlarm_Curs = new List<DeviceAlarm_Cur>();  // 同步到报警页面用传输载体
-                            bool isNeedUpdUI = false;  // 是否需要更新历史报警UI
-
-                            // 同步“设备报警信息”到“设备报警临时字典DicAlarms_Cur”
-                            var dicAlarms_Cur_PLC1 = DicAlarms_Cur[GlobalContext.LineCode];
-                            for (int i = 0; i < dicAlarms_Cur_PLC1.Count; i++)  // 读取
-                            {
-                                short shortBuf = plc1Alarm.ReadHoldingRegisters<short>(dicAlarms_Cur_PLC1[i].关联的PLC地址);
-
-                                dicAlarms_Cur_PLC1[i].是否报警 = shortBuf != 0;
-                                if (dicAlarms_Cur_PLC1[i].上次的运行状态 != dicAlarms_Cur_PLC1[i].是否报警)
+                                #region 主页展示设备运行状态并上传到IOT中
+                                switch (xmDeviceState)
                                 {
-                                    isNeedUpdUI = true;  // 需要更新历史报警UI信息
-                                    // 记录
-                                    dicAlarms_Cur_PLC1[i].上次的运行状态 = dicAlarms_Cur_PLC1[i].是否报警;
-
-                                    switch (dicAlarms_Cur_PLC1[i].是否报警)
-                                    {
-                                        case true:  // 报警
-                                            dicAlarms_Cur_PLC1[i].报警数据 = new AlarmData()
-                                            {
-                                                GUID = Guid.NewGuid().ToString(),
-                                                LineName = GlobalContext.LineCode,  // 线体
-                                                AlarmType = dicAlarms_Cur_PLC1[i].报警类型,  // 报警类型
-                                                AlarmDesc = dicAlarms_Cur_PLC1[i].报警详情,  // 报警内容
-                                                StartTime = dtNow  // 开始时间
-                                            };
-
-                                            // 传输到页面
-                                            deviceAlarm_Curs.Add(new DeviceAlarm_Cur()
-                                            {
-                                                线体名称 = dicAlarms_Cur_PLC1[i].报警数据.LineName,
-                                                报警类型 = dicAlarms_Cur_PLC1[i].报警数据.AlarmType,
-                                                报警内容 = dicAlarms_Cur_PLC1[i].报警数据.AlarmDesc,
-                                                开始时间 = dtNow
-                                            });
-
-                                            // 新增到数据库
-                                            var data1 = dicAlarms_Cur_PLC1[i].报警数据;
-                                            SaveAlarmDataByDB(stationNameStr, data1, false);
-                                            AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyAlarm}完毕!");
-                                            break;
-                                        case false:  // 消除报警
-                                            if (dicAlarms_Cur_PLC1[i].报警数据 == null || string.IsNullOrEmpty(dicAlarms_Cur_PLC1[i].报警数据.GUID))
-                                            {
-                                                dicAlarms_Cur_PLC1[i].报警数据 = new AlarmData()
-                                                {
-                                                    GUID = Guid.NewGuid().ToString(),
-                                                    LineName = GlobalContext.LineCode,      // 线体
-                                                    AlarmType = dicAlarms_Cur_PLC1[i].报警类型,  // 报警类型
-                                                    AlarmDesc = dicAlarms_Cur_PLC1[i].报警详情,  // 报警内容
-                                                    StartTime = dtNow,  // 开始时间
-                                                    EndTime = dtNow,    // 开始时间
-                                                    PersistTime = 1,    // 耗时1s
-                                                };
-
-                                                // 新增
-                                                var data2 = dicAlarms_Cur_PLC1[i].报警数据;
-                                                SaveAlarmDataByDB(stationNameStr, data2, false);
-                                                AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyAlarm}完毕!");
-                                            }
-                                            else
-                                            {
-                                                dicAlarms_Cur_PLC1[i].报警数据.EndTime = dtNow;  // 开始时间
-                                                dicAlarms_Cur_PLC1[i].报警数据.PersistTime = Convert.ToInt32((dicAlarms_Cur_PLC1[i].报警数据.EndTime
-                                                    - dicAlarms_Cur_PLC1[i].报警数据.StartTime).TotalSeconds);  // 耗时s
-
-                                                // 修改
-                                                var data3 = dicAlarms_Cur_PLC1[i].报警数据;
-                                                SaveAlarmDataByDB(stationNameStr, data3, true);
-                                                AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyAlarm}完毕!");
-                                            }
-                                            break;
-                                        default:
-                                            break;
-                                    }
+                                    case XiaomiDeviceState.Uninitialized:  // 未初始化状态(未初始状态,需先初始化装备才能运行)
+                                        _DeviceStates = "未初始化状态";
+                                        lblDeviceStates.Text = _DeviceStates;
+                                        break;
+                                    case XiaomiDeviceState.Initializing:   // 初始化状态(初始化进行中)
+                                        _DeviceStates = "初始化状态";
+                                        lblDeviceStates.Text = _DeviceStates;
+                                        break;
+                                    case XiaomiDeviceState.Initialized:    // 初始化完成状态(初始化完成)
+                                        _DeviceStates = "初始化完成状态";
+                                        lblDeviceStates.Text = _DeviceStates;
+                                        break;
+                                    case XiaomiDeviceState.Running:        // 运行状态(正常运行中)
+                                        _DeviceStates = "运行状态";
+                                        lblDeviceStates.Text = _DeviceStates;
+                                        break;
+                                    case XiaomiDeviceState.Paused:         // 暂停状态(设备运行中人工操作暂停,进入此状态)
+                                        _DeviceStates = "暂停状态";
+                                        lblDeviceStates.Text = _DeviceStates;
+                                        break;
+                                    case XiaomiDeviceState.Fault:          // 故障状态(发生故障后进入此状态,同时停止运行)
+                                        _DeviceStates = "故障状态";
+                                        lblDeviceStates.Text = _DeviceStates;
+                                        break;
+                                    case XiaomiDeviceState.Alarm:          // 警报状态(产生报警后进入此状态,同时停止运行)
+                                        _DeviceStates = "警报状态";
+                                        lblDeviceStates.Text = _DeviceStates;
+                                        break;
                                 }
-                            }
-                            DicAlarms_Cur[GlobalContext.LineCode] = dicAlarms_Cur_PLC1;
 
-                            // 有新报警则更新
-                            if (isNeedUpdUI)
-                            {
-                                // UI展示 - 展示到设备状态页
-                                await Task.Run(() =>
+                                if (!_DeviceStates.Equals(_DeviceStates_Old))
                                 {
-                                    try
+                                    var iotResult = SaveDeviceStateData(stationNameStr, xmDeviceState);  // 上传+保存
+                                    if (iotResult.Item1 == 1)
                                     {
-                                        if (Form_Main.formDevAlarm != null && !Form_Main.formDevAlarm.IsDisposed)
-                                        {
-                                            Form_Main.formDevAlarm.UpdDeviceAlarm_Cur(deviceAlarm_Curs);  // 报警UI 更新
-                                            if (Form_Main.formDevAlarm.Visible)
-                                            {
-                                                Form_Main.formDevAlarm.UpdDeviceAlarm_History_48H();  //  历史报警UI 更新
-                                            }
-                                        }
+                                        _DeviceStates_Old = _DeviceStates;
+                                        AddMessage_Station(stationNameStr, LogType.Info, stationNameStr + $"_上传设备状态到Iot成功!");
                                     }
-                                    catch { }
-                                });
+                                    else
+                                        AddMessage_Station(stationNameStr, LogType.Info, stationNameStr + $"_上传设备状态到Iot失败!报错信息:[{iotResult.Item1}]_{iotResult.Item2}");
+                                }
+                                #endregion 主页展示设备运行状态并上传到IOT中
                             }
                         }
-                        catch (Exception ex)
-                        {
-                            string str = ex.StackTrace;
-                            AddMessage_Station(stationNameStr, LogType.Error, $"PLC1_{stationNameStr}_获取报警数据出错!错误信息:" + ex.Message.ToString() + "异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1));
-                        }
-                        #endregion 报警数据
-
-                        UpdatePLCMonitor(1, -2, 1);
-                    }
-                    else
-                    {
-                        UpdatePLCMonitor(1, -2, 0);
                     }
+
+                    //if (plc1Alarm.IsConnected)  // 检查PLC是否已连接上
+                    //{
+                        
+
+                    //    DateTime dtNow = DateTime.Now;
+                    //    //#region 获取设备运行信息
+                    //    //try
+                    //    //{
+                    //    //    LineWorkingData_ThisTime lineWorkingData1 = new LineWorkingData_ThisTime();
+                    //    //    lineWorkingData1.GUID = Guid.NewGuid().ToString();
+                    //    //    lineWorkingData1.LineName = GlobalContext.LineCode;
+
+                    //    //    // 
+                    //    //    lineWorkingData1.BootTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5500);     // 本次开机时间(整线)D5500 h
+                    //    //    lineWorkingData1.NormalTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5502);   // 本次开机运行时间(整线)D5502 h
+                    //    //    lineWorkingData1.StandbyTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5504);  // 本次开机待机时间(整线)D5504 h
+                    //    //    lineWorkingData1.FaultTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5506);    // 本次开机故障时间(整线)D5506 h
+                    //    //    lineWorkingData1.MaterialShortageTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5508);  // 本次开机缺料时间(整线)D5508 h
+                    //    //    lineWorkingData1.MaintenanceTimeLong = plc1Alarm.ReadHoldingRegisters<float>(5510);       // 本次开机维修时间(整线)D5510 h
+                    //    //    lineWorkingData1.FaultNumber = plc1Alarm.ReadHoldingRegisters<short>(5514);      // 本次开机故障停机次数(整线)D5514
+                    //    //    lineWorkingData1.OutputNumber = plc1Alarm.ReadHoldingRegisters<short>(5700);     // 本次开机产量(整线) D5700
+                    //    //    lineWorkingData1.QualifiedNumber = plc1Alarm.ReadHoldingRegisters<short>(5704);  // 本次开机合格数量(整线) D5704
+                    //    //    lineWorkingData1.QualifiedRate = plc1Alarm.ReadHoldingRegisters<float>(5710);    // 本次开机合格率(整线) D5710
+                    //    //    lineWorkingData1.DesignRhythm = plc1Alarm.ReadHoldingRegisters<float>(5714);     // 设计节拍(整线) D5714
+                    //    //    lineWorkingData1.RealityRhythm = plc1Alarm.ReadHoldingRegisters<float>(5716);    // 本次开机实际节拍(整线) D5716
+                    //    //    lineWorkingData1.CreateTime = DateTime.Now;
+
+                    //    //    string lineWorkingData1_Str = JsonConvert.SerializeObject(lineWorkingData1);
+
+                    //    //    // UI展示-展示到设备状态页
+                    //    //    if (string.IsNullOrEmpty(lineWorkingData1_OldStr))  //  软件启动后第一次运行
+                    //    //    {
+                    //    //        // 查询数据库最新一条数据,确定是不是更新
+                    //    //        string qSql = @"SELECT top(1) [GUID]
+                    //    //          ,[LineName]
+                    //    //          ,[BootTimeLong]
+                    //    //          ,[NormalTimeLong]
+                    //    //          ,[StandbyTimeLong]
+                    //    //          ,[FaultTimeLong]
+                    //    //          ,[MaterialShortageTimeLong]
+                    //    //          ,[MaintenanceTimeLong]
+                    //    //          ,[FaultNumber]
+                    //    //          ,[OutputNumber]
+                    //    //          ,[QualifiedNumber]
+                    //    //          ,[QualifiedRate]
+                    //    //          ,[DesignRhythm]
+                    //    //          ,[RealityRhythm]
+                    //    //          ,[CreateTime]
+                    //    //      FROM [LineWorkingData]
+                    //    //      where [CreateTime] > '{0}'
+                    //    //      and [LineName]='{1}'
+                    //    //      order by [CreateTime] desc
+                    //    //    ";
+                    //    //        qSql = string.Format(qSql, DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00", lineWorkingData1.LineName);
+
+                    //    //        var ds = SQLHelper_New.Query(qSql, null);
+                    //    //        if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
+                    //    //        {
+                    //    //            var dataDBlast = new LineWorkingData_ThisTime();
+                    //    //            dataDBlast.GUID = ds.Tables[0].Rows[0][0].ToString();                             // 主键
+                    //    //            dataDBlast.LineName = ds.Tables[0].Rows[0][1].ToString();                         // 线体名称
+                    //    //            dataDBlast.BootTimeLong = Convert.ToSingle(ds.Tables[0].Rows[0][2].ToString());   // 本次开机时间(整线)
+                    //    //            dataDBlast.CreateTime = Convert.ToDateTime(ds.Tables[0].Rows[0][14].ToString());  // 创建时间
+
+                    //    //            if (lineWorkingData1.BootTimeLong > dataDBlast.BootTimeLong)  // 需要更新的情况;不需要更新的走后面的插入
+                    //    //            {
+                    //    //                dataDBlast.BootTimeLong = lineWorkingData1.BootTimeLong;        // 本次开机时间(整线)
+                    //    //                dataDBlast.NormalTimeLong = lineWorkingData1.NormalTimeLong;    // 本次开机运行时间(整线)
+                    //    //                dataDBlast.StandbyTimeLong = lineWorkingData1.StandbyTimeLong;  // 本次开机待机时间(整线)
+                    //    //                dataDBlast.FaultTimeLong = lineWorkingData1.FaultTimeLong;      // 本次开机故障时间(整线)
+                    //    //                dataDBlast.MaterialShortageTimeLong = lineWorkingData1.MaterialShortageTimeLong;  // 本次开机缺料时间(整线)
+                    //    //                dataDBlast.MaintenanceTimeLong = lineWorkingData1.MaintenanceTimeLong;            // 本次开机维修时间(整线)
+                    //    //                dataDBlast.FaultNumber = lineWorkingData1.FaultNumber;          // 本次开机故障停机次数(整线)
+                    //    //                dataDBlast.OutputNumber = lineWorkingData1.OutputNumber;        // 本次开机产量(整线)
+                    //    //                dataDBlast.QualifiedNumber = lineWorkingData1.QualifiedNumber;  // 本次开机合格数量(整线)
+                    //    //                dataDBlast.QualifiedRate = lineWorkingData1.QualifiedRate;      // 本次开机合格率(整线)
+                    //    //                dataDBlast.DesignRhythm = lineWorkingData1.DesignRhythm;        // 设计节拍(整线)
+                    //    //                dataDBlast.RealityRhythm = lineWorkingData1.RealityRhythm;      // 本次开机实际节拍(整线)
+
+                    //    //                string usql = dataDBlast.ToStringUpdate();
+                    //    //                SQLHelper_New.ExecuteSQL(usql, null);
+                    //    //                lineWorkingData1_OldStr = JsonConvert.SerializeObject(dataDBlast);
+
+                    //    //                AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyRun}完毕![{lineWorkingData1_OldStr}]");
+                    //    //                //AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyRun}完毕!");
+                    //    //            }
+                    //    //        }
+                    //    //        else
+                    //    //        {
+                    //    //            // 插入
+                    //    //            SQLHelper_New.ExecuteSQL(lineWorkingData1.ToStringInsert(), null);
+                    //    //            lineWorkingData1_OldStr = String.Copy(lineWorkingData1_Str);
+                    //    //            AddMessage_Station(stationNameStr, LogType.Info, $"保存{BodyRun}完毕![{lineWorkingData1_OldStr}]");
+                    //    //            //AddMessage_Station(stationNameStr, LogType.Info, $"保存{BodyRun}完毕!");
+                    //    //        }
+                    //    //    }
+                    //    //    else if (!lineWorkingData1_Str.Equals(lineWorkingData1_OldStr))  // 非“软件启动后第一次运行”
+                    //    //    {
+                    //    //        LineWorkingData_ThisTime lineWorkingData1_Old = string.IsNullOrEmpty(lineWorkingData1_OldStr) ? lineWorkingData1 : JsonConvert.DeserializeObject<LineWorkingData_ThisTime>(lineWorkingData1_OldStr);  // 上次的状态信息
+
+                    //    //        //// 本次开机设备运行情况
+                    //    //        //LineWorkingData1_ThisTime lineWorkingData_UI = JsonConvert.DeserializeObject<LineWorkingData1_ThisTime>(lineWorkingData1_OldStr);
+                    //    //        //Task.Run(() =>
+                    //    //        //{
+                    //    //        //    if (Form_Main.formDevAlarm != null && !Form_Main.formDevAlarm.IsDisposed && Form_Main.formDevAlarm.Visible)
+                    //    //        //    {
+                    //    //        //        Form_Main.formDevAlarm.UpdDeviceStatus_ThisTime(lineWorkingData_UI);  // UI更新
+                    //    //        //    }
+                    //    //        //});
+
+                    //    //        // 本日设备运行情况
+                    //    //        // 存数据库(开机时间>上次的开机时间,则更新上次记录;<则作为新数据插入)
+                    //    //        if (lineWorkingData1.BootTimeLong > lineWorkingData1_Old.BootTimeLong)
+                    //    //        {
+                    //    //            // 更新
+                    //    //            lineWorkingData1_Old.BootTimeLong = lineWorkingData1.BootTimeLong;        // 本次开机时间(整线)
+                    //    //            lineWorkingData1_Old.NormalTimeLong = lineWorkingData1.NormalTimeLong;    // 本次开机运行时间(整线)
+                    //    //            lineWorkingData1_Old.StandbyTimeLong = lineWorkingData1.StandbyTimeLong;  // 本次开机待机时间(整线)
+                    //    //            lineWorkingData1_Old.FaultTimeLong = lineWorkingData1.FaultTimeLong;      // 本次开机故障时间(整线)
+                    //    //            lineWorkingData1_Old.MaterialShortageTimeLong = lineWorkingData1.MaterialShortageTimeLong;  // 本次开机缺料时间(整线)
+                    //    //            lineWorkingData1_Old.MaintenanceTimeLong = lineWorkingData1.MaintenanceTimeLong;            // 本次开机维修时间(整线)
+                    //    //            lineWorkingData1_Old.FaultNumber = lineWorkingData1.FaultNumber;          // 本次开机故障停机次数(整线)
+                    //    //            lineWorkingData1_Old.OutputNumber = lineWorkingData1.OutputNumber;        // 本次开机产量(整线)
+                    //    //            lineWorkingData1_Old.QualifiedNumber = lineWorkingData1.QualifiedNumber;  // 本次开机合格数量(整线)
+                    //    //            lineWorkingData1_Old.QualifiedRate = lineWorkingData1.QualifiedRate;      // 本次开机合格率(整线)
+                    //    //            lineWorkingData1_Old.DesignRhythm = lineWorkingData1.DesignRhythm;        // 设计节拍(整线)
+                    //    //            lineWorkingData1_Old.RealityRhythm = lineWorkingData1.RealityRhythm;      // 本次开机实际节拍(整线)
+
+                    //    //            SQLHelper_New.ExecuteSQL(lineWorkingData1_Old.ToStringUpdate(), null);
+                    //    //            lineWorkingData1_OldStr = JsonConvert.SerializeObject(lineWorkingData1_Old);
+                    //    //            AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyRun}完毕![{lineWorkingData1_OldStr}]");
+                    //    //            //AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyRun}完毕!");
+                    //    //        }
+                    //    //        else if (lineWorkingData1.BootTimeLong < lineWorkingData1_Old.BootTimeLong)
+                    //    //        {
+                    //    //            // 插入
+                    //    //            SQLHelper_New.ExecuteSQL(lineWorkingData1.ToStringInsert(), null);
+                    //    //            lineWorkingData1_OldStr = String.Copy(lineWorkingData1_Str);
+                    //    //            AddMessage_Station(stationNameStr, LogType.Info, $"保存{BodyRun}完毕![{lineWorkingData1_OldStr}]");
+                    //    //            //AddMessage_Station(stationNameStr, LogType.Info, $"保存{BodyRun}完毕!");
+                    //    //        }
+
+                    //    //        await Task.Run(() =>
+                    //    //        {
+                    //    //            try
+                    //    //            {
+                    //    //                if (Form_Main.formDevAlarm != null && !Form_Main.formDevAlarm.IsDisposed && Form_Main.formDevAlarm.Visible)
+                    //    //                {
+                    //    //                    Form_Main.formDevAlarm.UpdDeviceStatus_Today();  // UI更新
+                    //    //                }
+                    //    //            }
+                    //    //            catch { }
+                    //    //        });
+                    //    //    }
+                    //    //}
+                    //    //catch (Exception ex)
+                    //    //{
+                    //    //    string str = ex.StackTrace;
+                    //    //    AddMessage_Station(stationNameStr, LogType.Error, $"PLC1_{stationNameStr}_获取设备运行信息出错!错误信息:" + ex.Message.ToString() + "异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1));
+                    //    //}
+                    //    //#endregion 获取设备运行信息
+
+                    //    #region 报警数据
+                    //    try
+                    //    {
+                    //        List<DeviceAlarm_Cur> deviceAlarm_Curs = new List<DeviceAlarm_Cur>();  // 同步到报警页面用传输载体
+                    //        bool isNeedUpdUI = false;  // 是否需要更新历史报警UI
+
+                    //        // 同步“设备报警信息”到“设备报警临时字典DicAlarms_Cur”
+                    //        var dicAlarms_Cur_PLC1 = DicAlarms_Cur[GlobalContext.LineCode];
+                    //        for (int i = 0; i < dicAlarms_Cur_PLC1.Count; i++)  // 读取
+                    //        {
+                    //            short shortBuf = plc1Alarm.ReadHoldingRegisters<short>(dicAlarms_Cur_PLC1[i].关联的PLC地址);
+
+                    //            dicAlarms_Cur_PLC1[i].是否报警 = shortBuf != 0;
+                    //            if (dicAlarms_Cur_PLC1[i].上次的运行状态 != dicAlarms_Cur_PLC1[i].是否报警)
+                    //            {
+                    //                isNeedUpdUI = true;  // 需要更新历史报警UI信息
+                    //                // 记录
+                    //                dicAlarms_Cur_PLC1[i].上次的运行状态 = dicAlarms_Cur_PLC1[i].是否报警;
+
+                    //                switch (dicAlarms_Cur_PLC1[i].是否报警)
+                    //                {
+                    //                    case true:  // 报警
+                    //                        dicAlarms_Cur_PLC1[i].报警数据 = new AlarmData()
+                    //                        {
+                    //                            GUID = Guid.NewGuid().ToString(),
+                    //                            LineName = GlobalContext.LineCode,  // 线体
+                    //                            AlarmType = dicAlarms_Cur_PLC1[i].报警类型,  // 报警类型
+                    //                            AlarmDesc = dicAlarms_Cur_PLC1[i].报警详情,  // 报警内容
+                    //                            StartTime = dtNow  // 开始时间
+                    //                        };
+
+                    //                        // 传输到页面
+                    //                        deviceAlarm_Curs.Add(new DeviceAlarm_Cur()
+                    //                        {
+                    //                            线体名称 = dicAlarms_Cur_PLC1[i].报警数据.LineName,
+                    //                            报警类型 = dicAlarms_Cur_PLC1[i].报警数据.AlarmType,
+                    //                            报警内容 = dicAlarms_Cur_PLC1[i].报警数据.AlarmDesc,
+                    //                            开始时间 = dtNow
+                    //                        });
+
+                    //                        // 新增到数据库
+                    //                        var data1 = dicAlarms_Cur_PLC1[i].报警数据;
+                    //                        SaveAlarmDataByDB(stationNameStr, data1, false);
+                    //                        AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyAlarm}完毕!");
+                    //                        break;
+                    //                    case false:  // 消除报警
+                    //                        if (dicAlarms_Cur_PLC1[i].报警数据 == null || string.IsNullOrEmpty(dicAlarms_Cur_PLC1[i].报警数据.GUID))
+                    //                        {
+                    //                            dicAlarms_Cur_PLC1[i].报警数据 = new AlarmData()
+                    //                            {
+                    //                                GUID = Guid.NewGuid().ToString(),
+                    //                                LineName = GlobalContext.LineCode,      // 线体
+                    //                                AlarmType = dicAlarms_Cur_PLC1[i].报警类型,  // 报警类型
+                    //                                AlarmDesc = dicAlarms_Cur_PLC1[i].报警详情,  // 报警内容
+                    //                                StartTime = dtNow,  // 开始时间
+                    //                                EndTime = dtNow,    // 开始时间
+                    //                                PersistTime = 1,    // 耗时1s
+                    //                            };
+
+                    //                            // 新增
+                    //                            var data2 = dicAlarms_Cur_PLC1[i].报警数据;
+                    //                            SaveAlarmDataByDB(stationNameStr, data2, false);
+                    //                            AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyAlarm}完毕!");
+                    //                        }
+                    //                        else
+                    //                        {
+                    //                            dicAlarms_Cur_PLC1[i].报警数据.EndTime = dtNow;  // 开始时间
+                    //                            dicAlarms_Cur_PLC1[i].报警数据.PersistTime = Convert.ToInt32((dicAlarms_Cur_PLC1[i].报警数据.EndTime
+                    //                                - dicAlarms_Cur_PLC1[i].报警数据.StartTime).TotalSeconds);  // 耗时s
+
+                    //                            // 修改
+                    //                            var data3 = dicAlarms_Cur_PLC1[i].报警数据;
+                    //                            SaveAlarmDataByDB(stationNameStr, data3, true);
+                    //                            AddMessage_Station(stationNameStr, LogType.Info, $"更新{BodyAlarm}完毕!");
+                    //                        }
+                    //                        break;
+                    //                    default:
+                    //                        break;
+                    //                }
+                    //            }
+                    //        }
+                    //        DicAlarms_Cur[GlobalContext.LineCode] = dicAlarms_Cur_PLC1;
+
+                    //        // 有新报警则更新
+                    //        if (isNeedUpdUI)
+                    //        {
+                    //            // UI展示 - 展示到设备状态页
+                    //            await Task.Run(() =>
+                    //            {
+                    //                try
+                    //                {
+                    //                    if (Form_Main.formDevAlarm != null && !Form_Main.formDevAlarm.IsDisposed)
+                    //                    {
+                    //                        Form_Main.formDevAlarm.UpdDeviceAlarm_Cur(deviceAlarm_Curs);  // 报警UI 更新
+                    //                        if (Form_Main.formDevAlarm.Visible)
+                    //                        {
+                    //                            Form_Main.formDevAlarm.UpdDeviceAlarm_History_48H();  //  历史报警UI 更新
+                    //                        }
+                    //                    }
+                    //                }
+                    //                catch { }
+                    //            });
+                    //        }
+                    //    }
+                    //    catch (Exception ex)
+                    //    {
+                    //        string str = ex.StackTrace;
+                    //        AddMessage_Station(stationNameStr, LogType.Error, $"PLC1_{stationNameStr}_获取报警数据出错!错误信息:" + ex.Message.ToString() + "异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1));
+                    //    }
+                    //    #endregion 报警数据
+
+                    //    UpdatePLCMonitor(1, -2, 1);
+                    //}
+                    //else
+                    //{
+                    //    UpdatePLCMonitor(1, -2, 0);
+                    //}
                 }
                 catch (Exception ex)
                 {
-                    AddMessage_Station(stationNameStr, LogType.Error, $"PLC1_{stationNameStr}运行出错!错误信息:" + ex.Message.ToString());
+                    //AddMessage_Station(stationNameStr, LogType.Error, $"PLC1_{stationNameStr}运行出错!错误信息:" + ex.Message.ToString());
+                    AddMessage_Station(stationNameStr, LogType.Error, $"PLC1_{stationNameStr}_采集运行数据与报警数据出错!错误信息:" + ex.Message.ToString());
                 }
 
                 Thread.Sleep(IntervalAlarm);