From cdf20a4525a2ff9f6fe2c1e9b69fa2854c5848fd Mon Sep 17 00:00:00 2001 From: zxx <Zxx@HanInfo> Date: 星期二, 27 五月 2025 17:17:03 +0800 Subject: [PATCH] 巨石 --- HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/ApiHelper.cs | 80 +- HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs | 170 +++++- HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/util/Settings.cs | 1 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/WmsController.cs | 53 ++ HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CameraMonitor.cs | 4 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/TN_ISUSING.cs | 15 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/PlcDeviceTable.cs | 86 ++- HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/wms/ContainerHelper.cs | 72 +- HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/MoboxController.cs | 8 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs | 102 ++-- HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/HH.WCS.JuShi.csproj | 1 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs | 438 +++++++++++------ HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/config/config.json | 34 + HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs | 280 ++++++++-- HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/Program.cs | 4 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/TcpServer.cs | 30 HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CntrItemDetail.cs | 10 17 files changed, 947 insertions(+), 441 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/HH.WCS.JuShi.csproj b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/HH.WCS.JuShi.csproj index f1a3a25..0b1d409 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/HH.WCS.JuShi.csproj +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/HH.WCS.JuShi.csproj @@ -217,6 +217,7 @@ <Compile Include="dispatch\HanAo.cs" /> <Compile Include="dispatch\NDC.cs" /> <Compile Include="core\Monitor.cs" /> + <Compile Include="models\TN_ISUSING.cs" /> <Compile Include="models\BaseModel.cs" /> <Compile Include="models\Area.cs" /> <Compile Include="models\SafeInteraction.cs" /> diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/Program.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/Program.cs index e559db8..262df7d 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/Program.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/Program.cs @@ -78,10 +78,12 @@ tasks.Add(GetTask(WCSCore.Dispatch)); //鎽勫儚澶寸洃娴嬫弧鐘舵�鎵樼洏 tasks.Add(GetTask(WMSCore.MonitorFullStatus)); + //鐩戞祴绌烘墭缂撳瓨鍖烘湁娌℃湁浜哄伐缁戝畾 + tasks.Add(GetTask(WMSCore.AutoSendMachine)); ////甯歌閫佹绌轰簡鑷姩浠庨�妫�紦瀛樺尯鍙栦竴涓�杩囧幓 tasks.Add(GetTask(WMSCore.AutoReplenish)); //S7閫氳 - //tasks.Add(GetTask(S7Helper.ReadSsxPLc)); + tasks.Add(GetTask(S7Helper.ReadSsxPLc)); Task.WaitAll(tasks.ToArray()); } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/ApiHelper.cs index 0938cb8..6b8cd21 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/ApiHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/ApiHelper.cs @@ -290,50 +290,50 @@ return result; } - internal static SimpleResult PalletSorting1(PalletSorting1 model) - { - var result = new SimpleResult(); - //鏍¢獙鍏ュ簱鍗曟暟閲忥紝涓嶅彲浠ヨ秴锛屾垚鍔熷悗鎻掑叆鎵樼洏鐗╂枡琛紝鏇存柊鍏ュ簱鍗曠疮璁℃暟閲�- //涔熷彲浠ョ洿鎺ua鏌ヨ鍏ュ簱鍗曟暟閲忥紝鍋氭牎楠�- //鍏堢敤bar_code璇诲瓨鍌ㄨ繃绋嬭幏鍙栦俊鎭�- var codeInfo = GetCodeInfo(model.bar_code, model.org); - var info = WMSHelper.GetPutawayOrderDetail(model.bar_code); - if (info != null) - { - if (info.F_QTY - info.F_ACC_B_QTY >= model.qty) - { - // 鎻掑叆鍒版墭鐩樻槑缁嗚〃 + //internal static SimpleResult PalletSorting1(PalletSorting1 model) + //{ + // var result = new SimpleResult(); + // //鏍¢獙鍏ュ簱鍗曟暟閲忥紝涓嶅彲浠ヨ秴锛屾垚鍔熷悗鎻掑叆鎵樼洏鐗╂枡琛紝鏇存柊鍏ュ簱鍗曠疮璁℃暟閲�+ // //涔熷彲浠ョ洿鎺ua鏌ヨ鍏ュ簱鍗曟暟閲忥紝鍋氭牎楠�+ // //鍏堢敤bar_code璇诲瓨鍌ㄨ繃绋嬭幏鍙栦俊鎭�+ // var codeInfo = GetCodeInfo(model.bar_code, model.org); + // var info = WMSHelper.GetPutawayOrderDetail(model.bar_code); + // if (info != null) + // { + // if (info.F_QTY - info.F_ACC_B_QTY >= model.qty) + // { + // // 鎻掑叆鍒版墭鐩樻槑缁嗚〃 - var cntr = ContainerHelper.GetCntr(model.cntr_code, true); - if (cntr != null) - { - ContainerHelper.BindCntrItem(cntr, model.bar_code, info.S_BATCH_NO, model.qty, info.S_BATCH_NO); - //鏇存柊鍏ュ簱鍗曠疮璁$粦瀹氭暟閲�- info.F_ACC_B_QTY += model.qty; - WMSHelper.UpdatePutawayOrderDetailQty(info); - } - else - { - result.resultCode = 2; - result.resultMsg = "鑾峰彇鎵樼洏淇℃伅澶辫触"; - } + // var cntr = ContainerHelper.GetCntr(model.cntr_code, true); + // if (cntr != null) + // { + // ContainerHelper.BindCntrItem(cntr, model.bar_code, info.S_BATCH_NO, model.qty, info.S_BATCH_NO); + // //鏇存柊鍏ュ簱鍗曠疮璁$粦瀹氭暟閲�+ // info.F_ACC_B_QTY += model.qty; + // WMSHelper.UpdatePutawayOrderDetailQty(info); + // } + // else + // { + // result.resultCode = 2; + // result.resultMsg = "鑾峰彇鎵樼洏淇℃伅澶辫触"; + // } - } - else - { - result.resultCode = 1; - result.resultMsg = "绱鐮佺洏鏁伴噺瓒呭嚭鍏ュ簱鍗曟暟閲�; - } - } - else - { - result.resultCode = 3; - result.resultMsg = $"鏈幏鍙栧埌璇ョ墿鏂檣model.bar_code}鐨勫叆搴撳崟鏄庣粏淇℃伅"; - } + // } + // else + // { + // result.resultCode = 1; + // result.resultMsg = "绱鐮佺洏鏁伴噺瓒呭嚭鍏ュ簱鍗曟暟閲�; + // } + // } + // else + // { + // result.resultCode = 3; + // result.resultMsg = $"鏈幏鍙栧埌璇ョ墿鏂檣model.bar_code}鐨勫叆搴撳崟鏄庣粏淇℃伅"; + // } - return result; - } + // return result; + //} public class AddTaskModel diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/MoboxController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/MoboxController.cs index 57351ce..5664667 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/MoboxController.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/MoboxController.cs @@ -83,10 +83,10 @@ /// </summary> /// <param name="model"></param> /// <returns></returns> - [HttpPost] - public SimpleResult PalletSorting1(PalletSorting1 model) { - return ApiHelper.PalletSorting1(model); - } + //[HttpPost] + //public SimpleResult PalletSorting1(PalletSorting1 model) { + // return ApiHelper.PalletSorting1(model); + //} /// <summary> /// pda鍏ュ簱鐢宠 /// </summary> diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/WmsController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/WmsController.cs index 8fbb40a..2be43e3 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/WmsController.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/api/WmsController.cs @@ -1,6 +1,7 @@ 锘� using HH.WCS.JuShi; using HH.WCS.JuShi.api; +using HH.WCS.JuShi.device; using HH.WCS.JuShi.process; using Newtonsoft.Json; using System.Collections.Generic; @@ -86,7 +87,19 @@ LogHelper.Info("BindMaterial 杩斿洖锛� + JsonConvert.SerializeObject(res), "WMSAPI"); return res; } - + /// <summary> + /// 鏁存帓缁戝畾 + /// </summary> + /// <param name="bondLoc"></param> + /// <returns></returns> + [HttpPost] + public Results MultBindMaterial(string bondLoc) + { + LogHelper.Info("MultBindMaterial 鍙傛暟锛� + JsonConvert.SerializeObject(bondLoc), "WMSAPI"); + var res = TaskProcess.multBindMaterial(bondLoc); + LogHelper.Info("MultBindMaterial 杩斿洖锛� + JsonConvert.SerializeObject(res), "WMSAPI"); + return res; + } /// <summary> /// 鎽勫儚澶寸洃娴� /// </summary> @@ -114,6 +127,44 @@ return res; } + /// <summary> + /// 鏈嶅姟寮�叧鎸夐挳 + /// </summary> + /// <param name="isusing.S_STATUS">鏈嶅姟鐘舵�</param> + /// <param name="isusing.S_TYPE">鏈嶅姟绫诲瀷</param> + /// <returns></returns> + [HttpPost] + public Results switchButton(Isusing isusing) + { + LogHelper.Info("switchButton 鍙傛暟锛� + JsonConvert.SerializeObject(isusing), "WMSAPI"); + var res = TaskProcess.switchButton(isusing); + LogHelper.Info("switchButton 杩斿洖锛� + JsonConvert.SerializeObject(res), "WMSAPI"); + return res; + } + /// <summary> + /// tcp鍙戦�淇″彿 娴嬭瘯鐢�+ /// </summary> + /// <returns></returns> + [HttpPost] + public Results tcpSend(string str) + { + LogHelper.Info("tcpSend 鍙傛暟锛� + str, "WMSAPI"); + var res = TaskProcess.tcpSend(str); + LogHelper.Info("tcpSend 杩斿洖锛� + str, "WMSAPI"); + return res; + } + /// <summary> + /// S7鍐欏叆淇″彿 娴嬭瘯鐢�+ /// </summary> + /// <returns></returns> + [HttpPost] + public Results S7Write(int offsetAddr) + { + LogHelper.Info("S7Write 鍙傛暟锛� + offsetAddr, "WMSAPI"); + var res = S7Helper.S7Write(offsetAddr); + LogHelper.Info("S7Write 杩斿洖锛� + offsetAddr, "WMSAPI"); + return res; + } } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/config/config.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/config/config.json index 4d8fa09..e6a1fb8 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/config/config.json +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/config/config.json @@ -28,7 +28,7 @@ "areaCode": "JJSJQ" }, { - "areaName": "RGV搴撳尯", + "areaName": "绔嬪簱鍏ュ簱鍖�, "areaCode": "RGV" }, { @@ -191,52 +191,74 @@ "enable": 1 } ], - //瀹夊叏闂�+ //瀹夊叏浜や簰 "SafeInteraction": [ { - "pointCode": "RGV1", + "pointCode": "RGV01", + "code": 1, "ip": "192.168.1.133", "type": "RGV", "location": "RGV01" }, { - "pointCode": "RGV2", + "pointCode": "RGV02", + "code": 2, "ip": "192.168", "type": "RGV", "location": "RGV02" }, { - "pointCode": "RGV3", + "pointCode": "RGV03", + "code": 3, "ip": "192.168", "type": "RGV", "location": "RGV03" }, { - "pointCode": "RGV4", + "pointCode": "RGV04", + "code": 4, "ip": "192.168", "type": "RGV", "location": "RGV04" }, { + "pointCode": "RGV05", + "code": 5, + "ip": "192.168", + "type": "RGV", + "location": "RGV05" + }, + { + "pointCode": "RGV06", + "code": 6, + "ip": "192.168", + "type": "RGV", + "location": "RGV06" + }, + { "pointCode": "鎷嗘墭鏈�鍏ュ彛", + "code": 7, "ip": "192.168", "type": "CTJ", "location": "CPJ01-R" }, { "pointCode": "鎷嗘墭鏈�鍑哄彛", + "code": 8, "ip": "192.168", "type": "CTJ", "location": "CPJ01-C" }, { "pointCode": "鎷嗘墭鏈�鍏ュ彛", + "code": 9, "ip": "192.168", "type": "CTJ", "location": "CPJ02-R" }, { "pointCode": "鎷嗘墭鏈�鍑哄彛", + "code": 10, "ip": "192.168", "type": "CTJ", "location": "CPJ02-C" diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs index 562e821..28d7508 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/core/WMSCore.cs @@ -1,4 +1,5 @@ 锘縰sing HH.WCS.JuShi.api; +using HH.WCS.JuShi.device; using HH.WCS.JuShi.process; using HH.WCS.JuShi.util; using HH.WCS.JuShi.wms; @@ -172,49 +173,56 @@ // } //} - + //鐩戞祴鎽勫儚澶村璐т綅(閫佹鍏ュ簱鍖�绌烘弧鐘舵� 婊$殑灏卞弶鍒扮珛搴� public static void MonitorFullStatus() { //bool result = false; //鎵鹃�妫�叆搴撳尯婊℃墭鐩樼殑璐т綅 - var db = new SqlHelper<Location>().GetInstance(); + var db = new SqlHelper<object>().GetInstance(); try { - var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "閫佹鍏ュ簱鍖�).FirstOrDefault(); - var reservoirs2 = Settings.ReservoirAreas.Where(s => s.areaName == "RGV搴撳尯").FirstOrDefault(); - //涓夎〃鑱旀煡鏌ュ嚭鎵樼洏婊$殑 鎸夊垱寤烘椂闂撮『搴�- var locCntrs = db.Queryable<LocCntrRel>().LeftJoin<Container>((p, c) => p.S_CNTR_CODE == c.S_CODE) - .Where((p, c) => c.C_FULL == "2") - .OrderBy((p, c) => p.T_CREATE) - .Select((p, c) => p.S_LOC_CODE) // 閫夋嫨鎵樼洏鐗╂枡琛ㄧ殑鏁版嵁 - .ToList(); + var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "閫佹鍏ュ簱鍖�).FirstOrDefault(); + var reservoirs2 = Settings.ReservoirAreas.Where(s => s.areaName == "绔嬪簱鍏ュ簱鍖�).FirstOrDefault(); + //涓夎〃鑱旀煡鏌ュ嚭鎵樼洏婊$殑 鎸夊垱寤烘椂闂撮『搴�+ var locCntrs = db.Queryable<LocCntrRel>().LeftJoin<Container>((p, c) => p.S_CNTR_CODE == c.S_CODE) + .Where((p, c) => c.C_FULL == "2") + .OrderBy((p, c) => p.T_CREATE) + .Select((p, c) => p.S_LOC_CODE) // 閫夋嫨鎵樼洏鐗╂枡琛ㄧ殑鏁版嵁 + .ToList(); - //鎵鹃�妫�叆搴撳尯鍐呮墭鐩樻弧浜嗙殑璐т綅 - var locList = db.Queryable<Location>() - .Where(p => p.S_AREA_CODE == reservoirs.areaCode && p.N_LOCK_STATE == 0) - .Where(s => locCntrs.Contains(s.S_CODE.Trim())) - .ToList(); + //鎵鹃�妫�叆搴撳尯鍐呮墭鐩樻弧浜嗙殑璐т綅 + var locList = db.Queryable<Location>() + .Where(p => p.S_AREA_CODE == reservoirs.areaCode && p.N_LOCK_STATE == 0) + .Where(s => locCntrs.Contains(s.S_CODE.Trim())) + .ToList(); - if (locList.Any()) - { - //寤轰换鍔�- var startLoc = locList.FirstOrDefault(); - var endLoc = TaskProcess.InWorkTransport(reservoirs2.areaCode); + if (locList.Any()) + { + LogHelper.Info($"浠诲姟鎽勫儚澶寸洃娴嬬┖婊$姸鎬佹壘鍒拌揣浣峽JsonConvert.SerializeObject(locList)}"); + //寤轰换鍔�+ var startLoc = locList.FirstOrDefault(); + var endLoc = TaskProcess.InWorkTransport(reservoirs2.areaCode); + LogHelper.Info($"浠诲姟鎽勫儚澶寸洃娴嬫壘鍒扮粓鐐硅揣浣嶏細{JsonConvert.SerializeObject(endLoc)}"); + if (endLoc!=null) + { + var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First(); + LogHelper.Info($"浠诲姟鎽勫儚澶寸洃娴嬫壘鍒版墭鐩橈細{JsonConvert.SerializeObject(locCntrRel)}"); - var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == endLoc.S_CODE).First(); - TaskProcess.CreateTransport(startLoc.S_CODE, endLoc.S_CODE, "鎽勫儚澶寸洃娴�, locCntrRel.S_CNTR_CODE, 1, 1); + TaskProcess.CreateTransport(startLoc.S_CODE, endLoc.S_CODE, "鎽勫儚澶寸洃娴�, locCntrRel.S_CNTR_CODE, 1, 1); - } - } + } + + } + } catch (Exception ex) - { - Console.WriteLine("AutoReplenish:" + ex.Message + ex.StackTrace); - LogHelper.Error("AutoReplenish:" + ex.Message, ex); - throw; - } + { + Console.WriteLine("MonitorFullStatus:" + ex.Message + ex.StackTrace); + LogHelper.Error("MonitorFullStatus:" + ex.Message, ex); + throw; + } - + //return result; @@ -222,7 +230,12 @@ //甯歌閫佹绌轰簡鑷姩浠庨�妫�紦瀛樺尯鍙栦竴涓�杩囧幓 public static void AutoReplenish() { - var db = new SqlHelper<Location>().GetInstance(); + var db = new SqlHelper<object>().GetInstance(); + var isusinglist = db.Queryable<Isusing>().Where(a => a.S_TYPE == "鑷姩琛ヨ揣").First(); + if (isusinglist.S_STATUS == 0) + { + return; + } try { var cgreservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "甯歌閫佹鍖�).FirstOrDefault(); @@ -233,7 +246,8 @@ var hcreservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "閫佹缂撳瓨鍖�).FirstOrDefault(); //鎵鹃�妫�紦瀛樺尯鏈夎揣鐨勮揣浣� var startloc = TaskProcess.OutWorkTransport(hcreservoirs.areaCode); - if (startloc!=null) + //LogHelper.Info($"AutoReplenish 鑷姩琛ヨ揣 璧风偣璐т綅{JsonConvert.SerializeObject(startloc)}"); + if (startloc != null) { //鍒涘缓閫佹浠诲姟 var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startloc.S_CODE).First(); @@ -245,7 +259,96 @@ } } - } + } + } + catch (Exception ex) + { + Console.WriteLine("AutoReplenish:" + ex.Message + ex.StackTrace); + LogHelper.Error("AutoReplenish:" + ex.Message, ex); + throw; + } + + } + //绌烘墭缂撳瓨鍖烘湁缁戝畾鐨勬墭鐩樺氨閫佸埌鎷嗘墭鏈�+ public static void AutoSendMachine() + { + var db = new SqlHelper<object>().GetInstance(); + var isusinglist = db.Queryable<Isusing>().Where(a => a.S_TYPE == "鑷姩閫佹墭").First(); + if (isusinglist.S_STATUS == 0) + { + return; + } + try + { + var reservoirs1 = Settings.ReservoirAreas.Where(s => s.areaName == "3min绌烘墭鍖�).FirstOrDefault(); + var reservoirs2 = Settings.ReservoirAreas.Where(s => s.areaName == "6min绌烘墭鍖�).FirstOrDefault(); + var linePlcInfo1 = Settings.linePlcInfos.Where(s => s.deviceNo == "1").FirstOrDefault(); + var linePlcInfo2 = Settings.linePlcInfos.Where(s => s.deviceNo == "2").FirstOrDefault(); + //鎵惧埌绌烘墭缂撳瓨鍖虹殑鎵�湁璐т綅缂栧彿 + var locList = db.Queryable<Location>() + .Where(s => s.S_AREA_CODE == reservoirs1.areaCode || s.S_AREA_CODE == reservoirs2.areaCode) + .Where(s => s.N_LOCK_STATE == 0) + .OrderByDescending(s => s.N_ROW).OrderByDescending(s => s.N_COL).OrderBy(s => s.N_LAYER) + .Select(s => s.S_CODE) + .ToList(); + + //鎵惧埌缁戜簡鎵樼洏鐨勮揣浣嶅彿 + var locCntrs = db.Queryable<LocCntrRel>() + .Where(s => locList.Contains(s.S_LOC_CODE.Trim())) + .Select(s => s.S_LOC_CODE) + .ToList(); + if (locCntrs.Any()) + { + //LogHelper.Info($"绌烘墭缂撳瓨鍖烘湁缁戝畾璐т綅锛歿JsonConvert.SerializeObject(locCntrs)}"); + //var loccode = locCntrs.First(); + foreach (var loccode in locCntrs) + { + var loc = db.Queryable<Location>().Where(s => s.S_CODE == loccode).First(); + //鍒ゆ柇閫佸線3瀵歌繕鏄�瀵告媶鎵樻満 + string endLoc = null; + string dev = null; + if (loc.S_AREA_CODE == reservoirs1.areaCode) + { + endLoc = linePlcInfo1.inLoca; + dev = "1"; + } + else if (loc.S_AREA_CODE == reservoirs2.areaCode) + { + endLoc = linePlcInfo2.inLoca; + dev = "2"; + } + var endLocation = db.Queryable<Location>().Where(s => s.S_CODE == endLoc).First(); + if (endLocation == null || endLocation.N_LOCK_STATE != 0) + { + //LogHelper.Info($"鎷嗘墭鏈鸿揣浣峽endLoc}涓嶅瓨鍦ㄦ垨宸茶閿�); + return; + } + var plcDeviceTable = S7Helper.plcDeviceTables; + LogHelper.Info($"鑷姩閫佹墭 鎷嗘墭鏈簕dev}:{plcDeviceTable.requestPut1}"); + if ((plcDeviceTable.requestPut1 && dev == "1") || + (plcDeviceTable.requestPut2 && dev == "2")) + { + var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == loccode).First(); + + LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{loccode}缁堢偣:{endLoc}"); + var res = TaskProcess.CreateTransport(loccode, endLoc, "閫佹墭", locCntrRel.S_CNTR_CODE, 1, 1); + if (res) + { + LogHelper.Info($"璧风偣:{loccode}缁堢偣:{endLoc}浠诲姟鍒涘缓鎴愬姛"); + } + else + { + LogHelper.Info($"璧风偣:{loccode}缁堢偣:{endLoc}浠诲姟鍒涘缓澶辫触"); + } + } + else + { + LogHelper.Info($"鎷嗘墭鏈簕endLoc}涓嶅厑璁告斁妗�); + } + } + + } + } catch (Exception ex) { @@ -257,7 +360,6 @@ } - } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs index d72dc35..30eb63b 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/S7Helper.cs @@ -11,6 +11,7 @@ using System.Data.SqlTypes; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Web.Services.Description; using static HH.WCS.JuShi.util.Settings; @@ -164,6 +165,9 @@ var result = false; try { + var linkplc = Settings.SafeInteractions.First(); + var plc = new Plc(CpuType.S71200, linkplc.ip, 0, 1); + Link(plc); if (plc.IsConnected) { plc.Write(DataType.DataBlock, db, byteAddr, data); @@ -285,76 +289,181 @@ } - public static List<PlcDeviceTable> plcDeviceTables = new List<PlcDeviceTable>(); + public static PlcDeviceTable plcDeviceTables = new PlcDeviceTable(); /// <summary> /// 鑾峰彇杈撻�绾挎暟鎹� /// </summary> public static void ReadSsxPLc() { - //#region 娴嬭瘯鍐欏叆鏁版嵁 - //List<S7Model> s7Models = new List<S7Model>(); - //s7Models.Add(new S7Model() { addr = 0, value = "1", type = "Int", length = 2 }); - //s7Models.Add(new S7Model() { addr = 2, value = "2", type = "Int", length = 2 }); - //s7Models.Add(new S7Model() { addr = 4, value = "4", type = "Int", length = 2 }); - //s7Models.Add(new S7Model() { addr = 18, value = "TP24121108", type = "String", length = 20 }); - //var plcInfo = Settings.linePlcInfo.Where(a => (a.deviceNo == "2") && a.enable == 1).FirstOrDefault(); - //Write(s7Models, 100, plcInfo); - //#endregion - var db = new SqlHelper<WCSTask>().GetInstance(); - //涓や釜鎷嗘墭鏈�- var linkplcs = Settings.linePlcInfos.FindAll(a => a.enable == 1).ToList(); - foreach (var linkplc in linkplcs){ - //鑾峰彇璁惧閰嶇疆鏂囦欢 - var deviceInfos = Settings.ConveyorLinesInfos.Where(a => a.enable == 1 &&a.deviceNo== linkplc.deviceNo).ToList(); - if (deviceInfos.Count > 0) + try + { + var linkplc = Settings.linePlcInfos.Find(a => a.enable == 1); + var plc = new Plc(CpuType.S71500, linkplc.address, 0, 1); + Link(plc); + //鎷嗘墭鏈� + //object rawValue = plc.Read(DataType.DataBlock, 8, 230, VarType.Byte, 1); + //LogHelper.Info($"Raw value: {rawValue} (Type: {rawValue?.GetType()})"); + // 鍏堣鍙栨暣涓瓧鑺�+ byte data = (byte)plc.Read(DataType.DataBlock, 8, 230, VarType.Byte, 1); + // 鐒跺悗鎻愬彇鍚勪釜浣�+ bool requestPut1 = (data & 0x01) != 0; // 230.0 1001 + bool requestTake1 = (data & 0x02) != 0; // 230.1 1003 + bool requestPut2 = (data & 0x04) != 0; // 230.2 1004 + bool requestTake2 = (data & 0x08) != 0; // 230.3 1006 + LogHelper.Info($"鎷嗘墭鏈烘帴鏀朵俊鍙�===={requestPut1}锛寋requestTake1}锛寋requestPut2}锛寋requestTake2}"); + + //RGV + // RGV鍏佽鍗歌揣鐘舵�璇诲彇 (浠嶥B51璇诲彇) + int rgv1AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 0, VarType.Int, 1); + int rgv2AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 2, VarType.Int, 1); + int rgv3AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 4, VarType.Int, 1); + int rgv4AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 6, VarType.Int, 1); + int rgv5AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 8, VarType.Int, 1); + int rgv6AllowUnload = (int)plc.Read(DataType.DataBlock, 51, 10, VarType.Int, 1); + LogHelper.Info($"RGV鎺ユ敹淇″彿=== 1={rgv1AllowUnload}, 2={rgv2AllowUnload}, 3={rgv3AllowUnload}, 4={rgv4AllowUnload}, 5={rgv5AllowUnload}, 6={rgv6AllowUnload}"); + + //瀛樺埌缂撳瓨 + if (plcDeviceTables != null) { - int slen =int.Parse(deviceInfos.Min(a => a.readAddr).ToString()); - int elen = int.Parse(deviceInfos.Max(a => a.readAddr).ToString()); - - //璇诲彇杈撻�绾挎暣涓亸绉婚噺鐨刡yte鏁扮粍 鏀惧唴瀛橀噷涓�捣瑙f瀽锛岄槻姝㈣繃搴﹁鍙�- //PLCRead(linkplc.address, 8, slen, elen + 18, out Ssxbytes); - - var plc = new Plc(CpuType.S71500, linkplc.address, 0, 1); - Link(plc); - //涓�釜鎷嗘墭鏈轰袱涓嚎浣�- foreach (var device in deviceInfos) + plcDeviceTables.requestTake1 = requestTake1; + plcDeviceTables.requestPut1 = requestPut1; + plcDeviceTables.requestTake2 = requestTake2; + plcDeviceTables.requestPut2 = requestPut2; + plcDeviceTables.RGVAllowUnload = new Dictionary<int, int> { - //int workMode = int.Parse(GetValue(int.Parse(device.readAddr.ToString()), VarType.Int, Ssxbytes)); //宸ヤ綔妯″紡 - //int lightAction = int.Parse(GetValue(int.Parse((device.readAddr + 2).ToString()), VarType.Int, Ssxbytes)); //鏄惁鏈夎揣锛屽厜鐢典俊鍙�- - int workMode = (short)plc.Read(DataType.DataBlock, 8, int.Parse(device.readAddr.ToString()), VarType.Int, 1, 0); - int lightAction = (short)plc.Read(DataType.DataBlock, 8, int.Parse((device.readAddr + 2).ToString()), VarType.Int, 1, 0); - var requestTake = plc.Read("DB8.DBX"+ device.readAddr+16.0);//杈撻�绾胯姹傚彇妗�- var requestPut = plc.Read("DB8.DBX"+ device.readAddr + 16.1);//杈撻�绾垮厑璁告斁妗�- //瀛樺埌缂撳瓨 - var task = plcDeviceTables.Find(a => a.DeviceNo == device.code); - if (task != null) - { - task.DeviceNo = device.code; - task.workMode = workMode; - task.lightAction = lightAction; - task.requestTake =bool.Parse(requestTake.ToString()); - task.requestPut = bool.Parse(requestPut.ToString()); - } - else - { - var plcDeviceTable = new PlcDeviceTable(); - plcDeviceTable.DeviceNo = device.code; - plcDeviceTable.workMode = workMode; - plcDeviceTable.lightAction = lightAction; - plcDeviceTable.requestTake = bool.Parse(requestTake.ToString()); - plcDeviceTable.requestPut = bool.Parse(requestPut.ToString()); - plcDeviceTables.Add(plcDeviceTable); - } - - } + {1, rgv1AllowUnload}, + {2, rgv2AllowUnload}, + {3, rgv3AllowUnload}, + {4, rgv4AllowUnload}, + {5, rgv5AllowUnload}, + {6, rgv6AllowUnload} + }; + LogHelper.Info($"S7鍗忚绗竴娆¤鍙栧弬鏁�{JsonConvert.SerializeObject(plcDeviceTables)}"); } + else + { + var plcDeviceTable = new PlcDeviceTable(); + plcDeviceTable.requestTake1 = requestTake1; + plcDeviceTable.requestPut1 = requestPut1; + plcDeviceTable.requestTake2 = requestTake2; + plcDeviceTable.requestPut2 = requestPut2; + plcDeviceTable.RGVAllowUnload = new Dictionary<int, int> + { + {1, rgv1AllowUnload}, + {2, rgv2AllowUnload}, + {3, rgv3AllowUnload}, + {4, rgv4AllowUnload}, + {5, rgv5AllowUnload}, + {6, rgv6AllowUnload} + }; + plcDeviceTables = plcDeviceTable; + LogHelper.Info($"S7鍗忚璇诲彇鍙傛暟:{JsonConvert.SerializeObject(plcDeviceTable)}"); + } + + + } + catch (Exception ex) + { + Console.WriteLine("ReadSsxPLc:" + ex.Message + ex.StackTrace); + LogHelper.Error("ReadSsxPLc:" + ex.Message, ex); + throw; } } + ///// <summary> + ///// 鑾峰彇杈撻�绾挎暟鎹�+ ///// </summary> + //public static void oldReadSsxPLc() + //{ + // //#region 娴嬭瘯鍐欏叆鏁版嵁 + // //List<S7Model> s7Models = new List<S7Model>(); + // //s7Models.Add(new S7Model() { addr = 0, value = "1", type = "Int", length = 2 }); + // //s7Models.Add(new S7Model() { addr = 2, value = "2", type = "Int", length = 2 }); + // //s7Models.Add(new S7Model() { addr = 4, value = "4", type = "Int", length = 2 }); + // //s7Models.Add(new S7Model() { addr = 18, value = "TP24121108", type = "String", length = 20 }); + // //var plcInfo = Settings.linePlcInfo.Where(a => (a.deviceNo == "2") && a.enable == 1).FirstOrDefault(); + // //Write(s7Models, 100, plcInfo); + // //#endregion + // var db = new SqlHelper<WCSTask>().GetInstance(); + // try + // { + // //涓や釜鎷嗘墭鏈�+ // var linkplcs = Settings.linePlcInfos.FindAll(a => a.enable == 1).ToList(); + // foreach (var linkplc in linkplcs) + // { + // //鑾峰彇璁惧閰嶇疆鏂囦欢 + // var deviceInfos = Settings.ConveyorLinesInfos.Where(a => a.enable == 1 && a.deviceNo == linkplc.deviceNo).ToList(); + // if (deviceInfos.Count > 0) + // { + // int slen = int.Parse(deviceInfos.Min(a => a.readAddr).ToString()); + // int elen = int.Parse(deviceInfos.Max(a => a.readAddr).ToString()); + + // //璇诲彇杈撻�绾挎暣涓亸绉婚噺鐨刡yte鏁扮粍 鏀惧唴瀛橀噷涓�捣瑙f瀽锛岄槻姝㈣繃搴﹁鍙�+ // //PLCRead(linkplc.address, 8, slen, elen + 18, out Ssxbytes); + + // var plc = new Plc(CpuType.S71500, linkplc.address, 0, 1); + // Link(plc); + // //涓�釜鎷嗘墭鏈轰袱涓嚎浣�+ // foreach (var device in deviceInfos) + // { + // //int workMode = int.Parse(GetValue(int.Parse(device.readAddr.ToString()), VarType.Int, Ssxbytes)); //宸ヤ綔妯″紡 + // //int lightAction = int.Parse(GetValue(int.Parse((device.readAddr + 2).ToString()), VarType.Int, Ssxbytes)); //鏄惁鏈夎揣锛屽厜鐢典俊鍙�+ + // //int workMode = (short)plc.Read(DataType.DataBlock, 8, int.Parse(device.readAddr.ToString()), VarType.Int, 1, 0); + // //int lightAction = (short)plc.Read(DataType.DataBlock, 8, int.Parse((device.readAddr + 2).ToString()), VarType.Int, 1, 0); + + // int requestTake1 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 0); + // int requestPut1 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 1); + // int requestTake2 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 2); + // int requestPut2 = (short)plc.Read(DataType.DataBlock, 8, 230, VarType.Int, 1, 3); + + // LogHelper.Info($"readbool2================={requestTake1}锛寋requestPut1}锛寋requestTake2}锛寋requestPut2}"); + // //var requestTake = plc.Read("DB8.DBX" + device.readAddr + 16.0);//杈撻�绾胯姹傚彇妗�+ // //var requestPut = plc.Read("DB8.DBX" + device.readAddr + 16.1);//杈撻�绾垮厑璁告斁妗�+ + // //瀛樺埌缂撳瓨 + // //var task = plcDeviceTables.Find(a => a.DeviceNo == device.code); + // if (task != null) + // { + // task.DeviceNo = device.code; + // //task.workMode = workMode; + // //task.lightAction = lightAction; + // task.requestTake1 = requestTake1; + // task.requestPut1 = requestPut1; + // task.requestTake2 = requestTake2; + // task.requestPut2 = requestPut2; + // LogHelper.Info($"S7鍗忚绗竴娆¤鍙栧弬鏁�{JsonConvert.SerializeObject(task)}"); + // } + // else + // { + // var plcDeviceTable = new PlcDeviceTable(); + // plcDeviceTable.DeviceNo = device.code; + // //plcDeviceTable.workMode = workMode; + // //plcDeviceTable.lightAction = lightAction; + // plcDeviceTable.requestTake1 = requestTake1; + // plcDeviceTable.requestPut1 = requestPut1; + // plcDeviceTable.requestTake2 = requestTake2; + // plcDeviceTable.requestPut2 = requestPut2; + // plcDeviceTables.Add(plcDeviceTable); + // LogHelper.Info($"S7鍗忚璇诲彇鍙傛暟:{JsonConvert.SerializeObject(plcDeviceTable)}"); + // } + + // } + // } + // } + // } + // catch (Exception ex) + // { + // Console.WriteLine("ReadSsxPLc:" + ex.Message + ex.StackTrace); + // LogHelper.Error("ReadSsxPLc:" + ex.Message, ex); + // throw; + // } + + + //} ///// <summary> ///// 鎵归噺鍐欏叆鏂规硶 ///// </summary> @@ -669,7 +778,7 @@ } } - internal static bool WriteDouble(string deviceNo,int db, double? byteAddr, int data) + internal static bool WriteDouble(string deviceNo, int db, int byteAddr, int offsetAddr, int data) { var result = false; try @@ -679,22 +788,47 @@ Link(plc); if (plc.IsConnected) { - if (byteAddr != 0) { - plc.Write("DB9.DBX" + byteAddr, data); - //plc.Write(DataType.DataBlock, db, byteAddr, data); + if (byteAddr != 0) + { + plc.WriteBit(DataType.DataBlock, db, byteAddr, offsetAddr, true); Console.WriteLine($"鍐欏叆plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} "); LogHelper.Info($"鍐欏叆plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} "); - if (result) + //鐫′笁绉�濡傛灉杩樼户缁彂璇锋眰鐨勮瘽灏遍噸鍐欏叆 鍚﹀垯鍐欏叆false + Thread.Sleep(3000); + var plcDeviceTable = S7Helper.plcDeviceTables; + if (plcDeviceTable != null) { - //鍐欏畬鍐嶈涓�纭 - //var readData = (short)plc.Read(DataType.DataBlock, db, byteAddr, VarType.Int, 1, 0); - var readData = (short)plc.Read("DB9.DBX" + byteAddr); - Console.WriteLine($"璇诲彇plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} res={string.Join(", ", readData)}"); - LogHelper.Info($"璇诲彇plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} res={string.Join(", ", readData)}", "PLC"); - result = readData == data; + if ((offsetAddr == 0 && plcDeviceTable.requestPut1) + || (offsetAddr == 1 && plcDeviceTable.requestTake1) + || (offsetAddr == 2 && plcDeviceTable.requestPut2) + || (offsetAddr == 3 && plcDeviceTable.requestTake2)) + { + WriteDouble(deviceNo, db, byteAddr, offsetAddr, data); + } + else + { + plc.WriteBit(DataType.DataBlock, db, byteAddr, offsetAddr, false); + LogHelper.Info($"S7鍙戦�澶嶄綅淇″彿"); + } + } + + //if (result) + //{ + // //鍐欏畬鍐嶈涓�纭 + // //var readData = (short)plc.Read(DataType.DataBlock, db, byteAddr, VarType.Int, 1, 0); + + // //byte data1 = (byte)plc.Read(DataType.DataBlock, db, byteAddr, VarType.Byte, 1); + // //// 鐒跺悗鎻愬彇鍚勪釜浣�+ // //bool requestPut1 = (data1 & 0x01) != 0; // 230.0 1001 + + // var readData = (short)plc.Read("DB9.DBX" + byteAddr); + // Console.WriteLine($"璇诲彇plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} res={string.Join(", ", readData)}"); + // LogHelper.Info($"璇诲彇plc淇℃伅锛宨p={plc.IP} addr={byteAddr} data={data} res={string.Join(", ", readData)}", "PLC"); + // result = readData == data; + //} } - + } else { @@ -829,7 +963,15 @@ public string value { get; set; } } - + //S7鍐欏叆淇″彿 娴嬭瘯鐢�+ internal static Results S7Write(int offsetAddr) + { + var linkplcs = Settings.linePlcInfos.Find(a => a.deviceNo == "1"); + var plc = new Plc(CpuType.S71500, linkplcs.address, 0, 1); + Link(plc); + plc.WriteBit(DataType.DataBlock, 9, 182, offsetAddr, false); + return new Results() { Code = "0", Message = $"鍐欏叆鎴愬姛", Data = null }; + } #region 鐢ㄤ簬妯℃嫙娴嬭瘯 /// <summary> diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/TcpServer.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/TcpServer.cs index 22ab780..f4885fd 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/TcpServer.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/device/TcpServer.cs @@ -1,4 +1,5 @@ -锘縰sing System; +锘縰sing Newtonsoft.Json; +using System; using System.Collections.Generic; using System.Linq; using System.Net; @@ -22,6 +23,7 @@ socket.Listen(30); //寮�鎺ュ彈瀹㈡埛绔繛鎺ヨ姹� socket.BeginAccept(new AsyncCallback(ClientAccepted), socket); + //Console.ReadLine(); } catch (Exception e) { Console.WriteLine(e.Message); @@ -30,7 +32,11 @@ public static Dictionary<string, Socket> clients = new Dictionary<string, Socket>(); public static Dictionary<string, byte[]> buffers = new Dictionary<string, byte[]>(); public static void ClientAccepted(IAsyncResult ar) { + //try + //{ + + Console.WriteLine("ClientAccepted================"); var socket = ar.AsyncState as Socket; var client = socket.EndAccept(ar); string remote_ip = ((System.Net.IPEndPoint)client.RemoteEndPoint).Address.ToString(); @@ -55,11 +61,19 @@ } //鍑嗗鎺ュ彈涓嬩竴涓鎴风璇锋眰 socket.BeginAccept(new AsyncCallback(ClientAccepted), socket); + + + //} + //catch (Exception ex) + //{ + // Console.WriteLine($"ClientAccepted 寮傚父: {ex.ToString()}"); + //} } public static void ReceiveMessage(IAsyncResult ar) { try { + //Console.WriteLine("ReceiveMessage================"); var socket = ar.AsyncState as Socket; string remote_ip = ((System.Net.IPEndPoint)socket.RemoteEndPoint).Address.ToString(); var length = socket.EndReceive(ar); @@ -80,10 +94,12 @@ if (buffers.Keys.Contains(remote_ip)) { //璇诲彇鍑烘潵娑堟伅鍐呭 var message = GetHexString(buffers[remote_ip], length);//16 10 - Console.WriteLine(message); + Console.WriteLine($"ReceiveMessage鎺ユ敹淇″彿锛歿message}"); + LogHelper.Info($"ReceiveMessage鎺ユ敹淇″彿锛歿message}"); + //Console.WriteLine(message); //3A 00 01 00 01 05 73 00 02 01 01 B8 //鎸夐挳鐩�- if (message.Substring(0, 2) == "3A") { + if (message.Substring(0, 2) == "3a") { //鏄剧ず娑堟伅 if (length != 24) { message = message.Substring(0, 24); @@ -91,14 +107,14 @@ PlcHelper.Receive(remote_ip, message); Array.Clear(buffers[remote_ip], 0, buffers[remote_ip].Length);//娓呯┖褰撳墠IP Buffer } - //3F 00 10 20 30 40 0D 0A + //3F 00 10 20 30 40 50 60 0D 0A //瀹夊叏浜や簰 - else if (message.Substring(0, 4) == "3F00") + else if (message.Substring(0, 4) == "3f00") { //鏄剧ず娑堟伅 - if (length != 16) + if (length != 20) { - message = message.Substring(0, 16); + message = message.Substring(0, 20); } PlcHelper.Receive(remote_ip, message); Array.Clear(buffers[remote_ip], 0, buffers[remote_ip].Length);//娓呯┖褰撳墠IP Buffer diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CameraMonitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CameraMonitor.cs index f7da469..707d0a3 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CameraMonitor.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CameraMonitor.cs @@ -6,8 +6,8 @@ public class SafeInteraction : BaseModel { - //站点ip - public string ip { get; set; } + //站点 + public string code { get; set; } //信号 public string data { get; set; } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CntrItemDetail.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CntrItemDetail.cs index de605b9..151be79 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CntrItemDetail.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/CntrItemDetail.cs @@ -22,21 +22,21 @@ /// 1:合格 2:不合格 /// </summary> public int N_ITEM_STATE { get; set; } - public int S_CK { get; set; } + //public int S_CK { get; set; } public string S_BATCH_NO { get; set; } public string S_END_USER { get; set; } = ""; public string S_OWNER { get; set; } public string S_SUPPLIER_NO { get; set; } - public string S_PACK_TYPE { get; set; } - public float F_PACK_QTY { get; set; } + //public string S_PACK_TYPE { get; set; } + //public float F_PACK_QTY { get; set; } public float F_QTY { get; set; } public string S_UOM { get; set; } = "kg"; public string S_CNTR_CODE { get; set; } public string S_BS_TYPE { get; set; } = ""; public string S_BS_NO { get; set; } = ""; - public string S_ITEM_ROUTE { get; set; } = ""; + //public string S_ITEM_ROUTE { get; set; } = ""; public float F_NET_WEIGHT { get; set; } public float F_GROSS_WEIGHT { get; set; } public string S_WU { get; set; } = "kg"; @@ -45,7 +45,7 @@ /// </summary> public float F_ALLOC_QTY { get; set; } public string C_ITEM_MERGE { get; set; } = "N"; - public string S_PUTAWAY_NO { get; set; } + //public string S_PUTAWAY_NO { get; set; } /// <summary> /// 反向映射 diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/PlcDeviceTable.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/PlcDeviceTable.cs index 22693d0..dbfa7ad 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/PlcDeviceTable.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/PlcDeviceTable.cs @@ -1,57 +1,67 @@ using HH.WCS.JuShi.models; using SqlSugar; using System; +using System.Collections.Generic; namespace HH.WCS.JuShi { [SugarTable("PlcDeviceTable")] public class PlcDeviceTable : BaseModel - { /// <summary> - /// 线体编号 - /// </summary> - public int DeviceNo { get; set; } + { + ///// <summary> + // /// 线体编号 + // /// </summary> + //public int DeviceNo { get; set; } + ///// <summary> + ///// 设备货位编码 + ///// </summary> + //public string Location { get; set; } + ///// <summary> + ///// 工作模式 待机=1 运行中=2 脱机=0 + ///// </summary> + //public int workMode { get; set; } + ///// <summary> + ///// 光电信号 有货 =1 无货=0 + ///// </summary> + //public int lightAction { get; set; } + ///// <summary> + ///// 故障报警 + ///// </summary> + //public int errorAlarm { get; set; } + ///// <summary> + ///// 设备状态 无状态=0 运行状态=1 手动状态=2 有料等待=3 异常报警=4 + ///// </summary> + //public int deviceState { get; set; } + //public string TaskNo { get; set; } + ///// <summary> + ///// 目标地址 + ///// </summary> + //public int targetAddr { get; set; } + ///// <summary> + ///// 重量 + ///// </summary> + //public float weight { get; set; } + ///// <summary> + ///// 托盘码 + ///// </summary> + //public string trayCode { get; set; } /// <summary> - /// 设备货位编码 + /// 3寸输送线请求取框 /// </summary> - public string Location { get; set; } + public bool requestTake1 { get; set; } /// <summary> - /// 工作模式 待机=1 运行中=2 脱机=0 + /// 3寸输送线允许放框 /// </summary> - public int workMode { get; set; } + public bool requestPut1 { get; set; } /// <summary> - /// 光电信号 有货 =1 无货=0 + /// 6寸输送线请求取框 /// </summary> - public int lightAction { get; set; } + public bool requestTake2 { get; set; } /// <summary> - /// 故障报警 + /// 6寸输送线允许放框 /// </summary> - public int errorAlarm { get; set; } - /// <summary> - /// 设备状态 无状态=0 运行状态=1 手动状态=2 有料等待=3 异常报警=4 - /// </summary> - public int deviceState { get; set; } - public string TaskNo { get; set; } - /// <summary> - /// 目标地址 - /// </summary> - public int targetAddr { get; set; } - /// <summary> - /// 重量 - /// </summary> - public float weight { get; set; } - /// <summary> - /// 托盘码 - /// </summary> - public string trayCode { get; set; } - /// <summary> - /// 输送线请求取框 - /// </summary> - public bool requestTake { get; set; } - /// <summary> - /// 输送线允许放框 - /// </summary> - public bool requestPut { get; set; } - + public bool requestPut2 { get; set; } + public Dictionary<int, int> RGVAllowUnload { get; internal set; } } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/TN_ISUSING.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/TN_ISUSING.cs new file mode 100644 index 0000000..1cd6c7a --- /dev/null +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/models/TN_ISUSING.cs @@ -0,0 +1,15 @@ +using HH.WCS.JuShi.models; +using SqlSugar; +using System; + +namespace HH.WCS.JuShi +{ + + [SugarTable("TN_ISUSING")] + public class Isusing: BaseModel + { + + public int S_STATUS { get; set; } + public string S_TYPE { get; set; } + } +} diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs index 7945429..730049f 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs @@ -28,7 +28,7 @@ //3A 00 01 00 01 05 73 00 02 01 01 B8 //鍙� //2A 00 01 00 01 05 73 00 02 01 01 A8 - if (data.Substring(0, 2) == "3A") + if (data.Substring(0, 2) == "3a") { //鏁版嵁搴忓彿 data = data.Substring(16, 2); @@ -39,7 +39,7 @@ bool result = false; if (data.Equals("01")) { - var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "RGV搴撳尯").FirstOrDefault(); + var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "绔嬪簱鍏ュ簱鍖�).FirstOrDefault(); result = TaskProcess.tcpOffline(loc, reservoirs.areaCode); } else if (data.Equals("02")) @@ -64,7 +64,7 @@ } //2A 00 01 00 01 05 73 00 02 01 01 A8 // 杈撳叆鐨勫崄鍏繘鍒跺瓧绗︿覆鏁扮粍 - string[] hexValues = { "2A", "00", "01", "00", "01", "05", "73", "00", "02", data, "01" }; + string[] hexValues = { "2a", "00", "01", "00", "01", "05", "73", "00", "02", data, "01" }; // 璁$畻鎬诲拰 int sum = hexValues.Sum(hex => Convert.ToInt32(hex, 16)); string returndata = hexValues.ToString() + sum; @@ -74,54 +74,60 @@ } } //rgv瀹夊叏浜や簰 - else if (data.Substring(0, 4) == "3F00") + else if (data.Substring(0, 4) == "3f00") { - //鏃犱俊鍙蜂笉绠�- if (data.Trim() != "3F00102030400D0A") - { + ////鏃犱俊鍙蜂笉绠�+ //if (data.Trim() != "3f001020304050600d0a") + //{ LogHelper.Info($"RGV瀹夊叏浜や簰鎺ユ敹淇″彿{data}"); - var reservoirs = Settings.SafeInteractions.Where(s => s.ip == ip).FirstOrDefault(); - //1鍏佽鍗歌揣 2鍗歌揣瀹屾垚纭 - string datastr = ""; - if (reservoirs.pointCode == "RGV1") - { - datastr = data.Substring(5, 1); - } - else if (reservoirs.pointCode == "RGV2") - { - datastr = data.Substring(7, 1); - } - else if (reservoirs.pointCode == "RGV3") - { - datastr = data.Substring(9, 1); - } - else if (reservoirs.pointCode == "RGV4") - { - datastr = data.Substring(11, 1); - } + rgvSafeInteraction = data.Substring(4,12); + //var reservoirs = Settings.SafeInteractions.Where(s => s.ip == ip).FirstOrDefault(); + ////1鍏佽鍗歌揣 2鍗歌揣瀹屾垚纭 + //string datastr = ""; + //switch (reservoirs.pointCode) + //{ + // case "RGV1": + // datastr = data.Substring(5, 1); + // break; + // case "RGV2": + // datastr = data.Substring(7, 1); + // break; + // case "RGV3": + // datastr = data.Substring(9, 1); + // break; + // case "RGV4": + // datastr = data.Substring(11, 1); + // break; + // case "RGV5": + // datastr = data.Substring(13, 1); + // break; + // case "RGV6": + // datastr = data.Substring(15, 1); + // break; + //} - //鎺ュ彈淇″彿瀛樺埌鍐呭瓨 - if (rgvSafeInteraction != null) - { - //string杞垚list - var jsonList = JsonConvert.DeserializeObject<List<SafeInteraction>>(rgvSafeInteraction); - var list = jsonList.Where(s => s.ip == ip).First(); - if (list != null) - { - //涓嶄负绌哄氨鍏堝垹鍐嶅姞涓�- jsonList.Remove(list); - } - jsonList.Add(new SafeInteraction { ip = ip, data = datastr }); - rgvSafeInteraction = JsonConvert.SerializeObject(jsonList); - } - else - { - //绗竴娆¤繘 - var safeInteractions = new List<SafeInteraction>{new SafeInteraction { ip = ip, data = datastr }}; - rgvSafeInteraction = JsonConvert.SerializeObject(safeInteractions); - } - LogHelper.Info($"RGV瀹夊叏浜や簰 瀛樺叆鍐呭瓨鍙傛暟{rgvSafeInteraction}"); - } + ////鎺ュ彈淇″彿瀛樺埌鍐呭瓨 + //if (rgvSafeInteraction != null) + //{ + // //string杞垚list + // var jsonList = JsonConvert.DeserializeObject<List<SafeInteraction>>(rgvSafeInteraction); + // var list = jsonList.Where(s => s.ip == ip).First(); + // if (list != null) + // { + // //涓嶄负绌哄氨鍏堝垹鍐嶅姞涓�+ // jsonList.Remove(list); + // } + // jsonList.Add(new SafeInteraction { ip = ip, data = datastr }); + // rgvSafeInteraction = JsonConvert.SerializeObject(jsonList); + //} + //else + //{ + // //绗竴娆¤繘 + // var safeInteractions = new List<SafeInteraction>{new SafeInteraction { ip = ip, data = datastr }}; + // rgvSafeInteraction = JsonConvert.SerializeObject(safeInteractions); + //} + //LogHelper.Info($"RGV瀹夊叏浜や簰 瀛樺叆鍐呭瓨鍙傛暟{rgvSafeInteraction}"); + //} } 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 42fc845..20db7c6 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/TaskProcess.cs @@ -23,6 +23,9 @@ using System.Threading; using static HH.WCS.JuShi.dispatch.NDC; using static HH.WCS.JuShi.util.Settings; +using System.ComponentModel; +using Newtonsoft.Json.Linq; +using S7.Net; namespace HH.WCS.JuShi.process { @@ -106,16 +109,16 @@ { CacheBitUpdate(mst, true); //鎷嗘墭鏈哄畨鍏ㄤ氦浜�- ctjSafe(mst); + //ctjSafe(mst); } if (state == 6)//鍗歌揣瀹屾垚 { CacheBitUpdate(mst, false); - //rgv瀹夊叏浜や簰 - rgvSafe(mst); - //鎷嗘墭鏈哄畨鍏ㄤ氦浜�- ctjSafe(mst); + ////rgv瀹夊叏浜や簰 + //rgvSafe(mst); + ////鎷嗘墭鏈哄畨鍏ㄤ氦浜�+ //ctjSafe(mst); } if (state == 7) @@ -127,96 +130,104 @@ private static void rgvSafe(WCSTask mst) { //rgv瀹夊叏浜や簰 鏍规嵁缁堢偣璐т綅鎵惧埌鏄摢涓猺gv - var reservoir = Settings.ReservoirAreas.Where(a => a.areaName == "RGV搴撳尯").FirstOrDefault(); + var reservoir = Settings.ReservoirAreas.Where(a => a.areaName == "绔嬪簱鍏ュ簱鍖�).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 rgvSafeInteraction = DeviceProcess.rgvSafeInteraction; + //澶勭悊淇″彿 + var startsub = safeInteractions.code; + var res = rgvSafeInteraction.Substring((startsub - 1) * 2 + 1, 1); + //var safelists = JsonConvert.DeserializeObject<List<SafeInteraction>>(DeviceProcess.rgvSafeInteraction); + LogHelper.Info($"RGV瀹夊叏浜や簰缂撳瓨淇″彿{rgvSafeInteraction}"); + //涓嶇瓑浜�2鍗歌揣瀹屾垚纭淇″彿 灏辨帴鐫�彂 + if (res != "2") { - 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"); + string datastr = "3f001020304050600d0a"; + string a = ((startsub - 1) * 2).ToString(); + //杩斿洖淇″彿澶勭悊 + datastr = datastr.Replace(a + "0", a + "1"); - } + LogHelper.Info($"RGV瀹夊叏浜や簰鍙戦�淇″彿{safeInteractions.ip},{datastr}"); + PlcHelper.SendHex(safeInteractions.ip, datastr); + //浼戠湢3绉掑啀璋�+ Thread.Sleep(3000); + rgvSafe(mst); + } + else + { + //浼戠湢10绉掑啀鍙戜俊鍙�锛堢粰鐜板満璁惧鍚稿悎鏃堕棿璇存槸锛�+ Thread.Sleep(10000); + LogHelper.Info($"RGV瀹夊叏浜や簰鍙戦�淇″彿{safeInteractions.ip},3f001020304050600d0a"); + //鏃犵姸鎬佷俊鍙�+ PlcHelper.SendHex(safeInteractions.ip, "3f001020304050600d0a"); + } } } //鎷嗘墭鏈哄畨鍏ㄤ氦浜� private static void ctjSafe(WCSTask mst) { - PlcDeviceTable plcDeviceTable = null; + PlcDeviceTable plcDeviceTable = S7Helper.plcDeviceTables; + string deviceno = 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); + if (rkreservoirs.deviceNo == "1") + { + deviceno = "1"; + } + else if (rkreservoirs.deviceNo == "2") + { + deviceno = "4"; + } } + //鍑哄彛 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) + if (ckreservoirs.deviceNo == "1") { - addr = 90.1; + deviceno = "3"; + } + else if (rkreservoirs.deviceNo == "2") + { + deviceno = "6"; + } + } + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏ュ弬鏁皗deviceno},{JsonConvert.SerializeObject(plcDeviceTable)}"); + if (plcDeviceTable != null && deviceno != null) + { + //var plcDeviceTables = S7Helper.plcDeviceTables.Where(s => s.DeviceNo == plcDeviceTable.DeviceNo); + + //s7鍐欏叆 + int addr = 182; //鍋忕Щ閲�+ int offsetAddr = 0; //鍋忕Щ閲�+ string deviceNo = null;//鎷嗘墭鏈哄彿 + if (deviceno == "3") + { + offsetAddr = 1; deviceNo = "1"; } - else if (plcDeviceTable.DeviceNo == 1006) + else if (deviceno == "6") { - addr = 180.1; + offsetAddr = 3; deviceNo = "2"; } - else if (plcDeviceTable.DeviceNo == 1001) + else if (deviceno == "1") { - addr = 30.0; + offsetAddr = 0; deviceNo = "1"; } - else if (plcDeviceTable.DeviceNo == 1004) + else if (deviceno == "4") { - addr = 120.0; + offsetAddr = 2; deviceNo = "2"; } LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏deviceNo}锛寋addr}"); - S7Helper.WriteDouble(deviceNo, 9, addr, 1); + S7Helper.WriteDouble(deviceNo, 9, addr, offsetAddr, 1); } } @@ -795,7 +806,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>(); @@ -812,7 +823,6 @@ { list.RemoveAll(s => loca.Contains(s.S_CODE)); } - //绗﹀悎鏉′欢鐨勬帓搴忛�绗竴涓� 鍏堟壘绗竴涓� if (list.Count > 0) { @@ -1383,7 +1393,7 @@ internal static Results UpdateFullStatus(List<CameraMonitor> models) { var result = new Results() { Code = "0", Message = "鎿嶄綔鎴愬姛", Data = null }; - var db = new SqlHelper<Location>().GetInstance(); + var db = new SqlHelper<object>().GetInstance(); //鏍¢獙涓庡唴瀛樻槸鍚︿竴鑷� if (monitorStatus != null) { @@ -1469,40 +1479,50 @@ //鎽勫儚澶寸洃娴嬬┖鎵樼紦瀛樺尯 private static void ProcessEmptyTrayAreas(SqlSugar.ISqlSugarClient db, Location loc, string areaCode1, string areaCode2) { - var plcDeviceTable = new PlcDeviceTable(); - string endLoc = null; - if (loc.S_AREA_CODE.Equals(areaCode1)) + var plcDeviceTable = S7Helper.plcDeviceTables; + if (plcDeviceTable != null) { - plcDeviceTable = S7Helper.plcDeviceTables.Find(s => s.DeviceNo == 1001); - endLoc = Settings.linePlcInfos.Where(s => s.code == "鎷嗘墭鏈�").FirstOrDefault().inLoca; - } - else if (loc.S_AREA_CODE.Equals(areaCode2))//鍏绌烘墭 - { - plcDeviceTable = S7Helper.plcDeviceTables.Find(s => s.DeviceNo == 1004); - endLoc = Settings.linePlcInfos.Where(s => s.code == "鎷嗘墭鏈�").FirstOrDefault().inLoca; - } - //鍒ゆ柇鏄惁鍏佽鏀炬 - if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 0 && plcDeviceTable.requestPut) - { - //鍒涘缓浠诲姟 浠庣┖鎵樼紦瀛樺尯鍙変釜鏂欏埌鎷嗘墭鏈�- var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == loc.S_AREA_CODE - && a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_ROW) - .OrderByDescending(a => a.N_COL).First(); - var startLoc = list.S_CODE; - - string trayCode = ContainerHelper.GenerateCntrNo(); - - LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc}缁堢偣:{endLoc}", "鎷嗘墭"); - var res = TaskProcess.CreateTransport(startLoc, endLoc, "鎷嗘墭", trayCode, 1, 1); - if (res) + string endLoc = null; + bool request = false; + if (loc.S_AREA_CODE.Equals(areaCode1)) { - LogHelper.Info($"璧风偣:{startLoc}缁堢偣:{endLoc}浠诲姟鍒涘缓鎴愬姛", "鎷嗘墭"); + request = plcDeviceTable.requestPut1; + endLoc = Settings.linePlcInfos.Where(s => s.code == "鎷嗘墭鏈�").FirstOrDefault().inLoca; } - else + else if (loc.S_AREA_CODE.Equals(areaCode2))//鍏绌烘墭 { - LogHelper.Info($"璧风偣:{startLoc}缁堢偣:{endLoc}浠诲姟鍒涘缓澶辫触", "鎷嗘墭"); + request = plcDeviceTable.requestPut2; + endLoc = Settings.linePlcInfos.Where(s => s.code == "鎷嗘墭鏈�").FirstOrDefault().inLoca; + } + //鍒ゆ柇鏄惁鍏佽鏀炬 + if (request) + { + //鍒涘缓浠诲姟 浠庣┖鎵樼紦瀛樺尯鍒版媶鎵樻満 + var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == loc.S_AREA_CODE + && a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_ROW) + .OrderByDescending(a => a.N_COL).First(); + var startLoc = list.S_CODE; + + string trayCode = ContainerHelper.GenerateCntrNo(); + + LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc}缁堢偣:{endLoc}", "鎷嗘墭"); + var res = TaskProcess.CreateTransport(startLoc, endLoc, "鎷嗘墭", trayCode, 1, 1); + if (res) + { + LogHelper.Info($"璧风偣:{startLoc}缁堢偣:{endLoc}浠诲姟鍒涘缓鎴愬姛", "鎷嗘墭"); + } + else + { + LogHelper.Info($"璧风偣:{startLoc}缁堢偣:{endLoc}浠诲姟鍒涘缓澶辫触", "鎷嗘墭"); + } } } + else + { + LogHelper.Info($"鏈鍙栧埌鎷嗘墭鏈轰俊鍙�, "鎷嗘墭"); + + } + } /// <summary> /// 鎶芥涓诲姩鍛煎彨 璧风偣锛氶�妫�紦瀛樺尯 @@ -1551,15 +1571,21 @@ /// <summary> /// 涓诲姩鐗╂枡缁戝畾 /// </summary> - /// <param name="model.S_ITEM_CODE">鐗╂枡缂栫爜</param> + /// <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(); + var db = new SqlHelper<object>().GetInstance(); try { + var loc = db.Queryable<Location>().Where(a => a.S_CODE == model.BIND_LOC).First(); + if (loc == null || loc.N_LOCK_STATE != 0) + { + return new Results { Code = "1", Message = $"缁戝畾璐т綅涓嶅瓨鍦ㄦ垨宸茶閿�, Data = null }; + + } string cntrStr = ContainerHelper.GenerateCntrNo(); var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == model.BIND_LOC).First(); if (locCntrRel != null) @@ -1571,6 +1597,12 @@ { return new Results { Code = "1", Message = $"鐗╂枡{model.S_ITEM_CODE}璐т綅{model.BIND_LOC}缁戝畾澶辫触", Data = null }; } + loc.N_CURRENT_NUM++; + var res2 = db.Updateable(loc).UpdateColumns(it => it.N_CURRENT_NUM).ExecuteCommand() > 0; + if (!res2) + { + return new Results { Code = "1", Message = $"璐т綅{model.BIND_LOC}褰撳墠鏁伴噺鑷澶辫触", Data = null }; + } return result; } catch (Exception ex) @@ -1579,6 +1611,42 @@ LogHelper.Error("bindMaterial:" + ex.Message, ex); throw; } + } + /// <summary> + /// 鏁存帓鐗╂枡缁戝畾 + /// </summary> + /// <param name="bondLoc">缁戝畾璐т綅</param> + /// <returns></returns> + internal static Results multBindMaterial(string bondLoc) + { + var result = new Results() { Code = "0", Message = "鏁存帓鐗╂枡缁戝畾鎴愬姛锛�, Data = null }; + var db = new SqlHelper<object>().GetInstance(); + try + { + var location = db.Queryable<Location>().Where(a => a.S_CODE == bondLoc).First(); + //鏌ュ嚭杩欎竴鎺掔殑璐т綅 + var loclist = db.Queryable<Location>() + .Where(a => a.S_AREA_CODE == location.S_AREA_CODE && a.N_ROW == location.N_ROW).ToList(); + foreach (var loc in loclist) + { + //娌¢攣鐨勪笖娌¤揣鐨勬墠缁�+ if (loc.N_LOCK_STATE == 0 && loc.N_CURRENT_NUM < loc.N_CAPACITY) + { + + + } + + } + } + catch (Exception ex) + { + Console.WriteLine("multBindMaterial:" + ex.Message + ex.StackTrace); + LogHelper.Error("multBindMaterial:" + ex.Message, ex); + throw; + } + + + return result; } /// <summary> /// 鎸夐挳鐩掕皟鐢ㄤ笅绾�@@ -1684,47 +1752,52 @@ var result = new safeResult() { code = "1", msg = "success" }; try { - 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 reservoirs = Settings.SafeInteractions.Where(s => s.location == model.STATION_NAME).FirstOrDefault();//y0-0000 y1-0001 on-FF00 off-0000 + //var rgvSafeInteraction = DeviceProcess.rgvSafeInteraction; + var plcDeviceTable = S7Helper.plcDeviceTables; + if (plcDeviceTable != null) { - LogHelper.Info($"RGV瀹夊叏浜や簰 璇锋眰鐐逛綅锛歿model.STATION_NAME}璇锋眰鐮侊細{model.APPLY_CODE}"); - //鍗歌揣璇锋眰杩涘叆 - if (model.APPLY_CODE.Equals("5")) + //RGV + if (reservoirs.type.Equals("RGV")) { + LogHelper.Info($"RGV瀹夊叏浜や簰 璇锋眰鐐逛綅锛歿model.STATION_NAME}璇锋眰鐮侊細{model.APPLY_CODE}"); //鏍规嵁ip璇荤姸鎬�- if (rgvSafeInteraction != null) + LogHelper.Info($"RGV瀹夊叏浜や簰缂撳瓨淇″彿{JsonConvert.SerializeObject(plcDeviceTable.RGVAllowUnload)}"); + //澶勭悊淇″彿 + var res = plcDeviceTable.RGVAllowUnload[reservoirs.code]; + //鍗歌揣璇锋眰杩涘叆 + if (model.APPLY_CODE.Equals("5")) { - LogHelper.Info($"RGV瀹夊叏浜や簰鍙傛暟{JsonConvert.SerializeObject(rgvSafeInteraction)}"); - var safelist = JsonConvert.DeserializeObject<List<SafeInteraction>>(rgvSafeInteraction); - if (safelist.Any()) + //1鍏佽鍗歌揣 + if (res == 1) { - 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" }; - } + LogHelper.Info($"RGV瀹夊叏浜や簰 鍏佽鍗歌揣"); + return new safeResult() { code = "0", msg = "success" }; } } + //鍗歌揣鍚庡凡绂诲紑 + else if (model.APPLY_CODE.Equals("8")) + { + safeAssistant(reservoirs.code,res); + LogHelper.Info($"RGV瀹夊叏浜や簰 鍗歌揣瀹屾垚"); + return new safeResult() { code = "0", msg = "success" }; + } + + } - } - //鎷嗘墭鏈�- else if (reservoirs.type.Equals("CTJ")) - { - 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) + //鎷嗘墭鏈�+ else if (reservoirs.type.Equals("CTJ")) { + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜� 璇锋眰鐐逛綅锛歿model.STATION_NAME}璇锋眰鐮侊細{model.APPLY_CODE}"); + //鎵惧埌绾夸綋 鏍规嵁绾夸綋鎵惧唴瀛橀噷鐨勭姸鎬�+ var reservoirs1 = Settings.ConveyorLinesInfos.Where(s => s.location == model.STATION_NAME).FirstOrDefault(); + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑弬鏁皗JsonConvert.SerializeObject(plcDeviceTable)}"); if (model.APPLY_CODE.Equals("1")) { //0-鑴辨満鐘舵�锛�-寰呮満鐘舵�锛�-杩愯涓� 寰呮満涓旀湁鎵樼洏涓旇姹傚彇妗嗘墠璧�- if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 1 && plcDeviceTable.requestTake) + if ((reservoirs1.deviceNo == "1" && plcDeviceTable.requestTake1) || + (reservoirs1.deviceNo == "2" && plcDeviceTable.requestTake2)) { LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜�鍏佽鍙栨"); return new safeResult() { code = "0", msg = "success" }; @@ -1734,40 +1807,50 @@ else if (model.APPLY_CODE.Equals("5")) { //0-鑴辨満鐘舵�锛�-寰呮満鐘舵�锛�-杩愯涓� 寰呮満涓旀棤鎵樼洏涓斿厑璁告斁妗嗘墠璧�- if (plcDeviceTable.workMode == 1 && plcDeviceTable.lightAction == 0 && plcDeviceTable.requestPut) + if ((reservoirs1.deviceNo == "1" && plcDeviceTable.requestPut1) || + (reservoirs1.deviceNo == "2" && plcDeviceTable.requestPut2)) { LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜�鍏佽鏀炬"); return new safeResult() { code = "0", msg = "success" }; } } + //鍙栬揣绂诲紑 + else if (model.APPLY_CODE.Equals("4")) + { + int offsetAddr = 8; + if (reservoirs1.deviceNo == "1") + { + offsetAddr = 1; + } + else if (reservoirs1.deviceNo == "2") + { + offsetAddr = 3; + } + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏reservoirs1.deviceNo}锛寋offsetAddr}"); + S7Helper.WriteDouble(reservoirs1.deviceNo, 9, 182, offsetAddr, 1); + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜�鍙栨绂诲紑"); + return new safeResult() { code = "0", msg = "success" }; + } + //鍗歌揣绂诲紑 + else if (model.APPLY_CODE.Equals("8")) + { + int offsetAddr = 8;//闅忎究缁欎竴涓�+ if (reservoirs1.deviceNo == "1") + { + offsetAddr = 0; + } + else if (reservoirs1.deviceNo == "2") + { + offsetAddr = 2; + } + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜掑啓鍏reservoirs1.deviceNo}锛寋offsetAddr}"); + S7Helper.WriteDouble(reservoirs1.deviceNo, 9, 182, offsetAddr, 1); + LogHelper.Info($"鎷嗘墭鏈哄畨鍏ㄤ氦浜�鍙栨绂诲紑"); + return new safeResult() { code = "0", msg = "success" }; + } + } } - - //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) @@ -1778,6 +1861,59 @@ } } + private static void safeAssistant(int code,int res) { + //2鍗歌揣瀹屾垚纭 + if (res != 2) + { + //鍗歌揣瀹屾垚淇″彿 + S7Helper.WriteInt(50, 0, (short)(code * 10 + 1)); + Thread.Sleep(3000); + safeAssistant(code,res); + } + else + { + S7Helper.WriteInt(50, 0, (short)(code * 10)); + } + + } + + /// <summary> + /// 鎸夐挳鎺у埗鏈嶅姟寮�叧 + /// </summary> + /// <param name="isusing.S_STATUS">鏈嶅姟鐘舵�</param> + /// <param name="isusing.S_TYPE">鏈嶅姟绫诲瀷</param> + /// <returns></returns> + internal static Results switchButton(Isusing isusing) + { + var db = new SqlHelper<object>().GetInstance(); + var result = new Results() { Code = "1", Message = $"鏈嶅姟鐘舵�澶辫触锛�, Data = null }; + var isusinglist = db.Queryable<Isusing>().Where(a => a.S_TYPE == isusing.S_TYPE).First(); + isusinglist.S_STATUS = isusing.S_STATUS; + var res = db.Updateable(isusinglist).UpdateColumns(it => it.S_STATUS).ExecuteCommand() > 0; + if (res) + { + return new Results() { Code = "0", Message = $"鏈嶅姟鐘舵�淇敼鎴愬姛锛�, Data = null }; + + } + return result; + } + //tcp鍙戦�淇″彿 娴嬭瘯鐢�+ internal static Results tcpSend(string str) + { + var reservoirs = Settings.SafeInteractions.Where(s => s.code == 1).FirstOrDefault(); + //娴嬭瘯鐢�+ LogHelper.Info($"RGV瀹夊叏浜や簰鍙戦�淇″彿{reservoirs.ip},{str}"); + //鏃犵姸鎬佷俊鍙�+ bool res = PlcHelper.SendHex(reservoirs.ip, str); + if (res) + { + return new Results() { Code = "0", Message = $"鍙戦�鎴愬姛", Data = null }; + } + + return new Results() { Code = "1", Message = $"鍙戦�澶辫触", Data = null }; + } + + } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/util/Settings.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/util/Settings.cs index b75b64f..62f7d67 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/util/Settings.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/util/Settings.cs @@ -195,6 +195,7 @@ public class SafeInteraction { public string pointCode { get; set; } + public int code{ get; set; } public string ip { get; set; } public string type { get; set; } public string location { get; set; } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/wms/ContainerHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/wms/ContainerHelper.cs index c6d587a..a04aa45 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/wms/ContainerHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/wms/ContainerHelper.cs @@ -245,43 +245,43 @@ /// <param name="batchNo"></param> /// <param name="qty"></param> /// <returns></returns> - internal static bool BindCntrItem(Container cntr, string itemCode, string batchNo, float qty, string putawayNo) - { - var res = false; - var db = new SqlHelper<object>().GetInstance(); - try - { - db.BeginTran(); - //1.鏌ョ湅鏄惁鏈夌浉鍚岀墿鏂欐壒娆$殑淇℃伅锛屽鏋滄湁瑕佺疮鍔狅紝涓嶅悓鎵规鐨勫彲浠ュ垎寮�- var cir = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == itemCode && a.S_BATCH_NO == batchNo).First(); - if (cir != null) - { - cir.F_QTY += qty; - db.Updateable(cir).UpdateColumns(it => new { it.F_QTY,it.S_CK }).ExecuteCommand(); - } - else - { - //2.鎻掑叆鏂扮殑瀹瑰櫒鐗╂枡淇℃伅锛堝鍣ㄥ彿涓嶅彉锛�- cir = new CntrItemDetail { S_CNTR_CODE = cntr.S_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode, S_PUTAWAY_NO = putawayNo}; - db.Insertable<CntrItemDetail>(cir).ExecuteCommand(); - } - var count = db.Queryable<CntrItemDetail>().Count(a => a.S_CNTR_CODE == cntr.S_CODE); - cntr.N_DETAIL_COUNT = count; - cntr.C_ENABLE = "N";//鐮佺洏鍚庡皢鎵樼洏璁剧疆涓轰笉鍙敤鐘舵�锛屽叆搴撳悗鍙樻垚鍙敤 - //db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE, it.S_SRC }).ExecuteCommand(); - db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE }).ExecuteCommand(); + //internal static bool BindCntrItem(Container cntr, string itemCode, string batchNo, float qty, string putawayNo) + //{ + // var res = false; + // var db = new SqlHelper<object>().GetInstance(); + // try + // { + // db.BeginTran(); + // //1.鏌ョ湅鏄惁鏈夌浉鍚岀墿鏂欐壒娆$殑淇℃伅锛屽鏋滄湁瑕佺疮鍔狅紝涓嶅悓鎵规鐨勫彲浠ュ垎寮�+ // var cir = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == itemCode && a.S_BATCH_NO == batchNo).First(); + // if (cir != null) + // { + // cir.F_QTY += qty; + // db.Updateable(cir).UpdateColumns(it => new { it.F_QTY,it.S_CK }).ExecuteCommand(); + // } + // else + // { + // //2.鎻掑叆鏂扮殑瀹瑰櫒鐗╂枡淇℃伅锛堝鍣ㄥ彿涓嶅彉锛�+ // cir = new CntrItemDetail { S_CNTR_CODE = cntr.S_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode, S_PUTAWAY_NO = putawayNo}; + // db.Insertable<CntrItemDetail>(cir).ExecuteCommand(); + // } + // var count = db.Queryable<CntrItemDetail>().Count(a => a.S_CNTR_CODE == cntr.S_CODE); + // cntr.N_DETAIL_COUNT = count; + // cntr.C_ENABLE = "N";//鐮佺洏鍚庡皢鎵樼洏璁剧疆涓轰笉鍙敤鐘舵�锛屽叆搴撳悗鍙樻垚鍙敤 + // //db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE, it.S_SRC }).ExecuteCommand(); + // db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE }).ExecuteCommand(); - db.CommitTran(); - res = true; - } - catch (Exception ex) - { - db.RollbackTran(); - Console.WriteLine(ex.Message); - } + // db.CommitTran(); + // res = true; + // } + // catch (Exception ex) + // { + // db.RollbackTran(); + // Console.WriteLine(ex.Message); + // } - return res; - } + // return res; + //} ///// <summary> ///// 鐗╂枡淇℃伅缁戝畾鍒版弧瀹瑰櫒涓�@@ -621,6 +621,7 @@ var db = new SqlHelper<object>().GetInstance(); try { + LogHelper.Info($"BindCntrItem============="); db.BeginTran(); var cir = new CntrItemDetail { S_CNTR_CODE = trayCode, S_ITEM_CODE = itemCode, S_ITEM_NAME = itemName}; db.Insertable<CntrItemDetail>(cir).ExecuteCommand(); @@ -630,6 +631,7 @@ } catch (Exception ex) { + LogHelper.Error("BindCntrItem:" + ex.Message, ex); db.Ado.RollbackTran(); } return res; -- Gitblit v1.9.1