/// <summary> /// 更新堆垛机状态 /// </summary> public bool RecordPlcInfo(Srm srm) { try { var sb = new StringBuilder(); sb.Append(" UPDATE PEM_CRN_FORK_STATUS"); sb.Append(" SET TASK_NO = :TASKNO,DEVICEID = :DEVICEID"); sb.Append(" ,OPERATEMODE = :OPERATEMODE,MISSIONSTATE = :MISSIONSTATE,MISSIONTYPE = :MISSIONTYPE"); sb.Append(" ,MISSIONID = :MISSIONID,PALLETID = :PALLETID,ACTPOSBAY = :ACTPOSBAY"); sb.Append(" ,ACTPOSLEVEL = :ACTPOSLEVEL,ACTPOSX = :ACTPOSX,ACTPOSY = :ACTPOSY"); sb.Append(" ,ACTPOSZ = :ACTPOSZ,ACTPOSZDEEP = :ACTPOSZDEEP,ACTSPEEDX = :ACTSPEEDX"); sb.Append(" ,ACTSPEEDY = :ACTSPEEDY,ACTSPEEDZ = :ACTSPEEDZ,ACTSPEEDZDEEP = :ACTSPEEDZDEEP"); sb.Append(" ,LOADSTATUS = :LOADSTATUS,FAULTNO = :FAULTNO"); sb.Append(" WHERE CRN_NO =:SRMNO"); var param = new DynamicParameters(); param.Add("TASKNO", srm.plcStatus.MissionId); param.Add("DEVICEID", srm.plcStatus.DeviceId); param.Add("OPERATEMODE", srm.plcStatus.OperateMode); param.Add("MISSIONSTATE", srm.plcStatus.MissionState); param.Add("MISSIONTYPE", srm.plcStatus.MissionType); param.Add("MISSIONID", srm.plcStatus.MissionId); param.Add("PALLETID", srm.plcStatus.PalletNo); param.Add("ACTPOSBAY", srm.plcStatus.ActPosBay); param.Add("ACTPOSLEVEL", srm.plcStatus.ActPosLevel); param.Add("ACTPOSX", srm.plcStatus.ActPosX); param.Add("ACTPOSY", srm.plcStatus.ActPosY); param.Add("ACTPOSZ", srm.plcStatus.ActPosZ); param.Add("ACTPOSZDEEP", srm.plcStatus.ActPosZDeep); param.Add("ACTSPEEDX", srm.plcStatus.ActSpeedX); param.Add("ACTSPEEDY", srm.plcStatus.ActSpeedY); param.Add("ACTSPEEDZ", srm.plcStatus.ActSpeedZ); param.Add("ACTSPEEDZDEEP", srm.plcStatus.ActSpeedZDeep); param.Add("LOADSTATUS", srm.plcStatus.LoadStatus); param.Add("FAULTNO", srm.plcStatus.FaultNo); param.Add("SRMNO", McConfig.Instance.SrmNo); Db.Connection.Execute(sb.ToString(), param); return(true); } catch (Exception ex) { log.Error($"[异常]执行RecordPlcInfo()更新堆垛机状态失败:{ex.ToString()}"); return(false); } }
/// <summary> /// 写入指令 /// </summary> public bool WriteTaskCmd(Srm srm, ref string errMsg) { try { var keyValues = new List <KeyValuePair <string, object> >(); var tagLongName = string.Empty; foreach (var item in BizHandle.Instance.writeItems) { #region 写入指令信息 switch (item.BusIdentity) { case "Write.HeartBeat": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, 1)); break; case "Write.MissionCount": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, 1)); break; case "Write.DeviceId": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.SrmName)); break; case "Write.MissionType": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.MissionType)); break; case "Write.MissionId": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.TaskNo)); break; case "Write.PalletId": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.PalletNo)); break; case "Write.EpArea": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.EpArea)); break; case "Write.EpNo": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.EpNo)); break; case "Write.FromRow": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.FromRow)); break; case "Write.FromBay": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.FromBay)); break; case "Write.FromLevel": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.FromLevel)); break; case "Write.ApArea": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.ApArea)); break; case "Write.ApNo": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.ApNo)); break; case "Write.ToRow": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.ToRow)); break; case "Write.ToBay": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.ToBay)); break; case "Write.ToLevel": keyValues.Add(new KeyValuePair <string, object>(item.TagLongName, srm.taskCmd.ToLevel)); break; case "Write.SequenceNo": tagLongName = item.TagLongName; break; } #endregion } if (keyValues.Count > 0) { if (opcClient.WriteValues(McConfig.Instance.OpcGroupName, keyValues.ToArray(), ref errMsg)) { return(true); } else { return(false); } } else { errMsg = "未找到OPC任务信息写入项"; return(false); } } catch (Exception ex) { errMsg = ex.Message; return(false); } }
/// <summary> /// 记录设备报警信息 /// </summary> /// <returns></returns> public bool RecordSrmFaultInfo(Srm srm) { try { #region 记录设备联机 if (srm.plcStatus.OperateMode == 1 && srm.RecordLastOperateMode != 1) { var objid = GetObjidForFault(); if (objid == 0) { return(false); } var result = RecordWarnLog(objid, 0, "设备联机", 0, 0); if (result) { srm.RecordLastOperateMode = 1; } else { return(false); } } #endregion #region 记录设备停机 if (srm.plcStatus.OperateMode == 0 && srm.RecordLastOperateMode != 0) { var objid = GetObjidForFault(); if (objid == 0) { return(false); } var result = RecordWarnLog(objid, 0, "设备停机", 0, 0); if (result) { srm.RecordLastOperateMode = 0; } else { return(false); } } #endregion #region 记录PLC无法连接 if (srm.plcStatus.OperateMode == -1 && srm.RecordLastOperateMode != -1) { var objid = GetObjidForFault(); if (objid == 0) { return(false); } var result = RecordWarnLog(objid, 0, $"ping {McConfig.Instance.SrmIp}超时", 0, 0); if (result) { srm.RecordLastOperateMode = -1; } else { return(false); } } #endregion #region 记录设备故障 if (srm.plcStatus.FaultNo > 0) { if (srm.plcStatus.FaultNo != srm.RecordLastFaultNo) { var objid = GetObjidForFault(); if (objid == 0) { return(false); } var result = RecordWarnLog(objid, srm.plcStatus.FaultNo, srm[srm.plcStatus.FaultNo.ToString()], srm.taskCmd.TaskNo, srm.taskCmd.ObjId); if (result) { srm.RecordLastLogObjid = objid; srm.RecordLastFaultNo = srm.plcStatus.FaultNo; } else { return(false); } } } #endregion #region 记录设备故障已处理 if (srm.plcStatus.FaultNo == 0) { if (srm.RecordLastLogObjid > 0) { var result = UpdateWarnLog(srm.RecordLastLogObjid); if (result) { srm.RecordLastLogObjid = 0; srm.RecordLastFaultNo = 0; } else { return(false); } } } #endregion return(true); } catch (Exception ex) { log.Error($"[异常]执行RecordSrmFaultInfo()记录设备报警日志失败,原因{ex.ToString()}"); return(false); } }
private BizHandle() { readItems = new List <SrmOpcItem>(); writeItems = new List <SrmOpcItem>(); srm = new Srm(); }
/// <summary> /// 渲染堆垛机详情信息 /// </summary> private void ShowSrmDetailInfo(Srm srm) { this.Dispatcher.Invoke(() => { this.txtRefTime.Text = DateTime.Now.ToString("HH:mm:ss.fff"); this.txtDeviceId.Text = srm.plcStatus.DeviceId; this.txtHeartBeat.Text = srm.plcStatus.HeartBeat.ToString(); this.txtOperateMode.Text = srm.plcStatus.OperateMode.ToString(); switch (srm.plcStatus.OperateMode) { case 1: this.txtOperateMode.Background = CustomSolidBrush.LigtGreen; break; default: this.txtOperateMode.Background = CustomSolidBrush.Red; break; } this.txtMissionState.Text = srm.plcStatus.MissionState.ToString(); switch (srm.plcStatus.MissionState) { case 1: this.txtMissionState.Background = CustomSolidBrush.LigtGreen; break; case 2: this.txtMissionState.Background = CustomSolidBrush.LigtGreen; break; case 3: this.txtMissionState.Background = CustomSolidBrush.Orange; break; default: this.txtMissionState.Background = CustomSolidBrush.WhiteGray; break; } this.txtMissionType.Text = srm.plcStatus.MissionType.ToString(); this.txtMissionId.Text = srm.plcStatus.MissionId.ToString(); this.txtPalletNo.Text = srm.plcStatus.PalletNo; this.txtActPosBay.Text = srm.plcStatus.ActPosBay.ToString(); this.txtActPosLevel.Text = srm.plcStatus.ActPosLevel.ToString(); this.txtActPosX.Text = srm.plcStatus.ActPosX.ToString(); this.txtActPosY.Text = srm.plcStatus.ActPosY.ToString(); this.txtActPosZ.Text = srm.plcStatus.ActPosZ.ToString(); this.txtActPosZDeep.Text = srm.plcStatus.ActPosZDeep.ToString(); this.txtActSpeedX.Text = srm.plcStatus.ActSpeedX.ToString(); this.txtActSpeedY.Text = srm.plcStatus.ActSpeedY.ToString(); this.txtActSpeedZ.Text = srm.plcStatus.ActSpeedZ.ToString(); this.txtActSpeedZDeep.Text = srm.plcStatus.ActSpeedZDeep.ToString(); this.txtLoadStatus.Text = srm.plcStatus.LoadStatus.ToString(); this.txtFaultNo.Text = srm.plcStatus.FaultNo.ToString(); switch (srm.plcStatus.FaultNo) { case 0: this.txtFaultNo.Background = CustomSolidBrush.LigtGreen; this.txtFaultDesc.Text = "无"; break; default: this.txtFaultNo.Background = CustomSolidBrush.Red; this.txtFaultDesc.Text = BizHandle.Instance.srm[srm.plcStatus.FaultNo.ToString()]; break; } }); }