using HslCommunication; using NetTaste; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using WIDESEA_Common.Tools; using WIDESEA_Core.EFDbContext; using WIDESEA_Services.IRepositories; using WIDESEA_Services.Repositories; using WIDESEA_WCS.WCSClient; namespace WIDESEA_WCS.SchedulerExecute.AGV { public partial class heartbeatRK { private static int lockObj1 = 0; public static void heartbeatWork() { if (lockObj1 == 0) { lockObj1 = 1; { string rksb = "入壳机1"; //心跳 Task.Run(() => { while (true) { try { Thread.Sleep(200); if (WCSService.Clients == null) { continue; } PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb); if (rkplc == null) { continue; } PLCClient agvplc = WCSService.Clients.Find(v => v.PLCName == "组装AGV调度"); if (agvplc == null) { continue; } #region 入壳机一号心跳 WriteLog.GetLog().Write($"--------------{rksb}心跳传递开始,时间:{DateTime.Now}--------------{Environment.NewLine}", $"{rksb}心跳传递"); // 读取入壳机1号设备心跳 bool R_RK1_XT =Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5300").Content); // 入壳机1号设备心跳—写入—》组装AGV调度心跳 OperateResult W_AGV_XT = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.3600.0", R_RK1_XT); // 读取组装AGV调度心跳 OperateResult R_AGV_XT = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.3700.0"); Int16 readValue = Convert.ToInt16(R_AGV_XT.Content); // 组装AGV调度—写入—》入壳机1号设备心跳 OperateResult W_RK1_XT = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5300", readValue); WriteLog.GetLog().Write($"--------------{rksb}心跳传递结束,时间:{DateTime.Now}--------------{Environment.NewLine}", $"{rksb}心跳传递"); #endregion } catch (Exception ex) { } } }); //上料口 Task.Run(() => { while (true) { try { if (WCSService.Clients == null) { continue; } PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb); if (rkplc == null) { continue; } PLCClient agvplcZZ = WCSService.Clients.Find(v => v.PLCName == "组装AGV调度"); if (agvplcZZ == null) { continue; } #region 上料口 WriteLog.GetLog().Write($"{rksb}上料口信息传递开始,时间:{DateTime.Now} --------------{Environment.NewLine}", $"{rksb}上料口信息传递"); //入壳机1号报警 bool GYC_RBJ =Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5302").Content); // AGV获取入壳机1号报警信号 OperateResult AGVC_WBJ = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.3692", GYC_RBJ); // AGV报警信号 OperateResult AGVC_RBJ = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.3792"); Int16 RBJ = Convert.ToInt16(AGVC_RBJ.Content); //入壳机1号获取AGV报警信号 OperateResult GFC_WBJ = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5304", RBJ); //读取agv上料口逻辑 OperateResult R_up_bzR = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1002.3790"); //写入入壳机1号上料口对接流程步骤 OperateResult W_ProcessStep_up = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5307", R_up_bzR.Content); //读取入壳机1号步序 OperateResult R_ProcessSteps_up = rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5306"); //将步序写入agv OperateResult W_stationDockSteps_up = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.3690", R_ProcessSteps_up.Content); WriteLog.GetLog().Write($"{rksb}上料口信息传递结束,时间:{DateTime.Now}--------------{Environment.NewLine}", $"{rksb}上料口信息传递"); #endregion } catch (Exception ex) { } Thread.Sleep(200); } }); //下料口 Task.Run(() => { while (true) { try { if (WCSService.Clients == null) { continue; } PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb); if (rkplc == null) { continue; } PLCClient agvplc = WCSService.Clients.Find(v => v.PLCName == "组装AGV调度"); if (agvplc == null) { continue; } #region 下料口 //入壳机1号口报警 WriteLog.GetLog().Write($"{rksb}下料口信息传递开始,时间:{DateTime.Now}--------------{Environment.NewLine}", $"{rksb}下料口信息传递"); //入壳机1号报警 bool GYC_RBJ = Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5302").Content); // AGV获取入壳机1号报警信号 OperateResult AGV_WBJ = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.3892", GYC_RBJ); // AGV报警信号 OperateResult AGV_RBJ = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.3992"); int RBJ = Convert.ToInt32(AGV_RBJ.Content); //入壳机1号获取AGV报警信号 OperateResult GFC_WBJ = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5304", RBJ); // 读取agv下料口请求进入 OperateResult R_Down1_bzR = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1002.3990"); // 写入入壳机1号下料口AGV请求进入 OperateResult W_ProcessSteps1 = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5309", R_Down1_bzR.Content); // 读取入壳机1号下料口是否允许AGV请求进入 OperateResult R_ProcessSteps1 = rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5308"); OperateResult W_stationDockSteps1 = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.3890", R_ProcessSteps1.Content); WriteLog.GetLog().Write($"{rksb}下料口信息传递结束,时间:{DateTime.Now}--------------{Environment.NewLine}", $"{rksb}下料口信息传递"); #endregion } catch (Exception ex) { } Thread.Sleep(200); } }); } { string rksb = "入壳机2"; //心跳 Task.Run(() => { while (true) { try { Thread.Sleep(200); if (WCSService.Clients == null) { continue; } PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb); if (rkplc == null) { continue; } PLCClient agvplc = WCSService.Clients.Find(v => v.PLCName == "组装AGV调度"); if (agvplc == null) { continue; } #region 入壳机二号心跳 WriteLog.GetLog().Write($"--------------{rksb}心跳传递开始,时间:{DateTime.Now} --------------{Environment.NewLine}", $"{rksb}心跳传递"); // 读取入壳机2号设备心跳 bool R_RK2_XT = Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5300").Content); // 入壳机2号设备心跳—写入—》组装AGV调度心跳 OperateResult W_AGV_XT = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.4000.0", R_RK2_XT); // 读取组装AGV调度心跳 OperateResult R_AGV_XT = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.4100.0"); Int16 readValue = Convert.ToInt16(R_AGV_XT.Content); // 组装AGV调度—写入—》入壳机2号设备心跳 OperateResult W_RK2_XT = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5300", readValue); WriteLog.GetLog().Write($"--------------{rksb}心跳传递结束,时间:{DateTime.Now} --------------{Environment.NewLine}", $"{rksb}心跳传递"); #endregion } catch (Exception ex) { } } }); //上料口 Task.Run(() => { while (true) { try { if (WCSService.Clients == null) { continue; } PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb); if (rkplc == null) { continue; } PLCClient agvplcZZ = WCSService.Clients.Find(v => v.PLCName == "组装AGV调度"); if (agvplcZZ == null) { continue; } #region 上料口 WriteLog.GetLog().Write($"-------------- {rksb}上料口信息传递开始,时间:{DateTime.Now} --------------{Environment.NewLine}", $"{rksb}上料口信息传递"); //入壳机2号报警 bool GYC_RBJ = Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5302").Content); // AGV获取入壳机2号报警信号 OperateResult AGVC_WBJ = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.4092", GYC_RBJ); // AGV报警信号 OperateResult AGVC_RBJ = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.4192"); Int16 RBJ = Convert.ToInt16(AGVC_RBJ.Content); //入壳机2号获取AGV报警信号 OperateResult GFC_WBJ = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5304", RBJ); //读取agv上料口逻辑 OperateResult R_up_bzR = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1002.4190"); //写入入壳机2号上料口对接流程步骤 OperateResult W_ProcessStep_up = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5307", R_up_bzR.Content); //读取入壳机2号步序 OperateResult R_ProcessSteps_up = rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5306"); //将步序写入agv OperateResult W_stationDockSteps_up = agvplcZZ.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.4090", R_ProcessSteps_up.Content); WriteLog.GetLog().Write($"-------------- {rksb}上料口信息传递结束,时间:{DateTime.Now} -------------- {Environment.NewLine}", $"{rksb}上料口信息传递"); #endregion } catch (Exception ex) { } Thread.Sleep(200); } }); //下料口 Task.Run(() => { while (true) { try { if (WCSService.Clients == null) { continue; } PLCClient rkplc = WCSService.Clients.Find(v => v.PLCName == rksb); if (rkplc == null) { continue; } PLCClient agvplc = WCSService.Clients.Find(v => v.PLCName == "组装AGV调度"); if (agvplc == null) { continue; } #region 下料口 WriteLog.GetLog().Write($"{rksb}下料口信息传递开始,时间:{DateTime.Now} --------------{Environment.NewLine}", $"{rksb}下料口信息传递"); //入壳机2号报警 bool GYC_RBJ = Convert.ToBoolean(rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5302").Content); // AGV获取入壳机2号报警信号 OperateResult AGV_WBJ = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.4292", GYC_RBJ); // AGV报警信号 OperateResult AGV_RBJ = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadBool("DB1002.4392"); int RBJ = Convert.ToInt32(AGV_RBJ.Content); //入壳机2号获取AGV报警信号 OperateResult GFC_WBJ = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5304", RBJ); // 读取agv下料口请求进入 OperateResult R_Down1_bzR = agvplc.SiemensPLCClient.SiemensS7NetClient.ReadInt16("DB1002.4390"); // 写入入壳机2号下料口AGV请求进入 OperateResult W_ProcessSteps1 = rkplc.ModbusPLCClient.ModbusTcpNetClient.Write("5309", R_Down1_bzR.Content); // 读取入壳机2号下料口是否允许AGV请求进入 OperateResult R_ProcessSteps1 = rkplc.ModbusPLCClient.ModbusTcpNetClient.ReadInt16("5308"); OperateResult W_stationDockSteps1 = agvplc.SiemensPLCClient.SiemensS7NetClient.Write("DB1002.4290", R_ProcessSteps1.Content); WriteLog.GetLog().Write($"{rksb}下料口信息传递结束,时间:{DateTime.Now} --------------{Environment.NewLine}", $"{rksb}下料口信息传递"); #endregion } catch (Exception ex) { } Thread.Sleep(200); } }); } } } } }