| | |
| | | public static class PLCService |
| | | { |
| | | private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); |
| | | private static readonly IHubContext<TaskLogHub, ITaskLogHub> _taskLogHubContext; |
| | | |
| | | static PLCService() |
| | | { |
| | | _taskLogHubContext = App.GetService<IHubContext<TaskLogHub, ITaskLogHub>>(); |
| | | } |
| | | |
| | | public static void OnChangeEvent(object sender, EventArgs e) |
| | | { |
| | |
| | | .SetColumns(s => s.Status == TaskStatusEnum.Doing) |
| | | .Where(s => s.Id == modTask.Id) |
| | | .ExecuteCommand(); |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | WcsTaskMonitor modInsertTaskMonitor; |
| | | if (string.IsNullOrEmpty(taskInfo.EndStation)) |
| | | { |
| | |
| | | // 插入交互日志 |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | //修改led屏信息 |
| | | //LedDisplay(modDevice.LedIP, "工位:" + modTask.EndLocate, "出库中 " + $"储位地址:{modTask.StartLocate}", "托盘号:" + modTask.PalletNo); |
| | | } |
| | |
| | | // 插入交互日志 |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | break; |
| | | } |
| | | |
| | |
| | | // 插入交互日志 |
| | | _db.Insertable(modcTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | |
| | | // 写入流程控制字 |
| | |
| | | // 插入交互日志 |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | } |
| | | else if (modTask.TaskType == TaskTypeEnum.Out) |
| | |
| | | // 插入交互日志 |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | //修改led屏信息 |
| | | //LedDisplay(modDevice.LedIP, "工位:" + modTask.EndLocate, "出库中 " + $"储位地址:{modTask.StartLocate}", "托盘号:" + modTask.PalletNo); |
| | | } |
| | |
| | | modTask.Status = TaskStatusEnum.Complete; |
| | | modTask.FinishDate = DateTime.Now; |
| | | _db.Updateable(modTask).ExecuteCommand(); |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | var modcTaskMonitor = new WcsTaskMonitor() |
| | | HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | var modTaskMonitor = new WcsTaskMonitor() |
| | | { |
| | | TaskNo = modTask.TaskNo, |
| | | PlcId = modDevice.Id, |
| | |
| | | var modResponseTask = httpService.RequestTask(requestMode).Result; |
| | | if (modResponseTask.StatusCode == "0") |
| | | { |
| | | modcTaskMonitor.InteractiveMsg = "任务完成,返回给WMS任务完成"; |
| | | modTaskMonitor.InteractiveMsg = "任务完成,返回给WMS任务完成"; |
| | | } |
| | | } |
| | | // 插入交互日志 |
| | | _db.Insertable(modcTaskMonitor).ExecuteCommand(); |
| | | _db.Insertable(modTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | |
| | | // 此处添加不空跑业务 |
| | | } |
| | |
| | | // 插入交互日志 |
| | | _db.Insertable(modcTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | HubUtil.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | break; |
| | | } |
| | | } |
| | |
| | | modTask.FinishDate = DateTime.Now; |
| | | _db.Updateable(modTask).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | |
| | | HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | var modcTaskMonitor = new WcsTaskMonitor() |
| | | { |
| | | TaskNo = modTask.TaskNo, |
| | |
| | | // 插入交互日志 |
| | | _db.Insertable(modcTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | HubUtil.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | |
| | | // 此处添加不空跑业务 |
| | | } |
| | |
| | | break; |
| | | modTask.Status = TaskStatusEnum.Exception; |
| | | _db.Updateable(modTask).UpdateColumns(s => s.Status).ExecuteCommand(); |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | Log.Information($"【堆垛机】wcs任务变更空取异常,任务号:{modTask.TaskNo}"); |
| | | var modTaskRequest = modTask.Adapt<TaskRequest>(); |
| | | HttpService httpService = new HttpService(); |
| | |
| | | modTask.IsSuccess = TaskSuccessEnum.Success; |
| | | _db.Updateable(modTask).UpdateColumns(s => s.IsSuccess).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | } |
| | | else |
| | | { |
| | |
| | | modTask.IsSuccess = TaskSuccessEnum.Fail; |
| | | modTask.Information = modResponseTask.Message; |
| | | _db.Updateable(modTask).UpdateColumns(s => new { s.IsSuccess, s.Information }).ExecuteCommand(); |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | } |
| | | } |
| | | break; |
| | |
| | | } |
| | | modTask.Status = TaskStatusEnum.Exception; |
| | | _db.Updateable(modTask).UpdateColumns(s => s.Status).ExecuteCommand(); |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | Log.Information($"【堆垛机】wcs任务变更满取异常,任务号:{modTask.TaskNo}"); |
| | | var modTaskRequest = modTask.Adapt<TaskRequest>(); |
| | | HttpService httpService = new HttpService(); |
| | |
| | | // 插入交互日志 |
| | | _db.Insertable(modcTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | HubUtil.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | |
| | | } |
| | |
| | | var http = new HttpService(); |
| | | string TaskNo = "", EndLocate = ""; |
| | | strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo); |
| | | |
| | | |
| | | if (!strMsg.Contains("-1")) |
| | | { |
| | | // 写入330 |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "330"); |
| | | |
| | | |
| | | if (ret.IsSucceed) |
| | | { |
| | | // 插入任务明细 |
| | |
| | | StartLocat = modDevice.StationNum, |
| | | EndLocat = EndLocate, |
| | | }; |
| | | |
| | | |
| | | // 插入交互日志 |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | |
| | | // 通知任务界面任务已存在更新 请更新界面 |
| | | if (PLCTaskAction.boRefresh) |
| | | { |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | // led更新内容 |
| | | //DataRow ConveyorsRow10 = PlcInfoDt.Select($"Level = '2' and StationNum = '{EndLocat}'")[0]; |
| | | //LedDisplay(ConveyorsRow10["LedIP"].ToString(), "工位:" + EndLocat, "出库中 " + $"储位地址:{StartLocat}", "托盘号:" + PalletNo); |
| | |
| | | else |
| | | { |
| | | // 申请巷道失败!LED显示 |
| | | Log.Error(string.Format($"申请巷道失败:{ strMsg },读写plc错误")); |
| | | Log.Error(string.Format($"申请巷道失败:{strMsg},读写plc错误")); |
| | | } |
| | | } |
| | | break; |
| | |
| | | // 此托盘没有对应的转移任务 led显示 |
| | | break; |
| | | } |
| | | |
| | | |
| | | // 获取巷道口入库工位 |
| | | string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, louCeng); |
| | | // 给PLC写入任务数据 |
| | |
| | | listResult.Add(plcConn.SetPlcDBValue(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum)); |
| | | var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "目的工位"); |
| | | listResult.Add(plcConn.SetPlcDBValue(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue)); |
| | | |
| | | |
| | | |
| | | if (listResult.All(s => s.IsSucceed)) |
| | | { |
| | |
| | | .Where(s => s.Id == modTask.Id) |
| | | .ExecuteCommand(); |
| | | // 写入流程字 330 340 |
| | | |
| | | |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "340"); |
| | | |
| | | |
| | | |
| | | |
| | | if (ret.IsSucceed) |
| | | { |
| | | // 插入任务明细 |
| | |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | |
| | | // 通知任务界面任务已存在更新 请更新界面 |
| | | if (PLCTaskAction.boRefresh) |
| | | { |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | |
| | | // led更新内容 |
| | | //LedDisplay(modDevice.LedIP, "工位:" + modTask.EndLocate, "出库中 " + $"储位地址:{modTask.StartLocate}", "托盘号:" + modTask.PalletNo); |
| | |
| | | case "620": |
| | | { |
| | | // 申请储位 更新入库任务(储位地址) 630 |
| | | |
| | | |
| | | var strMsg = ""; |
| | | var taskModel = ""; |
| | | // 判断是否演示模式 |
| | |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | |
| | | // 通知任务界面任务已存在更新 请更新界面 |
| | | if (PLCTaskAction.boRefresh) |
| | | { |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | // led更新内容 |
| | | //DataRow ConveyorsRow10 = PlcInfoDt.Select($"Level = '2' and StationNum = '{EndLocat}'")[0]; |
| | | //LedDisplay(ConveyorsRow10["LedIP"].ToString(), "工位:" + EndLocat, "出库中 " + $"储位地址:{StartLocat}", "托盘号:" + PalletNo); |
| | |
| | | // 申请储位失败!LED显示 |
| | | Log.Error(string.Format($"申请储位失败:{strMsg},读写plc错误")); |
| | | } |
| | | |
| | | |
| | | } |
| | | break; |
| | | case "630": |
| | |
| | | // 获取工位任务号信息 |
| | | var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "任务号"); |
| | | var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos); |
| | | if (!res.IsSucceed || !taskRes.IsSucceed ) |
| | | if (!res.IsSucceed || !taskRes.IsSucceed) |
| | | { |
| | | break; |
| | | } |
| | |
| | | // 此托盘没有对应的转移任务 led显示 |
| | | break; |
| | | } |
| | | |
| | | |
| | | var sInfo = PLCCommon.GetStokePlc(modTask.EndRoadway, louCeng); |
| | | if (string.IsNullOrWhiteSpace(sInfo.Ip)) |
| | | { |
| | | //需加上LED显示 |
| | | Log.Error(string.Format($"根据巷道获取跺机IP失败,请联系管理员")); |
| | | break; |
| | | break; |
| | | } |
| | | // 跺机连接 |
| | | var plcStackeConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo.Ip); |
| | |
| | | |
| | | // 获取跺机当前状态 |
| | | var (djRes, djVal) = plcStackeConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos); |
| | | |
| | | |
| | | if (!djRes.IsSucceed || djVal != "820") |
| | | { |
| | | // 跺机非空闲等待 |
| | |
| | | listResult.Add(plcStackeConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); |
| | | var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "托盘号"); |
| | | listResult.Add(plcStackeConn.SetPlcDBValue(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); |
| | | |
| | | |
| | | //起始工位 |
| | | var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "起始工位"); |
| | | listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum)); |
| | |
| | | // 插入交互日志 |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | break; |
| | | |
| | | } |
| | |
| | | // 插入交互日志 |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | if (PLCTaskAction.boRefresh) |
| | | { //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | { |
| | | //下发任务日志 |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | } |
| | | break; |
| | |
| | | // led显示托盘信息 |
| | | // 写入430 |
| | | var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "430"); |
| | | |
| | | |
| | | if (ret.IsSucceed) |
| | | { |
| | | var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "任务号"); |
| | |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | |
| | | // 通知任务界面任务已存在更新 请更新界面 |
| | | if (PLCTaskAction.boRefresh) |
| | | { |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | |
| | | // led更新内容 |
| | | //DataRow ConveyorsRow10 = PlcInfoDt.Select($"Level = '2' and StationNum = '{EndLocat}'")[0]; |
| | | //LedDisplay(ConveyorsRow10["LedIP"].ToString(), "工位:" + EndLocat, "出库中 " + $"储位地址:{StartLocat}", "托盘号:" + PalletNo); |
| | |
| | | _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); |
| | | |
| | | // 通知任务界面任务已存在更新 请更新界面 |
| | | if (PLCTaskAction.boRefresh) |
| | | { |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | // led更新内容 |
| | | //DataRow ConveyorsRow10 = PlcInfoDt.Select($"Level = '2' and StationNum = '{EndLocat}'")[0]; |
| | | //LedDisplay(ConveyorsRow10["LedIP"].ToString(), "工位:" + EndLocat, "出库中 " + $"储位地址:{StartLocat}", "托盘号:" + PalletNo); |
| | |
| | | /// 拆垛机器人业务处理 |
| | | /// </summary> |
| | | /// <param name="modDevice"></param> |
| | | private static void StackingRobot(WcsDeviceDto modDevice) |
| | | private static void StackingRobot(WcsDeviceDto modDevice) |
| | | { |
| | | var plcConn = modDevice.PLCUtil; |
| | | switch (modDevice.Value.ToString()) |