using BLL.DAL; using Commom.DotNetDevices; using Model.WcsModel; using NLog; using System; using System.Data; using System.IO; using System.Threading; using Common; using wms.Controllers; using Model.MessageModel; using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; namespace wms.Task { //Parallel.For public static class TaskAction { // JC09WCS private static bool IsRunTast = true; // 测试方法控制 private static bool IsRunConveyor = true; // 托盘运输线方法控制 private static bool IsRunBoxConveyor = true; // 件箱运输线方法控制 private static bool IsRunStacker = true; // 跺机方法控制 private static bool IsRunStackerAddre = true; // 跺机地址方法控制 private static DataTable PlcInfoDt; // 获取所有设备 private static DataTable PlcIpDt; // 获取所有IP地址 private static string plcConveyVal = ""; // 托盘输送线连接状态 private static PlcIO plcConvey; // 托盘输送线IP地址 private static string plcBoxConveyVal = ""; // 件箱输送线连接状态 private static PlcIO plcBoxConvey; // 件箱输送线IP地址 #region 垛机地址与链接状态 private static string plcStackVal1 = ""; // 跺机1连接状态 private static PlcIO plcStack1; // 跺机1IP地址 private static string plcStackVal2 = ""; // 跺机2连接状态 private static PlcIO plcStack2; // 跺机2IP地址 private static string plcStackVal3 = ""; // 跺机1连接状态 private static PlcIO plcStack3; // 跺机1IP地址 private static string plcStackVal4 = ""; // 跺机2连接状态 private static PlcIO plcStack4; // 跺机2IP地址 private static string plcStackVal5 = ""; // 跺机1连接状态 private static PlcIO plcStack5; // 跺机1IP地址 private static string plcStackVal6 = ""; // 跺机2连接状态 private static PlcIO plcStack6; // 跺机2IP地址 private static string plcStackVal7 = ""; // 跺机1连接状态 private static PlcIO plcStack7; // 跺机1IP地址 #endregion public static bool fuwu = false; // 服务开启关闭 public static bool refresh = false; // 自刷新开启关闭 public static bool tuoji = false; // 脱机开启关闭 public static bool Demo = false; //演示模式开启关闭 /// /// 服务初始化 /// [Obsolete] static TaskAction() { // WCS标准版本代码 执行一次 DALWcsMessage wcsSql = new DALWcsMessage(); PlcIpDt = wcsSql.GetPlcIps(); PlcInfoDt = wcsSql.GetPlcInfos(); // 开启服务 fuwu = true; //自刷新 refresh = true; // 打开设备连接(输送线 跺机 码垛...) plcConvey = new PlcIO("192.168.21.2", 1, ref plcConveyVal); plcStack1 = new PlcIO("192.168.21.30", 1, ref plcStackVal1); plcStack2 = new PlcIO("192.168.21.40", 1, ref plcStackVal2); } /// /// PLC读写测试 /// /// /// public static async void TestPlc(object source, System.Timers.ElapsedEventArgs e) { try { if (IsRunTast) { IsRunTast = false; //WebStocket发送消息 WSChatController wSChat = new WSChatController(); //通知设备--任务 //一号巷道 DeviceMessage message = new DeviceMessage(); message.Message = "任务更新"; message.Status = "1"; message.RoadwayNo = "R01"; message.StartLocat = 10; message.EndLocat = 15; var a = JsonConvert.SerializeObject(message); wSChat.AlarmInformation(a); //二号巷道 没问题 message.Message = "任务更新"; message.Status = "1"; message.RoadwayNo = "R02"; message.StartLocat = 53; message.EndLocat = 15; var b = JsonConvert.SerializeObject(message); wSChat.AlarmInformation(b); //三号巷道 message.Message = "任务更新"; message.Status = "1"; message.RoadwayNo = "R03"; message.StartLocat = 14; message.EndLocat = 53; var c = JsonConvert.SerializeObject(message); wSChat.AlarmInformation(c); //四号巷道 message.Message = "任务更新"; message.Status = "1"; message.RoadwayNo = "R04"; message.StartLocat = 15; message.EndLocat = 10; var d = JsonConvert.SerializeObject(message); wSChat.AlarmInformation(d); //一号巷道 message.Message = "垛机实时"; message.RoadwayNo = "R01"; message.Position = 15; var f = JsonConvert.SerializeObject(message); wSChat.AlarmInformation(f); message.Message = "垛机实时"; message.RoadwayNo = "R01"; message.Position = 33; f = JsonConvert.SerializeObject(message); wSChat.AlarmInformation(f); message.Message = "垛机实时"; message.RoadwayNo = "R01"; message.Position = 36; f = JsonConvert.SerializeObject(message); wSChat.AlarmInformation(f); message.Message = "垛机实时"; message.RoadwayNo = "R01"; message.Position = 45; f = JsonConvert.SerializeObject(message); wSChat.AlarmInformation(f); message.Message = "垛机实时"; message.RoadwayNo = "R01"; message.Position = 48; f = JsonConvert.SerializeObject(message); wSChat.AlarmInformation(f); //wSChat.AlarmInformation(d); //var s = fuwu; //WSChatController wSChat = new WSChatController(); //wSChat.AlarmInformation(s.ToString()); //DALWcsMessage wcsMySql = new DALWcsMessage(); //string EndLocat = string.Empty; // LED显示屏连接测试 //LedDll Led = new LedDll(); //Led.LEDstr("192.168.21.150", "最上方", "中间多文本区域!", "最下方区域 "); //Led.LEDstr("192.168.21.150", "测试LED"); //TaskReques taskReques = new TaskReques(); //taskReques.taskNo = "TK2023092000001"; //taskReques.TaskType = "0"; //taskReques.TaskStatus = "2"; //bool bl = wcsMySql.RequestTasks(taskReques); //string strMsg = wcsMySql.GetLocations("T2300021", "1", ref EndLocat); //WSChatController wSChat = new WSChatController(); // wSChat.AlarmInformation("连接设备失败:"); //Logger logger = LogManager.GetCurrentClassLogger(); //logger.Error("在运行" + "执行该方法:", "iis自动回收机制"); //string plcStatus = ""; //PlcIO plc = new PlcIO("192.168.21.2", 1, ref plcStatus); //if (plcStatus.Length > 0) //{ // // 连接失败 //} //bool bl = plc.SetPlcDBValue(107, "String", "CS2024010100002", "40.0"); //bool bl1 = plc.SetPlcDBValue(107, "String", "T2300063", "60.0"); //连接测试 //string plcStatus = ""; //PlcIO plc = new PlcIO("192.168.21.2", 1, ref plcStatus); //if (plcStatus.Length > 0) //{ // // 连接失败 //} //plc = new PlcIO("192.168.21.30", 1, ref plcStatus); //if (plcStatus.Length > 0) //{ // // 连接失败 //} //PlcIO plc2 = new PlcIO("192.168.21.40", 1, ref plcStatus); //if (plcStatus.Length > 0) //{ // // 连接失败 //} //string plcValue = ""; //plcValue = plc.GetPlcDBValue(107, "Int", "84.0"); //if (plcValue!= "30") //{ // var vl = plc.SetPlcDBValue(107, "Int", "30","84.0"); //} //plcValue = plc.GetPlcDBValue(107, "String", "0.0"); //plcValue = plc.GetPlcDBValue(107, "String", "20.0"); //plcValue = plc.GetPlcDBValue(107, "String", "40.0"); //plcValue = plc.GetPlcDBValue(107, "String", "60.0"); //plcValue = plc.GetPlcDBValue(107, "Int", "80.0"); //plcValue = plc.GetPlcDBValue(107, "Int", "82.0"); //plcValue = plc.GetPlcDBValue(107, "Int", "84.0"); //plcValue = plc.GetPlcDBValue(107, "Int", "86.0"); //plcStatus = ""; //PlcIO plc2 = new PlcIO("192.168.21.30", 1, ref plcStatus); //if (plcStatus.Length > 0) //{ // // 连接失败 //} //plcValue = plc2.GetPlcDBValue(100, "String", "0.0"); //plcValue = plc2.GetPlcDBValue(100, "String", "20.0"); //plcValue = plc2.GetPlcDBValue(100, "Int", "40.0"); //plcValue = plc2.GetPlcDBValue(100, "String", "42.0"); //plcValue = plc2.GetPlcDBValue(100, "String", "62.0"); //plcValue = plc2.GetPlcDBValue(100, "Int", "82.0"); //plcValue = plc2.GetPlcDBValue(100, "Int", "84.0"); //plcValue = plc2.GetPlcDBValue(100, "Int", "86.0"); //plcValue = plc2.GetPlcDBValue(100, "Int", "88.0"); //plcValue = plc2.GetPlcDBValue(100, "Int", "90.0"); //plcValue = plc2.GetPlcDBValue(100, "Int", "92.0"); //plcValue = plc2.GetPlcDBValue(100, "Int", "94.0"); //led灯相应位置显示 // 提示LED选择执行批次 // LedDisplay(row["LedIP"].ToString(), "38工位", "入库前,请操作执行批次信息!", "停止入库\t"); //LedDisplay("192.168.8.55", "38工位 C1口", "空闲中D", "整托空桶/重桶入库分拣交互工位38"); //D口 //LedDisplay("192.168.8.51", "28工位 C口", "空闲中C1", "人工处理/整托袋子入库交互工位28"); //C1口 //LedDisplay("192.168.8.52", "24工位 B口", "空闲中C", "托袋子入库交互工位24"); //C口 //LedDisplay("192.168.8.54", "18工位 A口", "空闲中B", "吨袋入库B口 交互工位18"); //B口 //LedDisplay("192.168.8.53", "13工位 D口", "空闲中A", "桶类出入库A口 交互工位13"); //A口 //LedDisplay("192.168.8.51", "28工位 C1口", "空闲中", "人工处理/整托袋子入库交互工位28"); //C1口 //LedDisplay("192.168.8.52", "24工位 C口", "空闲中", "托袋子入库交互工位24"); //C口 //LedDisplay("192.168.8.54", "18工位 B口", "空闲中", "吨袋入库B口 交互工位18"); //B口 //LedDisplay("192.168.8.53", "13工位 A口", "空闲中", "桶类出入库A口 交互工位13"); //A口 //LedDisplay("192.168.8.55", "38工位 D口", "空闲中", "整托空桶/重桶入库分拣交互工位38"); //D口 //return; //// 手动设置各工位状态 //plc.SetPlcDBValue(1101, "Int", "100", "420.0"); // PLC控制流程字 //var aa = plc.SetPlcDBValue(1101, "String", "T2300001", "400.0"); // 托盘号 //plc.SetPlcDBValue(1101, "Int", "70", "424.0"); // 任务类型 70满桶子母托入 80满桶母托入 //plc.SetPlcDBValue(1101, "Int", "60", "426.0"); // 物料类型 60:满桶字母托盘 70:满桶母托盘 //plc.SetPlcDBValue(1101, "Byte", "1", "428.0"); // 目标工位号 //plc.SetPlcDBValue(1101, "Byte", "1", "429.0"); // 字母托盘状态 0无 1有 //plc.SetPlcDBValue(1101, "Byte", "1", "430.0"); // 物料数量 //plc.SetPlcDBValue(1101, "Real", "200", "432.0"); // 物料重量 //plc.SetPlcDBValue(1101, "Byte", "0", "431.0"); // 拆跺数量 // 读取 //string plcValue = ""; //plcValue = plc.GetPlcDBValue(101, "String", "20.0"); //bool inBl = plc.SetPlcDBValue(101, "String", "T2300001", "20.0"); //plcValue = plc.GetPlcDBValue(101, "String", "20.0"); //plcValue = plc.GetPlcDBValue(101, "Int", "82.0"); ////bool inBl = plc.SetPlcDBValue(101, "Int", "1", "82.0"); ////plc.SetPlcDBValue(1101, "String", "T2300001", "10.0"); //plcValue = ""; //plcValue = plc.GetPlcDBValue(1101, "Int", "20.0"); ////plc.SetPlcDBValue(1101, "Int", "99", "22.0"); //plcValue = plc.GetPlcDBValue(1101, "Int", "424.0"); ////plc.SetPlcDBValue(1101, "Int", "99", "24.0"); //plcValue = plc.GetPlcDBValue(1101, "Int", "426.0"); ////plc.SetPlcDBValue(1101, "Int", "99", "26.0"); //plcValue = plc.GetPlcDBValue(1101, "Byte", "428.0"); ////plc.SetPlcDBValue(1101, "Byte", "99", "28.0"); //plcValue = plc.GetPlcDBValue(1101, "Byte", "429.0"); ////plc.SetPlcDBValue(1101, "Byte", "99", "29.0"); //plcValue = plc.GetPlcDBValue(1101, "Byte", "430.0"); ////plc.SetPlcDBValue(1101, "Byte", "99", "30.0"); //plcValue = plc.GetPlcDBValue(1101, "Byte", "431.0"); ////plc.SetPlcDBValue(1101, "Byte", "99", "31.0"); //plcValue = plc.GetPlcDBValue(1101, "Real", "432.0"); ////plc.SetPlcDBValue(1101, "Real", "99", "32.0"); // 接口测试 //WCSPalletBind model = new WCSPalletBind(); //model.PalletNo = "T2300001"; //model.TaskType = "001"; //model.SubPallet = "0"; //model.SkuQty = 10; //model.SkuWeight = "235"; //model.SkuType = "001"; //model.LotNo = "2305190"; //model.SupplierLot = ""; //DALWcsMessage wcsMySql = new DALWcsMessage(); //string endLocat = ""; // 取货工位号 //string strMsg = wcsMySql.GetLocation("T2300001", model, ref endLocat); //plc.ClosePlc(); IsRunTast = true; } } catch (Exception ex) { throw ex; } finally { //IsRunTast = true; } } /// /// 堆垛机 /// //[Obsolete] public static void Stackers(object source, System.Timers.ElapsedEventArgs e) { try { if (IsRunStacker) { IsRunStacker = false; // 判断wcs服务是否开启 if (!fuwu) { IsRunStacker = true; return; } // 判断运行的服务器 bool sqlBool = false; DALWcsMessage wcsSql = new DALWcsMessage(); try { sqlBool = wcsSql.GetIsWcsAutoDB1(); // 抛出异常,证明DB2在运行 } catch { IsRunStacker = true; return; }; PlcInteraction plcInteraction = new PlcInteraction(); while (fuwu && sqlBool) { if (plcStackVal1.Length > 0 || plcStackVal2.Length > 0) { if (plcStackVal1.Length > 0) { // 重新连接plc plcStack1 = new PlcIO("192.168.21.30", 1, ref plcStackVal1); } if (plcStackVal2.Length > 0) { // 重新连接plc plcStack2 = new PlcIO("192.168.21.40", 1, ref plcStackVal2); } } else { // 自动模式 DataRow[] ipRows = PlcIpDt.Select(" Type = '0' "); foreach (DataRow ipRow in ipRows) { if (ipRow["IP"].ToString() == "192.168.21.30") { plcInteraction.StackersInteraction2(ipRow, PlcInfoDt, plcStack1, plcConvey); } else if (ipRow["IP"].ToString() == "192.168.21.40") { plcInteraction.StackersInteraction2(ipRow, PlcInfoDt, plcStack2, plcConvey); } } } } IsRunStacker = true; } } catch (Exception ex) { IsRunStacker = true; throw ex; } } /// /// 托盘运输线 /// public static void Conveyors(object source, System.Timers.ElapsedEventArgs e) { try { if (IsRunConveyor) { IsRunConveyor = false; // 判断wcs服务是否开启 if (!fuwu) { IsRunConveyor = true; return; } // 判断运行的服务器 bool sqlBool = false; DALWcsMessage wcsSql = new DALWcsMessage(); try { // 抛出异常,证明DB2在运行 sqlBool = wcsSql.GetIsWcsAutoDB1(); } catch { IsRunConveyor = true; return; }; Logger logger = LogManager.GetCurrentClassLogger(); logger.Error("ASDF", "定时监控:"); PlcInteraction plcInteraction = new PlcInteraction(); while (fuwu && sqlBool) { Thread.Sleep(100); if (plcConveyVal.Length > 0 || plcStackVal1.Length > 0 || plcStackVal2.Length > 0) { plcConvey.ClosePlc(); plcStack1.ClosePlc(); plcStack2.ClosePlc(); plcConveyVal = ""; plcStackVal1 = ""; plcStackVal2 = ""; // 重新连接plc plcConvey = new PlcIO("192.168.21.2", 1, ref plcConveyVal); plcStack1 = new PlcIO("192.168.21.30", 1, ref plcStackVal1); plcStack2 = new PlcIO("192.168.21.40", 1, ref plcStackVal2); logger.Error($"重新连接:输送线:{plcConveyVal},跺机1:{plcStackVal1},跺机2:{plcStackVal2}", "输送线错误重新连接关闭"); } else { try { // 输送线 DataRow[] ipRows = PlcIpDt.Select(" Type = '1' "); foreach (DataRow ipRow in ipRows) { plcInteraction.ConveyorsInteraction2(ipRow, PlcInfoDt, plcConvey, plcStack1, plcStack2); } // 堆垛机 DataRow[] ipRowsDJ = PlcIpDt.Select(" Type = '0' "); foreach (DataRow ipRowDj in ipRowsDJ) { if (ipRowDj["IP"].ToString() == "192.168.21.30") { plcInteraction.StackersInteraction2(ipRowDj, PlcInfoDt, plcStack1, plcConvey); } else if (ipRowDj["IP"].ToString() == "192.168.21.40") { plcInteraction.StackersInteraction2(ipRowDj, PlcInfoDt, plcStack2, plcConvey); } } } catch (Exception ex) { plcConvey.ClosePlc(); plcStack1.ClosePlc(); plcStack2.ClosePlc(); plcConveyVal = "OFF"; plcStackVal1 = "OFF"; plcStackVal2 = "OFF"; logger.Error("异常重连:" + ex.Message, "输送线错误重新连接关闭"); } } } IsRunConveyor = true; } } catch (Exception ex) { IsRunConveyor = true; throw ex; } } /// /// 件箱运输线 /// public static void BoxConveyors(object source, System.Timers.ElapsedEventArgs e) { try { if (IsRunBoxConveyor) { IsRunBoxConveyor = false; // 判断wcs服务是否开启 if (!fuwu) { IsRunBoxConveyor = true; return; } // 判断运行的服务器 bool sqlBool = false; DALWcsMessage wcsSql = new DALWcsMessage(); try { // 抛出异常,证明DB2在运行 sqlBool = wcsSql.GetIsWcsAutoDB1(); } catch { IsRunBoxConveyor = true; return; }; Logger logger = LogManager.GetCurrentClassLogger(); logger.Error("件箱输送线定时运行", "定时监控:"); PlcInteraction plcInteraction = new PlcInteraction(); while (fuwu && sqlBool) { Thread.Sleep(100); if (plcBoxConveyVal.Length > 0) { plcBoxConvey.ClosePlc(); plcBoxConveyVal = ""; // 重新连接plc plcBoxConvey = new PlcIO("192.168.21.2", 1, ref plcConveyVal); logger.Error($"重新连接:件箱输送线:{plcBoxConveyVal}", "件箱输送线错误重新连接关闭"); } else { try { // 件箱输送线 DataRow[] ipRows = PlcIpDt.Select(" Type = '2' "); foreach (DataRow ipRow in ipRows) { plcInteraction.BoxConveyorsInteraction2(ipRow, PlcInfoDt, plcConvey); } } catch (Exception ex) { plcBoxConvey.ClosePlc(); plcBoxConveyVal = "OFF"; logger.Error("异常重连:" + ex.Message, "件箱输送线错误重新连接关闭"); } } } IsRunBoxConveyor = true; } } catch (Exception ex) { IsRunBoxConveyor = true; throw ex; } } /// /// 跺机地址监控 /// /// /// public static void StackerAddre(object source, System.Timers.ElapsedEventArgs e) { try { if (IsRunStackerAddre) { IsRunStackerAddre = false; // 判断wcs服务是否开启 if (!fuwu) { IsRunStacker = true; return; } // 判断运行的服务器 bool sqlBool = false; DALWcsMessage wcsSql = new DALWcsMessage(); try { sqlBool = wcsSql.GetIsWcsAutoDB1(); // 抛出异常,证明DB2在运行 } catch { IsRunStackerAddre = true; return; }; PlcInteraction plcInteraction = new PlcInteraction(); while (fuwu && sqlBool) { if (plcStackVal1.Length > 0 || plcStackVal2.Length > 0) { if (plcStackVal1.Length > 0) { // 重新连接plc plcStack1 = new PlcIO("192.168.21.30", 1, ref plcStackVal1); } if (plcStackVal2.Length > 0) { // 重新连接plc plcStack2 = new PlcIO("192.168.21.40", 1, ref plcStackVal2); } if (plcStackVal3.Length > 0) { // 重新连接plc plcStack3 = new PlcIO("192.168.21.50", 1, ref plcStackVal3); } if (plcStackVal4.Length > 0) { // 重新连接plc plcStack4 = new PlcIO("192.168.21.60", 1, ref plcStackVal4); } if (plcStackVal5.Length > 0) { // 重新连接plc plcStack5 = new PlcIO("192.168.21.70", 1, ref plcStackVal5); } if (plcStackVal6.Length > 0) { // 重新连接plc plcStack6 = new PlcIO("192.168.21.80", 1, ref plcStackVal6); } if (plcStackVal7.Length > 0) { // 重新连接plc plcStack7 = new PlcIO("192.168.21.90", 1, ref plcStackVal7); } } else { // 自动模式 DataRow[] ipRows = PlcIpDt.Select(" Type = '0' "); foreach (DataRow ipRow in ipRows) { if (ipRow["IP"].ToString() == "192.168.21.30") { plcInteraction.StackersAddreInteraction(ipRow, PlcInfoDt, plcStack1, plcConvey); } else if (ipRow["IP"].ToString() == "192.168.21.40") { plcInteraction.StackersAddreInteraction(ipRow, PlcInfoDt, plcStack2, plcConvey); } else if (ipRow["IP"].ToString() == "192.168.21.50") { plcInteraction.StackersAddreInteraction(ipRow, PlcInfoDt, plcStack3, plcConvey); } else if (ipRow["IP"].ToString() == "192.168.21.60") { plcInteraction.StackersAddreInteraction(ipRow, PlcInfoDt, plcStack4, plcConvey); } else if (ipRow["IP"].ToString() == "192.168.21.70") { plcInteraction.StackersAddreInteraction(ipRow, PlcInfoDt, plcStack5, plcConvey); } else if (ipRow["IP"].ToString() == "192.168.21.80") { plcInteraction.StackersAddreInteraction(ipRow, PlcInfoDt, plcStack6, plcConvey); } else if (ipRow["IP"].ToString() == "192.168.21.90") { plcInteraction.StackersAddreInteraction(ipRow, PlcInfoDt, plcStack7, plcConvey); } } } } IsRunStackerAddre = true; } } catch (Exception ex) { IsRunStackerAddre = true; throw ex; } } /// /// 清除log日志 /// public static void DeleteNlogFile(object source, System.Timers.ElapsedEventArgs e) { try { // 时 分 秒 // 得到 hour minute second 如果等于某个值就开始执行某个程序。 int intHour = e.SignalTime.Hour; int intMinute = e.SignalTime.Minute; //int intSecond = e.SignalTime.Second; // 定制时间; 比如 在10:30 :00 的时候执行某个函数 int iHour = 00; int iMinute = 05; //int iSecond = 00; // 设置 在每天晚上的23点50执行 //if (intHour == iHour && intMinute == iMinute && intSecond == iSecond) if (intHour == iHour && intMinute == iMinute) { int count = 0; string[] files = Directory.GetFiles("E:\\server\\WcsServer\\LogFile");//路径需要更改 //string[] files = Directory.GetFiles("D:\\WMS\\JC08Wcs\\WCS-V1.0\\wms\\LogFile"); foreach (string file in files) { FileInfo fi = new FileInfo(file); var a = fi.Name.Split('.'); a[0].ToDate(); if (a[0].ToDate() < DateTime.Now.AddMonths(-1)) { count += 1; fi.Delete(); } } Logger logger = LogManager.GetCurrentClassLogger(); if (count > 0) { logger.Error("清除WCS日志消息:清除成功"); //调用WMS清除日志接口 var response = Utility.Extra.HttpHelper.DoPost("http://192.168.220.137:8081/api/DownAPi/DeleteNlogFile", null);//路径需要更改 if (response != "清除成功") { logger.Error("清除WMS日志消息:清除成功"); } } } } catch (Exception ex) { Logger logger = LogManager.GetCurrentClassLogger(); logger.Error("清除日志异常消息:" + ex.Message, "清除日志定时器错误"); } } /// /// 获取当前工位交互流程字为多少 /// public static string GetPlcOrWcsPos(string Ip, string Stat, string Plcpos) { #region 与PLC交互逻辑 //DataRow[] iProws = null; //string type = "0"; ////判断是输送线连接还是垛机连接 //if (Ip == "192.168.8.40") //{ // type = "1"; // // 获取运输线交互IP集合 // iProws = PlcInfoDt.Select("Level = '0' and Type = '1' "); //} //else //{ // // 获取跺机交互IP集合 // iProws = PlcInfoDt.Select("Level = '0' and Type = '0' "); //} //// 连接运输线PlC ////string plcIp = ipRow["PlcIP"].ToString(); //string plcStatus = ""; // PLC连接状态 //PlcIO plc = new PlcIO(Ip, 1, ref plcStatus); //// 循环连接运输线设备 //foreach (DataRow ipRow in iProws) //{ // // 循环各跺机与PLC进行交互 // DataRow[] rows = PlcInfoDt.Select($"Level = '2' and Type = '{type}' and PlcIP='{Ip}' "); // //rows.Select(a=>a.) // rows = PlcInfoDt.Select($"StationNum = '{Stat}' and PlcPos = '{Plcpos}'"); // foreach (DataRow row in rows) // { // // 读取工位流程字 // string dbNumber = row["DbNumber"].ToString(); // string posType = row["PosType"].ToString(); // string plcPos = row["PlcPos"].ToString(); // string wcsPos = row["WcsPos"].ToString(); // string stationNum = row["StationNum"].ToString(); // string plcValue = plc.GetPlcDBValue(int.Parse(dbNumber), posType, plcPos); // //判断工位号 // if (stationNum == Stat) // { // if (plcValue == "0" || plcValue == "10" || plcValue == "20" || plcValue == "21" || plcValue == "22" || plcValue == "100" || plcValue == "110" || plcValue == "120" || plcValue == "130" || plcValue == "140" || plcValue == "200" || plcValue == "210" || plcValue == "300" || plcValue == "310" || plcValue == "320" || plcValue == "330") // { // // 关闭设备连接 // plc.ClosePlc(); // return plcValue; // } // else // { // continue; // } // } // else // { // continue; // } // } //} //// 关闭设备连接 //plc.ClosePlc(); return null; #endregion } /// ///// 获取当前工位偏移量值为多少 /// public static PosNameVal GetPlcOrWcsPosVal(string plcInfoId) { #region 与PLC交互逻辑 PosNameVal list = new PosNameVal(); DALWcsMessage wcsMySql = new DALWcsMessage(); DataTable posDt = wcsMySql.GetPlcPos(plcInfoId); //偏移量 var plcInfo = PlcInfoDt.Select($"Id={plcInfoId} ")[0]; var ipInfo = PlcIpDt.Select($"Id = {plcInfo["PlcIP"].ToString()} ")[0]; var dbNumber = plcInfo["DbNumber"].ToString();//db块 var infoPlcPos = plcInfo["PlcPos"].ToString();//plc流程字值 var infoPosType = plcInfo["PosType"].ToString();//流程字类型 var infoWcsPos = plcInfo["WcsPos"].ToString();//wcs流程字值 string plcStatus = ""; // PLC连接状态 PlcIO plc = new PlcIO(ipInfo["IP"].ToString(), 1, ref plcStatus); if (plcStatus.Length <= 0) { try { string plcValue1 = plc.GetPlcDBValue(int.Parse(dbNumber), infoPosType, infoPlcPos); list.PlcPos = plcValue1; string plcValue2 = plc.GetPlcDBValue(int.Parse(dbNumber), infoPosType, infoWcsPos); list.WcsPos = plcValue2; foreach (var row in posDt.Select()) { // 读取工位流程字 string posType = row["PosType"].ToString(); string plcPos = row["PlcPos"].ToString(); string name = row["Name"].ToString(); string plcValue = plc.GetPlcDBValue(int.Parse(dbNumber), posType, plcPos); #region 赋值 if (PosName.PlcTaskNo.ToString() == name) { list.PlcTaskNo = plcValue; } else if (PosName.PlcPalletNo.ToString() == name) { list.PlcPalletNo = plcValue; } else if (PosName.TaskNo.ToString() == name) { list.TaskNo = plcValue; } else if (PosName.PalletNo.ToString() == name) { list.PalletNo = plcValue; } else if (PosName.StartLocatNo.ToString() == name) { list.StartLocatNo = plcValue; } else if (PosName.EndLocatNo.ToString() == name) { list.EndLocatNo = plcValue; } else if (PosName.StartRow.ToString() == name) { list.StartRow = plcValue; } else if (PosName.StartColumn.ToString() == name) { list.StartColumn = plcValue; } else if (PosName.StartLayer.ToString() == name) { list.StartLayer = plcValue; } else if (PosName.EndRow.ToString() == name) { list.EndRow = plcValue; } else if (PosName.EndColumn.ToString() == name) { list.EndColumn = plcValue; } else if (PosName.EndLayer.ToString() == name) { list.EndLayer = plcValue; } #endregion } } catch (Exception ex) { plc.ClosePlc(); throw ex; } } // 关闭设备连接 plc.ClosePlc(); return list; #endregion } /// /// 应用池回收的时候调用的方法 /// public static void SetContent(string type) { Logger logger = LogManager.GetCurrentClassLogger(); logger.Error(type + "执行该方法:", "iis自动回收机制"); } } }