From 839cd7bba832638a5ba1fb2d3e4e0619e33651e3 Mon Sep 17 00:00:00 2001 From: zxx <Zxx@HanInfo> Date: 星期一, 19 五月 2025 17:33:28 +0800 Subject: [PATCH] 主动绑定接口 rgv安全交互 --- HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs | 359 +++++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 262 insertions(+), 97 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs index b36f0fd..8777d39 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs @@ -20,6 +20,9 @@ using Opc.Ua; using System.Collections; using System.Xml.Linq; +using System.Threading; +using static HH.WCS.JuShi.dispatch.NDC; +using static HH.WCS.JuShi.util.Settings; namespace HH.WCS.JuShi.process { @@ -99,17 +102,121 @@ /// <param name="state"></param> internal static void OperateStatus(WCSTask mst, int state) { - if (state == 4) + if (state == 4)//鍙栬揣瀹屾垚 { CacheBitUpdate(mst, true); + //鎷嗘墭鏈哄畨鍏ㄤ氦浜�+ ctjSafe(mst); + } if (state == 6)//鍗歌揣瀹屾垚 { CacheBitUpdate(mst, false); + //rgv瀹夊叏浜や簰 + rgvSafe(mst); + //鎷嗘墭鏈哄畨鍏ㄤ氦浜�+ ctjSafe(mst); + } if (state == 7) { CacheBitCancelUpdate(mst); + } + } + //rgv瀹夊叏浜や簰 + private static void rgvSafe(WCSTask mst) + { + //rgv瀹夊叏浜や簰 鏍规嵁缁堢偣璐т綅鎵惧埌鏄摢涓猺gv + var reservoir = Settings.ReservoirAreas.Where(a => a.areaName == "RGV搴撳尯").FirstOrDefault(); + if (mst.S_END_AREA.Equals(reservoir.areaCode)) + { + var safeInteractions = Settings.SafeInteractions.Where(a => a.location == mst.S_END_LOC).FirstOrDefault(); + + var safelists = JsonConvert.DeserializeObject<List<SafeInteraction>>(DeviceProcess.rgvSafeInteraction); + + if (safelists.Any()) + { + var safelist = safelists.Where(s => s.ip == safeInteractions.ip).First(); + LogHelper.Info($"RGV瀹夊叏浜や簰鍙傛暟{safelist}"); + //涓嶇瓑浜�2鍗歌揣瀹屾垚纭淇″彿 灏辨帴鐫�彂 + if (safelist.data != "2") + { + string datastr = "3F00102030400D0A"; + // 杩斿洖淇″彿 + switch (safeInteractions.pointCode) + { + case "RGV1": + datastr = datastr.Replace("10", "11"); + break; + case "RGV2": + datastr = datastr.Replace("20", "21"); + break; + case "RGV3": + datastr = datastr.Replace("30", "31"); + break; + case "RGV4": + datastr = datastr.Replace("40", "41"); + break; + } + LogHelper.Info($"RGV瀹夊叏浜や簰鍙戦�淇″彿{safelist.ip},{datastr}"); + PlcHelper.SendHex(safelist.ip, datastr); + //浼戠湢3绉掑啀璋�+ Thread.Sleep(3000); + rgvSafe(mst); + } + else + { + LogHelper.Info($"RGV瀹夊叏浜や簰鍙戦�淇″彿{safelist.ip},3F00102030400D0A"); + //鏃犵姸鎬佷俊鍙�+ PlcHelper.SendHex(safelist.ip, "3F00102030400D0A"); + + } + } + } + } + //鎷嗘墭鏈哄畨鍏ㄤ氦浜�+ private static void ctjSafe(WCSTask mst) + { + PlcDeviceTable plcDeviceTable = null; + //鎵惧埌绾夸綋 鏍规嵁绾夸綋鎵惧唴瀛橀噷鐨勭姸鎬�+ var rkreservoirs = Settings.ConveyorLinesInfos.Where(s => s.location == mst.S_END_LOC).FirstOrDefault(); + var ckreservoirs = Settings.ConveyorLinesInfos.Where(s => s.location == mst.S_START_LOC).FirstOrDefault(); + if (rkreservoirs != null) + { + plcDeviceTable = S7Helper.plcDeviceTables.Find(a => a.DeviceNo == rkreservoirs.code); + } + else if (ckreservoirs != null) + { + plcDeviceTable = S7Helper.plcDeviceTables.Find(a => a.DeviceNo == ckreservoirs.code); + } + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏ュ弬鏁皗plcDeviceTable}"); + if (plcDeviceTable != null) + { + //s7鍐欏叆 + double addr = 0; //鍋忕Щ閲�+ string deviceNo = null;//鎷嗘墭鏈哄彿 + if (plcDeviceTable.DeviceNo == 1003) + { + addr = 90.1; + deviceNo = "1"; + } + else if (plcDeviceTable.DeviceNo == 1006) + { + addr = 180.1; + deviceNo = "2"; + } + else if (plcDeviceTable.DeviceNo == 1001) + { + addr = 30.0; + deviceNo = "1"; + } + else if (plcDeviceTable.DeviceNo == 1004) + { + addr = 120.0; + deviceNo = "2"; + } + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏deviceNo}锛寋addr}"); + S7Helper.WriteDouble(deviceNo, 9, addr, 1); } } @@ -316,70 +423,45 @@ string parmeD = "}"; string parme = parmeS + src + dst + parmeD; int res = 0; - if (mst.S_TYPE == "鍛煎彨绌烘墭" || mst.S_TYPE == "鎸夐挳鐩掕皟鐢ㄧ┖鎵� || mst.S_TYPE == "鎷嗘墭") - { - PlcDeviceTable plcDeviceTable = null; - //鎵惧埌绾夸綋 鏍规嵁绾夸綋鎵惧唴瀛橀噷鐨勭姸鎬�- var reservoirs1 = Settings.ConveyorLinesInfos.Where(s => s.location == startLoc.S_CODE).FirstOrDefault(); - plcDeviceTable = S7Helper.plcDeviceTables.Find(a => a.DeviceNo == reservoirs1.code); - if (plcDeviceTable != null) - { - if (mst.S_TYPE == "鍛煎彨绌烘墭" || mst.S_TYPE == "鎸夐挳鐩掕皟鐢ㄧ┖鎵�) - { - LogHelper.Info($"鍛煎彨绌烘墭鐘舵�鍙傛暟{JsonConvert.SerializeObject(plcDeviceTable)}", "浠诲姟"); - //0-鑴辨満鐘舵�锛�-寰呮満鐘舵�锛�-杩愯涓� 寰呮満涓旀湁鎵樼洏涓旇姹傚彇妗嗘墠璧�- if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 1 && plcDeviceTable.requestTake) - { - LogHelper.Info($"鎺ㄩ�浠诲姟鍙傛暟{parme}", "浠诲姟"); - res = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, parme); - } - } - else if (mst.S_TYPE == "鎷嗘墭") - { - LogHelper.Info($"鎷嗘墭鐘舵�鍙傛暟{JsonConvert.SerializeObject(plcDeviceTable)}", "浠诲姟"); - //0-鑴辨満鐘舵�锛�-寰呮満鐘舵�锛�-杩愯涓� 寰呮満涓旀棤鎵樼洏涓斿厑璁告斁妗嗘墠璧�- if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 0 && plcDeviceTable.requestPut) - { - LogHelper.Info($"鎺ㄩ�浠诲姟鍙傛暟{parme}", "浠诲姟"); - res = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, parme); - } - } - //浠诲姟瀹屾垚鍐欏叆s7 - if (res > 0) - { - //s7鍐欏叆 agv鍙栨瀹屾垚 - double addr = 0; //鍋忕Щ閲�- string deviceNo = null;//鎷嗘墭鏈哄彿 - if (plcDeviceTable.DeviceNo == 1003) - { - addr = 90.1; - deviceNo = "1"; - } - else if (plcDeviceTable.DeviceNo == 1006) - { - addr = 180.1; - deviceNo = "2"; - } - else if (plcDeviceTable.DeviceNo == 1001) - { - addr = 30.0; - deviceNo = "1"; - } - else if (plcDeviceTable.DeviceNo == 1004) - { - addr = 120.0; - deviceNo = "2"; - } - S7Helper.WriteDouble(deviceNo, 9, addr, 1); - - } - } - } - else - { - LogHelper.Info($"鎺ㄩ�浠诲姟鍙傛暟{parme}", "浠诲姟"); - res = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, parme); - } + LogHelper.Info($"鎺ㄩ�浠诲姟鍙傛暟{parme}", "浠诲姟"); + res = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, parme); + #region + //if (mst.S_TYPE == "鍛煎彨绌烘墭" || mst.S_TYPE == "鎸夐挳鐩掕皟鐢ㄧ┖鎵� || mst.S_TYPE == "鎷嗘墭") + //{ + // PlcDeviceTable plcDeviceTable = null; + // //鎵惧埌绾夸綋 鏍规嵁绾夸綋鎵惧唴瀛橀噷鐨勭姸鎬�+ // var reservoirs1 = Settings.ConveyorLinesInfos.Where(s => s.location == startLoc.S_CODE).FirstOrDefault(); + // plcDeviceTable = S7Helper.plcDeviceTables.Find(a => a.DeviceNo == reservoirs1.code); + // if (plcDeviceTable != null) + // { + // if (mst.S_TYPE == "鍛煎彨绌烘墭" || mst.S_TYPE == "鎸夐挳鐩掕皟鐢ㄧ┖鎵�) + // { + // LogHelper.Info($"鍛煎彨绌烘墭鐘舵�鍙傛暟{JsonConvert.SerializeObject(plcDeviceTable)}", "浠诲姟"); + // //0-鑴辨満鐘舵�锛�-寰呮満鐘舵�锛�-杩愯涓� 寰呮満涓旀湁鎵樼洏涓旇姹傚彇妗嗘墠璧�+ // if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 1 && plcDeviceTable.requestTake) + // { + // LogHelper.Info($"鎺ㄩ�浠诲姟鍙傛暟{parme}", "浠诲姟"); + // res = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, parme); + // } + // } + // else if (mst.S_TYPE == "鎷嗘墭") + // { + // LogHelper.Info($"鎷嗘墭鐘舵�鍙傛暟{JsonConvert.SerializeObject(plcDeviceTable)}", "浠诲姟"); + // //0-鑴辨満鐘舵�锛�-寰呮満鐘舵�锛�-杩愯涓� 寰呮満涓旀棤鎵樼洏涓斿厑璁告斁妗嗘墠璧�+ // if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 0 && plcDeviceTable.requestPut) + // { + // LogHelper.Info($"鎺ㄩ�浠诲姟鍙傛暟{parme}", "浠诲姟"); + // res = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, parme); + // } + // } + // } + //} + //else + //{ + // LogHelper.Info($"鎺ㄩ�浠诲姟鍙傛暟{parme}", "浠诲姟"); + // res = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, parme); + //} + #endregion if (res > 0) { //鏇存柊浠诲姟鐘舵� @@ -713,7 +795,7 @@ { //鏌ヨ杩欎釜搴撳尯鐨勭┖鎵樼洏涓庢弧鎵樼洏 var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == area).OrderByDescending(a => a.N_ROW).ToList(); - LogHelper.Info($"鏌ヨ杩欎釜搴撳尯鐨勭┖鎵樼洏涓庢弧鎵樼洏锛歿JsonConvert.SerializeObject(list)}"); + //LogHelper.Info($"鏌ヨ杩欎釜搴撳尯鐨勭┖鎵樼洏涓庢弧鎵樼洏锛歿JsonConvert.SerializeObject(list)}"); if (list.Count > 0) { List<string> loca = new List<string>(); @@ -1263,12 +1345,11 @@ try { var db = new SqlHelper<object>().GetInstance(); - //涓夎〃鑱旀煡鏌ュ嚭鏈夎鐗╂枡鐨勮揣浣嶇紪鍙� + //涓よ〃鑱旀煡鏌ュ嚭鏈夎鐗╂枡鐨勮揣浣嶇紪鍙� 锛堢幇鍦烘病鏈夌墿鏂欒〃锛� var locCntrs = db.Queryable<LocCntrRel>().LeftJoin<CntrItemDetail>((p, m) => p.S_CNTR_CODE == m.S_CNTR_CODE) - .LeftJoin<TN_Material>((p, m, s) => m.S_ITEM_CODE == s.S_ITEM_CODE) - .Where((p, m, s) => s.S_ITEM_CODE == itemCode) - .OrderBy((p, m, s) => p.T_CREATE) //鎸夊垱寤烘椂闂撮『搴�- .Select((p, m, s) => p.S_LOC_CODE) // 閫夋嫨鎵樼洏鐗╂枡琛ㄧ殑鏁版嵁 + .Where((p, m) => m.S_ITEM_CODE == itemCode) + .OrderBy((p, m) => p.T_CREATE) //鎸夊垱寤烘椂闂撮『搴�+ .Select((p, m) => p.S_LOC_CODE) // 閫夋嫨鎵樼洏鐗╂枡琛ㄧ殑鏁版嵁 .ToList(); LogHelper.Info($"鏈夌墿鏂檣itemCode}鐨勮揣浣嶇紪鍙穥JsonConvert.SerializeObject(locCntrs)}"); //鎵惧父瑙勯�妫�尯鍐呭惈鏈夋煡鍑虹墿鏂欒揣浣嶇殑璐т綅 @@ -1438,7 +1519,7 @@ //鏍规嵁鐗╂枡鎵炬煇搴撳尯鐨勮揣浣� var cgreservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "閫佹缂撳瓨鍖�).FirstOrDefault(); var startloc = getLocByMaterial(model.S_ITEM_CODE, cgreservoirs.areaCode); - if (startloc==null) + if (startloc == null) { return new Results { Code = "1", Message = $"鏈壘鍒板寘鍚墿鏂檣model.S_ITEM_CODE}鐨勮揣浣�, Data = null }; } @@ -1467,7 +1548,38 @@ throw; } } - + /// <summary> + /// 涓诲姩鐗╂枡缁戝畾 + /// </summary> + /// <param name="model.S_ITEM_CODE">鐗╂枡缂栫爜</param> + /// <param name="model.BIND_LOC">缁戝畾璐т綅</param> + /// <returns></returns> + internal static Results bindMaterial(GetSubmitCheck model) + { + var result = new Results() { Code = "0", Message = "鐗╂枡缁戝畾鎴愬姛锛�, Data = null }; + var db = new SqlHelper<Location>().GetInstance(); + try + { + string cntrStr = ContainerHelper.GenerateCntrNo(); + var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == model.BIND_LOC).First(); + if (locCntrRel != null) + { + cntrStr = locCntrRel.S_CNTR_CODE; + } + var res = ContainerHelper.BindLocCntrs(model.BIND_LOC, cntrStr, model.S_ITEM_CODE, "甯冨嵎"); + if (!res) + { + return new Results { Code = "1", Message = $"鐗╂枡{model.S_ITEM_CODE}璐т綅{model.BIND_LOC}缁戝畾澶辫触", Data = null }; + } + return result; + } + catch (Exception ex) + { + Console.WriteLine("bindMaterial:" + ex.Message + ex.StackTrace); + LogHelper.Error("bindMaterial:" + ex.Message, ex); + throw; + } + } /// <summary> /// 鎸夐挳鐩掕皟鐢ㄤ笅绾� /// </summary> @@ -1570,40 +1682,93 @@ { //0鍏佽杩涘叆 1涓嶅厑璁歌繘鍏� var result = new safeResult() { code = "1", msg = "success" }; - var db = new SqlHelper<Location>().GetInstance(); try { - var reservoirs = Settings.SafeDoors.Where(s => s.pointCode == model.STATION_NAME).FirstOrDefault();//y0-0000 y1-0001 on-FF00 off-0000 - TcpClient tcpClient = new TcpClient(); - //璇锋眰杩涘叆 - if (model.APPLY_CODE.Equals("1") || model.APPLY_CODE.Equals("5")) + var reservoirs = Settings.SafeInteractions.Where(s => s.pointCode == model.STATION_NAME).FirstOrDefault();//y0-0000 y1-0001 on-FF00 off-0000 + var rgvSafeInteraction = DeviceProcess.rgvSafeInteraction; + //RGV + if (reservoirs.type.Equals("RGV")) { - //鍙戦�淇″彿鍐欒姹傚紑闂� - var str = tcpClient.WriteSingleRegisterRtu("01050000FF008C3A", reservoirs.ip, int.Parse(reservoirs.port)); - //鍙戦�淇″彿璇婚棬鐘舵� - var x0bool = tcpClient.ReadInputRegistersRtu("010200000001B9CA", reservoirs.ip, int.Parse(reservoirs.port)); - //濡傛灉寮�棬鍒颁綅 - if (x0bool) + LogHelper.Info($"RGV瀹夊叏浜や簰 璇锋眰鐐逛綅锛歿model.STATION_NAME}璇锋眰鐮侊細{model.APPLY_CODE}"); + //鍗歌揣璇锋眰杩涘叆 + if (model.APPLY_CODE.Equals("5")) { - return new safeResult() { code = "0", msg = "success" }; + //鏍规嵁ip璇荤姸鎬�+ if (rgvSafeInteraction != null) + { + LogHelper.Info($"RGV瀹夊叏浜や簰鍙傛暟{JsonConvert.SerializeObject(rgvSafeInteraction)}"); + var safelist = JsonConvert.DeserializeObject<List<SafeInteraction>>(rgvSafeInteraction); + if (safelist.Any()) + { + var safedata = safelist.Where(s => s.ip == reservoirs.ip).First(); + //1鍏佽鍗歌揣 2鍗歌揣瀹屾垚纭 + if (safedata.data == "1") + { + LogHelper.Info($"RGV瀹夊叏浜や簰 鍏佽鍗歌揣"); + return new safeResult() { code = "0", msg = "success" }; + } + } + } } } - //璇锋眰绂诲紑 - else if (model.APPLY_CODE.Equals("4") || model.APPLY_CODE.Equals("8")) + //鎷嗘墭鏈�+ else if (reservoirs.type.Equals("CTJ")) { - //鍙戦�淇″彿鍐欒姹傚叧闂�- var str = tcpClient.WriteSingleRegisterRtu("010500000000CDCA", reservoirs.ip, int.Parse(reservoirs.port)); - var str2 = tcpClient.WriteSingleRegisterRtu("01050001FF00DDFA", reservoirs.ip, int.Parse(reservoirs.port)); - //鍙戦�淇″彿璇婚棬鐘舵� - var x0bool = tcpClient.ReadInputRegistersRtu("010200010001E80A", reservoirs.ip, int.Parse(reservoirs.port)); - //濡傛灉闂ㄥ凡鍏�- if (x0bool) + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜� 璇锋眰鐐逛綅锛歿model.STATION_NAME}璇锋眰鐮侊細{model.APPLY_CODE}"); + //鎵惧埌绾夸綋 鏍规嵁绾夸綋鎵惧唴瀛橀噷鐨勭姸鎬�+ var reservoirs1 = Settings.ConveyorLinesInfos.Where(s => s.location == model.STATION_NAME).FirstOrDefault(); + var plcDeviceTable = S7Helper.plcDeviceTables.Find(a => a.DeviceNo == reservoirs1.code); + if (plcDeviceTable != null) { - return new safeResult() { code = "0", msg = "success" }; - } + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑弬鏁皗JsonConvert.SerializeObject(plcDeviceTable)}"); + if (model.APPLY_CODE.Equals("1")) + { + //0-鑴辨満鐘舵�锛�-寰呮満鐘舵�锛�-杩愯涓� 寰呮満涓旀湁鎵樼洏涓旇姹傚彇妗嗘墠璧�+ if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 1 && plcDeviceTable.requestTake) + { + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜�鍏佽鍙栨"); + return new safeResult() { code = "0", msg = "success" }; + } + } + else if (model.APPLY_CODE.Equals("5")) + { + //0-鑴辨満鐘舵�锛�-寰呮満鐘舵�锛�-杩愯涓� 寰呮満涓旀棤鎵樼洏涓斿厑璁告斁妗嗘墠璧�+ if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 0 && plcDeviceTable.requestPut) + { + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜�鍏佽鏀炬"); + return new safeResult() { code = "0", msg = "success" }; + } + } + } } - return null; + + //TcpClient tcpClient = new TcpClient(); + ////鍙戦�淇″彿鍐欒姹傚紑闂�+ //var str = tcpClient.WriteSingleRegisterRtu("01050000FF008C3A", reservoirs.ip, int.Parse(reservoirs.port)); + ////鍙戦�淇″彿璇婚棬鐘舵� + //var x0bool = tcpClient.ReadInputRegistersRtu("010200000001B9CA", reservoirs.ip, int.Parse(reservoirs.port)); + ////濡傛灉寮�棬鍒颁綅 + //if (x0bool) + //{ + // return new safeResult() { code = "0", msg = "success" }; + //} + ////璇锋眰绂诲紑 + //else if (model.APPLY_CODE.Equals("8")) + //{ + // ////鍙戦�淇″彿鍐欒姹傚叧闂�+ // //var str = tcpClient.WriteSingleRegisterRtu("010500000000CDCA", reservoirs.ip, int.Parse(reservoirs.port)); + // //var str2 = tcpClient.WriteSingleRegisterRtu("01050001FF00DDFA", reservoirs.ip, int.Parse(reservoirs.port)); + // ////鍙戦�淇″彿璇婚棬鐘舵� + // //var x0bool = tcpClient.ReadInputRegistersRtu("010200010001E80A", reservoirs.ip, int.Parse(reservoirs.port)); + // ////濡傛灉闂ㄥ凡鍏�+ // //if (x0bool) + // //{ + // // return new safeResult() { code = "0", msg = "success" }; + // //} + + //} + return result; } catch (Exception ex) { -- Gitblit v1.9.1