/// <summary> /// 将任务号等写入堆垛机 /// </summary> /// <param name="ts"></param> public static bool WriteToCrane(CraneStr ts) { try { wbuffer = new byte[20]; //作业方式。入库、出库、移库 wbuffer[1] = (byte)(Convert.ToInt32(ts.Zyfs) % 256); //任务号 wbuffer[2] = (byte)Convert.ToInt32(Convert.ToInt32(ts.Zxrwh) / (256 * 256 * 256)); wbuffer[3] = (byte)Convert.ToInt32(Convert.ToInt32(ts.Zxrwh) / (256 * 256)); wbuffer[4] = (byte)Convert.ToInt32(Convert.ToInt32(ts.Zxrwh) / 256); wbuffer[5] = (byte)Convert.ToInt32(Convert.ToInt32(ts.Zxrwh) - (wbuffer[0] * 256 * 256 * 256) - (wbuffer[1] * 256 * 256) - (wbuffer[2] * 256)); //目标排 wbuffer[6] = (byte)(Convert.ToInt32(ts.Mbph) % 256); wbuffer[7] = (byte)(Convert.ToInt32(ts.Mblh) % 256); wbuffer[8] = (byte)(Convert.ToInt32(ts.Mbch) % 256); //源地址排 wbuffer[12] = (byte)(Convert.ToInt32(ts.Dqph) % 256); //源地址列 wbuffer[13] = (byte)(Convert.ToInt32(ts.Dqlh) % 256); //源地址层 wbuffer[14] = (byte)(Convert.ToInt32(ts.Dqch) % 256); bool flag = cPLCList[ts.Btid].HsWrite($"DB{wdbnumber}.0", buffer); return(true); } catch (Exception ex) { LogWrite.WriteLog($"堆垛机写入异常,异常信息为:{ex.Message}"); return(false); } }
/// <summary> /// 取货完成给堆垛机指令表下发指令数据 /// </summary> /// <param name="cs"></param> /// <returns></returns> private bool QHWCDDJCommand(ref CraneStr cs) { bool flag = false; string taskno = cs.Zxrwh.ToString(); DataSet ds = DataTrans.D_GetSchByTaskno(taskno); if (ds != null && ds.Tables[0].Rows.Count > 0) { DataTable dt = ds.Tables[0]; cs.Dqph = dt.Rows[0]["SPLATOON"].ToString(); cs.Dqlh = dt.Rows[0]["SCOLUMN"].ToString(); cs.Dqch = dt.Rows[0]["SFLOOR"].ToString(); cs.Mbph = dt.Rows[0]["TPLATOON"].ToString(); cs.Mbch = dt.Rows[0]["TFLOOR"].ToString(); cs.Mblh = dt.Rows[0]["TCOLUMN"].ToString(); cs.Var1 = dt.Rows[0]["TASKID"].ToString(); if (dt.Rows[0]["TASKTYPE"].ToString() == "2" && dt.Rows[0]["FLOOR"].ToString() == "1") { AlleyIdRelation.GetCKOneDesSpace(cs.Btid, ref cs); } else if (dt.Rows[0]["TASKTYPE"].ToString() == "2" && dt.Rows[0]["FLOOR"].ToString() == "2") { AlleyIdRelation.GetCKTwoDesSpace(cs.Btid, ref cs); } flag = true; } else { LogWrite.WriteLog($"堆垛机{cs.Btid}取货完成后,所提取的任务号为找到任务"); NotifyShowEvent?.Invoke("R", $"堆垛机{cs.Btid}取货完成后,所提取的任务号为找到任务"); flag = false; } return(flag); }
//private int OnJobNum = Convert.ToInt32(ConfigurationManager.AppSettings["OnJobNum"]); public CRLCRANEConnect(string ipadress, int port, string scno) { try { HsControlServer plcList = new HsControlServer(ipadress); if (!cPLCList.ContainsKey(scno)) { cPLCList.Add(scno, plcList); } else { //如果已存在,更新链接信息 cPLCList[scno] = new HsControlServer(ipadress); } coc.IpAddress = ipadress; coc.Port = port; coc.ScNo = scno; CraneStr crs = new CraneStr(); if (string.IsNullOrEmpty(scno)) { crs.Btid = scno; CraneStrList.Add(crs); } } catch (Exception ex) { NotifyShowEvent?.Invoke("C", $"堆垛机{scno}初始化异常,异常信息为{ex.Message}"); } }
/// <summary> /// 给堆垛机下发命令 /// </summary> /// <param name="si"></param> public static void D_InsertCraneCommand(CraneStr crs, DataTable dt) { try { string orastr = @"INSERT INTO RICO_DEVICE_DDJ_COMMAND( BTID,DTYPE,COMMKIND,RWH,SPH,SLH,SCH,EPH, ELH,ECH,TSJH,JYM,DOFLAG,CREATETIME,TRAYCODE,TASKID) VALUES (:BTID,:DTYPE,:COMMKIND,:RWH,:SPH,:SLH,:SCH,:EPH,:ELH,:ECH,:TSJH,:JYM,:DOFLAG,:CREATETIME,:TRAYCODE,:TASKID)"; #region OracleParameter[] parms = new OracleParameter[] { new OracleParameter(@":BTID", OracleType.NVarChar, 50), new OracleParameter(@":DTYPE", OracleType.NVarChar, 50), new OracleParameter(@":COMMKIND", OracleType.NVarChar, 50), new OracleParameter(@":RWH", OracleType.NVarChar, 50), new OracleParameter(@":SPH", OracleType.NVarChar, 50), new OracleParameter(@":SLH", OracleType.NVarChar, 50), new OracleParameter(@":SCH", OracleType.NVarChar, 50), new OracleParameter(@":EPH", OracleType.NVarChar, 50), new OracleParameter(@":ELH", OracleType.NVarChar, 50), new OracleParameter(@":ECH", OracleType.NVarChar, 50), new OracleParameter(@":TSJH", OracleType.NVarChar, 50), new OracleParameter(@":JYM", OracleType.NVarChar, 50), new OracleParameter(@":DOFLAG", OracleType.NVarChar, 50), new OracleParameter(@":CREATETIME", OracleType.NVarChar, 50), new OracleParameter(@":TRAYCODE", OracleType.NVarChar, 50), new OracleParameter(@":TASKID", OracleType.NVarChar, 50) }; #endregion parms[0].Value = crs.Btid; //设备id parms[1].Value = "1"; //设备分类 parms[2].Value = ""; //指令种类 parms[3].Value = dt.Rows[0]["taskno"]; //任务号 parms[4].Value = dt.Rows[0]["SPLATOON"]; //源货位排 parms[5].Value = dt.Rows[0]["SCOLUMN"]; //源货位列 parms[6].Value = dt.Rows[0]["SFLOOR"]; //源货位层 parms[7].Value = 0; //目标货位排 parms[8].Value = 0; //目标货位列 parms[9].Value = 0; //目标货位层 parms[10].Value = ""; // parms[11].Value = ""; //校验码 parms[12].Value = "0"; //是否下发给PLC parms[13].Value = DateTime.Now.ToString(); //生成时间 parms[14].Value = dt.Rows[0]["TRAYCODE"]; //托盘条码 parms[15].Value = dt.Rows[0]["taskid"].ToString(); //任务号 int n = OracleHelper.ExecuteNonQuery(CommandType.Text, orastr, parms); } catch (Exception ex) { LogInfo.WriteLog("插入堆垛机指令异常,异常信息为:" + ex.Message); } }
/// <summary> /// 将读取到的数据绑定到堆垛机实体类 /// </summary> /// <param name="btid"></param> /// <param name="buffer"></param> public void BindCraneStr(string btid, byte[] buffer) { CraneStr cst = CraneStrList.Find(cs => cs.Btid == btid); if (cst != null) { cst.Btid = btid; //设备ID cst.Czfs = buffer[2].ToString(); //操作方式(0、未定义 1、维修 2、手动 3、单机自动 4、联机自动) cst.Jdbz = buffer[3].ToString(); //阶段标志(0、待机 1、取货中 2、取货完成 3、放货中 4、放货完成) //cst.Zxrwh = buffer[4] * 256 * 256 * 256 + buffer[4] * 256 * 256 + buffer[6] * 256 + buffer[7]; cst.Zxrwh = buffer[4] * 256 * 256 * 256 + buffer[5] * 256 * 256 + buffer[6] * 256 + buffer[7]; //任务号 cst.Alarm = buffer[8].ToString(); //记录故障报警 cst.Rkyh = "0"; cst.Ckwh = "0"; if (buffer[8].ToString() == "5") { cst.Rkyh = "1"; //入库目标有货 cst.Dqzt = "2"; } else if (buffer[8].ToString() == "6") { cst.Ckwh = "1"; //出库目标无货 cst.Dqzt = "1"; } else if (cst.Alarm != "0") { cst.Dqzt = "4"; } else { cst.Dqzt = "0"; } cst.Dqph = buffer[38].ToString(); //获取堆垛机当前排 cst.Dqlh = buffer[39].ToString(); //获取堆垛机当前列 cst.Dqch = buffer[40].ToString(); //获取堆垛机当前层 if (cst.Czfs == "4") { IssuedCraneTask(cst.Btid, buffer); } } }
/// <summary> /// 通过任务类型以及任务类型层号获取出库任务信息 /// </summary> /// <param name="tasktype">任务类型</param> /// <param name="floor">层号</param> /// <param name="status">任务状态</param> /// <param name="allayid">巷道号</param> /// <param name="taskno">任务号</param> /// <returns></returns> public static DataSet D_GetOutSchTaskByCrane(string tasktype, string floor, string status, string allayid, string taskno, CraneStr cs) { DataSet ds = new DataSet(); string orastr = "select * from schedule_task where 1=1"; if (tasktype != "") { orastr += " and tasktype='" + tasktype + "'"; } if (!string.IsNullOrEmpty(floor)) { orastr += " and FLOOR='" + floor + "'"; } else { orastr += " and FLOOR IS NULL"; } if (!string.IsNullOrEmpty(status)) { orastr += " and status in ( '" + status + "')"; } if (!string.IsNullOrEmpty(allayid)) { orastr += " and SCARGO_ALLEY_ID='" + allayid + "'"; } if (!string.IsNullOrEmpty(taskno)) { orastr += " and taskno='" + taskno + "'"; } orastr += @" order by (case when(select * from(select ceil((sysdate - createtime) * 24 * 60) from schedule_task where 1 = 1 and tasktype = '" + tasktype + "' and FLOOR = '" + floor + "' and status in ('" + status + "') and SCARGO_ALLEY_ID = '" + allayid + "'"; orastr += " order by case when priority>=3 then to_char(createtime,'yyyy-mm-dd hh24:mi:ss') " + "else to_char(PRIORITY) end) where rownum=1) > 30 then to_char(createtime, 'yyyy-mm-dd hh24:mi:ss') else to_char(PRIORITY) || ',' ||"; if (!string.IsNullOrEmpty(cs.Mblh)) { int lh = Convert.ToInt32(cs.Mblh); orastr += " abs(SCOLUMN-" + lh + ")||','||"; } if (!string.IsNullOrEmpty(cs.Mbch)) { int ch = Convert.ToInt32(cs.Mbch); orastr += " abs(SCOLUMN-" + ch + ")||','||"; } orastr += @" createtime end) "; try { ds = OracleHelper.ExecuteDataSet(CommandType.Text, orastr, null); } catch (Exception ex) { LogInfo.WriteLog("根据任务类型获取任务异常,异常信息为:" + ex.Message + "语句为:" + orastr); } return(ds); }
/// <summary> /// 给堆垛机指令表中插入指令数据 /// </summary> /// <param name="cs"></param> /// <param name="dt"></param> /// <returns></returns> private bool DDJCommand(ref CraneStr cs, DataTable dt) { bool flag = false; //用于存储指令表中的任务 int cranetaskno = 0; cs.Zxrwh = dt.Rows[0]["taskno"].ToInt(); if (dt.Rows[0]["TPLATOON"].ToInt().ToString().Equals("0")) { cs.Mbph = "0"; } else { int remainder = Convert.ToInt32(dt.Rows[0]["TPLATOON"]) % 2; if (remainder == 0) { cs.Mbph = "2"; } else { cs.Mbph = "1"; } } cs.Mblh = dt.Rows[0]["TCOLUMN"].ToString(); cs.Mbch = dt.Rows[0]["TFLOOR"].ToString(); if (dt.Rows[0]["SPLATOON"].ToInt().ToString().Equals("0")) { cs.Dqph = "0"; } else { int remainder = Convert.ToInt32(dt.Rows[0]["SPLATOON"]) % 2; if (remainder == 0) { cs.Dqph = "2"; } else { cs.Dqph = "1"; } } cs.Dqlh = dt.Rows[0]["SCOLUMN"].ToString(); cs.Dqch = dt.Rows[0]["SFLOOR"].ToString(); //查询指令表中是否存在指令未执行 DataSet dscommand = DataTrans.D_GetCraneCommand(cs.Btid); if (dscommand.Tables[0].Rows.Count > 0) { cranetaskno = dscommand.Tables[0].Rows[0]["RWH"].ToInt(); } if (cranetaskno > 0) { if (cranetaskno == Convert.ToInt32(dt.Rows[0]["TASKNO"])) { LogWrite.WriteLog($"堆垛机{cs.Btid}对应任务号{cranetaskno}还未给设备下发,无法向堆垛机指令表中再次写入!"); NotifyShowEvent?.Invoke("R", $"堆垛机{cs.Btid}对应任务号{cranetaskno}还未给设备下发,无法向堆垛机指令表中再次写入!"); flag = true; } else { LogWrite.WriteLog($"堆垛机{cs.Btid}对应任务号{cranetaskno}还未给设备下发,新任务{dt.Rows[0]["TASKNO"]},无法向堆垛机指令表中再次写入!"); NotifyShowEvent?.Invoke("R", $"堆垛机{cs.Btid}对应任务号{cranetaskno}还未给设备下发,新任务{dt.Rows[0]["TASKNO"]},无法向堆垛机指令表中再次写入!"); flag = false; DataTrans.D_CraneCommanddel(cs.Btid); } } else { DataTrans.D_InsertCraneCommand(cs, dt); flag = true; } return(flag); }
/// <summary> /// 给堆垛机下达任务 /// </summary> /// <param name="craneid"></param> /// <param name="buffer"></param> public void IssuedCraneTask(string craneid, byte[] buffer) { CraneStr cs = CRLBase.CraneStrList.Find(c => c.Btid == craneid); //任务结束,删除指令,放货完成 if (cs.Jdbz == "4") { cs.Zyfs = "4"; LogWrite.WriteLog($"放货完成开始删除堆垛机{cs.Btid}任务{cs.Zxrwh}"); NotifyShowEvent?.Invoke("R", $"防火完成开始删除堆垛机{cs.Btid}任务{cs.Zxrwh}"); if (WriteToCrane(cs)) { DataSet dssch = DataTrans.D_GetSchByTaskno(cs.Zxrwh.ToString()); if (dssch == null) { return; } if (dssch.Tables[0].Rows.Count > 0) { //入库或者移库 if (dssch.Tables[0].Rows[0]["TASKTYPE"].ToString() == "1" || dssch.Tables[0].Rows[0]["TASKTYPE"].ToString() == "3") { DataTrans.D_CraneCommandTrans(cs.Btid, dssch.Tables[0].Rows[0]["TASKID"].ToString(), "4", "4", "4"); LogWrite.WriteLog($"放货完成删除堆垛机{cs.Btid}任务{cs.Zxrwh}完成 托盘条码:{dssch.Tables[0].Rows[0]["traycode"]}"); NotifyShowEvent?.Invoke("R", $"放货完成删除堆垛机{cs.Btid}任务{cs.Zxrwh}完成 托盘条码:{dssch.Tables[0].Rows[0]["traycode"]}"); } //出库 else if (dssch.Tables[0].Rows[0]["TASKTYPE"].ToString() == "2") { DataTrans.D_CraneCommandTrans(cs.Btid, dssch.Tables[0].Rows[0]["TASKID"].ToString(), "3", "1", "3"); LogWrite.WriteLog($"放货完成删除堆垛机{cs.Btid}任务{cs.Zxrwh}完成 托盘条码:{dssch.Tables[0].Rows[0]["traycode"]}"); NotifyShowEvent?.Invoke("R", $"放货完成删除堆垛机{cs.Btid}任务{cs.Zxrwh}完成 托盘条码:{dssch.Tables[0].Rows[0]["traycode"]}"); } } } //入库目标有货 else if (cs.Rkyh == "1" && cs.Alarm != "0") { //根据任务号获取调度指令 DataSet dsoldsh = DataTrans.D_GetSchByTaskno(cs.Zxrwh.ToString()); //判断是否入库或者移库 if ((dsoldsh != null && dsoldsh.Tables[0].Rows.Count > 0 && (dsoldsh.Tables[0].Rows[0]["tasktype"].ToString() == "1")) || dsoldsh.Tables[0].Rows[0]["tasktype"].ToString() == "3") { #region 向中间表插入数据,向WMS发起请求 //发起前先判断中间表是否已存在该条申请,状态为 1=已下发,2=已处理 DataSet dsisexist = DataTrans.D_GetIDX_ASRS_SEND(dsoldsh.Tables[0].Rows[0]["TASKID"].ToString(), "10", $"1','2"); if (dsisexist != null && dsisexist.Tables[0].Rows.Count == 0) { LogWrite.WriteLog($"堆垛机{cs.Btid}调度指令{dsoldsh.Tables[0].Rows[0]["taskid"]}入库货位有货,开始向WMS申请新货位..."); NotifyShowEvent?.Invoke("R", $"堆垛机{cs.Btid}调度指令{dsoldsh.Tables[0].Rows[0]["taskid"]}入库货位有货,开始向WMS申请新货位..."); string alleyid = AlleyIdRelation.GetAlleyId(cs.Btid); //10代表存货占位,1代表下发 int n = DataTrans.D_InsertIDX_ASRS_SEND("10", "1", dsoldsh.Tables[0].Rows[0]["taskid"].ToString(), dsoldsh.Tables[0].Rows[0]["TRAYCODE"].ToString(), dsoldsh.Tables[0].Rows[0]["TCARGO_SPACE_ID"].ToString(), alleyid); string res = n > 0 ? "成功" : "失败"; LogWrite.WriteLog($"堆垛机{cs.Btid}调度指令{dsoldsh.Tables[0].Rows[0]["taskid"]}入库货位有货,向WMS申请新货位{res}"); NotifyShowEvent?.Invoke("R", $"堆垛机{cs.Btid}调度指令{dsoldsh.Tables[0].Rows[0]["taskid"]}入库货位有货,向WMS申请新货位{res}"); //等待wms处理2s Thread.Sleep(2000); } #endregion //获取WMS重新分配的货位 DataSet dsidx = DataTrans.D_GetIDX_ASRS_SEND(dsoldsh.Tables[0].Rows[0]["TASKID"].ToString(), "10", "2"); //查询到数据说明获取到货位 if (dsidx != null && dsidx.Tables[0].Rows.Count > 0) { LogWrite.WriteLog($"堆垛机{cs.Btid}货位有货重新分配货位"); NotifyShowEvent?.Invoke("R", $"堆垛机{cs.Btid}货位有货重新分配货位"); string taskid = dsoldsh.Tables[0].Rows[0]["TASKID"].ToString(); string sendid = dsidx.Tables[0].Rows[0]["SENDID"].ToString(); //重分的货位号 string spaceid = dsidx.Tables[0].Rows[0]["LOCATION"].ToString(); //根据货位号获取货位信息 DataSet dsspace = DataTrans.P_getSpaceInfo(spaceid); if (dsspace == null) { return; } //目标排号 string desrow = dsspace.Tables[0].Rows[0]["CSPLATOON"].ToString(); //目标列号 string descolnum = dsspace.Tables[0].Rows[0]["CSCOLUMN"].ToString(); //目标层号 string desfloor = dsspace.Tables[0].Rows[0]["CSFLOOR"].ToString(); //目标名称 string spacename = dsspace.Tables[0].Rows[0]["CARGO_SPACE_NAME"].ToString(); int remainder = Convert.ToInt32(desrow) % 2; cs.Mbph = remainder == 0 ? "2" : "1"; cs.Mblh = descolnum; cs.Mbch = desfloor; AlleyIdRelation.GetRKDesSpace(cs.Btid, ref cs); cs.Zyfs = "5"; if (WriteToCrane(cs)) { LogWrite.WriteLog($"{cs.Btid}满入解警成功"); NotifyShowEvent?.Invoke("R", $"{cs.Btid}满入解警成功"); //更新相关表货位信息 DataTrans.D_GetSpaceUpInfo(taskid, cs.Btid, "3", sendid, spaceid, desrow, descolnum, desfloor, spacename); cs.Zyfs = "1"; string res = WriteToCrane(cs) ? "成功" : "失败"; LogWrite.WriteLog($"给堆垛机{cs.Btid}重新分货位{spaceid}{res}"); NotifyShowEvent?.Invoke("R", $"给堆垛机{cs.Btid}重新分货位{spaceid}{res}"); } else { LogWrite.WriteLog($"{cs.Btid}满入解警失败"); NotifyShowEvent?.Invoke("R", $"{cs.Btid}满入解警失败"); } } } } //出库无货 else if (cs.Ckwh == "1" && cs.Alarm != "0") { //根据任务号获取调度指令 DataSet dsoldsch = DataTrans.D_GetSchByTaskno(cs.Zxrwh.ToString()); //判断是否出库 //出库将旧指令删除即可,调度指令作废 if (dsoldsch != null && dsoldsch.Tables[0].Rows.Count > 0 && dsoldsch.Tables[0].Rows[0]["tasktype"].ToString() == "2") { #region 向中间表插入数据,向WMS发起请求 //发起前先判断中间表是否已存在该条申请 //状态 1=下发,2=已处理状态 DataSet dsisexist = DataTrans.D_GetIDX_ASRS_SEND(dsoldsch.Tables[0].Rows[0]["TASKID"].ToString(), "11", $"1','3',4','2"); if (dsisexist.Tables[0].Rows.Count == 0) { //判断出库目标无货无申请,则插入一条申请 string alleyid = AlleyIdRelation.GetAlleyId(cs.Btid); //11=出库目标无货 1=下发 int n = DataTrans.D_InsertIDX_ASRS_SEND("11", "1", dsoldsch.Tables[0].Rows[0]["taskid"].ToString(), dsoldsch.Tables[0].Rows[0]["TRAYCODE"].ToString(), dsoldsch.Tables[0].Rows[0]["TCAGRO_SPACE_ID"].ToString(), alleyid); if (n > 0) { //插入成功,将调度指令更新为作废,将中间表更新为已完成 int k = DataTrans.D_RKYHDel(cs.Btid, dsoldsch.Tables[0].Rows[0]["taskid"].ToString()); if (k > 0) { string res = WriteToCrane(cs) ? "成功" : "失败"; LogWrite.WriteLog($"{cs.Btid}空出解警成功"); NotifyShowEvent?.Invoke("R", $"{cs.Btid}空出解警成功"); } } } #endregion } else { cs.Zyfs = "5"; string res = WriteToCrane(cs) ? "成功" : "失败"; LogWrite.WriteLog($"{cs.Btid}空出解警{res}"); NotifyShowEvent?.Invoke("R", $"{cs.Btid}空出解警{res}"); } } //待机 else if (cs.Jdbz == "0") { #region 一楼出库 //一楼出库 if (runorder == 1 && n == 0) { DataTable dt = new DataTable(); //查询一楼出库口输送机信息,设备类型为103 string dttype = "103"; TransportStr ts = lsTransport.Find(t => t.DTYPE == dttype && t.BTID == cs.Btid && t.KXBZ == "1"); if (ts == null) { return; } crl.HsWcsReadSSJ(ref ts); if (ts.KXBZ != "1") { return; } //查询调度任务, //任务类型2(TASKTYPE出库),任务类型描述(DESCRIPTION),状态为2(STATUS待执行) string alleyid = AlleyIdRelation.GetAlleyId(cs.Btid); //查询出库调度任务 //任务类型为2(TASKTYPE出库),层号(FLOOR)为1,状态为2(STATUS待执行) DataSet dstask = DataTrans.D_GetOutSchTaskByCrane("2", "1", "2", alleyid, string.Empty, cs); if (dstask != null && dstask.Tables[0].Rows.Count > 0) { dt = dstask.Tables[0].Clone(); dt.ImportRow(dstask.Tables[0].Rows[0]); bool flag1 = true; //调度指令表中任务号不存在,分配新的任务号 if (dt.Rows[0]["task"].ToString() == "0" || string.IsNullOrEmpty(dt.Rows[0]["taskno"].ToString())) { //任务号分配 string taskno = DataTrans.D_AllotTaskno().ToString(); if (!string.IsNullOrEmpty(taskno) && taskno != "0") { dt.Rows[0]["taskno"] = taskno; flag1 = DataTrans.D_UpSchTask(taskno, dt.Rows[0]["taskid"].ToString()); } else { flag1 = false; } } if (flag1) { LogWrite.WriteLog($"巷道{cs.Btid}开始一楼出库任务,任务号为{dt.Rows[0]["taskno"]}托盘条码:{dt.Rows[0]["traycode"]}"); NotifyShowEvent?.Invoke("R", $"巷道{cs.Btid}开始一楼出库任务,任务号为{dt.Rows[0]["taskno"]}托盘条码:{dt.Rows[0]["traycode"]}"); bool flag = DDJCommand(ref cs, dt); if (flag) { //根据巷道获取出库目标 AlleyIdRelation.GetCKOneDesSpace(cs.Btid, ref cs); //出库 cs.Zyfs = "2"; if (WriteToCrane(cs)) { LogWrite.WriteLog($"给堆垛机{cs.Btid}下发出库任务{dt.Rows[0]["taskno"]}成功,托盘条码:{dt.Rows[0]["traycode"]},目标地址:{cs.Mbph}排{cs.Mblh}列{cs.Mbch}层"); NotifyShowEvent?.Invoke("R", $"给堆垛机{cs.Btid}下发出库任务{dt.Rows[0]["taskno"]}成功,托盘条码:{dt.Rows[0]["traycode"]},目标地址:{cs.Mbph}排{cs.Mblh}列{cs.Mbch}层"); DataTrans.D_CraneCommandTrans(cs.Btid, dt.Rows[0]["TASKID"].ToString(), "2", "2", "3"); Thread.Sleep(1000); } else { LogWrite.WriteLog($"给堆垛机{cs.Btid}下发出库任务{dt.Rows[0]["taskno"]}失败"); NotifyShowEvent?.Invoke("R", $"给堆垛机{cs.Btid}下发出库任务{dt.Rows[0]["taskno"]}失败"); } } } } } #endregion #region 一楼入库 else if (runorder == 2) { DataTable dt = new DataTable(); //查询二楼入库口输送机信息,设备类型为207 string dttype = "102"; TransportStr ts = lsTransport.Find(s => s.DTYPE == dttype && s.BTID == cs.Btid && s.DWXH == "1"); if (ts == null) { return; } else { crl.HsWcsReadSSJ(ref ts); if (ts.DWXH != "1") { return; } //根据输送机任务号获取调度信息 DataSet dstask = DataTrans.D_GetSchByTaskno(ts.ZXRWH); DataRow[] drs = dstask.Tables[0].Select("TCARGO_SPACE_ID is not null", ""); if (drs.Length > 0) { dt = dstask.Tables[0].Clone(); dt.ImportRow(drs[0]); LogWrite.WriteLog($"开始入库任务,任务号为:{dt.Rows[0]["taskno"]},托盘条码:{dt.Rows[0]["traycode"]}"); NotifyShowEvent?.Invoke("R", $"开始入库任务,任务号为:{dt.Rows[0]["taskno"]},托盘条码:{dt.Rows[0]["traycode"]}"); bool flag = DDJCommand(ref cs, dt); if (flag) { //如果入库,目标地址为巷道 AlleyIdRelation.GetRKDesSpace(cs.Btid, ref cs); cs.Zyfs = "1"; //如果插入指令表成功,将指令写入到堆垛机中 if (WriteToCrane(cs)) { LogWrite.WriteLog($"给堆垛机{cs.Btid}下发任务{dt.Rows[0]["taskno"]}成功,托盘条码:{dt.Rows[0]["traycode"]},目标地址{cs.Mbph}排-{cs.Mblh}列-{cs.Mbch}层"); NotifyShowEvent?.Invoke("R", $"给堆垛机{cs.Btid}下发任务{dt.Rows[0]["taskno"]}成功,托盘条码:{dt.Rows[0]["traycode"]},目标地址{cs.Mbph}排-{cs.Mblh}列-{cs.Mbch}层"); DataTrans.D_CraneCommandTrans(cs.Btid, dt.Rows[0]["TASKID"].ToString(), "3", "3", "3"); Thread.Sleep(1000); } else { LogWrite.WriteLog($"给堆垛机{cs.Btid}下发入库任务{dt.Rows[0]["taskno"]}失败"); NotifyShowEvent?.Invoke("R", $"给堆垛机{cs.Btid}下发入库任务{dt.Rows[0]["taskno"]}失败"); } } return; } } } #endregion } } }