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<bool> 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<bool> 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<Int16> 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<Int16> 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<bool> 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<Int16> 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<Int16> 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<bool> 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<bool> 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<Int16> 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<Int16> 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<bool> 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<Int16> 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<Int16> 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);
|
}
|
});
|
}
|
}
|
}
|
}
|
}
|