using Furion; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using WIDESEA_Common; using WIDESEA_Common.DBHelper; using WIDESEA_Common.EquipmentEnum; using WIDESEA_Core.Extensions; using WIDESEA_Core.Utilities; using WIDESEA_Entity.DomainModels; using WIDESEA_Services.Repositories; using WIDESEA_WCS.WCSClient; using static FreeSql.Internal.GlobalFilter; namespace WIDESEA_WCS { public class AGVData { /// /// AGV车辆信息显示 /// /// /// public static WebResponseContent GetAgvStatusData(SaveModel model) { var response = new WebResponseContent(); try { if (WCSService.Clients == null) { return response.Error(""); } string AGVName = model.MainData["AGVName"].ToString(); PLCClient client = WCSService.Clients.Find(X => X.PLCName == AGVName); if (client == null) return response.Error("AGVPLC未连接"); //agv类型:0-潜伏型,1 - 牵引型,2 - 承载型,3 - 举升型,4 -辊道型,5 - 叉车型,6 - 其他 int agvType = 0; //agv编号 int agvCode = 2; //agv上下线状态,0-下线,1 - 上线 int agvOnline = 4; //agv当前地标号 int agvRfidLabel = 6; //agv当前x坐标值 int agvXcoordinate = 8; //agv当前y坐标值 int agvYcoordinate = 12; //agv运行状态 :0-停止,1 - 行驶,2 - 暂停 int agvStatus = 16; //agv当前运行速度(mm / s) int agvSpeed = 18; //agv报警代码(按位状态提取,最多可表示32种报警 int agvAlarmCode = 20; bool isFirst = true; List statusList = new List(); while (true) { if (!isFirst) { agvType = agvType + 44; agvCode = agvCode + 44; agvOnline = agvOnline + 44; agvRfidLabel = agvRfidLabel + 44; agvXcoordinate = agvXcoordinate + 44; agvYcoordinate = agvYcoordinate + 44; agvStatus = agvStatus + 44; agvSpeed = agvSpeed + 44; agvAlarmCode = agvAlarmCode + 44; } AGVStatus aGVStatus = new AGVStatus(); aGVStatus.agvCode = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1001." + agvCode.ToString()).Content; if (aGVStatus.agvCode > 0) { aGVStatus.agvType = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1001." + agvType.ToString()).Content; aGVStatus.agvOnline = client.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1001." + agvOnline.ToString()).Content == true ? "上 线" : "下 线"; aGVStatus.agvRfidLabel = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1001." + agvRfidLabel.ToString()).Content; aGVStatus.agvXcoordinate = client.SiemensPLCClient.SiemensS7NetClient.ReadInt32("DB1001." + agvXcoordinate.ToString()).Content; aGVStatus.agvYcoordinate = client.SiemensPLCClient.SiemensS7NetClient.ReadInt32("DB1001." + agvYcoordinate.ToString()).Content; aGVStatus.agvStatus = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1001." + agvStatus.ToString()).Content; aGVStatus.agvSpeed = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1001." + agvSpeed.ToString()).Content; aGVStatus.agvAlarmCode = 0; //client.SiemensPLCClient.SiemensS7NetClient.Read("DB1001." + agvAlarmCode.ToString(), 32).Content; statusList.Add(aGVStatus); isFirst = false; } else break; } //string data = string.Empty; //foreach (var item in statusList) //{ // data = JsonConvert.SerializeObject(new // { // title = item.agvCode, // number = new // { // number = '[' + 120 + '}', // toFixed = 1, // textAlign = "left", // content = "{nt}", // style = new // { // fontSize = 26 // } // } // }); //} response.OK(data: statusList); } catch (Exception ex) { response.Error(ex.Message); } return response; } /// /// 任务完成量组装 /// /// /// public static WebResponseContent GetAgvTaskInfozz(SaveModel model) { FreeDB freeDB = new FreeDB(); var response = new WebResponseContent(); try { string AGVName = model.MainData["AGVName"].ToString(); //Console.WriteLine(AGVName+"---"+DateTime.Now); //Expression> upExpression = AGVName switch //{ // "正极AGV调度" => x => x.agv_code.Contains("正极AGV调度"), // "负极AGV调度" => x => x.agv_code.Contains("负极AGV调度"), // "组装AGV调度" => x => x.agv_code.Contains("组装AGV调度"), // _ => throw new NotImplementedException(), //}; #region MyRegion #endregion List strings1 = new List(); List tocount = new List(); for (int i = 14; i >= 0; i--) { String time1 = DateTime.Now.Date.AddDays(-i).ToString("yyyy-MM-dd"); //DateTime time = DateTime.Now.Date.AddDays(-i + 1); //Console.WriteLine($"time1:{time1}"); int upHty = freeDB.Select() .Where(x => x.agv_code.Contains(AGVName) && x.agv_createtime.ToString().Contains(time1) && x.agv_taskstate.Contains("TaskState_Finished")).ToList().Count(); //int upHty = dt_agvtask_htyRepository.Instance.Find(x => x.agv_code.Contains(AGVName)&& x.agv_createtime.ToString().Contains(time1) && x.agv_taskstate.Contains("TaskState_Finished")).ToList().Count; tocount.Add(upHty); //Console.WriteLine(AGVName + $"--{i}-"); strings1.Add(DateTime.Now.AddDays(-i).ToString("MM-dd")); } //for (int i = 14; i >= 0; i--) //{ // //Console.WriteLine(AGVName + $"--{i}-" ); // strings1.Add(DateTime.Now.AddDays(-i).ToString("MM-dd")); // DateTime time = DateTime.Now.Date.AddDays(-i + 1); // DateTime time1 = DateTime.Now.Date.AddDays(-i); // int upHty = dt_agvtask_htyRepository.Instance.Find(x => x.agv_code.Contains(AGVName)).Where(x => x.agv_createtime < time && x.agv_createtime > time1 && x.agv_taskstate == "TaskState_Finished").ToList().Count; // //Console.WriteLine(AGVName + $"-数量{upHty}--" + DateTime.Now); //} //Console.WriteLine(AGVName + "-4321--" + DateTime.Now); return response.OK(data: new { upNum = tocount, //upNum = ints, //downNum = ints1, //totalNum = ints2, totalNum = strings1 }); } catch (Exception ex) { //Console.WriteLine( "-errrr--" + DateTime.Now); response.Error(ex.Message); } return response; } /// /// 任务完成量正极 /// /// /// public static WebResponseContent GetAgvTaskInfozj(SaveModel model) { FreeDB freeDB = new FreeDB(); var response = new WebResponseContent(); try { string AGVName = model.MainData["AGVName"].ToString(); //Console.WriteLine(AGVName + "---" + DateTime.Now); //Expression> upExpression = AGVName switch //{ // "正极AGV调度" => x => x.agv_code.Contains("正极AGV调度"), // "负极AGV调度" => x => x.agv_code.Contains("负极AGV调度"), // "组装AGV调度" => x => x.agv_code.Contains("组装AGV调度"), // _ => throw new NotImplementedException(), //}; #region MyRegion #endregion List strings1 = new List(); List tocount = new List(); for (int i = 14; i >= 0; i--) { String time1 = DateTime.Now.Date.AddDays(-i).ToString("yyyy-MM-dd"); //DateTime time = DateTime.Now.Date.AddDays(-i + 1); //Console.WriteLine($"time1:{time1}"); int upHty = freeDB.Select() .Where(x => x.agv_code.Contains(AGVName) && x.agv_createtime.ToString().Contains(time1) && x.agv_taskstate.Contains("TaskState_Finished")).ToList().Count(); //int upHty = dt_agvtask_htyRepository.Instance.Find(x => x.agv_code.Contains(AGVName)&& x.agv_createtime.ToString().Contains(time1) && x.agv_taskstate.Contains("TaskState_Finished")).ToList().Count; tocount.Add(upHty); //Console.WriteLine(AGVName + $"--{i}-"); strings1.Add(DateTime.Now.AddDays(-i).ToString("MM-dd")); } //for (int i = 14; i >= 0; i--) //{ // //Console.WriteLine(AGVName + $"--{i}-" ); // strings1.Add(DateTime.Now.AddDays(-i).ToString("MM-dd")); // DateTime time = DateTime.Now.Date.AddDays(-i + 1); // DateTime time1 = DateTime.Now.Date.AddDays(-i); // int upHty = dt_agvtask_htyRepository.Instance.Find(x => x.agv_code.Contains(AGVName)).Where(x => x.agv_createtime < time && x.agv_createtime > time1 && x.agv_taskstate == "TaskState_Finished").ToList().Count; // //Console.WriteLine(AGVName + $"-数量{upHty}--" + DateTime.Now); //} //Console.WriteLine(AGVName + "-4321--" + DateTime.Now); return response.OK(data: new { upNum = tocount, //upNum = ints, //downNum = ints1, //totalNum = ints2, totalNum = strings1 }); } catch (Exception ex) { //Console.WriteLine("-errrr--" + DateTime.Now); response.Error(ex.Message); } return response; } /// /// 任务完成量负极 /// /// /// public static WebResponseContent GetAgvTaskInfofj(SaveModel model) { FreeDB freeDB = new FreeDB(); var response = new WebResponseContent(); try { string AGVName = model.MainData["AGVName"].ToString(); //Console.WriteLine(AGVName + "---" + DateTime.Now); //Expression> upExpression = AGVName switch //{ // "正极AGV调度" => x => x.agv_code.Contains("正极AGV调度"), // "负极AGV调度" => x => x.agv_code.Contains("负极AGV调度"), // "组装AGV调度" => x => x.agv_code.Contains("组装AGV调度"), // _ => throw new NotImplementedException(), //}; #region MyRegion #endregion List strings1 = new List(); List tocount = new List(); for (int i = 14; i >= 0; i--) { String time1 = DateTime.Now.Date.AddDays(-i).ToString("yyyy-MM-dd"); //DateTime time = DateTime.Now.Date.AddDays(-i + 1); //Console.WriteLine($"time1:{time1}"); int upHty = freeDB.Select() .Where(x => x.agv_code.Contains(AGVName) && x.agv_createtime.ToString().Contains(time1) && x.agv_taskstate.Contains("TaskState_Finished")).ToList().Count(); //int upHty = dt_agvtask_htyRepository.Instance.Find(x => x.agv_code.Contains(AGVName)&& x.agv_createtime.ToString().Contains(time1) && x.agv_taskstate.Contains("TaskState_Finished")).ToList().Count; tocount.Add(upHty); //Console.WriteLine(AGVName + $"--{i}-"); strings1.Add(DateTime.Now.AddDays(-i).ToString("MM-dd")); } //for (int i = 14; i >= 0; i--) //{ // //Console.WriteLine(AGVName + $"--{i}-" ); // strings1.Add(DateTime.Now.AddDays(-i).ToString("MM-dd")); // DateTime time = DateTime.Now.Date.AddDays(-i + 1); // DateTime time1 = DateTime.Now.Date.AddDays(-i); // int upHty = dt_agvtask_htyRepository.Instance.Find(x => x.agv_code.Contains(AGVName)).Where(x => x.agv_createtime < time && x.agv_createtime > time1 && x.agv_taskstate == "TaskState_Finished").ToList().Count; // //Console.WriteLine(AGVName + $"-数量{upHty}--" + DateTime.Now); //} //Console.WriteLine(AGVName + "-4321--" + DateTime.Now); return response.OK(data: new { upNum = tocount, //upNum = ints, //downNum = ints1, //totalNum = ints2, totalNum = strings1 }); } catch (Exception ex) { //Console.WriteLine("-errrr--" + DateTime.Now); response.Error(ex.Message); } return response; } /// /// 圆形统计图 /// /// /// public static WebResponseContent GetLocationEmptyOrStored(SaveModel model) { WebResponseContent response = new WebResponseContent(); try { string AGVName = model.MainData["AGVName"].ToString(); if (AGVName == "正极AGV调度") { int tbEmptyNum = base_ware_locationRepository.Instance.Find(x => x.equipment_type.Contains("ZJ-TBHCJ") && x.location_state == LocationStateEnum.LocationState_Empty.ToString()).Count; int tbStoredNum = base_ware_locationRepository.Instance.Find(x => x.equipment_type.Contains("ZJ-TBHCJ") && x.location_state == LocationStateEnum.LocationState_Stored.ToString()).Count; int bcEmptyNum = base_ware_locationRepository.Instance.Find(x => x.equipment_type.Contains("ZJ-BCHCJ") && x.location_state == LocationStateEnum.LocationState_Empty.ToString()).Count; int bcStoredNum = base_ware_locationRepository.Instance.Find(x => x.equipment_type.Contains("ZJ-BCHCJ") && x.location_state == LocationStateEnum.LocationState_Stored.ToString()).Count; response.OK(data: new { tbEmptyNum, tbStoredNum, bcEmptyNum, bcStoredNum }); } else if (AGVName == "负极AGV调度") { int tbEmptyNum = base_ware_locationRepository.Instance.Find(x => x.equipment_type.Contains("FJ-TBHCJ") && x.location_state == LocationStateEnum.LocationState_Empty.ToString()).Count; int tbStoredNum = base_ware_locationRepository.Instance.Find(x => x.equipment_type.Contains("FJ-TBHCJ") && x.location_state == LocationStateEnum.LocationState_Stored.ToString()).Count; int bcEmptyNum = base_ware_locationRepository.Instance.Find(x => x.equipment_type.Contains("FJ-BCHCJ") && x.location_state == LocationStateEnum.LocationState_Empty.ToString()).Count; int bcStoredNum = base_ware_locationRepository.Instance.Find(x => x.equipment_type.Contains("FJ-BCHCJ") && x.location_state == LocationStateEnum.LocationState_Stored.ToString()).Count; response.OK(data: new { tbEmptyNum, tbStoredNum, bcEmptyNum, bcStoredNum }); } else if (AGVName == "组装AGV调度") { int gfEmptyNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-GFHCJ") || x.equipment_type.Contains("FJ-GFHCJ")) && x.location_state == LocationStateEnum.LocationState_Empty.ToString()).Count; int gfStoredNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-GFHCJ") || x.equipment_type.Contains("FJ-GFHCJ")) && x.location_state == LocationStateEnum.LocationState_Stored.ToString()).Count; int jkEmptyNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJK") || x.equipment_type.Contains("FJK")) && x.location_state == LocationStateEnum.LocationState_Empty.ToString()).Count; int jkStoredNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJK") || x.equipment_type.Contains("FJK")) && x.location_state == LocationStateEnum.LocationState_Stored.ToString()).Count; int qjEmptyNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-QJHCJ") || x.equipment_type.Contains("FJ-QJHCJ")) && x.location_state == LocationStateEnum.LocationState_Empty.ToString()).Count; int qjStoredNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-QJHCJ") || x.equipment_type.Contains("FJ-QJHCJ")) && x.location_state == LocationStateEnum.LocationState_Stored.ToString()).Count; response.OK(data: new { gfEmptyNum, gfStoredNum, jkEmptyNum, jkStoredNum, qjEmptyNum, qjStoredNum }); } } catch (Exception ex) { response.Error(ex.Message); } return response; } /// /// 空,满,掉线,执行货架数量统计 /// /// /// public static WebResponseContent GetLocationData(SaveModel model) { WebResponseContent response = new WebResponseContent(); try { string AGVName = model.MainData["AGVName"].ToString(); string area = string.Empty; if (AGVName == "正极AGV调度") { int totalEmptyNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-TBHCJ") || x.equipment_type.Contains("ZJ-BCHCJ")) && x.location_state == LocationStateEnum.LocationState_Empty.ToString()).Count; int totalStoredNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-TBHCJ") || x.equipment_type.Contains("ZJ-BCHCJ")) && x.location_state == LocationStateEnum.LocationState_Stored.ToString()).Count; int totalNGNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-TBHCJ") || x.equipment_type.Contains("ZJ-BCHCJ")) && x.task == 1).Count; int totalWaitedNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-TBHCJ") || x.equipment_type.Contains("ZJ-BCHCJ")) && x.location_state == LocationStateEnum.LocationState_Close.ToString()).Count; response.OK(data: new { totalEmptyNum, totalStoredNum, totalNGNum, totalWaitedNum }); } else if (AGVName == "负极AGV调度") { int totalEmptyNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("FJ-TBHCJ") || x.equipment_type.Contains("FJ-BCHCJ")) && x.location_state == LocationStateEnum.LocationState_Empty.ToString()).Count; int totalStoredNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("FJ-TBHCJ") || x.equipment_type.Contains("FJ-BCHCJ")) && x.location_state == LocationStateEnum.LocationState_Stored.ToString()).Count; int totalNGNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("FJ-TBHCJ") || x.equipment_type.Contains("FJ-BCHCJ")) && x.task == 1).Count; int totalWaitedNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("FJ-TBHCJ") || x.equipment_type.Contains("FJ-BCHCJ")) && x.location_state == LocationStateEnum.LocationState_Close.ToString()).Count; response.OK(data: new { totalEmptyNum, totalStoredNum, totalNGNum, totalWaitedNum }); } else if (AGVName == "组装AGV调度") { area = "ZJ"; int totalEmptyNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-GFHCJ") || x.equipment_type.Contains("FJ-GFHCJ") | x.equipment_type.Contains("ZJK") | x.equipment_type.Contains("FJK") | x.equipment_type.Contains("FJ-QJHCJ") | x.equipment_type.Contains("ZJ-QJHCJ")) && x.location_state == LocationStateEnum.LocationState_Empty.ToString()).Count; int totalStoredNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-GFHCJ") || x.equipment_type.Contains("FJ-GFHCJ") | x.equipment_type.Contains("ZJK") | x.equipment_type.Contains("FJK") | x.equipment_type.Contains("FJ-QJHCJ") | x.equipment_type.Contains("ZJ-QJHCJ")) && x.location_state == LocationStateEnum.LocationState_Stored.ToString()).Count; int totalNGNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-GFHCJ") || x.equipment_type.Contains("FJ-GFHCJ") | x.equipment_type.Contains("ZJK") | x.equipment_type.Contains("FJK") | x.equipment_type.Contains("FJ-QJHCJ") | x.equipment_type.Contains("ZJ-QJHCJ")) && x.task == 1).Count; int totalWaitedNum = base_ware_locationRepository.Instance.Find(x => (x.equipment_type.Contains("ZJ-GFHCJ") || x.equipment_type.Contains("FJ-GFHCJ") | x.equipment_type.Contains("ZJK") | x.equipment_type.Contains("FJK") | x.equipment_type.Contains("FJ-QJHCJ") | x.equipment_type.Contains("ZJ-QJHCJ")) && x.location_state == LocationStateEnum.LocationState_Close.ToString()).Count; response.OK(data: new { totalEmptyNum, totalStoredNum, totalNGNum, totalWaitedNum }); } } catch (Exception ex) { response.Error(ex.Message); } return response; } /// /// 任务列表信息 /// /// /// public static WebResponseContent GetAGVTaskData(SaveModel model) { WebResponseContent response = new WebResponseContent(); try { string AGVName = model.MainData["AGVName"].ToString(); string area = string.Empty; List agvtasks = new List(); Expression> Expression = x => x.agv_code.Contains(AGVName); agvtasks = dt_agvtaskRepository.Instance.Find(Expression).ToList(); //if (AGVName == "正极AGV调度") //{ // area = "ZJ"; // Expression> Expression = x => x.agv_code .Contains("正极AGV调度") ; // agvtasks = dt_agvtaskRepository.Instance.Find(Expression).ToList(); //Expression> Expression = x => x.agv_fromaddress.Contains("TB") || x.agv_fromaddress.Contains("GY") || x.agv_fromaddress.Contains("FQ") || x.agv_toaddress.Contains("TB") || x.agv_toaddress.Contains("GY") || x.agv_toaddress.Contains("FQ"); // agvtasks = dt_agvtaskRepository.Instance.Find(Expression).Where(x => x.agv_fromaddress.Contains(area)).ToList(); //} //else if (AGVName == "负极AGV调度") //{ // area = "FJ"; // Expression> Expression = x => x.agv_fromaddress.Contains("TB") || x.agv_fromaddress.Contains("GY") || x.agv_fromaddress.Contains("FQ") || x.agv_toaddress.Contains("TB") || x.agv_toaddress.Contains("GY") || x.agv_toaddress.Contains("FQ"); // agvtasks = dt_agvtaskRepository.Instance.Find(Expression).Where(x => x.agv_fromaddress.Contains(area)).ToList(); //} //else if (AGVName == "组装AGV调度") //{ // area = "ZZ"; // Expression> Expression = x => x.agv_fromaddress.Contains("XL-FQHCJ") || x.agv_toaddress.Contains("CDHCJ"); // agvtasks = dt_agvtaskRepository.Instance.Find(Expression).Where(x => x.agv_fromaddress.Contains(area)).ToList(); //} //else if (AGVName == "负极极卷库") //{ // area = "FJ"; // Expression> Expression = x => x.agv_fromaddress.Contains("XL-FQHCJ") || x.agv_toaddress.Contains("CDHCJ"); // agvtasks = dt_agvtaskRepository.Instance.Find(Expression).Where(x => x.agv_fromaddress.Contains(area)).ToList(); //} //else if (AGVName == "一楼冲叠") //{ // Expression> Expression = x => x.agv_fromaddress.Contains("JJHCJ") || x.agv_fromaddress.Contains("1-ZJSL-CDHCJ") || x.agv_fromaddress.Contains("1-FJSL-CDHCJ"); // agvtasks = dt_agvtaskRepository.Instance.Find(Expression).ToList(); //} //else if (AGVName == "二楼冲叠") //{ // Expression> Expression = x => x.agv_fromaddress.Contains("JJHCJ") || x.agv_fromaddress.Contains("2-ZJSL-CDHCJ") || x.agv_fromaddress.Contains("2-FJSL-CDHCJ"); // agvtasks = dt_agvtaskRepository.Instance.Find(Expression).ToList(); //} if (agvtasks.Count <= 0) return response.Error("未找到任务"); List tempConfig = new List(); //tempConfig = App.GetConfig>("location"); foreach (var item in agvtasks) { //item.agv_fromaddress = tempConfig.Where(x => x.Code == item.agv_fromaddress).Select(x => x.Name).First().ToString(); //item.agv_toaddress = tempConfig.Where(x => x.Code == item.agv_toaddress).Select(x => x.Name).First().ToString(); item.agv_taskstate = item.agv_taskstate == AGVTaskStateEnum.Create.ToString() ? "已创建" : item.agv_taskstate == AGVTaskStateEnum.SendOut.ToString() ? "已下发" : item.agv_taskstate == AGVTaskStateEnum.Executing.ToString() ? "起点执行中" : item.agv_taskstate == AGVTaskStateEnum.Complete.ToString() ? "起点已完成" : item.agv_taskstate == AGVTaskStateEnum.Executing1.ToString() ? "终点执行中" : item.agv_taskstate == AGVTaskStateEnum.Complete1.ToString() ? "终点已完成" : "其他"; } response.OK(data: agvtasks); } catch (Exception ex) { response.Error(ex.Message); } return response; } //提升机信息对接显示 public static WebResponseContent GetTSJInfo(SaveModel model) { WebResponseContent response = new WebResponseContent(); try { if (WCSService.Clients == null) { return response.Error(""); } string AGVName = model.MainData["TSJName"].ToString(); PLCClient client = WCSService.Clients.Find(X => X.PLCName == AGVName); if (client != null) { #region 提升机运行状态 string status = "未通讯"; bool status1 = client.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB51.92.1").Content;//准备好 if (status1) { status = "准备好"; } bool status2 = client.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB51.92.2").Content;//运行 if (status2) { status = "运行"; } bool status3 = client.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB51.92.3").Content;//完成 if (status3) { status = "完成"; } #endregion int agverror = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1002.192").Content.ToInt();//agv报警 bool tsjerror = client.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB51.92").Content;//提升机报警 int error = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB51.90").Content.ToInt();//提升机反馈步骤 int floor = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1002.190").Content.ToInt();//AGV反馈步骤 response.OK(data: new { status, agverror, tsjerror, error, floor }); } } catch (Exception ex) { response.Error(ex.Message); } return response; } public static WebResponseContent GetTSJInfos(SaveModel model) { WebResponseContent response = new WebResponseContent(); try { List AGVName = model.DelKeys.ConvertAll(x => { return x.ToString(); }); List data = new List(); foreach (var item in AGVName) { PLCClient client = WCSService.Clients.Find(X => X.PLCName == item); if (client != null) { int status = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1000.0").Content.ToInt(); int error = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1000.2").Content.ToInt(); int floor = client.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1000.4").Content.ToInt(); data.Add(new { status, error, floor }); } } return response.OK(data: data); } catch (Exception ex) { response.Error(ex.Message); } return response; } } } public class AGVStatus { /// /// agv类型:0-潜伏型,1 - 牵引型,2 - 承载型,3 - 举升型,4 -辊道型,5 - 叉车型,6 - 其他 /// public int agvType { get; set; } /// /// agv编号 /// public int agvCode { get; set; } /// /// agv上下线状态,0-下线,1 - 上线 /// public string agvOnline { get; set; } /// /// agv当前地标号 /// public int agvRfidLabel { get; set; } /// /// agv当前x坐标值 /// public int agvXcoordinate { get; set; } /// /// agv当前y坐标值 /// public int agvYcoordinate { get; set; } /// /// agv运行状态 :0-停止,1 - 行驶,2 - 暂停 /// public int agvStatus { get; set; } /// /// agv当前运行速度(mm / s) /// public int agvSpeed { get; set; } /// /// agv报警代码(按位状态提取,最多可表示32种报警 /// public int agvAlarmCode { get; set; } }