From 9b85a8b67aa6354ee9ea1a13c5799bf1c934922f Mon Sep 17 00:00:00 2001 From: IPC-610 <IPC-610@DESKTOP-6LEOOS3> Date: 星期四, 31 十月 2024 18:12:14 +0800 Subject: [PATCH] 修改问题 --- Admin.NET/WCS.Application/PLC/PLCService.cs | 327 +++++++++--------- Web/src/views/device/deviceInfo/index.vue | 189 +++++++--- Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs | 362 ++++++++++++++++++-- Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs | 39 +- Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs | 4 Web/src/api/wcs/wcsDevice.ts | 16 Admin.NET/WCS.Application/PLC/PLCTaskAction.cs | 6 Web/src/views/device/deviceStartStop/index.vue | 39 + 8 files changed, 687 insertions(+), 295 deletions(-) diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs index 0d50872..c3f9329 100644 --- a/Admin.NET/WCS.Application/PLC/PLCService.cs +++ b/Admin.NET/WCS.Application/PLC/PLCService.cs @@ -20,6 +20,7 @@ namespace WCS.Application; public static class PLCService { + private static readonly object OLock = new object(); private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); @@ -1704,7 +1705,7 @@ } } // 鏍规嵁绠卞唴鍝佺鍙疯幏鍙栫爜韬茬粦瀹氬伐浣嶅強瀵瑰簲鐨勫垎閬撳彿 - var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo); + var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo && w.Status == "1"); if (checkTaskInfo == null) { // 缁戝畾淇℃伅涓簄ull鍐欏叆鍓旈櫎閫氶亾鍙� @@ -1867,181 +1868,184 @@ case "40": // 璇锋眰缁勬墭锛岀敵璇峰叆搴� { - // 鏍规嵁宸ヤ綅鍙凤紝鑾峰彇鎵樼洏鍙� - var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false); - // 鏍规嵁宸ヤ綅鍙疯幏鍙� 鎵樼洏绾胯宸ヤ綅鍙风殑閰嶇疆淇℃伅 - var numModel = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId != modDevice.PlcId); - var posModel = PLCTaskAction.plcPositions.First(m => m.DeviceId == numModel.Id && m.Text == "鐩殑宸ヤ綅" && m.IsDelete == false); - if (checkTaskMedel == null) + lock (OLock) { - Log.Error(string.Format("缁勬墭澶辫触鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栨墭鐩樺彿澶辫触!", modDevice.StationNum)); - - // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃 - var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234"); - if (retVal.IsSucceed) + // 鏍规嵁宸ヤ綅鍙凤紝鑾峰彇鎵樼洏鍙� + var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false); + // 鏍规嵁宸ヤ綅鍙疯幏鍙� 鎵樼洏绾胯宸ヤ綅鍙风殑閰嶇疆淇℃伅 + var numModel = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId != modDevice.PlcId); + var posModel = PLCTaskAction.plcPositions.First(m => m.DeviceId == numModel.Id && m.Text == "鐩殑宸ヤ綅" && m.IsDelete == false); + if (checkTaskMedel == null) { - // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� - retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); - } - break; - } - - // 鐮佸灈宸ヤ綅鎵樼洏鍙� - string palletNo = checkTaskMedel.PalletNo; - - // 鏄惁婕旂ず妯″紡 - if (PLCTaskAction.boDemo) - { - // 鐩存帴绠眞ms鐢宠宸烽亾 - var http = new HttpService(); - string TaskNo = "", EndLocate = ""; - string strMsg = http.RequestRoadWay(palletNo, modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo); - if (strMsg.Contains("-1")) - { - Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg)); - break; - } - else - { - // 鑾峰彇鍏ュ簱浠诲姟淇℃伅 - var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)); - if (taskModel != null) - { - // 鑾峰彇鍏ュ簱鍙栬揣宸ヤ綅 - string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2"); - - var listResult = new List<Result>(); - - // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅} - listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue)); // 鐩爣宸ヤ綅 - var modPosTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟鍙�" && s.IsDelete == false); - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, numModel.DbNumber, modPosTask.PlcPos, TaskNo)); - var modPosTaskType = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟绫诲瀷" && s.IsDelete == false); - var taskTypeStr = (int)taskModel.TaskType; - listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, numModel.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); - - if (listResult.All(s => s.IsSucceed)) - { - // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� - var retVal1 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); - if (retVal1.IsSucceed) - { - // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц - taskModel.Status = TaskStatusEnum.Doing; - _db.Updateable(taskModel).ExecuteCommand(); - - // 鎻掑叆浠诲姟鏄庣粏 - var modInsertTaskMonitor = new WcsTaskMonitor() - { - TaskNo = TaskNo, - PlcId = modDevice.Id, - PlcName = modDevice.Text, - InteractiveMsg = $"鍐欏叆鎸囦护50锛氱敵璇峰贩閬撴垚鍔�", - PalletNo = palletNo, - Status = TaskStatusEnum.Complete, - StartLocat = modDevice.StationNum, - EndLocat = strMsg, - }; - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); - // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� - HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - } - - //// 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅} - //var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue); - //if (retVal.IsSucceed) - //{ - // // 鍐欏叆鐮佸灈浜や簰-缁勬墭鍥炲娴佺▼瀛� - // retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); - - // // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц - // taskModel.Status = TaskStatusEnum.Doing; - // _db.Updateable(taskModel).ExecuteCommand(); - //} - } - } - } - else - { - // 鏍规嵁鎵樼洏鍙凤紝灏嗙粍鎵樹俊鎭彃鍏oxinfolog琛� 骞跺垹闄oxinfo琛ㄦ暟鎹� - var boxInfoList = await _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToListAsync(); - if (boxInfoList.Count <= 0) - { - Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0}锛岀鐮佷俊鎭笉瀛樺湪", modDevice.StationNum)); + Log.Error(string.Format("缁勬墭澶辫触鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栨墭鐩樺彿澶辫触!", modDevice.StationNum)); // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃 var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234"); - if (retVal.IsSucceed) + if (retVal.IsSucceed) { // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); } break; } - string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'"; - int insertCount = _db.Ado.ExecuteCommand(sqlStr); - if (insertCount > 0) + + // 鐮佸灈宸ヤ綅鎵樼洏鍙� + string palletNo = checkTaskMedel.PalletNo; + + // 鏄惁婕旂ず妯″紡 + if (PLCTaskAction.boDemo) { - // 缁勬墭鎴愬姛鍚庡皢淇℃伅瀛樺埌log琛� - string sqlStr2 = $"delete from WCSBoxInfoLog where IsDelete=0 and PalletNo='{palletNo}'"; - _db.Ado.ExecuteCommand(sqlStr2); - } - // 鍚慦MS鐢宠宸烽亾 - var http = new HttpService(); - string TaskNo = "", EndLocate = ""; - string strMsg = http.BindRequestRoadWay(checkTaskMedel.OrderNo,palletNo, checkTaskMedel.BoxCount.ToDecimal(),"0", checkTaskMedel.SkuNo, checkTaskMedel.LotNo, "","", boxInfoList, - modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo); - if (strMsg.Contains("-1")) - { - Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg)); - break; - } - else - { - // 鑾峰彇鍏ュ簱浠诲姟淇℃伅 - var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && m.Status == TaskStatusEnum.Wait); - if (taskModel != null) + // 鐩存帴绠眞ms鐢宠宸烽亾 + var http = new HttpService(); + string TaskNo = "", EndLocate = ""; + string strMsg = http.RequestRoadWay(palletNo, modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo); + if (strMsg.Contains("-1")) { - // 鑾峰彇鍏ュ簱鍙栬揣宸ヤ綅 - string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2"); + Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg)); + break; + } + else + { + // 鑾峰彇鍏ュ簱浠诲姟淇℃伅 + var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)); + if (taskModel != null) + { + // 鑾峰彇鍏ュ簱鍙栬揣宸ヤ綅 + string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2"); - var listResult = new List<Result>(); - // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅} - listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue)); // 鐩爣宸ヤ綅 - var modPosTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟鍙�" && s.IsDelete == false); - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, numModel.DbNumber, modPosTask.PlcPos, TaskNo)); - var modPosTaskType = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟绫诲瀷" && s.IsDelete == false); - var taskTypeStr = (int)taskModel.TaskType; - listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, numModel.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); + var listResult = new List<Result>(); - if (listResult.All(s => s.IsSucceed)) + // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅} + listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue)); // 鐩爣宸ヤ綅 + var modPosTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟鍙�" && s.IsDelete == false); + listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, numModel.DbNumber, modPosTask.PlcPos, TaskNo)); + var modPosTaskType = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟绫诲瀷" && s.IsDelete == false); + var taskTypeStr = (int)taskModel.TaskType; + listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, numModel.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); + + if (listResult.All(s => s.IsSucceed)) + { + // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� + var retVal1 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); + if (retVal1.IsSucceed) + { + // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц + taskModel.Status = TaskStatusEnum.Doing; + _db.Updateable(taskModel).ExecuteCommand(); + + // 鎻掑叆浠诲姟鏄庣粏 + var modInsertTaskMonitor = new WcsTaskMonitor() + { + TaskNo = TaskNo, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护50锛氱敵璇峰贩閬撴垚鍔�", + PalletNo = palletNo, + Status = TaskStatusEnum.Complete, + StartLocat = modDevice.StationNum, + EndLocat = strMsg, + }; + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + } + } + + //// 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅} + //var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue); + //if (retVal.IsSucceed) + //{ + // // 鍐欏叆鐮佸灈浜や簰-缁勬墭鍥炲娴佺▼瀛� + // retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); + + // // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц + // taskModel.Status = TaskStatusEnum.Doing; + // _db.Updateable(taskModel).ExecuteCommand(); + //} + } + } + } + else + { + // 鏍规嵁鎵樼洏鍙凤紝灏嗙粍鎵樹俊鎭彃鍏oxinfolog琛� 骞跺垹闄oxinfo琛ㄦ暟鎹� + var boxInfoList = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToList(); + if (boxInfoList.Count <= 0) + { + Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0}锛岀鐮佷俊鎭笉瀛樺湪", modDevice.StationNum)); + + // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃 + var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234"); + if (retVal.IsSucceed) { // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� - var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); - if (retVal.IsSucceed) - { - // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц - taskModel.Status = TaskStatusEnum.Doing; - _db.Updateable(taskModel).ExecuteCommand(); + retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); + } + break; + } + string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'"; + int insertCount = _db.Ado.ExecuteCommand(sqlStr); + if (insertCount > 0) + { + // 缁勬墭鎴愬姛鍚庡皢淇℃伅瀛樺埌log琛� + string sqlStr2 = $"delete from WCSBoxInfoLog where IsDelete=0 and PalletNo='{palletNo}'"; + _db.Ado.ExecuteCommand(sqlStr2); + } + // 鍚慦MS鐢宠宸烽亾 + var http = new HttpService(); + string TaskNo = "", EndLocate = ""; + string strMsg = http.BindRequestRoadWay(checkTaskMedel.OrderNo,palletNo, checkTaskMedel.BoxCount.ToDecimal(),"0", checkTaskMedel.SkuNo, checkTaskMedel.LotNo, "","", boxInfoList, + modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo); + if (strMsg.Contains("-1")) + { + Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg)); + break; + } + else + { + // 鑾峰彇鍏ュ簱浠诲姟淇℃伅 + var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && m.Status == TaskStatusEnum.Wait); + if (taskModel != null) + { + // 鑾峰彇鍏ュ簱鍙栬揣宸ヤ綅 + string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2"); - // 鎻掑叆浠诲姟鏄庣粏 - var modInsertTaskMonitor = new WcsTaskMonitor() + var listResult = new List<Result>(); + // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅} + listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue)); // 鐩爣宸ヤ綅 + var modPosTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟鍙�" && s.IsDelete == false); + listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, numModel.DbNumber, modPosTask.PlcPos, TaskNo)); + var modPosTaskType = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟绫诲瀷" && s.IsDelete == false); + var taskTypeStr = (int)taskModel.TaskType; + listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, numModel.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); + + if (listResult.All(s => s.IsSucceed)) + { + // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); + if (retVal.IsSucceed) { - TaskNo = TaskNo, - PlcId = modDevice.Id, - PlcName = modDevice.Text, - InteractiveMsg = $"鍐欏叆鎸囦护50锛氱敵璇峰贩閬撴垚鍔�", - PalletNo = palletNo, - Status = TaskStatusEnum.Complete, - StartLocat = modDevice.StationNum, - EndLocat = strMsg, - }; - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); - // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� - HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц + taskModel.Status = TaskStatusEnum.Doing; + _db.Updateable(taskModel).ExecuteCommand(); + + // 鎻掑叆浠诲姟鏄庣粏 + var modInsertTaskMonitor = new WcsTaskMonitor() + { + TaskNo = TaskNo, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护50锛氱敵璇峰贩閬撴垚鍔�", + PalletNo = palletNo, + Status = TaskStatusEnum.Complete, + StartLocat = modDevice.StationNum, + EndLocat = strMsg, + }; + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + } } } } @@ -2113,11 +2117,11 @@ } /// <summary> - /// 鑷姩缁撴壒 + /// 鑷姩缁撴壒 骞� 瑙g粦鍒嗛亾 /// </summary> /// <param name="lotNo">鎵规鍙�</param> /// <param name="plcConn">Plc杩炴帴</param> - /// <param name="status">鏄惁瑙g粦鍒嗛亾 0锛氳В缁� 1锛氱粦瀹�</param> + /// <param name="status">鏄惁瑙g粦鍒嗛亾 0锛氳В缁� 1锛氱粦瀹�</param> private static void AutoEndLot(string lotNo,PLCUtil plcConn,string status) { try @@ -2134,7 +2138,10 @@ foreach (var item in checkTaskList) { #region#缁橮LC鍐欏叆缁撴壒鎵规鍙� + // 鍐欏叆缁撴壒淇″彿 var ret = plcConn.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PosLot, "1"); + // 鍒嗛亾瑙g粦锛屾姄绠卞搧绉嶅啓鍏�0 + var ret1 = plcConn.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PlcPos, "0"); if (ret.IsSucceed) { //鍐欏叆娴佺▼瀛楁垚鍔熷悗鏇存柊鍒嗘嫞浠诲姟 liudl 鏈�鍚庝竴鎵樼洏鐢宠瀹屽叆搴撴墠鍙竻绌� @@ -2145,7 +2152,7 @@ //item.SkuName = ""; //item.BoxType = ""; //item.Qty = 0; - //item.PZNo = ""; + item.PZNo = ""; item.Status = status; // 缁戝畾鍒嗛亾 0锛氳В缁� 1锛氱粦瀹� //鏇存柊鍒嗘嫞浠诲姟 diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs index 504a4e7..390cd4c 100644 --- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs +++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs @@ -141,7 +141,7 @@ } if (!modPlcUtil.Connected) { - Thread.Sleep(10000); + Thread.Sleep(1000); modPlcUtil.Open(); continue; } @@ -182,7 +182,7 @@ } } - Thread.Sleep(50000); + Thread.Sleep(1000); } catch (OperationCanceledException) { @@ -245,7 +245,7 @@ HubUtil.PublicPlcConn(modPlc); } } - Thread.Sleep(1000); + Thread.Sleep(10000); } } catch (OperationCanceledException) diff --git a/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs b/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs index 82a8859..b99dd08 100644 --- a/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs +++ b/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs @@ -233,26 +233,27 @@ [DisplayName("浠诲姟寮哄埗缁撴壒")] public async Task CloseTaskForPLC(CloseTaskPLCInput input) { - if (PLCTaskAction.boDemo) - { - //婕旂ず妯″紡 - var checkTaskList2 = await _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().FirstAsync(w => w.Port == "208"); + // 娉ㄩ噴锛氭紨绀烘ā寮忎笉缁戝畾鍒嗛亾銆俵iudl 2024-10-30 + //if (PLCTaskAction.boDemo) + //{ + // //婕旂ず妯″紡 + // var checkTaskList2 = await _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().FirstAsync(w => w.Port == "208"); - var deviceInfo = await _wcsDeviceRep.Context.Queryable<WcsDevice>().FirstAsync(w => w.StationNum == "208"); - if (deviceInfo == null) - { - throw Oops.Bah($"鎵句笉鍒板伐浣嶅彿锛�208鐨勭爜鍨涘伐浣嶄俊鎭�"); - } - var modPlc = await _wcsDeviceRep.Context.Queryable<WcsPlc>().FirstAsync(s => s.Id == deviceInfo.PlcId); - if (modPlc == null) - { - throw Oops.Bah($"鎵句笉鍒板伐浣嶅彿锛�208鐨勮澶囦俊鎭�"); - } - PLCUtil modUtil = new PLCUtil(modPlc); + // var deviceInfo = await _wcsDeviceRep.Context.Queryable<WcsDevice>().FirstAsync(w => w.StationNum == "208"); + // if (deviceInfo == null) + // { + // throw Oops.Bah($"鎵句笉鍒板伐浣嶅彿锛�208鐨勭爜鍨涘伐浣嶄俊鎭�"); + // } + // var modPlc = await _wcsDeviceRep.Context.Queryable<WcsPlc>().FirstAsync(s => s.Id == deviceInfo.PlcId); + // if (modPlc == null) + // { + // throw Oops.Bah($"鎵句笉鍒板伐浣嶅彿锛�208鐨勮澶囦俊鎭�"); + // } + // PLCUtil modUtil = new PLCUtil(modPlc); - var ret = modUtil.SetPlcDBValue(checkTaskList2.PosTypeLot, checkTaskList2.DbNumber, checkTaskList2.PosLot, "1"); - return; - } + // var ret = modUtil.SetPlcDBValue(checkTaskList2.PosTypeLot, checkTaskList2.DbNumber, checkTaskList2.PosLot, "1"); + // return; + //} // 姝e父妯″紡 if (string.IsNullOrWhiteSpace(input.lotNo)) @@ -280,7 +281,7 @@ PLCUtil modUtil = new PLCUtil(modPlc); if (modUtil.Connected) { - var ret = modUtil.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PosLot, "1"); + var ret = modUtil.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PosLot, "0"); // 瑙g粦鍒嗛亾 if (ret.IsSucceed) { //鍐欏叆娴佺▼瀛楁垚鍔熷悗鏇存柊鍒嗘嫞浠诲姟 diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs index 2428bf4..8bcd3a2 100644 --- a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs +++ b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs @@ -373,6 +373,10 @@ /// 妤煎眰 /// </summary> public string Layer { get; set; } + /// <summary> + /// 浜嬩欢缁撴灉 true/false + /// </summary> + public string FuncName { get; set; } } diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs b/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs index ee6a929..dd5008e 100644 --- a/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs +++ b/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs @@ -27,6 +27,150 @@ #region 宸ヤ綔鍙版搷浣� + + /// <summary> + /// 鎵嬪姩鎿嶄綔PLC閿佸畾鍐欏叆宸ヤ綅淇℃伅 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost] + [ApiDescriptionSettings(Name = "WriteLocationInfo")] + [DisplayName("鎵嬪姩鎿嶄綔PLC閿佸畾鍐欏叆宸ヤ綅淇℃伅")] + public async Task WriteLocationInfo(WcsDeviceUpInfo input) + { + WcsPlc modPlc; + string DbNum = "";// DB鍧� + + if (string.IsNullOrWhiteSpace(input.LocatNo))//濡傛灉宸ヤ綅涓虹┖ + { + throw Oops.Bah("宸ヤ綅涓嶈兘涓虹┖"); + } + var plcList = await _wcsPlcRep.Context.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.IsDelete == false).ToListAsync(); + switch (input.Layer) + { + case "1": + modPlc = plcList.FirstOrDefault(m => m.Text == "1灞傛墭鐩樿緭閫佺嚎"); + if (modPlc == null) + throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅"); + DbNum = ""; + break; + case "2": + modPlc = plcList.FirstOrDefault(m => m.Text == "2灞傛墭鐩樿緭閫佺嚎"); + if (modPlc == null) + throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅"); + DbNum = "DB91"; + break; + case "3": + modPlc = plcList.FirstOrDefault(m => m.Text == "3灞傛墭鐩樿緭閫佺嚎"); + if (modPlc == null) + throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅"); + DbNum = ""; + break; + default: + throw Oops.Bah("妤煎眰淇℃伅閿欒"); + } + + var device = await _wcsDeviceRep.Context.Queryable<WcsDevice>().FirstAsync(s => s.PlcId == modPlc.Id && s.StationNum == input.LocatNo && s.IsDelete == false && s.DeviceType == DeviceTypeEnum.Show); + if (device == null) + { + throw Oops.Bah("褰撳墠妤煎眰鏈煡璇㈠埌璇ュ伐浣嶄俊鎭�"); + } + PLCUtil modUtil = new PLCUtil(modPlc); + + switch (input.TypeName) + { + case "suoding": // 閿佸畾 + modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo); + break; + + default: + break; + } + + modUtil.Close(); + } + + + /// <summary> + /// 鑾峰彇宸ヤ綅涓婁俊鎭� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost] + [ApiDescriptionSettings(Name = "GetLocationInfo")] + [DisplayName("鑾峰彇宸ヤ綅涓婁俊鎭�")] + public async Task<WcsDeviceUpInfo> GetLocationInfo(WcsDeviceUpInfo input) + { + WcsPlc modPlc; + string DbNum = "";// DB鍧� + + if (string.IsNullOrWhiteSpace(input.LocatNo))//濡傛灉宸ヤ綅涓虹┖ + { + throw Oops.Bah("宸ヤ綅涓嶈兘涓虹┖"); + } + var plcList = await _wcsPlcRep.Context.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.IsDelete == false).ToListAsync(); + switch (input.Layer) + { + case "1": + modPlc = plcList.FirstOrDefault(m => m.Text == "1灞傛墭鐩樿緭閫佺嚎"); + if (modPlc == null) + throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅"); + DbNum = ""; + break; + case "2": + modPlc = plcList.FirstOrDefault(m => m.Text == "2灞傛墭鐩樿緭閫佺嚎"); + if (modPlc == null) + throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅"); + DbNum = "DB1100"; + break; + case "3": + modPlc = plcList.FirstOrDefault(m => m.Text == "3灞傛墭鐩樿緭閫佺嚎"); + if (modPlc == null) + throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅"); + DbNum = ""; + break; + default: + throw Oops.Bah("妤煎眰淇℃伅閿欒"); + } + + var device = await _wcsDeviceRep.Context.Queryable<WcsDevice>().FirstAsync(s => s.PlcId == modPlc.Id && s.StationNum == input.LocatNo && s.IsDelete == false && s.DeviceType == DeviceTypeEnum.Show); + if (device == null) + { + throw Oops.Bah("褰撳墠妤煎眰鏈煡璇㈠埌璇ュ伐浣嶄俊鎭�"); + } + PLCUtil modUtil = new PLCUtil(modPlc); + WcsDeviceUpInfo data = new WcsDeviceUpInfo(); + data.FuncName = ""; + data.Layer = ""; + data.LocatNo = input.LocatNo; + data.TypeName = ""; + var (result2, value2) = modUtil.GetPlcDBValue(PLCDataTypeEnum.String, DbNum, "4"); + data.PalletNo = value2; + var (result3, value3) = modUtil.GetPlcDBValue(PLCDataTypeEnum.String, DbNum, "14"); + data.TaskNo = value3; + var (result4, value4) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "34"); + data.StartLoction = value4.ToString(); + var (result5, value5) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "36"); + data.EndLoction = value5.ToString(); + + var (result6, value6) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "38"); + data.StartPai = value6.ToString(); + var (result7, value7) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "40"); + data.StartLie = value7.ToString(); + var (result8, value8) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "42"); + data.StartCeng = value8.ToString(); + + + var (result9, value9) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "44"); + data.EndPai = value9.ToString(); + var (result10, value10) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "46"); + data.EndLie = value10.ToString(); + var (result11, value11) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48"); + data.EndCeng = value11.ToString(); + + modUtil.Close(); + return data; + } /// <summary> /// 鎵嬪姩鎿嶄綔PLC淇℃伅 /// </summary> @@ -57,7 +201,7 @@ modPlc = plcList.FirstOrDefault(m => m.Text == "2灞傛墭鐩樿緭閫佺嚎"); if (modPlc == null) throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅"); - DbNum = "91"; + DbNum = "DB91"; break; case "3": modPlc = plcList.FirstOrDefault(m => m.Text == "3灞傛墭鐩樿緭閫佺嚎"); @@ -74,12 +218,14 @@ { throw Oops.Bah("褰撳墠妤煎眰鏈煡璇㈠埌璇ュ伐浣嶄俊鎭�"); } - PLCUtil modUtil = new PLCUtil(modPlc); + + + // true 锛� 鎵嬪姩妯″紡 false:鑷姩妯″紡 var (result, value) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.4"); if (result.IsSucceed) { - if (input.TypeName != "shoudong" && value.ToString().ToLower() != "false") + if (input.TypeName != "shoudong" && value.ToString().ToLower() == "false" && input.TypeName != "huifu" && input.TypeName != "UpTask" ) { throw Oops.Bah("褰撳墠涓鸿嚜鍔ㄦā寮忥紝璇峰厛鍒囨崲涓烘墜鍔ㄦā寮�"); } @@ -88,19 +234,33 @@ { throw Oops.Bah("璇诲彇PLC鎵嬭嚜鍔ㄥ�煎け璐�"); } - modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo); + switch (input.TypeName) { - case "zidong": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.4", "true"); - break; - case "shoudong": + case "zidong": // 鑷姩 + //modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo); modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.4", "false"); break; - case "huifu": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "47.0", "true"); + case "shoudong": // 鎵嬪姩 + //modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo); + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.4", "true"); break; - case "1diandong": + case "huifu": // 鎶ヨ鎭㈠ + if (input.FuncName == "true") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "47.0", "true"); + } + else if (input.FuncName == "false") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "47.0", "false"); + } + else + { + throw Oops.Bah("浜嬩欢缁撴灉閿欒"); + } + + break; + case "1diandong": // 1鐐瑰姩 if(input.FuncName == "true") { modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.7", "true"); @@ -114,7 +274,7 @@ throw Oops.Bah("浜嬩欢缁撴灉閿欒"); } break; - case "1liandong": + case "1liandong": // 1鑱斿姩 if (input.FuncName == "true") { modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "51.3", "true"); @@ -269,7 +429,24 @@ } break; case "UpTask": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0", "true"); + var (result1, value2) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0"); + if (result.IsSucceed) + { + if (value2 == true) + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0", "false"); + } + else + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0", "true"); + } + } + else + { + throw Oops.Bah("璇诲彇PLC鍊煎け璐�"); + } + + break; default: break; @@ -310,8 +487,8 @@ modPlc = plcList.FirstOrDefault(m => m.Text == "2灞傛墭鐩樿緭閫佺嚎"); if (modPlc == null) throw Oops.Bah($"鏈煡璇㈠埌{input.Layer}妤煎眰PLC淇℃伅"); - DbNum = "91"; - TaskDbNum = "1101"; + DbNum = "DB91"; + TaskDbNum = "DB1100"; break; case "3": modPlc = plcList.FirstOrDefault(m => m.Text == "3灞傛墭鐩樿緭閫佺嚎"); @@ -330,41 +507,45 @@ } PLCUtil modUtil = new PLCUtil(modPlc); - var (result, value) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0"); - if (result.IsSucceed) - { - if (value.ToString().ToLower() != "false") - { - throw Oops.Bah("璇峰厛鍒囨崲涓烘洿鏀逛换鍔℃ā寮�"); - } - } - else - { - throw Oops.Bah("璇诲彇PLC鎵嬭嚜鍔ㄥ�煎け璐�"); - } - modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo); + //var (result, value) = modUtil.GetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.0"); + //if (result.IsSucceed) + //{ + // if (value.ToString().ToLower() != "false") + // { + // throw Oops.Bah("璇峰厛鍒囨崲涓烘洿鏀逛换鍔℃ā寮�"); + // } + //} + //else + //{ + // throw Oops.Bah("璇诲彇PLC鎵嬭嚜鍔ㄥ�煎け璐�"); + //} + //modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, DbNum, "48.0", input.LocatNo); switch (input.TypeName) { case "writeTask": modUtil.SetPlcDBValue(PLCDataTypeEnum.String, TaskDbNum, "4", input.PalletNo); modUtil.SetPlcDBValue(PLCDataTypeEnum.String, TaskDbNum, "14", input.TaskNo); - modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "34", input.StartLoction); - modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "36", input.EndLoction); + //modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "34", input.StartLoction); + modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "36.0", input.EndLoction); - modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "38", input.StartPai); - modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "40", input.StartLie); - modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "42", input.StartCeng); + modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "38", input.StartPai); + modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "40", input.StartLie); + modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "42", input.StartCeng); - modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "44", input.EndPai); - modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "46", input.EndLie); - modUtil.SetPlcDBValue(PLCDataTypeEnum.Int, TaskDbNum, "48", input.EndCeng); + modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "44", input.EndPai); + modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "46", input.EndLie); + modUtil.SetPlcDBValue(PLCDataTypeEnum.Short, TaskDbNum, "48", input.EndCeng); modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.3", "true"); + Thread.Sleep(1000); + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.3", "false"); break; case "writeTaskDelete": modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.2", "true"); + Thread.Sleep(1000); + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "50.2", "false"); break; default: @@ -403,33 +584,122 @@ modPlc = plcList.FirstOrDefault(m => m.Text == "2灞傛墭鐩樿緭閫佺嚎"); if (modPlc == null) throw Oops.Bah($"鏈煡璇㈠埌2妤煎眰PLC淇℃伅"); - DbNum = "91"; + DbNum = "DB91"; PLCUtil modUtil = new PLCUtil(modPlc); switch (input.Type) { case "TwoPalletStart": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.0", "true"); + if (input.FuncName == "true") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.0", "true"); + } + else if (input.FuncName == "false") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.0", "false"); + } + else + { + throw Oops.Bah("浜嬩欢缁撴灉閿欒"); + } break; - case "OnePalletStop": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.1", "true"); + case "TwoPalletStop": + if (input.FuncName == "true") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.1", "true"); + } + else if (input.FuncName == "false") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.1", "false"); + } + else + { + throw Oops.Bah("浜嬩欢缁撴灉閿欒"); + } break; case "TwoMaStart": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.0", "true"); + if (input.FuncName == "true") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.0", "true"); + } + else if (input.FuncName == "false") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.0", "false"); + } + else + { + throw Oops.Bah("浜嬩欢缁撴灉閿欒"); + } break; case "TwoMaStop": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.1", "true"); + if (input.FuncName == "true") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.1", "true"); + } + else if (input.FuncName == "false") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.1", "false"); + } + else + { + throw Oops.Bah("浜嬩欢缁撴灉閿欒"); + } break; case "TwoMaTwoStart": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.2", "true"); + if (input.FuncName == "true") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.2", "true"); + } + else if (input.FuncName == "false") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.2", "false"); + } + else + { + throw Oops.Bah("浜嬩欢缁撴灉閿欒"); + } break; case "TwoMaTwoStop": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.3", "true"); + if (input.FuncName == "true") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.3", "true"); + } + else if (input.FuncName == "false") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "58.3", "false"); + } + else + { + throw Oops.Bah("浜嬩欢缁撴灉閿欒"); + } break; case "TwoBoxStart": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.2", "true"); + if (input.FuncName == "true") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.2", "true"); + } + else if (input.FuncName == "false") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.2", "false"); + } + else + { + throw Oops.Bah("浜嬩欢缁撴灉閿欒"); + } break; case "TwoBoxStop": - modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.3", "true"); + + if (input.FuncName == "true") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.3", "true"); + } + else if (input.FuncName == "false") + { + modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, DbNum, "46.3", "false"); + } + else + { + throw Oops.Bah("浜嬩欢缁撴灉閿欒"); + } break; default: break; diff --git a/Web/src/api/wcs/wcsDevice.ts b/Web/src/api/wcs/wcsDevice.ts index 1211e99..d2b0fec 100644 --- a/Web/src/api/wcs/wcsDevice.ts +++ b/Web/src/api/wcs/wcsDevice.ts @@ -16,11 +16,27 @@ CloseTaskForPLC='/api/WcsCheckTask/CloseTaskForPLC', + GetLocationInfo = '/api/wcsDevice/GetLocationInfo', + WriteLocationInfo = '/api/wcsDevice/WriteLocationInfo', WriteInfo = '/api/wcsDevice/WriteInfo', WriteTaskInfo = '/api/wcsDevice/WriteTaskInfo', WriteStartStop = '/api/wcsDevice/WriteStartStop', } // 澧炲姞璁惧淇℃伅 +export const WriteLocationInfo = (params?: any) => + request({ + url: Api.WriteLocationInfo, + method: 'post', + data: params, + }); +// 澧炲姞璁惧淇℃伅 +export const GetLocationInfo = (params?: any) => + request({ + url: Api.GetLocationInfo, + method: 'post', + data: params, + }); +// 澧炲姞璁惧淇℃伅 export const WriteInfo = (params?: any) => request({ url: Api.WriteInfo, diff --git a/Web/src/views/device/deviceInfo/index.vue b/Web/src/views/device/deviceInfo/index.vue index d422c71..4965b80 100644 --- a/Web/src/views/device/deviceInfo/index.vue +++ b/Web/src/views/device/deviceInfo/index.vue @@ -89,34 +89,35 @@ <div > <el-form label-position="right" label-width="40px" style=""> <el-form-item label="宸ヤ綅"> - <el-input v-model="stationValue.LocatNo" style="width: 200px; margin-right: 10px;"></el-input> + <el-input id="locaText" :disabled="lockInputStatus" v-model="stationValue.locatNo" style="width: 200px; margin-right: 10px;"></el-input> + <el-button @click="textLock(stationValue)">{{lockText}}</el-button> <el-button @click="write('zidong',stationValue)">鑷姩</el-button> <el-button @click="write('shoudong',stationValue)">鎵嬪姩</el-button> - <el-button @click="write('huifu',stationValue)">鎶ヨ鎭㈠</el-button> + <el-button @mousedown="writeDown('huifu',stationValue)" @mouseup="writeUp('huifu',stationValue)">鎶ヨ鎭㈠</el-button> </el-form-item> <el-form-item> - <el-button size="large" @mousedown="writeDown('1diandong',stationValue)" @mouseup="writeUp('1diandong',stationValue)">1鐐瑰姩</el-button> - <el-button size="large" @mousedown="writeDown('2diandong',stationValue)" @mouseup="writeUp('2diandong',stationValue)">2鐐瑰姩</el-button> - <el-button size="large" @mousedown="writeDown('3diandong',stationValue)" @mouseup="writeUp('3diandong',stationValue)">3鐐瑰姩</el-button> - <el-button size="large" @mousedown="writeDown('4diandong',stationValue)" @mouseup="writeUp('4diandong',stationValue)">4鐐瑰姩</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('1diandong',stationValue)" @mouseup="writeUp('1diandong',stationValue)">1鐐瑰姩</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('2diandong',stationValue)" @mouseup="writeUp('2diandong',stationValue)">2鐐瑰姩</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('3diandong',stationValue)" @mouseup="writeUp('3diandong',stationValue)">3鐐瑰姩</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('4diandong',stationValue)" @mouseup="writeUp('4diandong',stationValue)">4鐐瑰姩</el-button> </el-form-item> <el-form-item> - <el-button size="large" @mousedown="writeDown('1liandong',stationValue)" @mouseup="writeUp('1liandong',stationValue)">1鑱斿姩</el-button> - <el-button size="large" @mousedown="writeDown('2liandong',stationValue)" @mouseup="writeUp('2liandong',stationValue)">2鑱斿姩</el-button> - <el-button size="large" @mousedown="writeDown('3liandong',stationValue)" @mouseup="writeUp('3liandong',stationValue)">3鑱斿姩</el-button> - <el-button size="large" @mousedown="writeDown('4liandong',stationValue)" @mouseup="writeUp('4liandong',stationValue)">4鑱斿姩</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('1liandong',stationValue)" @mouseup="writeUp('1liandong',stationValue)">1鑱斿姩</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('2liandong',stationValue)" @mouseup="writeUp('2liandong',stationValue)">2鑱斿姩</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('3liandong',stationValue)" @mouseup="writeUp('3liandong',stationValue)">3鑱斿姩</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('4liandong',stationValue)" @mouseup="writeUp('4liandong',stationValue)">4鑱斿姩</el-button> </el-form-item> <el-form-item> - <el-button size="large" @mousedown="writeDown('yizaisheng',stationValue)" @mouseup="writeUp('yizaisheng',stationValue)">绉绘牻涓婂崌</el-button> - <el-button size="large" @mousedown="writeDown('fanzhuansheng',stationValue)" @mouseup="writeUp('fanzhuansheng',stationValue)">缈昏浆鏈轰笂鍗�</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('yizaisheng',stationValue)" @mouseup="writeUp('yizaisheng',stationValue)">绉绘牻涓婂崌</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('fanzhuansheng',stationValue)" @mouseup="writeUp('fanzhuansheng',stationValue)">缈昏浆鏈轰笂鍗�</el-button> </el-form-item> <el-form-item> - <el-button size="large" @mousedown="writeDown('yizaijiang',stationValue)" @mouseup="writeUp('yizaijiang',stationValue)">绉绘牻涓嬮檷</el-button> - <el-button size="large" @mousedown="writeDown('fanzhuanjiang',stationValue)" @mouseup="writeUp('fanzhuanjiang',stationValue)">缈昏浆鏈轰笅闄�</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('yizaijiang',stationValue)" @mouseup="writeUp('yizaijiang',stationValue)">绉绘牻涓嬮檷</el-button> + <el-button size="large" :disabled="lockStatus" @mousedown="writeDown('fanzhuanjiang',stationValue)" @mouseup="writeUp('fanzhuanjiang',stationValue)">缈昏浆鏈轰笅闄�</el-button> </el-form-item> </el-form> @@ -135,52 +136,52 @@ </el-col> <el-col :span="6"> <el-form-item label="浠诲姟鍙�" > - <el-input v-model="stationValue.TaskNo" style="width: 200px; "></el-input> + <el-input v-model="stationValue.taskNo" style="width: 200px; "></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="鎵樼洏鍙�"> - <el-input v-model="stationValue.PalletNo" style="width: 200px; margin-right: 10px;"></el-input> + <el-input v-model="stationValue.palletNo" style="width: 200px; margin-right: 10px;"></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="璧峰宸ヤ綅"> - <el-input v-model="stationValue.StartLoction" style="width: 200px; margin-right: 10px;"></el-input> + <el-input v-model="stationValue.startLoction" style="width: 200px; margin-right: 10px;"></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="鐩爣宸ヤ綅"> - <el-input v-model="stationValue.EndLoction" style="width: 200px; margin-right: 10px;"></el-input> + <el-input v-model="stationValue.endLoction" style="width: 200px; margin-right: 10px;"></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="璧峰鎺�"> - <el-input v-model="stationValue.StartPai" style="width: 200px; margin-right: 10px;"></el-input> + <el-input v-model="stationValue.startPai" style="width: 200px; margin-right: 10px;"></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="璧峰鍒�"> - <el-input v-model="stationValue.StartLie" style="width: 200px; margin-right: 10px;"></el-input> + <el-input v-model="stationValue.startLie" style="width: 200px; margin-right: 10px;"></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="璧峰灞�"> - <el-input v-model="stationValue.StartCeng" style="width: 200px; margin-right: 10px;"></el-input> + <el-input v-model="stationValue.startCeng" style="width: 200px; margin-right: 10px;"></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="鐩爣鎺�"> - <el-input v-model="stationValue.EndPai" style="width: 200px; margin-right: 10px;"></el-input> + <el-input v-model="stationValue.endPai" style="width: 200px; margin-right: 10px;"></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="鐩爣鍒�"> - <el-input v-model="stationValue.EndLie" style="width: 200px; margin-right: 10px;"></el-input> + <el-input v-model="stationValue.endLie" style="width: 200px; margin-right: 10px;"></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="鐩爣灞�"> - <el-input v-model="stationValue.EndCeng" style="width: 200px; margin-right: 10px;"></el-input> + <el-input v-model="stationValue.endCeng" style="width: 200px; margin-right: 10px;"></el-input> </el-form-item> </el-col> @@ -198,32 +199,41 @@ <script lang="ts" setup> import { ref, reactive, onMounted } from 'vue'; import { listStatus, listPosition } from '/@/api/wcs/wcsPlc'; -import { WriteInfo,WriteTaskInfo } from '/@/api/wcs/wcsDevice'; +import { GetLocationInfo,WriteLocationInfo,WriteInfo,WriteTaskInfo } from '/@/api/wcs/wcsDevice'; import { signalR } from './signalR'; import { cellsDataLine, cellsDataOne, cellsDataTwo, cellsDataThree } from './data'; import { ElMessage } from "element-plus"; +// export default{ + +// } const state = ref<any>({}); const stackers = ref<any>({}); const conveyors = ref<any>({}); + + +const lockText = ref("閿佸畾"); +const lockStatus = ref(true); +const lockInputStatus = ref(false); + const stationValue = ref<any>({ - LocatNo: '',//宸ヤ綅 - Layer:'',//妤煎眰 - TypeName:'',//鎿嶄綔绫诲瀷鍚嶇О - FuncName:'',//浜嬩欢缁撴灉 true/false + locatNo: '',//宸ヤ綅 + layer:'',//妤煎眰 + typeName:'',//鎿嶄綔绫诲瀷鍚嶇О + funcName:'',//浜嬩欢缁撴灉 true/false - TaskNo:'', - PalletNo:'', - StartLoction:'', - EndLoction:'', - StartPai:'', - StartLie:'', - StartCeng:'', - EndPai:'', - EndLie:'', - EndCeng:'', + taskNo:'', + palletNo:'', + startLoction:'', + endLoction:'', + startPai:'', + startLie:'', + startCeng:'', + endPai:'', + endLie:'', + endCeng:'', }); - + // 鏌ヨ鐘舵�� const handleQuery = async () => { @@ -376,16 +386,71 @@ } } + +const textLock = async (row: any) => { + if(lockText.value == "閿佸畾"){ + lockStatus.value=false; + lockInputStatus.value=true; + lockText.value ="瑙i攣"; + if (floorStates.value.isPlain1 == false) { + row.layer = 1; + }else if(floorStates.value.isPlain2 == false){ + row.layer = 2; + } + else if(floorStates.value.isPlain3 == false){ + row.layer = 3; + } + row.typeName = "suoding"; + + console.log(row); + var res = await WriteLocationInfo(row); + var res2 = await GetLocationInfo(row); + let rowData = JSON.parse(JSON.stringify(res2.data.result)); + stationValue.value = res2.data.result; +// stationValue.value = { +// locatNo: '',//宸ヤ綅 +// layer:'',//妤煎眰 +// typeName:'',//鎿嶄綔绫诲瀷鍚嶇О +// funcName:null,//浜嬩欢缁撴灉 true/false + +// taskNo:'', +// palletNo:'', +// startLoction:'', +// endLoction:'', +// startPai:'', +// startLie:'', +// startCeng:'', +// endPai:'', +// endLie:'', +// endCeng:'', +// } + + + console.log(res2.data.result); + console.log(rowData); + + }else{ + lockStatus.value=true; + lockInputStatus.value=false; + lockText.value ="閿佸畾"; + } + +} + const write = async (type: string,row: any) => { + if (lockStatus.value == false) { + ElMessage.success("璇峰厛閿佸畾"); + return; + } if (floorStates.value.isPlain1 == false) { - row.Layer = 1; + row.layer = 1; }else if(floorStates.value.isPlain2 == false){ - row.Layer = 2; + row.layer = 2; } else if(floorStates.value.isPlain3 == false){ - row.Layer = 3; + row.layer = 3; } - row.TypeName = type; + row.typeName = type; console.log(row); var res = await WriteInfo(row); @@ -394,32 +459,40 @@ } const writeDown = async (type: string,row: any) => { + if (lockStatus.value == false) { + ElMessage.success("璇峰厛閿佸畾"); + return; + } if (floorStates.value.isPlain1 == false) { - row.Layer = 1; + row.layer = 1; }else if(floorStates.value.isPlain2 == false){ - row.Layer = 2; + row.layer = 2; } else if(floorStates.value.isPlain3 == false){ - row.Layer = 3; + row.layer = 3; } - row.TypeName = type; - row.FuncName = "true"; + row.typeName = type; + row.funcName = "true"; var res = await WriteInfo(row); console.log(type+"鎸変笅浜嬩欢"); // ElMessage.success(res.data.result); } const writeUp = async (type: string,row: any) => { + if (lockStatus.value == false) { + ElMessage.success("璇峰厛閿佸畾"); + return; + } if (floorStates.value.isPlain1 == false) { - row.Layer = 1; + row.layer = 1; }else if(floorStates.value.isPlain2 == false){ - row.Layer = 2; + row.layer = 2; } else if(floorStates.value.isPlain3 == false){ - row.Layer = 3; + row.layer = 3; } - row.TypeName = type; - row.FuncName = "false"; + row.typeName = type; + row.funcName = "false"; var res = await WriteInfo(row); console.log(type+"鎶捣浜嬩欢"); @@ -428,14 +501,14 @@ const writeTaskInfo = async (type: string,row: any) => { if (floorStates.value.isPlain1 == false) { - row.Layer = 1; + row.layer = 1; }else if(floorStates.value.isPlain2 == false){ - row.Layer = 2; + row.layer = 2; } else if(floorStates.value.isPlain3 == false){ - row.Layer = 3; + row.layer = 3; } - row.TypeName = type; + row.typeName = type; var res = await WriteTaskInfo(row); console.log(type+"鎶捣浜嬩欢"); diff --git a/Web/src/views/device/deviceStartStop/index.vue b/Web/src/views/device/deviceStartStop/index.vue index a197f3c..eb04f31 100644 --- a/Web/src/views/device/deviceStartStop/index.vue +++ b/Web/src/views/device/deviceStartStop/index.vue @@ -33,24 +33,24 @@ <el-collapse-item title="浠撳簱浜屽眰" name="2"> <el-card class="box-card" shadow="hover"> <el-text style="margin-right: 15px;">鎵樼洏杈撻��</el-text> - <el-button @click="write('TwoPalletStart','2')">鍚姩</el-button> - <el-button @click="write('TwoPalletStop','2')">鍋滄</el-button> + <el-button @mousedown="writeDown('TwoPalletStart','2')" @mouseup="writeUp('TwoPalletStart','2')">鍚姩</el-button> + <el-button @mousedown="writeDown('TwoPalletStop','2')" @mouseup="writeUp('TwoPalletStop','2')">鍋滄</el-button> </el-card> <el-card class="box-card" shadow="hover" style="margin-top: 3px;"> <el-text style="margin-right: 15px;">鐮佽泛鏈哄櫒浜�1</el-text> - <el-button @click="write('TwoMaStart','2')">鍚姩</el-button> - <el-button @click="write('TwoMaStop','2')">鍋滄</el-button> + <el-button @mousedown="writeDown('TwoMaStart','2')" @mouseup="writeUp('TwoMaStart','2')">鍚姩</el-button> + <el-button @mousedown="writeDown('TwoMaStop','2')" @mouseup="writeUp('TwoMaStop','2')">鍋滄</el-button> </el-card> <el-card class="box-card" shadow="hover" style="margin-top: 3px;"> <el-text style="margin-right: 15px;">鐮佽泛鏈哄櫒浜�2</el-text> - <el-button @click="write('TwoMaTwoStart','2')">鍚姩</el-button> - <el-button @click="write('TwoMaTwoStop','2')">鍋滄</el-button> + <el-button @mousedown="writeDown('TwoMaTwoStart','2')" @mouseup="writeUp('TwoMaTwoStart','2')">鍚姩</el-button> + <el-button @mousedown="writeDown('TwoMaTwoStop','2')" @mouseup="writeUp('TwoMaTwoStop','2')">鍋滄</el-button> </el-card> <el-card class="box-card" shadow="hover" style="margin-top: 3px;"> <el-text style="margin-right: 15px;">浠剁杈撻��</el-text> - <el-button @click="write('TwoBoxStart','2')">鍚姩</el-button> - <el-button @click="write('TwoBoxStop','2')">鍋滄</el-button> + <el-button @mousedown="writeDown('TwoBoxStart','2')" @mouseup="writeUp('TwoBoxStart','2')">鍚姩</el-button> + <el-button @mousedown="writeDown('TwoBoxStop','2')" @mouseup="writeUp('TwoBoxStop','2')">鍋滄</el-button> </el-card> </el-collapse-item> </el-collapse> @@ -97,7 +97,28 @@ console.log(res.data.result); // ElMessage.success(res.data.result); } - +const writeDown = async (type: string,layer: string) => { + + var data={ + Type:type, + Layer: layer, + FuncName : "true" + } + var res = await WriteStartStop(data); + console.log(type+"鎸変笅浜嬩欢"); + +} +const writeUp = async (type: string,layer: string) => { + + var data={ + Type:type, + Layer: layer, + FuncName : "false" + } + var res = await WriteStartStop(data); + console.log(type+"鎶捣浜嬩欢"); + +} </script> -- Gitblit v1.8.0