/// <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); }
/// <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); }
/// <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); } }
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); }
/// <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); } }