using Quartz; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using WCS.Data; using WCS.PLC; using WCS.PLC.Model.Equipment; using WCS.Workflow; namespace WCS.Service.Quartz { //原子操作 [DisallowConcurrentExecution] public class WCSRunJobs : IJob { public Task Execute(IJobExecutionContext context) { ThreadHelper.TaskThread(WCSWorkflow.RefreshData); ThreadHelper.TaskThread(WCSWorkflow.UpdateTaskCurAddress); ThreadHelper.TaskThread(WCSWorkflow.UpdateExceptionTask); //查询最新日志 ThreadHelper.TaskThread(WCSWorkflow.RefreshLogData); //更新任务进程 ThreadHelper.TaskThread(BaseWorkflow.PutTaskStep); //上传LED设备异常任务 ThreadHelper.TaskThread(BaseWorkflow.UpLoadExcToWMS); //上传设PLC备信息 ThreadHelper.TaskThread(BaseWorkflow.PutDevInfoToWMS); //更新PLC最后完成时间和各个设备任务数量 ThreadHelper.TaskThread(BaseWorkflow.UpdateUnexecuteTask); //执行WCS逻辑 WCS_PLCList.ExecuteWcs_Workflow(); //执行Agv逻辑 ThreadHelper.TaskThread(AgvWorkflow.AgvRun); ThreadHelper.TaskThread(AgvWorkflow.AgvUpdateStatus); ThreadHelper.TaskThread(WriteDataToLog); return Task.FromResult(string.Empty); } private static int _writeDataToLog = 0; public void WriteDataToLog() { if (Interlocked.Exchange(ref _writeDataToLog, 1) == 0) { Thread.Sleep(1000); var list = new List(); foreach (var item in Current.PlcSet) { foreach (var equipmentInfo in item.WCS_EquipmentInfoSet) { list.Add(new EQUIPMENTINFO() { EQU_NO = equipmentInfo.Equ_No, EQU_PLCNAME = equipmentInfo.Equ_PlcName, //EQU_BARCODE = equipmentInfo.EQU_BARCODE, EQU_ALARAMSMSG = equipmentInfo.Equ_AlaramsMsg, EQU_NOTES = equipmentInfo.Equ_Notes, EQU_CONVSIGNALJSON = (equipmentInfo.Equ_Type == EquipmentType.conveyor.ToString()) ? equipmentInfo.EquSignal_Conv.ToJson() : (equipmentInfo.Equ_Type == EquipmentType.srm.ToString()) ? equipmentInfo.EquSignal_Srm.ToJson() : equipmentInfo.EquSignal_Rgv.ToJson(), EQU_BARCODE = equipmentInfo.EquSignal_Conv.BarCodeStr }); } } Log4netHelper.Logger_PLCDATALog.InfoFormat(list.ToJson()); Interlocked.Exchange(ref _writeDataToLog, 0); } } } public class EQUIPMENTINFO { /// /// 设备名称 /// public string EQU_NO { get; set; } /// /// PLC名称 /// public string EQU_PLCNAME { get; set; } /// /// 读取到的条码 /// public string EQU_BARCODE { get; set; } /// /// 报警信息 /// public string EQU_ALARAMSMSG { get; set; } public string EQU_NOTES { get; set; } /// /// 设备信号集合 /// public string EQU_CONVSIGNALJSON { get; set; } } }