| | |
| | | |
| | | private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); |
| | | |
| | | private static int fendao = 1; |
| | | |
| | | public static void OnChangeEvent(object sender, EventArgs e) |
| | | { |
| | | try |
| | |
| | | string groupMsg = ""; |
| | | if (modDevice.StationNum == "27") |
| | | { |
| | | var Qty = plcConn.GetPlcDBValue(PLCDataTypeEnum.Int,"DB135.0").ToString();//获取叠托机叠托数量 |
| | | groupMsg = http.BindPlnInHouseWcs(Qty, palletVal); |
| | | var (res2,Qty) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Short,"DB135","0");//获取叠托机叠托数量 |
| | | |
| | | if (!groupMsg.Contains("-1")) |
| | | groupMsg = http.BindPlnInHouseWcs(Qty.ToString(), palletVal); |
| | | |
| | | if (groupMsg.Contains("-1")) |
| | | { |
| | | var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); |
| | | if (res350.IsSucceed && palletVal350 != "350") |
| | |
| | | { |
| | | plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350"); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | string IsBale = "0"; |
| | | strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo); |
| | |
| | | var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); |
| | | var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "起始工位"); |
| | | var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos); |
| | | string tasknoVal = taskVal.ToString(); |
| | | ////string b = taskVal.GetValue(); |
| | | //string a = palletVal.ToString(); |
| | | // 插入任务明细 |
| | | var modInsertTaskMonitor = new WcsTaskMonitor() |
| | | { |
| | |
| | | InteractiveMsg = $"写入指令430:托盘到达{modDevice.StationNum}工位", |
| | | PalletNo = palletVal, |
| | | Status = TaskStatusEnum.Complete, |
| | | StartLocat = starVal, |
| | | StartLocat = starVal.ToString(), |
| | | EndLocat = modDevice.StationNum, |
| | | }; |
| | | |
| | |
| | | // 插入任务明细 |
| | | var modInsertTaskMonitor = new WcsTaskMonitor() |
| | | { |
| | | TaskNo = tasknoVal, |
| | | PlcId = modDevice.Id, |
| | | PlcName = modDevice.Text, |
| | | InteractiveMsg = $"写入指令151:{modDevice.StationNum}工位可接受AGV放货入库", |
| | |
| | | private static async void BoxConveyorLine(WcsDeviceDto modDevice) |
| | | { |
| | | var plcConn = modDevice.PLCUtil; |
| | | |
| | | //二楼主扫分道 |
| | | if (modDevice.DbNumber == "DB101")//&& modDevice.DbNumber == "DB102"&& (modDevice.DbNumber == "DB102"||modDevice.PlcIdIP == "10.18.51.110") |
| | | { |
| | | // 主扫交互流程 |
| | |
| | | var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "通道号"); |
| | | |
| | | // 演示模式直接写入分道号 |
| | | Random random = new Random(); |
| | | int ranNumber = random.Next(2) == 0 ? 1 : 5; |
| | | var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, ranNumber.ToString()); |
| | | //Random random = new Random(); |
| | | //int ranNumber = random.Next(2) == 0 ? 1 : 5; |
| | | if (fendao == 1) |
| | | { |
| | | fendao = 5; |
| | | } |
| | | else |
| | | { |
| | | fendao = 1; |
| | | } |
| | | var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, fendao.ToString()); // |
| | | if (ret.IsSucceed) |
| | | { |
| | | Log.Information(string.Format("分道成功,道号是:" + ranNumber)); |
| | | Log.Information(string.Format("分道成功,道号是:" + fendao)); |
| | | // 写入流程控制字 2 |
| | | var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); |
| | | if (!retVal.IsSucceed) |
| | |
| | | default: break; |
| | | } |
| | | } |
| | | //一楼主扫分道 |
| | | else if (modDevice.DbNumber == "DB102") |
| | | { |
| | | switch (modDevice.Value.ToString()) |
| | | { |
| | | case "1": |
| | | // 1楼件箱PLC请求WCS读码 |
| | | { |
| | | // 读取plc箱码 |
| | | var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == "主扫条码"); |
| | | var (res, boxNo) = plcConn.GetPlcDBValue(modBoxNo.PosType, modDevice.DbNumber, modBoxNo.PlcPos); |
| | | if (string.IsNullOrWhiteSpace(boxNo.ToString())) |
| | | { |
| | | |
| | | // 箱信息为null写入剔除通道号:0 |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "0"); |
| | | if (ret.IsSucceed) |
| | | { |
| | | // 写入流程控制字 2 |
| | | var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); |
| | | if (retVal.IsSucceed) |
| | | { |
| | | Log.Error("箱码为null或已绑定托盘,进行剔除。"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 箱码 |
| | | string boxNoVal = boxNo.ToString(); |
| | | // 通道号 |
| | | var modLineNo = modDevice.listStation.FirstOrDefault(m => m.Text == "通道号"); |
| | | |
| | | // 调用wms接口验证箱码是否可拣货并返回装车口 |
| | | var http = new HttpService(); |
| | | RequestloadingAddre requesModel = http.ResultBoxInfoExportWcs(boxNoVal); |
| | | if (requesModel.Success != "1") |
| | | { |
| | | // 箱信息为null写入剔除通道号:0 |
| | | var ret = plcConn.SetPlcDBValue(modLineNo.PosType, modDevice.DbNumber, modLineNo.PlcPos, "0"); |
| | | if (ret.IsSucceed) |
| | | { |
| | | // 写入流程控制字 2 |
| | | var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); |
| | | if (retVal.IsSucceed) |
| | | { |
| | | Log.Error("出库分拣根据箱码获取装车口失败,进行剔除。" + requesModel.Message); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 写入出库分道号 |
| | | // var ret = plcConn.SetPlcDBValue(modLineNo.PosType, modDevice.DbNumber, modLineNo.PlcPos, requesModel.loadingAddre); |
| | | var ret = plcConn.SetPlcDBValue(modLineNo.PosType, modDevice.DbNumber, modLineNo.PlcPos, requesModel.loadingAddre); |
| | | if (ret.IsSucceed) |
| | | { |
| | | // 写入流程控制字 2 |
| | | var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); |
| | | if (retVal.IsSucceed) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; break; |
| | | case "10": |
| | | // 1楼件箱PLC读码失败,WCS不做处理直接剔除手持拣货。 |
| | | { |
| | | |
| | | }; break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 插码交互 |
| | |
| | | { |
| | | item.PalletNo = palletNo; |
| | | item.UpdateTime = DateTime.Now; |
| | | item.OrderCode = checkTaskMedel.OrderNo; |
| | | } |
| | | |
| | | var rowCount = _db.Updateable(boxInfo).ExecuteCommand(); |
| | |
| | | // 触发结批 分道变为结批中 |
| | | AutoEndLot(boxInfo[0].LotNo, plcConn, "2"); |
| | | } |
| | | |
| | | //检查已码垛箱数,码垛数量与完工数量相等后自动结批 |
| | | //var finishiqty = _db.Queryable<WcsBoxInfoLog>().Count(m => m.SkuNo = ) |
| | | //if (true) |
| | | //{ |
| | | |
| | | //} |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | break; |
| | | } |
| | | //判断托盘上的箱码是否已组盘 |
| | | foreach (var item in boxInfoList) |
| | | { |
| | | var groupBoxno = _db.Queryable<WcsBoxInfoLog>().Where(w => w.BoxNo == item.BoxNo).ToList(); |
| | | if (groupBoxno.Count>0) |
| | | { |
| | | Log.Error(string.Format("申请巷道失败,码垛工位{0},箱码信息不存在", modDevice.StationNum)); |
| | | // 写入交互工位目标地址 |
| | | var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234"); |
| | | if (retVal.IsSucceed) |
| | | { |
| | | // 写入组托回复流程字 |
| | | retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // 组托成功后将信息存到log表 |
| | | string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'"; |
| | | int insertCount = _db.Ado.ExecuteCommand(sqlStr); |
| | |
| | | switch (modDevice.Value.ToString()) |
| | | { |
| | | case "10"://10 plc请求wcs读托盘码 20 wcs读取ok wcs 写入数量及规格 30 |
| | | var strMsg = ""; |
| | | |
| | | //wcs读取ok20 |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "20"); |
| | | if (ret.IsSucceed) |
| | | { |
| | |
| | | // 是否写入成功 |
| | | if (listResult.All(s => s.IsSucceed)) |
| | | { |
| | | //wcs 写入数量及规格 30 |
| | | var ret1 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "30"); |
| | | |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | switch (modDevice.Value.ToString()) |
| | | { |
| | | case "1": |
| | | // 1楼件箱PLC请求WCS读码 |
| | | { |
| | | // 读取plc箱码 |
| | | var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == "主扫条码"); |
| | | var (res, boxNo) = plcConn.GetPlcDBValue(modBoxNo.PosType, modDevice.DbNumber, modBoxNo.PlcPos); |
| | | if (string.IsNullOrWhiteSpace(boxNo.ToString())) |
| | | { |
| | | |
| | | // 箱信息为null写入剔除通道号:0 |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "0"); |
| | | if (ret.IsSucceed) |
| | | { |
| | | // 写入流程控制字 2 |
| | | var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); |
| | | if (retVal.IsSucceed) |
| | | { |
| | | Log.Error("箱码为null或已绑定托盘,进行剔除。"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 箱码 |
| | | string boxNoVal = boxNo.ToString(); |
| | | // 通道号 |
| | | var modLineNo = modDevice.listStation.FirstOrDefault(m => m.Text == "通道号"); |
| | | |
| | | // 调用wms接口验证箱码是否可拣货并返回装车口 |
| | | var http = new HttpService(); |
| | | RequestloadingAddre requesModel = http.ResultBoxInfoExportWcs(boxNoVal); |
| | | if (requesModel.Success != "0") |
| | | { |
| | | // 箱信息为null写入剔除通道号:0 |
| | | var ret = plcConn.SetPlcDBValue(modLineNo.PosType, modDevice.DbNumber, modLineNo.PlcPos, "0"); |
| | | if (ret.IsSucceed) |
| | | { |
| | | // 写入流程控制字 2 |
| | | var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); |
| | | if (retVal.IsSucceed) |
| | | { |
| | | Log.Error("出库分拣根据箱码获取装车口失败,进行剔除。" + requesModel.Message); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 写入出库分道号 |
| | | var ret = plcConn.SetPlcDBValue(modLineNo.PosType, modDevice.DbNumber, modLineNo.PlcPos, requesModel.loadingAddre); |
| | | if (ret.IsSucceed) |
| | | { |
| | | // 写入流程控制字 2 |
| | | var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); |
| | | if (retVal.IsSucceed) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | };break; |
| | | case "10": |
| | | // 1楼件箱PLC读码失败,WCS不做处理直接剔除手持拣货。 |
| | | { |
| | | |
| | | };break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |