Ejemplo n.º 1
0
        /// <summary>
        /// 生成任务给AGV发送任务
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        private SendToAgvResult SendTask(SendToAgvInfo req)
        {
            string          url      = $"http://{ip}:{port}/cms/services/rest/hikRpcService/genAgvSchedulingTask";
            string          param    = JsonConvert.SerializeObject(req);
            string          result   = Post(url, param);
            SendToAgvResult sdResult = JsonConvert.DeserializeObject <SendToAgvResult>(result);

            return(sdResult);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 继续执行给AGV发送任务
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        public SendToAgvResult ContinueTask(ContinueToAgvInfo req)
        {
            string          url      = $"http://{ip}:{port}/cms/services/rest/hikRpcService/continueTasl";
            string          param    = JsonConvert.SerializeObject(req);
            string          result   = Post(url, param);
            SendToAgvResult sdresult = JsonConvert.DeserializeObject <SendToAgvResult>(result);

            return(sdresult);
        }
        public SendToAgvResult CallBackResult(ReciveAgeCallBack agvCallBack)
        {
            DataSet ds = new DataSet();

            ds = DataTrans.D_GetAgvCallBack(agvCallBack.ReqCode, out string msg);
            SendToAgvResult result = new SendToAgvResult();

            if (ds != null)
            {
                if (ds.Tables[0].Rows.Count > 0)
                {
                    result.Code    = "1";
                    result.Message = "请求编号已存在";
                    result.Data    = "";
                    result.ReqCode = agvCallBack.ReqCode;
                }
                else
                {
                    string msgInfo = bll.HandleCallBackData(agvCallBack);
                    if (msgInfo == "OK")
                    {
                        int n = DataTrans.D_InsertCallBack(agvCallBack, "2", out msg);
                        if (n > 0)
                        {
                            result.Code    = "0";
                            result.Message = "成功";
                            result.Data    = string.Empty;
                            result.ReqCode = agvCallBack.ReqCode;
                        }
                    }
                    else
                    {
                        result.Code    = "1";
                        result.Message = "失败";
                        result.Data    = string.Empty;
                        result.ReqCode = agvCallBack.ReqCode;
                    }
                }
            }
            else
            {
                result.Code    = "1";
                result.Message = "数据处理异常";
                result.Data    = string.Empty;
                result.ReqCode = agvCallBack.ReqCode;
            }
            return(result);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 出库口待执行任务发送给AGV
        /// </summary>
        private void CKSendToAgvMsg()
        {
            while (true)
            {
                for (int i = 1; i <= 7; i++)
                {
                    //查询出库口输送机是否有到位信号
                    var outts = lsTransport.Find(s => s.DTYPE == "103" && s.BTID == i.ToString() && s.DWXH == "1");
                    if (outts == null)
                    {
                        continue;
                    }

                    DataSet ds = DataTrans.D_GetSchByTaskno(outts.ZXRWH);
                    if (ds != null)
                    {
                        //查询目标巷道输送机是否空闲
                        List <TransportStr> ls = lsTransport.FindAll(s => s.DTYPE == "103" && s.BTID == i.ToString() && s.DWXH == "1");
                        if (ls == null)
                        {
                            continue;
                        }
                        if (ds.Tables[0].Rows.Count == 1)
                        {
                            string desAddress = string.Empty;
                            string ssj        = string.Empty;
                            foreach (var item in ls)
                            {
                                var ts = item;
                                crl.HsWcsReadSSJ(ref ts);
                                if (ts.KXBZ != "1")
                                {
                                    continue;
                                }
                                int onjobnum = DataTrans.D_GetOnJobByDes(item.SSJID);
                                if (onjobnum == 0)
                                {
                                    desAddress = item.VAR5;
                                    ssj        = item.SSJID;
                                    break;
                                }
                            }
                            //如果没有目的地就说明在途已经占满了出库口,终止循坏
                            if (string.IsNullOrEmpty(desAddress))
                            {
                                continue;
                            }

                            string          msg    = string.Empty;
                            SendToAgvInfo   req    = CKToModel(ds, OutTaskType, outts.VAR5, desAddress);
                            SendToAgvResult result = SendTask(req);

                            if (result.Message == "成功")
                            {
                                string zxrwh = string.Empty;
                                if (string.IsNullOrEmpty(ds.Tables[0].Rows[0]["TASKNO"].ToString()))
                                {
                                    zxrwh = ds.Tables[0].Rows[0]["TASKNO"].ToString();
                                }
                                else
                                {
                                    zxrwh = DataTrans.D_AllotTaskno().ToString();
                                }
                                int m = DataTrans.D_UpdateRkSendToAgv(ds.Tables[0], zxrwh, ds.Tables[0].Rows[0]["SCARGO_ALLEY_ID"].ToString(), ssj, out msg);
                                if (m > 0)
                                {
                                    NotifyEvent?.Invoke("S", $"调度指令{ds.Tables[0].Rows[0]["Taskid"]}更新成功");
                                    log.WriteLog($"调度指令{ds.Tables[0].Rows[0]["Taskid"]}更新成功");
                                }
                                else
                                {
                                    string res = string.IsNullOrEmpty(msg) ? "更新失败" : $"更新出现异常!异常信息为{msg}";
                                    NotifyEvent?.Invoke("S", $"调度指令{ds.Tables[0].Rows[0]["Taskid"]}{res}");
                                    log.WriteLog($"调度指令{ds.Tables[0].Rows[0]["Taskid"]}{res}");
                                }
                            }
                        }
                    }
                }
                Thread.Sleep(500);
            }
        }
Ejemplo n.º 5
0
        public string HandleCallBackData(ReciveAgeCallBack agvCallBack)
        {
            string msg = string.Empty;

            //外形检测出到达
            if (agvCallBack.Method == Arrive)
            {
                DataSet ds = DataTrans.D_GetSchByTaskIdArrive(agvCallBack.TaskCode);
                if (ds != null && ds.Tables[0].Rows.Count > 0)
                {
                    #region 读取外形检测是否报警
                    bool         flag  = false;
                    string       ssjid = ds.Tables[0].Rows[0]["SNUMBER"].ToString();
                    TransportStr ts    = lsTransport.Find(si => si.SSJID == ssjid);
                    if (ts == null)
                    {
                        return(string.Empty);
                    }

                    int      btid = Convert.ToInt32(ts.BTID);
                    byte[]   bty  = new byte[2];
                    BitArray arr  = new BitArray(bty);
                    if (!HsWcsReadalarm(out arr))
                    {
                        return("");
                    }
                    else
                    {
                        for (int i = 0; i < 3; i++)
                        {
                            int start = (btid - 1) * 3;
                            flag = arr[start + i];
                            if (flag == true)
                            {
                                break;
                            }
                        }
                    }
                    #endregion

                    string desaddress = string.Empty;
                    //如果报警返回
                    if (flag == true)
                    {
                        desaddress = ts.VAR5;
                    }
                    else
                    {
                        TransportStr rkssj = lsTransport.Find(t => t.ALLEYID == ds.Tables[0].Rows[0]["TCARGO_ALLEY_ID"].ToString());
                        if (rkssj == null)
                        {
                            return(string.Empty);
                        }
                        desaddress = rkssj.VAR5;
                    }

                    ContinueToAgvInfo req    = ContinueToModel(ds, desaddress);
                    SendToAgvResult   result = ContinueTask(req);
                    if (result.Message == "成功" && flag)
                    {
                        NotifyEvent?.Invoke("R", $"外形检测不合格,给AGV发送返回起始点成功,任务id为:{agvCallBack.TaskCode}目的地{desaddress}");
                        log.WriteLog($"外形检测不合格,给AGV发送返回起始点成功,任务id为:{agvCallBack.TaskCode}目的地{desaddress}");

                        DataTrans.P_UpdatePhase(agvCallBack.TaskCode, "1", "5", string.Empty);
                    }
                    else if (result.Message == "成功" && !flag)
                    {
                        DataTrans.P_UpdatePhase(agvCallBack.TaskCode, "3", "3", string.Empty);
                        NotifyEvent?.Invoke("R", $"外形检测合格,给AGV发送目标巷道成功,任务Id为{agvCallBack.TaskCode}目的地{desaddress}");
                        log.WriteLog($"外形检测合格,给AGV发送目标巷道成功,任务Id为{agvCallBack.TaskCode}目的地{desaddress}");
                        msg = "OK";
                    }
                    else
                    {
                        NotifyEvent?.Invoke("R", $"给AGV发送目标巷道失败,任务id为:{agvCallBack.TaskCode}");
                        log.WriteLog($"给AGV发送目标巷道失败,任务id为:{agvCallBack.TaskCode}");
                        msg = "Lost";
                    }
                }
            }
            //放货完成
            else if (agvCallBack.Method == Finish)
            {
                DataSet ds = DataTrans.D_GetSchByTaskId(agvCallBack.TaskCode);
                if (ds != null && ds.Tables[0].Rows.Count > 0)
                {
                    TransportStr ts;
                    if (ds.Tables[0].Rows[0]["TASKTYPE"].ToString() == "1")
                    {
                        ts = lsTransport.Find(si => si.ALLEYID == ds.Tables[0].Rows[0]["TCARGO_ALLEY_ID"].ToString());
                    }
                    else
                    {
                        ts = lsTransport.Find(si => si.SSJID == ds.Tables[0].Rows[0]["TCARGO_ALLEY_ID"].ToString());
                    }
                    if (ts == null)
                    {
                        return(string.Empty);
                    }
                    ts.TRAYCODE = ds.Tables[0].Rows[0]["TRAYCODE"].ToString();
                    ts.ZXRWH    = ds.Tables[0].Rows[0]["TASKNO"].ToString();

                    if (crl.HsWriteToSSJ(ts))
                    {
                        NotifyEvent?.Invoke("S", $"根据AGV反馈任务与id{agvCallBack.TaskCode}放货完成,给输送机{ts.SSJID}下发任务成功");
                        log.WriteLog($"根据AGV反馈任务id{agvCallBack.TaskCode}放货完成,给输送机{ts.SSJID}下发任务成功");
                        if (ds.Tables[0].Rows[0]["TASKTYPE"].ToString() == "1")
                        {
                            DataTrans.P_UpdatePhase(agvCallBack.TaskCode, "1", "3", string.Empty);
                        }
                        else if (ds.Tables[0].Rows[0]["TASKTYPE"].ToString() == "2")
                        {
                            DataTrans.P_UpdatePhase(agvCallBack.TaskCode, "1", "4", string.Empty);
                        }
                        msg = "OK";
                    }
                    else
                    {
                        NotifyEvent?.Invoke("S", $"根据AGV反馈任务id{agvCallBack.TaskCode}放货完成,给输送机{ts.SSJID}下发任务失败");
                        log.WriteLog($"根据AGV反馈任务id{agvCallBack.TaskCode}放货完成,给输送机{ts.SSJID}下发任务失败");
                        msg = "Lost";
                    }
                }
            }
            return(msg);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 入库口待执行任务发送给AGV
        /// </summary>
        private void SendToAgvMsg()
        {
            while (true)
            {
                if (log.DataFileName != $"{DateTime.Now:yyyyMMdd}业务逻辑.txt")
                {
                    log = new Log("业务逻辑", @".\RGV日志\");
                }
                for (int i = 1; i <= 5; i++)
                {
                    if (i == 5)
                    {
                        //查询入口载货台
                        TransportStr rkssj = lsTransport.Find(s => s.DTYPE == "106" && s.BTID == "1");
                        if (rkssj == null)
                        {
                            continue;
                        }
                        DataSet ds = DataTrans.D_GetInwareTask(rkssj.SSJID);
                        if (ds != null && ds.Tables[0].Rows.Count > 0)
                        {
                            //查询目标巷道输送机是否空闲
                            TransportStr ts = lsTransport.Find(si => si.DTYPE == "105" && si.ALLEYID == ds.Tables[0].Rows[0]["TCARGO_ALLEY_ID"].ToString() && si.KXBZ == "1");

                            if (ts == null)
                            {
                                continue;
                            }
                            if (ds.Tables[0].Rows.Count == 1)
                            {
                                //查入库在途,在途存在,则不发目的地
                                int n = DataTrans.D_GetRkOnJobByDes(ds.Tables[0].Rows[0]["TCAGRO_ALLEY_ID"].ToString());
                                if (n > 0)
                                {
                                    continue;
                                }
                                var dessj = lsTransport.Find(t => t.ALLEYID == ds.Tables[0].Rows[0]["TCARGO_ALLEY_ID"].ToString());
                                if (dessj == null)
                                {
                                    continue;
                                }
                                string          desaddress = rkssj.VAR5;
                                string          msg        = string.Empty;
                                SendToAgvInfo   req        = ToModel(ds, PallentsInTaskType, rkssj.VAR5, dessj.VAR5);
                                SendToAgvResult result     = SendTask(req);

                                if (result.Message == "成功")
                                {
                                    string zxrwh = string.Empty;
                                    if (string.IsNullOrEmpty(ds.Tables[0].Rows[0]["TASKID"].ToString()))
                                    {
                                        zxrwh = ds.Tables[0].Rows[0]["TASKNO"].ToString();
                                    }
                                    else
                                    {
                                        zxrwh = DataTrans.D_AllotTaskno().ToString();
                                    }
                                    int m = DataTrans.D_UpdateRkSendToAgv(ds.Tables[0], zxrwh, rkssj.SSJID, ds.Tables[0].Rows[0]["TCARGO_ALLEY_ID"].ToString(), out msg);
                                    if (m > 0)
                                    {
                                        NotifyEvent?.Invoke("S", $"调度指令{ds.Tables[0].Rows[0]["Taskid"]}更新成功");
                                        log.WriteLog($"调度指令{ds.Tables[0].Rows[0]["Taskid"]}更新成功");
                                    }
                                    else
                                    {
                                        string res = string.IsNullOrEmpty(msg) ? "更新失败" : $"更新出现异常!异常信息为{msg}";
                                        NotifyEvent?.Invoke("S", $"调度指令{ds.Tables[0].Rows[0]["Taskid"]}{res}");
                                        log.WriteLog($"调度指令{ds.Tables[0].Rows[0]["Taskid"]}{res}");
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        //查询入口载货台
                        var rkssj = lsTransport.Find(si => si.DTYPE == "101" && si.BTID == i.ToString());
                        var wxssj = lsTransport.Find(si => si.DTYPE == "107" && si.BTID == i.ToString());
                        if (rkssj == null || wxssj == null)
                        {
                            continue;
                        }
                        DataSet ds = DataTrans.D_GetInwareTask(rkssj.SSJID);
                        if (ds != null && ds.Tables[0].Rows.Count > 0)
                        {
                            //如果称重实际重量未更新不能给AGV下发指令
                            if (string.IsNullOrEmpty(ds.Tables[0].Rows[0]["actweight"].ToString()))
                            {
                                continue;
                            }
                            //查询目标巷道输送机是否空闲
                            var ts = lsTransport.Find(si => si.DTYPE == "105" && si.ALLEYID == ds.Tables[0].Rows[0]["TCARGO_ALLEY_ID"].ToString() && si.KXBZ == "1");
                            if (ts == null)
                            {
                                continue;
                            }
                            if (ds.Tables[0].Rows.Count == 1)
                            {
                                //查入库在途,在途存在,则不发目的地
                                int n = DataTrans.D_GetRkOnJobByDes(ds.Tables[0].Rows[0]["TCARGO_ALLEY_ID"].ToString());
                                if (n > 0)
                                {
                                    continue;
                                }
                                string          msg    = string.Empty;
                                SendToAgvInfo   req    = ToModel(ds, InTaskType, rkssj.VAR5, wxssj.VAR5);
                                SendToAgvResult result = SendTask(req);
                                if (result.Message == "成功")
                                {
                                    string zxrwh = string.Empty;
                                    if (string.IsNullOrEmpty(ds.Tables[0].Rows[0]["TASKNO"].ToString()))
                                    {
                                        zxrwh = ds.Tables[0].Rows[0]["TASKNO"].ToString();
                                    }
                                    else
                                    {
                                        zxrwh = DataTrans.D_AllotTaskno().ToString();
                                    }
                                    int m = DataTrans.D_UpdateRkSendToAgv(ds.Tables[0], zxrwh, rkssj.SSJID, ds.Tables[0].Rows[0]["TCARGO_ALLEY_ID"].ToString(), out msg);
                                    if (m > 0)
                                    {
                                        NotifyEvent?.Invoke("S", $"调度指令{ds.Tables[0].Rows[0]["Taskid"]}更新成功");
                                        log.WriteLog($"调度指令{ds.Tables[0].Rows[0]["Taskid"]}更新成功");
                                    }
                                    else
                                    {
                                        string res = string.IsNullOrEmpty(msg) ? "更新失败" : $"更新出现异常!异常信息为{msg}";
                                        NotifyEvent?.Invoke("S", $"调度指令{ds.Tables[0].Rows[0]["Taskid"]}{res}");
                                    }
                                }
                            }
                        }
                        else if (ds.Tables[0].Rows.Count > 1)
                        {
                            string[] arr     = Array.ConvertAll(ds.Tables[0].Rows.Cast <DataRow>().ToArray(), r => r["TASKID"].ToString());
                            string   taskstr = string.Join(",", arr, 0, arr.Length);
                            NotifyEvent?.Invoke("S", $"入库口{i}存在多个待执行任务,请检查并进行处理!待执行任务id{taskstr}");
                            log.WriteLog($"入库口{i}存在多个待执行任务,请检查并进行处理!待执行任务id{taskstr}");
                        }
                    }
                }
                Thread.Sleep(500);
            }
        }