/// <summary> /// blnValue=true 正常发送ARQ报文,如果目标地址有货,报警,并要重新指定新货位,blnValue=false /// </summary> /// <param name="dr"></param> /// <param name="blnValue"></param> private void SendTelegramARQ(DataRow dr,bool blnValue) { THOK.CRANE.TelegramData tgd = new CRANE.TelegramData(); tgd.CraneNo = dr["CRANE_NO"].ToString(); tgd.AssignmenID = dr["ASSIGNMENT_ID"].ToString(); if (!blnValue) { tgd.AssignmentType = "DE"; } string TaskType = dr["TASK_TYPE"].ToString(); string ItemNo = dr["ITEM_NO"].ToString(); if (TaskType.Substring(1, 1) == "4" && ItemNo == "1" && dr["CRANE_NO"].ToString() == dr["NEW_CRANE_NO"].ToString()) { tgd.StartPosition = dr["CRANESTATION"].ToString(); tgd.DestinationPosition = dr["NEW_TO_STATION"].ToString(); } else { if (TaskType.Substring(1, 1) == "1" || (TaskType.Substring(1, 1) == "4" && ItemNo == "3") || TaskType.Substring(1, 1) == "3" && ItemNo == "4") //入库 { tgd.StartPosition = dr["CRANESTATION"].ToString(); tgd.DestinationPosition = dr["CELLSTATION"].ToString(); } else //出库 { tgd.StartPosition = dr["CELLSTATION"].ToString(); tgd.DestinationPosition = dr["CRANESTATION"].ToString(); } } THOK.CRANE.TelegramFraming tf = new CRANE.TelegramFraming(); string QuenceNo = GetNextSQuenceNo(); string str = tf.DataFraming("1" + QuenceNo, tgd, tf.TelegramARQ); WriteToService("Crane", "ARQ", str); DataRow[] drs = dtCrane.Select(string.Format("TASK_ID='{0}'", dr["TASK_ID"])); if (drs.Length > 0) { drs[0].BeginEdit(); drs[0]["SQUENCE_NO"] = QuenceNo; drs[0].EndEdit(); dtCrane.AcceptChanges(); dr.BeginEdit(); dr["SQUENCE_NO"] = QuenceNo; dr.EndEdit(); } lock (dCraneState) { dCraneState[dr["CRANE_NO"].ToString()] = "1"; } //更新发送报文。 TaskDal dal = new TaskDal(); dal.UpdateCraneQuenceNo(dr["TASK_ID"].ToString(), dr["SQUENCE_NO"].ToString(), ItemNo); //更新堆垛机序列号。并更新为1 }