using Newtonsoft.Json; using Quartz; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.Tools; using WIDESEA_Entity.DomainModels.Equipment; using WIDESEA_WCS.Jobs; using WIDESEA_WCS.JobsPart.Public; using WIDESEA_WCS.WCSClient; namespace WIDESEA_WCS { /// /// 涂布机调度【欧姆龙】 /// [DisallowConcurrentExecution] public class PrintJob : JobBase, IJob { static List centerEqDBList; public PrintJob() { if (centerEqDBList == null || centerEqDBList.Count == 0) { string tsjJson = File.ReadAllText(AppContext.BaseDirectory + "/涂布机.json", Encoding.UTF8); centerEqDBList = JsonConvert.DeserializeObject>(tsjJson); } } public Task Execute(IJobExecutionContext context) { try { ExecuteJob(context, DoAction); } catch { } return Task.FromResult(string.Empty); } private void DoAction(IJobExecutionContext context) { var clinet = context.JobDetail.JobDataMap.Get("JobParams") as PLCClient; var stationList = centerEqDBList.FirstOrDefault(t => t.tiShenJiName == clinet.PLCName); if (stationList != null) { foreach (var station in stationList.stationInfos) { if (station.stationType == "in") { // var hreat = clinet.OmronPLCClient.Read(station.dbData["R_hreat"]); // var waring = clinet.OmronPLCClient.Read(station.dbData["R_waring"]); var step = clinet.OmronPLCClient.Read(station.dbData["R_step"]); //var requestType = clinet.OmronPLCClient.Read(station.dbData["R_requestType"]); //var isAB = clinet.OmronPLCClient.Read(station.dbData["R_isAB"]); //var isToRihgt = clinet.OmronPLCClient.Read(station.dbData["R_isToRihgt"]); //var diffNum = clinet.OmronPLCClient.Read(station.dbData["R_diffNum"]); //转换为调度中心地址 byte[] clientData = new byte[100]; //clientData[0] = (byte)(hreat ? 1 : 0); clientData[90 + 1] = (byte)step; //clientData[92] = (byte)(waring ? 1 : 0); //int data_93 = 0; //data_93 += isAB ? 2 : 0; //data_93 += isToRihgt ? 4 : 0; //clientData[93] = (byte)data_93; //clientData[94] = (byte)diffNum; TransferData(station, clinet, clientData); //Create(clinet, station, requestType); } else if (station.stationType == "out") { //var materialtype = clinet.OmronPLCClient.Read(station.dbData["R_materialtype"]); var waring = clinet.OmronPLCClient.Read(station.dbData["R_waring"]); var step = clinet.OmronPLCClient.Read(station.dbData["R_step"]); var requestType = clinet.OmronPLCClient.Read(station.dbData["R_requestType"]); var isAB = clinet.OmronPLCClient.Read(station.dbData["R_isAB"]); var isToRihgt = clinet.OmronPLCClient.Read(station.dbData["R_isToRihgt"]); var diffNum = clinet.OmronPLCClient.Read(station.dbData["R_diffNum"]); //转换为调度中心地址 byte[] clientData = new byte[100]; clientData[90 + 1] = (byte)step; clientData[92] = (byte)(waring ? 1 : 0); int data_93 = 0; data_93 += isAB ? 2 : 0; data_93 += isToRihgt ? 4 : 0; clientData[93] = (byte)data_93; clientData[94] = (byte)diffNum; TransferData(station, clinet, clientData); Create(clinet, station, requestType); } } } } private void Create(PLCClient clinet, StationInfo station, int requestType) { try { //入口上料 if (station.stationType == "in" && requestType == 1) { WCSCommon.CreateTask(station, true); } //出口卸料 else if (station.stationType == "out" && requestType == 2) { WCSCommon.CreateTask(station, false); } } catch (Exception ex) { WriteLog.GetLog().Write($"【任务请求异常】{clinet.PLCName},{station.stationCode}口。{ex.Message}" + "\n", clinet.PLCName); } } /// /// 中转AGV对接数据 /// /// AGV的PLC /// 主机设备PLC /// 读的主机设备状态 private void TransferData(StationInfo station, PLCClient eq_Client, byte[] eqData) { var agv_Client = WIDESEA_WCS.WCSService.Clients.FirstOrDefault(t => t.PLCName == station.agvCenterName); if (agv_Client != null) { //读AGV var agvData = (byte[])agv_Client.ReadDBValue(station.agvDBList[0], 100); int hreat = (int)agvData[0]; int step = (int)agvData[90 + 1]; bool waring = agvData[92] == 0x1; //写涂布主机流程步骤 eq_Client.OmronPLCClient.Write(station.dbData["W_step"], step); eq_Client.OmronPLCClient.Write(station.dbData["W_waring"], waring); if (station.stationType == "in") { eq_Client.OmronPLCClient.Write(station.dbData["W_hreat"], hreat); var material_Type = DataTrans.GetStr(agvData, 26); eq_Client.OmronPLCClient.Write(station.dbData["W_materialtype"], material_Type); } //写给AGV agv_Client.WriteDBValue(station.agvDBList[1], eqData); } else { WriteLog.GetLog().Write($"【异常】{station.agvCenterName},读取调度中心PLC失败" + "\n", eq_Client.PLCName); } } } }