using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Linq; using System.Threading.Tasks; using WIDESEA_Core.Utilities; using WIDESEA_Entity.DomainModels; using WIDESEA_WCS; namespace WIDESEA_WCSServer.Controllers.ToWMS { [Route("api/ToWMS")] [ApiController] public class ToWMSController : ControllerBase { /// /// 添加agv任务 /// /// /// //[HttpPost, Route("AddAgvTask"), AllowAnonymous] //public WebResponseContent AddAgvTask([FromBody] dt_agvtask task) //{ // return new WCSHelpServer().AddAgvTask(task); //} /// /// WMS修改设备状态调用接口同步WCS设备状态并暂停调度 /// /// /// [HttpPost, HttpGet, Route("UpdateEquipState"), AllowAnonymous] public async Task UpdateEquipState([FromBody] SaveModel saveModel) { return await Task.Run(() => { return WCSService.PauseOrResumeJob(saveModel); }); } [HttpPost, Route("WriteOrReadPLCData"), AllowAnonymous] public object WriteOrReadPLCData([FromBody] PLCInfo info) { try { var client = WIDESEA_WCS.WCSService.Clients?.FirstOrDefault(t => t.PLCName == info.plcName); if (client == null) { throw new Exception("plcName不存在或未连接!"); } if (info.type == "r") { if (client.PLCType == "SiemensPLC") { if (info.dataType == "int") { info.value = client.SiemensPLCClient.Read(info.address); } else if (info.dataType == "string") { info.value = client.SiemensPLCClient.Read(info.address, info.len); } else if (info.dataType == "bool") { info.value = client.SiemensPLCClient.Read(info.address); } else if (info.dataType == "byte[]") { info.value = string.Join(',', client.SiemensPLCClient.Read(info.address, info.len).ToArray()); } else { throw new Exception($"数据类型{info.dataType},未定义"); } } else if (client.PLCType == "OmronPLC") { if (info.dataType == "int") { info.value = client.SiemensPLCClient.Read(info.address); } else if (info.dataType == "string") { info.value = client.SiemensPLCClient.Read(info.address, info.len); } else if (info.dataType == "bool") { info.value = client.SiemensPLCClient.Read(info.address); } else if (info.dataType == "byte[]") { info.value = string.Join(',', client.SiemensPLCClient.Read(info.address, info.len).ToArray()); } else { throw new Exception($"操作类型{info.dataType},未定义"); } } else { throw new Exception($"PLC类型{client.PLCType},未定义"); } } else if (info.type == "w") { throw new Exception("为安全起见,不能进行写操作!"); } else { throw new Exception("操作类型不存在!"); } } catch (Exception ex) { return info.Error(ex.Message); } return info.Success(); } /// /// 获取AGV状态 /// /// /// [HttpPost, Route("GetAgvStatusData"), AllowAnonymous] public WebResponseContent GetAgvStatusData([FromBody] SaveModel model) { return AGVData.GetAgvStatusData(model); } private static object gvTaskInfozz = new object(); /// /// 树形任务完成量组装 /// /// /// [HttpPost, Route("GetAgvTaskInfozz"), AllowAnonymous] public WebResponseContent GetAgvTaskInfozz([FromBody] SaveModel model) { lock (gvTaskInfozz) { return AGVData.GetAgvTaskInfozz(model); } } private static object gvTaskInfozj = new object(); /// /// 树形任务完成量组装 /// /// /// [HttpPost, Route("GetAgvTaskInfozj"), AllowAnonymous] public WebResponseContent GetAgvTaskInfozj([FromBody] SaveModel model) { lock (gvTaskInfozj) { return AGVData.GetAgvTaskInfozj(model); } } private static object gvTaskInfofj = new object(); /// /// 树形任务完成量组装 /// /// /// [HttpPost, Route("GetAgvTaskInfofj"), AllowAnonymous] public WebResponseContent GetAgvTaskInfofj([FromBody] SaveModel model) { lock (gvTaskInfofj) { return AGVData.GetAgvTaskInfofj(model); } } /// /// 获取空货位或者有货货位 /// /// /// [HttpPost, Route("GetLocationEmptyOrStored"), AllowAnonymous] public WebResponseContent GetLocationEmptyOrStored([FromBody] SaveModel model) { return AGVData.GetLocationEmptyOrStored(model); } /// /// 获取区域货位数据 /// /// /// [HttpPost, Route("GetLocationData"), AllowAnonymous] public WebResponseContent GetLocationData([FromBody] SaveModel model) { return AGVData.GetLocationData(model); } /// /// 获取AGV任务 /// /// /// [HttpPost, Route("GetAGVTaskData"), AllowAnonymous] public WebResponseContent GetAGVTaskData([FromBody] SaveModel model) { return AGVData.GetAGVTaskData(model); } /// /// 获取提升机信息 /// /// /// [HttpPost, Route("GetTSJInfo"), AllowAnonymous] public WebResponseContent GetTSJInfo([FromBody] SaveModel model) { return AGVData.GetTSJInfo(model); } /// /// 获取多个提升机信息 /// /// /// //[HttpPost, Route("GetTSJInfos"), AllowAnonymous] //public WebResponseContent GetTSJInfos([FromBody] SaveModel model) //{ // return AGVData.GetTSJInfos(model); //} } public class PLCInfo { /// /// 读取r,写入w /// public string type { get; set; } = "r"; /// /// 指令 /// public string address { get; set; } public int len { get; set; } /// /// PLC名称 /// public string plcName { get; set; } public string dataType { get; set; } /// /// 读取或写入的值 /// public object value { get; set; } /// /// 操作结果,和错误信息 /// public string msg { get; set; } public PLCInfo Error(string msg) { this.msg = "操作失败," + msg; return this; } public PLCInfo Success(string msg = null) { if (msg != null) this.msg = msg; return this; } } }