protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { string lineCode = stateItem.ItemName.Split("_"[0])[0]; string channelGroup = stateItem.ItemName.Split("_"[0])[1]; object obj = ObjectUtil.GetObject(stateItem.State); int sortNo = obj != null?Convert.ToInt32(obj) : 0; using (PersistentManager pm = new PersistentManager()) { SupplyDao supplyDao = new SupplyDao(); int sortNo1 = supplyDao.FindSortNoForSupply(lineCode, sortNo.ToString(), channelGroup, Convert.ToInt32(Context.Attributes["SupplyAheadCount-" + lineCode + "-" + channelGroup])); sortNo = sortNo > sortNo1 ? sortNo : sortNo1; } Dictionary <string, string> parameter = new Dictionary <string, string>(); parameter.Add("OrderDate", ""); parameter.Add("BatchNo", ""); parameter.Add("LineCode", lineCode); parameter.Add("ChannelGroup", channelGroup); parameter.Add("SortNo", sortNo.ToString()); WriteToProcess("SupplyRequestProcess", "SupplyRequest", parameter); } catch (Exception e) { Logger.Error(e.Message); } }
private bool Check_Crane_Status_IsOk(int craneNo) { try { string serviceName = "CranePLC" + craneNo; string plcTaskNo = ObjectUtil.GetObject(context.ProcessDispatcher.WriteToService(serviceName, "CraneTaskNo")).ToString(); string craneMode = ObjectUtil.GetObject(context.ProcessDispatcher.WriteToService(serviceName, "CraneMode")).ToString(); object[] obj = ObjectUtil.GetObjects(context.ProcessDispatcher.WriteToService(serviceName, "CraneAlarmCode")); int CraneState = int.Parse(obj[1].ToString()); int CraneAlarmCode = int.Parse(obj[0].ToString()); if (plcTaskNo == "0" && craneMode == "1" && CraneAlarmCode == 0 && CraneState == 0) { return(true); } else { return(false); } } catch (Exception ex) { Logger.Error(ex.Message); return(false); } }
private void tmWorker(object sender, System.Timers.ElapsedEventArgs e) { try { tmWorkTimer.Stop(); object obj = ObjectUtil.GetObject(context.ProcessDispatcher.WriteToService("TranLine", "StockRequest")); if (obj == null) { return; } string TaskFinish = obj.ToString(); Logger.Info(TaskFinish); if (TaskFinish.Equals("True") || TaskFinish.Equals("1")) { this.DialogResult = DialogResult.OK; } } catch (Exception ex) { Logger.Error(ex.Message); } finally { tmWorkTimer.Start(); } }
private void Send2PLC(DataRow dr) { string serviceName = "CranePLC01"; string TaskNo = dr["TaskNo"].ToString(); string fromStation = dr["FromStation"].ToString(); string toStation = dr["ToStation"].ToString(); int[] cellAddr = new int[6]; cellAddr[0] = int.Parse(fromStation.Substring(4, 3)); cellAddr[1] = int.Parse(fromStation.Substring(7, 3)); cellAddr[2] = int.Parse(fromStation.Substring(0, 3)); cellAddr[3] = int.Parse(toStation.Substring(4, 3)); cellAddr[4] = int.Parse(toStation.Substring(7, 3)); cellAddr[5] = int.Parse(toStation.Substring(0, 3)); string TaskTypeValue = "1"; if (ObjectUtil.GetObject(context.ProcessDispatcher.WriteToService(serviceName, "CraneLoad")).ToString() == "1") { TaskTypeValue = "2"; } sbyte[] sTaskNo = new sbyte[20]; Util.ConvertStringChar.stringToBytes(TaskNo, 20).CopyTo(sTaskNo, 0); context.ProcessDispatcher.WriteToService(serviceName, "TaskNo", sTaskNo); context.ProcessDispatcher.WriteToService(serviceName, "TaskAddress", cellAddr); context.ProcessDispatcher.WriteToService(serviceName, "TaskType", TaskTypeValue); context.ProcessDispatcher.WriteToService(serviceName, "WriteFinished", 1); Logger.Info("重新下发堆垛机任务,任务号:" + TaskNo); }
private string GetLedMessage(string LedNo, string ItemNo, StateItem item) { string strMsg = ""; try { string Stock = "外盘:"; if (int.Parse(ItemNo) % 2 == 0) { Stock = "内盘:"; } string PalletCode = ""; string CellCode = " 位:"; string CraneErrorNo = "0"; if (int.Parse(LedNo) % 2 == 0 && int.Parse(ItemNo) % 2 == 0) { int CarNo = int.Parse(LedNo) / 2; CraneErrorNo = ObjectUtil.GetObject(WriteToService("CranePLC" + CarNo, "nAlarmCode")).ToString(); } if (CraneErrorNo != "0") { string ErrMsg = "堆垛机未知错误"; DataRow[] drs = dtCraneError.Select(string.Format("warncode='{0}'", CraneErrorNo)); if (drs.Length > 0) { ErrMsg = drs[0]["WARNDESC"].ToString(); } strMsg = ErrMsg; } else { string errorNo = ObjectUtil.GetObject(WriteToService(StockPLC, ItemNo + "_ErrCode")).ToString(); if (errorNo != "0") { strMsg = Stock + (PalletCode.Length > 0 ? "托盘:" + PalletCode : "") + dicStockWarning[errorNo]; if (item.ItemName.IndexOf("_ErrCode") >= 0 && ItemNo == item.ItemName.Split('_')[0]) { Logger.Error("输送线:" + ItemNo + (PalletCode.Length > 0 ? "托盘编号:" + PalletCode : "") + dicStockWarning[errorNo]); } } else { string Tasks = Util.ConvertStringChar.BytesToString((byte[])WriteToService(StockPLC, ItemNo + "_TaskNo")); Tasks = Tasks.PadRight(26, ' '); if (Tasks.Length > 0) { PalletCode = Tasks.Substring(10, 8).Trim(); CellCode = " 位:" + Tasks.Substring(18, 8).Trim(); } strMsg = Stock + PalletCode + CellCode; } } } catch (Exception ex) { Logger.Error("LEDProcess中GetLedMessage异常:" + ex.Message); } return(strMsg); }
public override void Execute() { try { object state = AutomationContext.Read(memoryServiceName, memoryItemName); if (state == null || state.ToString() != "ScanCodeFaultReset") { return; } state = AutomationContext.Read(scanServiceName2, scanItemName2); if (state == null || state.ToString() == string.Empty) { return; } string barcode = state.ToString(); state = AutomationContext.Read(plcServiceName, O_Stockin_Scan_Alarm); state = ObjectUtil.GetObject(state); if (state == null || state.ToString() != "1") { return; } AutomationContext.Write(scanServiceName1, scanItemName1, barcode); } catch (Exception ex) { Logger.Error("ScanCodeFaultResetProcess 出错,原因:" + ex.Message + "/n" + ex.StackTrace); } }
public void SendDeviceStatus2(Context context, string ServiceName, string carNo, string AlarmDesc) { string id = Guid.NewGuid().ToString(); string aisleNo = ServiceName.Substring(5, 2); string deviceNo = aisleNo + carNo; object[] Status = ObjectUtil.GetObjects(context.ProcessDispatcher.WriteToService(ServiceName, "CarStatus" + carNo)); string mode = Status[0].ToString(); string status = Status[12].ToString(); string taskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(context.ProcessDispatcher.WriteToService(ServiceName, "CarTask" + carNo))); string fork = Status[11].ToString(); string load = Status[10].ToString(); string column = Status[2].ToString(); string layer = Status[3].ToString(); string alarmCode = ObjectUtil.GetObject(context.ProcessDispatcher.WriteToService(ServiceName, "CarAlarm" + carNo)).ToString(); string field2 = AlarmDesc; string sender1 = "ROBO_WCS"; string Json = "[{\"id\":\"" + id + "\",\"deviceNo\":\"" + Program.WarehouseCode + deviceNo + "\",\"mode\":\"" + mode + "\",\"status\":\"" + status + "\",\"taskNo\":\"" + taskNo + "\",\"fork\":\"" + fork + "\",\"load\":\"" + load + "\",\"aisleNo\":\"" + aisleNo + "\",\"column\":\"" + column + "\",\"layer\":\"" + layer + "\",\"alarmCode\":\"" + alarmCode + "\",\"sendDate\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\",\"sender\":\"" + sender1 + "\",\"field1\":\"\",\"field2\":\"" + field2 + "\",\"field3\":\"\"" + "}]"; Logger.Debug("开始上报设备编号[" + deviceNo + "]的状态"); string message = Program.send("transWCSDevice", Json); RtnMessage rtnMessage = JsonHelper.JSONToObject <RtnMessage>(message); Logger.Debug("上报设备编号[" + deviceNo + "]状态,收到反馈:" + rtnMessage.returnCode + ":" + rtnMessage.message); }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { bool needNotify = false; string lineCode = stateItem.ItemName.Split("_"[0])[0]; string channelGroup = stateItem.ItemName.Split("_"[0])[1]; string channelType = stateItem.ItemName.Split("_"[0])[2]; object obj = ObjectUtil.GetObject(stateItem.State); int sortNo = obj != null?Convert.ToInt32(obj) : 0; if (sortNo == 0) { return; } sortNo = sortNo + Convert.ToInt32(Context.Attributes["SupplyAheadCount-" + lineCode + "-" + channelGroup + "-" + channelType]); needNotify = AddNextSupply(lineCode, channelGroup, channelType, sortNo); if (needNotify) { WriteToProcess("LedStateProcess", "Refresh", null); WriteToProcess("ScannerStateProcess", "Refresh", null); dispatcher.WriteToProcess("DataRequestProcess", "SupplyRequest", 1); } } catch (Exception e) { Logger.Error("补货批次生成处理失败,原因:" + e.Message); } }
/// <summary> /// 检查堆垛机入库状态 /// </summary> /// <param name="piCrnNo"></param> /// <returns></returns> private bool Check_Device_Status_IsOk(string ServiceName) { try { string plcTaskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService(ServiceName, "ReadTaskNo"))); string workMode = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService(ServiceName, "WorkMode")).ToString(); object[] obj = ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(ServiceName, "OtherStatus")); int State = int.Parse(obj[1].ToString()); int AlarmCode = int.Parse(obj[0].ToString()); if (workMode == "1" && AlarmCode == 0 && State == 1) { return(true); } else { return(false); } } catch (Exception ex) { //Logger.Error(ex.Message); return(false); } }
private void btnHandScan_Click(object sender, EventArgs e) { try { object state = AutomationContext.Read(memoryServiceName1, memoryItemName1); if (state == null || state.ToString() != "WholePalletScan") { XtraMessageBox.Show("当手持扫码模式不是 [手持扫码整托盘入库]!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } state = AutomationContext.Read(plcServiceName, I_Whole_Pallet_StockIn_Scan_Request); state = ObjectUtil.GetObject(state); if (state == null || !Convert.ToBoolean(state)) { XtraMessageBox.Show("当前PLC未请求扫码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } ScanDialog scanDialog = new ScanDialog(); scanDialog.Text = "整盘入库手工扫码!"; if (scanDialog.ShowDialog() == DialogResult.OK) { int[] data = new int[] { scanDialog.ProductNo, scanDialog.Quantity }; AutomationContext.Write(memoryServiceName2, memoryItemName2, data); } } catch (Exception ex) { XtraMessageBox.Show(string.Format("手工扫码失败,详情原因 : {0}", ex.Message), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
private void SendDeviceStatus(string ServiceName, string AlarmDesc) { string id = Guid.NewGuid().ToString(); string deviceNo = ServiceName.Substring(3, 4); string mode = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService(ServiceName, "WorkMode")).ToString(); object[] Status = ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(ServiceName, "Status")); object[] OtherStatus = ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(ServiceName, "OtherStatus")); string status = OtherStatus[1].ToString(); string aisleNo = OtherStatus[2].ToString(); string taskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService(ServiceName, "ReadTaskNo"))); string fork = Status[3].ToString(); string load = Status[0].ToString(); string column = Status[1].ToString(); string layer = Status[2].ToString(); string alarmCode = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService(ServiceName, "AlarmCode")).ToString(); string field1 = AlarmDesc; string sender1 = "admin"; string Json = "[{\"id\":\"" + id + "\",\"deviceNo\":\"" + deviceNo + "\",\"mode\":\"" + mode + "\",\"status\":\"" + status + "\",\"taskNo\":\"" + taskNo + "\",\"fork\":\"" + fork + "\",\"load\":\"" + load + "\",\"aisleNo\":\"" + aisleNo + "\",\"column\":\"" + column + "\",\"layer\":\"" + layer + "\",\"alarmCode\":\"" + alarmCode + "\",\"sendDate\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\",\"sender\":\"" + sender1 + "\",\"field1\":\"" + field1 + "\",\"field2\":\"\",\"field3\":\"\"" + "}]"; Logger.Info("上报设备状态"); string message = Program.send("transWCSDevice", Json); RtnMessage rtnMessage = JsonHelper.JSONToObject <RtnMessage>(message); Logger.Info("上报设备状态,收到反馈:" + rtnMessage.returnCode + ":" + rtnMessage.message); }
private void PalletCodeDoubleClick(int CraneNo, int ItemNo) { if (GetTextBox("txtCarErrorDesc", ItemNo).Text == "条码检测故障") { object o = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("CarPLC", ItemNo + "_HasProduct")); if (o.ToString() == "1" || o.ToString() == "True") { Task.frmHandlePalletCode frm = new Task.frmHandlePalletCode(ItemNo, CraneNo); if (frm.ShowDialog() == DialogResult.OK) { string TaskStatus = frm.TaskStatus; Context.ProcessDispatcher.WriteToService("CarPLC", ItemNo + "_WriteFinished", 3); string TaskNo = frm.TaskNo; sbyte[] staskNo = new sbyte[26]; string[] LedMsgs = frm.LedNo.Split(','); Util.ConvertStringChar.stringToBytes(TaskNo, 10).CopyTo(staskNo, 0); Util.ConvertStringChar.stringToBytes(LedMsgs[0], 8).CopyTo(staskNo, 10); Util.ConvertStringChar.stringToBytes(LedMsgs[1], 8).CopyTo(staskNo, 18); Context.ProcessDispatcher.WriteToService("CarPLC", ItemNo + "_WriteTaskNo", staskNo); if (Context.ProcessDispatcher.WriteToService("CarPLC", ItemNo + "_WriteFinished", 4)) { //插入WCS_Task if (TaskStatus == "0") { bll.ExecNonQueryTran("WCS.SPReciveWmsTask", new DataParameter[] { new DataParameter("VTASKNO", frm.TaskNo) }); } Logger.Info(ItemNo + "输送线托盘编号:" + frm.PalletCode + "开始入库"); } } } } }
/// <summary> /// 托盘入库方式 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnPalletIn_Click(object sender, EventArgs e) { PalletSelect frm = new PalletSelect(); if (frm.ShowDialog() == DialogResult.OK) { object obj = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("StockPLC_01", "01_1_122_1")); if (obj == null || obj.ToString() != "0") { return; } if (frm.Flag == 1) //单托盘入库 { string writeItem = "01_2_122_"; int[] ServiceW = new int[3]; ServiceW[0] = 9999; //任务号 ServiceW[1] = 131; //目的地址 ServiceW[2] = 4; Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "1", ServiceW); //PLC写入任务 Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "2", 1); //PLC写入任务 } else if (frm.Flag == 2) { PalletBillDal Billdal = new PalletBillDal(); string TaskID = Billdal.CreatePalletInBillTask(true); //空托盘组入库单,生成Task. string FromStation = "122"; string ToStation = "122"; string writeItem = "01_2_122_"; string strWhere = string.Format("TASK_ID='{0}'", TaskID); TaskDal dal = new TaskDal(); string[] CellValue = dal.AssignCell(strWhere, ToStation); //货位申请 string TaskNo = dal.InsertTaskDetail(CellValue[0]); SysStationDal sysDal = new SysStationDal(); DataTable dt = sysDal.GetSationInfo(CellValue[1], "11", "3"); dal.UpdateTaskState(CellValue[0], "1"); //更新任务开始执行 ProductStateDal StateDal = new ProductStateDal(); StateDal.UpdateProductCellCode(CellValue[0], CellValue[1]); //更新Product_State 货位 dal.UpdateTaskDetailStation(FromStation, ToStation, "2", string.Format("TASK_ID='{0}' AND ITEM_NO=1", CellValue[0])); //更新货位申请起始地址及目标地址。 int[] ServiceW = new int[3]; ServiceW[0] = int.Parse(TaskNo); //任务号 ServiceW[1] = int.Parse(dt.Rows[0]["STATION_NO"].ToString()); //目的地址 ServiceW[2] = 2; Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "1", ServiceW); //PLC写入任务 Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "2", 1); //PLC写入任务 dal.UpdateTaskDetailStation(ToStation, dt.Rows[0]["STATION_NO"].ToString(), "1", string.Format("TASK_ID='{0}' AND ITEM_NO=2", CellValue[0])); //更新货位到达入库站台, //更新单据开始 } } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { switch (stateItem.ItemName) { case "ACK": object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } string ack = obj.ToString(); Logger.Debug(stateItem.Name + " Receive ACK:" + ack); if (ack.Equals("True") || ack.Equals("1")) { WriteToService(stateItem.Name, "STB", 0); Logger.Debug(stateItem.Name + " Receive ACK 1"); } break; default: break; } } catch (Exception ex) { Logger.Error("CraneACKProcess StateChanged方法出错,原因:" + ex.Message); } }
/// <summary> /// 检查堆垛机入库状态 /// </summary> /// <param name="piCrnNo"></param> /// <returns></returns> private bool Check_Device_Status_IsOk(string ServiceName) { try { string plcTaskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(ServiceName, "CraneTaskNo"))); string craneMode = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService(ServiceName, "CraneMode")).ToString(); string CraneState = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService(ServiceName, "CraneState")).ToString(); string CraneAlarmCode = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService(ServiceName, "CraneAlarmCode")).ToString(); string CraneLoad = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService(ServiceName, "CraneLoad")).ToString(); if (plcTaskNo == "" && craneMode == "1" && CraneAlarmCode == "0" && CraneState == "1" && CraneLoad == "0") { return(true); } else { return(false); } } catch (Exception ex) { Logger.Error("堆垛机错误:" + ex.Message); return(false); } }
private object Read(string itemName) { //实现读出堆垛机状态值; object obj = Ops.Read(Name, itemName); obj = ObjectUtil.GetObject(obj); return(obj); }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } BLL.BLLBase bll = new BLL.BLLBase(); string Request = obj.ToString(); if (Request.Equals("True") || Request.Equals("1")) { try { string taskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService(stateItem.Name, "Barcode"))); if (taskNo.Trim().Length > 0) { string Barcode = taskNo.PadRight(20, ' ').Substring(10, 10).Trim(); DataTable dt = bll.FillDataTable("WCS.SelectReadTaskByPallet", new DataParameter[] { new DataParameter("@PalletCode", Barcode) }); if (dt.Rows.Count > 0) { string TaskType = dt.Rows[0]["TaskType"].ToString(); string TaskNo = dt.Rows[0]["TaskNo"].ToString(); if (TaskType == "12" || TaskType == "15" || TaskType == "14") //出库,托盘出库,盘点 { DataParameter[] param = new DataParameter[] { new DataParameter("@TaskNo", TaskNo) }; bll.ExecNonQueryTran("WCS.Sp_TaskProcess", param); Logger.Info("出库任务完成,任务号:" + TaskNo + " 条码号:" + Barcode); string strValue = ""; string[] str = new string[3]; if (TaskType == "12" || TaskType == "14")//显示拣货信息. { str[0] = "1"; if (TaskType == "14") { str[0] = "2"; } while ((strValue = FormDialog.ShowDialog(str, dt)) != "") { break; } } } } } } catch (Exception ex) { Logger.Error("到达出库口,错误讯息:" + ex.Message); } } }
/// <summary> /// 盘点 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCheckScan_Click(object sender, EventArgs e) { object obj = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("StockPLC_01", "01_1_195")); if (obj == null || obj.ToString() == "0") { return; } string strTaskNo = obj.ToString().PadLeft(4, '0'); if (int.Parse(obj.ToString()) >= 9800 && int.Parse(obj.ToString()) < 9999) //盘点 { string[] str = new string[3]; str[0] = "6"; str[1] = ""; str[2] = ""; TaskDal dal = new TaskDal(); //更具任务号,获取TaskID及BILL_NO string[] strInfo = dal.GetTaskInfo(strTaskNo); DataTable dt = dal.TaskInfo(string.Format("TASK_ID='{0}'", strInfo[0])); DataTable dtProductInfo = dal.GetProductInfoByTaskID(strInfo[0]); //线程停止 string strValue = ""; while ((strValue = FormDialog.ShowDialog(str, dtProductInfo)) != "") { dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=2", strInfo[0]), "2"); string writeItem = "01_2_195_"; DataTable dtTask = dal.TaskInfo(string.Format("TASK_ID='{0}'", strInfo[0])); DataRow dr = dtTask.Rows[0]; SysStationDal sysdal = new SysStationDal(); DataTable dtstation = sysdal.GetSationInfo(dr["CELL_CODE"].ToString(), "11", "3"); if (strValue != "1") { CellDal celldal = new CellDal(); celldal.UpdateCellErrFlag(dr["CELL_CODE"].ToString(), "条码扫描不一致"); } int[] ServiceW = new int[3]; ServiceW[0] = int.Parse(strInfo[1]); //任务号 ServiceW[1] = int.Parse(dtstation.Rows[0]["STATION_NO"].ToString()); //目的地址 ServiceW[2] = 1; Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "1", ServiceW); //PLC写入任务 Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "3", 1); //PLC写入任务 dal.UpdateTaskDetailStation("195", dtstation.Rows[0]["STATION_NO"].ToString(), "1", string.Format("TASK_ID='{0}' AND ITEM_NO=3", strInfo[0])); //更新货位到达入库站台, dal.UpdateTaskDetailCrane(dtstation.Rows[0]["STATION_NO"].ToString(), dr["CELL_CODE"].ToString(), "0", dtstation.Rows[0]["CRANE_NO"].ToString(), string.Format("TASK_ID='{0}' AND ITEM_NO=4", strInfo[0])); //更新调度堆垛机的其实位置及目标地址。 break; } } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } string PalletOut = obj.ToString(); if (PalletOut.Equals("True") || PalletOut.Equals("1")) { //如果工作模式是储存且不是托盘组入库,需产生一个托盘组出库任务 object workmode = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("ConveyorPLC2", "GetWorkMode")); Logger.Info("触发出托盘"); //if (Program.mainForm.WorkMode == 1) if (workmode.ToString() == "1") { string CellCode = ""; Logger.Info("开始产生空托盘出库"); DataParameter[] param = new DataParameter[] { new DataParameter("@CraneNo", "01"), new DataParameter("@ProductCode", "0001"), new DataParameter("@CellCode", CellCode), new DataParameter("@Valid", 2), new DataParameter("@WorkMode", Program.mainForm.WorkMode), new DataParameter("@WorkModeId", Program.mainForm.WorkModeId) }; bll.FillDataTable("WCS.Sp_CreateOutTask", param); Logger.Info("空托盘出库已产生"); } } } catch (System.Data.SqlClient.SqlException e) { //如果是存储过程名称是PROC_NAME,而且State是数据库中设置的一个值 如:66 //则该异常就是我们需要特殊处理的一个异常 if (e.Procedure.Equals("Sp_CreateInTask") && e.State == 1) { Logger.Error("Dispatching.Process.StockOutPalletProcess:" + e.Message); } else if (e.Procedure.Equals("Sp_CreateOutTask") && e.State == 1) { Logger.Error("Dispatching.Process.StockOutPalletProcess:" + e.Message); } } catch (Exception e) { Logger.Error("Dispatching.Process.StockOutPalletProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { bool blnChange = false; string strState = ""; string strCarNo = ""; string strReadItem = ""; string strWriteItem = ""; switch (stateItem.ItemName) { case "CarOutRequest": case "CarInRequest": OrderIndex++; blnChange = false; InsertdtCar((DataTable)stateItem.State); break; case "02_1_C01_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "01"; strReadItem = "02_1_C01"; strWriteItem = "02_2_C01"; break; case "02_1_C02_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "02"; strReadItem = "02_1_C02"; strWriteItem = "02_2_C02"; break; case "02_1_C03_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "03"; strReadItem = "02_1_C03"; strWriteItem = "02_2_C03"; break; case "02_1_C04_3": strState = ObjectUtil.GetObject(stateItem.State).ToString(); blnChange = true; strCarNo = "04"; strWriteItem = "02_2_C04"; strReadItem = "02_1_C04"; break; } if (!blnChange) { return; } CarStateChange(strState, strCarNo, strReadItem, strWriteItem); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tmWorker(object sender, ElapsedEventArgs e) { lock (this) { try { if (!blRun) { tmWorkTimer.Stop(); return; } tmWorkTimer.Stop(); DataTable dtCar = bll.FillDataTable("CMD.SelectDevice", new DataParameter[] { new DataParameter("{0}", "Flag=2") }); for (int i = 0; i < dtCar.Rows.Count; i++) { string DeviceNo = dtCar.Rows[i]["DeviceNo2"].ToString(); if (dtCar.Rows[i]["State"].ToString() != "1") { continue; } string serviceName = dtCar.Rows[i]["ServiceName"].ToString(); object objFlag = ObjectUtil.GetObject(WriteToService(serviceName, "WriteFinished")); if (int.Parse(objFlag.ToString()) == 1) { continue; } object[] CarStatus = ObjectUtil.GetObjects(WriteToService(serviceName, "CarStatus" + DeviceNo)); bool IsSent = false; if (Check_Car_Status_IsOk(DeviceNo, serviceName)) { IsSent = FindInTask(dtCar, DeviceNo, CarStatus); if (IsSent) { continue; } IsSent = FindOutTask(dtCar, DeviceNo, CarStatus); if (IsSent) { continue; } } } } catch (Exception ex) { Logger.Error("ElevatorProcess中tmWorker出现异常:" + ex.Message); } finally { tmWorkTimer.Start(); } } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 一楼入库烟包处理 */ try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") { return; } string strBadFlag = ""; //其他情况电控报警处理 switch (obj.ToString()) { case "1": strBadFlag = "左边条码无法读取"; break; case "2": strBadFlag = "右边条码无法读取"; break; case "3": strBadFlag = "两边条码无法读取"; break; case "4": strBadFlag = "两边条码不一致"; break; } string strBarCode; string[] strMessage = new string[3]; strMessage[0] = "3"; strMessage[1] = strBadFlag; while ((strBarCode = FormDialog.ShowDialog(strMessage, null)) != "") { byte[] b = Common.ConvertStringChar.stringToByte(strBarCode, 80); WriteToService("StockPLC_01", "01_2_124_1", b); //写入条码 WriteToService("StockPLC_01", "01_2_124_2", 1); //写入标识。 break; } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_01.NotReadBarcodeProcess:" + e.Message); } }
private void toolStripButton_Scan_Click(object sender, EventArgs e) { object o = ObjectUtil.GetObject(context.ProcessDispatcher.WriteToService("CarPLC1", "AlarmCode")); if (o.ToString() == "6") { App.View.Task.frmInStockTask f = new App.View.Task.frmInStockTask(); ((View.BaseForm)f).Context = context; f.ShowDialog(); } }
private void ToolStripMenuItemReassign_Click(object sender, EventArgs e) { if (this.dgvMain.CurrentCell != null) { string serviceName = "CranePLC1"; int[] cellAddr = new int[9]; cellAddr[0] = 0; cellAddr[1] = 1; Context.ProcessDispatcher.WriteToService(serviceName, "TaskAddress", cellAddr); Context.ProcessDispatcher.WriteToService(serviceName, "WriteFinished", 0); DataRow dr = ((DataRowView)dgvMain.Rows[this.dgvMain.CurrentCell.RowIndex].DataBoundItem).Row; string TaskNo = dr["TaskNo"].ToString(); string fromStation = dr["FromStation"].ToString(); string toStation = dr["ToStation"].ToString(); string CraneLoad = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService(serviceName, "CraneLoad")).ToString(); cellAddr[0] = 0; cellAddr[1] = 0; cellAddr[2] = 0; int Flag = 1; if (CraneLoad.Equals("0") || CraneLoad.Equals("False")) { cellAddr[3] = byte.Parse(fromStation.Substring(3, 3)); cellAddr[4] = byte.Parse(fromStation.Substring(6, 3)); cellAddr[5] = byte.Parse(fromStation.Substring(0, 3)); } else { cellAddr[3] = 1; cellAddr[4] = 1; cellAddr[5] = 1; Flag = 3; } cellAddr[6] = byte.Parse(toStation.Substring(3, 3)); cellAddr[7] = byte.Parse(toStation.Substring(6, 3)); cellAddr[8] = byte.Parse(toStation.Substring(0, 3)); //sbyte[] taskNo = new sbyte[10]; //Util.ConvertStringChar.stringToBytes(TaskNo, 10).CopyTo(taskNo, 0); Context.ProcessDispatcher.WriteToService(serviceName, "TaskAddress", cellAddr); Context.ProcessDispatcher.WriteToService(serviceName, "TaskNo", TaskNo); if (Context.ProcessDispatcher.WriteToService(serviceName, "WriteFinished", Flag)) { Logger.Info(TaskNo + "重下堆垛机任务!"); } } }
/// <summary> /// 条码故障 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnBarcodeScan_Click(object sender, EventArgs e) { try { object obj = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("StockPLC_01", "01_1_124")); if (obj == null || obj.ToString() == "0") { return; } string strBadFlag = ""; switch (obj.ToString()) { case "1": strBadFlag = "左边条码无法读取"; break; case "2": strBadFlag = "右边条码无法读取"; break; case "3": strBadFlag = "两边条码无法读取"; break; case "4": strBadFlag = "两边条码不一致"; break; } string strBarCode; string[] strMessage = new string[3]; strMessage[0] = "3"; strMessage[1] = strBadFlag; while ((strBarCode = FormDialog.ShowDialog(strMessage, null)) != "") { byte[] b = THOK.XC.Process.Common.ConvertStringChar.stringToByte(strBarCode, 40); Context.ProcessDispatcher.WriteToService("StockPLC_01", "01_2_124_1", b); //写入条码 Context.ProcessDispatcher.WriteToService("StockPLC_01", "01_2_124_2", 1); //写入标识。 Context.Processes["NotReadBarcodeProcess"].Resume(); break; } } catch (Exception ex) { Logger.Error("THOK.XC.Process.Process_01.NotReadBarcodeProcess:" + ex.Message); } }
/* 处理事项: * 倒库烟包 122 */ protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { try { object sta = ObjectUtil.GetObject(stateItem.State); if (sta == null || sta.ToString() == "0") { return; } string[] str = new string[3]; str[0] = "4"; str[1] = ""; str[2] = ""; TaskDal dal = new TaskDal(); //更具任务号,获取TaskID及BILL_NO string[] strInfo = dal.GetTaskInfo(sta.ToString().PadLeft(4, '0')); DataTable dt = dal.TaskInfo(string.Format("TASK_ID='{0}'", strInfo[0])); DataTable dtProductInfo = dal.GetProductInfoByTaskID(strInfo[0]); //线程停止 while (FormDialog.ShowDialog(str, dtProductInfo) != "") { dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=2", strInfo[0]), "2"); dal.UpdateTaskState(strInfo[0], "2"); BillDal billdal = new BillDal(); billdal.UpdateInBillMasterFinished(strInfo[1], "1"); string writeItem = "01_2_122_"; int[] ServiceW = new int[3]; ServiceW[0] = int.Parse(strInfo[1]); //任务号 ServiceW[1] = 131; //目的地址 ServiceW[2] = 4; WriteToService("StockPLC_01", writeItem + "1", ServiceW); //PLC写入任务 WriteToService("StockPLC_01", writeItem + "2", 1); //PLC写入任务 break; } ;//线程继续。 } catch (Exception ex) { Logger.Error("THOK.XC.Process.Process_01.MoveOutToStationProcess:" + ex.Message); } }
/// <summary> /// 抽检,补料托盘入库; /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSpotCheck_Click(object sender, EventArgs e) { object obj = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService("StockPLC_01", "01_1_195")); if (obj == null || obj.ToString() == "0") { return; } string strTaskNo = obj.ToString().PadLeft(4, '0'); string[] str = new string[3]; if (int.Parse(strTaskNo) >= 9000 && int.Parse(strTaskNo) <= 9299) //补料 { str[0] = "1"; } else if (int.Parse(strTaskNo) >= 9300 && int.Parse(strTaskNo) <= 9499)//抽检 { str[0] = "2"; } str[1] = ""; str[2] = ""; TaskDal dal = new TaskDal(); //更具任务号,获取TaskID及BILL_NO string[] strInfo = dal.GetTaskInfo(strTaskNo); DataTable dt = dal.TaskInfo(string.Format("TASK_ID='{0}'", strInfo[0])); DataTable dtProductInfo = dal.GetProductInfoByTaskID(strInfo[0]); //线程停止 string strValue = ""; while ((strValue = FormDialog.ShowDialog(str, dtProductInfo)) != "") { dal.UpdateTaskDetailState(string.Format("TASK_ID='{0}' AND ITEM_NO=2", strInfo[0]), "2"); string writeItem = "01_2_195_"; if (str[0] == "1" || str[0] == "2") //抽检,补料 { dal.UpdateTaskState(strInfo[0], "2"); BillDal billdal = new BillDal(); billdal.UpdateInBillMasterFinished(strInfo[1], "1"); Context.ProcessDispatcher.WriteToService("StockPLC_01", writeItem + "1", 1); //PLC写入任务 } break; } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 二楼出库条码校验 * */ try { object obj = ObjectUtil.GetObjects(stateItem.State); if (obj == null || obj.ToString() == "0") { return; } string TaskNo = obj.ToString().PadLeft(4, '0'); TaskDal dal = new TaskDal(); string[] strValue = dal.GetTaskInfo(TaskNo); string WriteItem = ""; string ReadItem = ""; switch (stateItem.ItemName) { case "02_1_340_1": WriteItem = "02_2_340"; ReadItem = "02_1_340_"; break; case "02_1_360_1": WriteItem = "02_2_360"; ReadItem = "02_1_360_"; break; } object objCheck = ObjectUtil.GetObject(WriteToService("StockPLC_02", ReadItem + "2")); if (objCheck.ToString() == "0") { string BarCode = Common.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService("StockPLC_02", ReadItem + "3"))); dal.UpdateTaskCheckBarCode(strValue[0], BarCode); } WriteToService("StockPLC_02", WriteItem + "_3", 1); } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_02.CheckProcess,原因:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { /* 处理事项: * 空托盘组出库申请, * 空托盘组到达指定出库位置。 * */ try { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null || obj.ToString() == "0") { return; } string TARGET_CODE = ""; switch (stateItem.ItemName) { case "01_1_158_1": TARGET_CODE = "158"; break; case "01_1_200_1": TARGET_CODE = "200"; break; default: break; } PalletBillDal dal = new PalletBillDal(); string Taskid = dal.CreatePalletOutBillTask(TARGET_CODE); TaskDal task = new TaskDal(); DataTable dt = task.CraneTaskOut(string.Format("TASK_ID='{0}'", Taskid)); if (dt.Rows.Count > 0) { WriteToProcess("CraneProcess", "CraneInRequest", dt); } } catch (Exception e) { Logger.Error("THOK.XC.Process.Process_01.PalletOutRequestProcess:" + e.Message); } }
protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher) { object obj = ObjectUtil.GetObject(stateItem.State); if (obj == null) { return; } if (obj.ToString().Trim().Length <= 0) { return; } string PalletBarcode = obj.ToString(); string StationNo = ""; int state = 1; switch (stateItem.ItemName) { case "ToInStation1": StationNo = "AX-" + stateItem.Name.Substring(5, 2) + "-00"; break; case "ToInStation2": StationNo = "AX-" + stateItem.Name.Substring(5, 2) + "-01"; state = 2; break; } try { BLL.BLLBase bll = new BLL.BLLBase(); DataParameter[] param = new DataParameter[] { new DataParameter("@PalletBarcode", PalletBarcode), new DataParameter("@AisleNo", stateItem.Name.Substring(5, 2)), new DataParameter("@State", state) }; bll.ExecNonQueryTran("WCS.UpdateTaskStateByBarcode", param); Logger.Info("托盘/箱号:" + PalletBarcode + "到达入库站台:" + StationNo); } catch (Exception ex) { Logger.Error("InStockToStationProcess出错,原因:" + ex.Message); } }