Example #1
0
 /// <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);
     }
 }
Example #2
0
        /// <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);
            }
        }
Example #3
0
        /// <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);
            }
        }
Example #4
0
 private BizHandle()
 {
     readItems  = new List <SrmOpcItem>();
     writeItems = new List <SrmOpcItem>();
     srm        = new Srm();
 }
Example #5
0
        /// <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;
                }
            });
        }