qinchulong
2025-03-08 b0c756bd9b37bc2eeffbb0f39c8000648061d82c
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ZXJ/ZXJJob.cs
@@ -17,6 +17,7 @@
using System.Threading.Tasks;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -29,12 +30,16 @@
    [DisallowConcurrentExecution]
    public class ZXJJob : JobBase, IJob
    {
        public static bool W_ZXJ_Heat = true;
        public static bool W_TC_Heat = true;
        private readonly ITaskService _taskService;
        WebSocketServer _webSocketServer;
        public ZXJJob(ITaskService taskService, WebSocketServer webSocketServer)
        private readonly Idt_ErrormsginfoService _ErrormsginfoService;
        public ZXJJob(ITaskService taskService, WebSocketServer webSocketServer,Idt_ErrormsginfoService errormsginfoService)
        {
            _taskService = taskService;//注入
            _webSocketServer = webSocketServer;
            _ErrormsginfoService = errormsginfoService;
        }
        public Task Execute(IJobExecutionContext context)
@@ -43,32 +48,104 @@
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                try
                {
                    //Example
                    //device.GetValue  è¯»å–
                    //device.SetValue  å†™å…¥
                    //_taskService.Repository; //仓储层,进行数据库访问
                    OHTReadData oHTReadData = new OHTReadData();
                    //todo:读取设备数据,
                    //todo:设备状态数据发送给前端
                    //WriteInfo(device.DeviceName, "infoLog");
                    //WriteDebug(device.DeviceName, "debugLog");
                    //天车PLC对象
                    OtherDevice TCevice = (OtherDevice)Storage.Devices.Find(v => v.DeviceName == "天车");
                    if (TCevice.Communicator.IsConnected)
                    {
                        #region è¯»å–天车设备数据
                        OHTJob.oHTReadData.R_HeartBeat = TCevice.GetValue<DeviceDBName, bool>(DeviceDBName.R_HeartBeat);
                        OHTJob.oHTReadData.R_RunMode = TCevice.GetValue<DeviceDBName, short>(DeviceDBName.R_RunMode);
                        OHTJob.oHTReadData.R_RunState = TCevice.GetValue<DeviceDBName, short>(DeviceDBName.R_RunState);
                        OHTJob.oHTReadData.R_AlarmCode = TCevice.GetValue<DeviceDBName, short>(DeviceDBName.R_AlarmCode);
                        OHTJob.oHTReadData.R_TaskState = TCevice.GetValue<DeviceDBName, short>(DeviceDBName.R_TaskState);
                        OHTJob.oHTReadData.R_CurrentLine = TCevice.GetValue<DeviceDBName, int>(DeviceDBName.R_CurrentLine);
                        OHTJob.oHTReadData.R_CurrentColumn = TCevice.GetValue<DeviceDBName, int>(DeviceDBName.R_CurrentColumn);
                        OHTJob.oHTReadData.R_RiseUp_Position = TCevice.GetValue<DeviceDBName, int>(DeviceDBName.R_RiseUp_Position);
                        OHTJob.oHTReadData.R_TaskNumber = TCevice.GetValue<DeviceDBName, int>(DeviceDBName.R_TaskNumber);
                        OHTJob.oHTReadData.R_Loaded_1 = TCevice.GetValue<DeviceDBName, short>(DeviceDBName.R_Loaded_1);
                        OHTJob.oHTReadData.R_Loaded_2 = TCevice.GetValue<DeviceDBName, short>(DeviceDBName.R_Loaded_2);
                        OHTJob.oHTReadData.weight = TCevice.GetValue<DeviceDBName, float>(DeviceDBName.weight);
                        #endregion
                        if (W_TC_Heat)
                        {
                            W_TC_Heat = false;
                            TCevice.SetValue(DeviceDBName.W_HeartBeat, W_ZXJ_Heat);
                        }
                        else
                        {
                            W_TC_Heat = true;
                            TCevice.SetValue(DeviceDBName.W_HeartBeat, W_ZXJ_Heat);
                        }
                    }
                    else
                    {
                        throw new Exception($"天车PLC连接失败");
                    }
                    //整形机PLC对象
                    OtherDevice device = (OtherDevice)value;
                    if (device.Communicator.IsConnected)
                    {
                        #region è¯»å–整形机设备数据
                        OHTJob.oHTReadData.R_ZXJ_HeartBeat = device.GetValue<ZXJDBName, bool>(ZXJDBName.R_ZXJ_HeartBeat);
                        OHTJob.oHTReadData.R_ZXJ_isWork = device.GetValue<ZXJDBName, bool>(ZXJDBName.R_ZXJ_isWork);
                        OHTJob.oHTReadData.R_ZXJ_RGVMode = device.GetValue<ZXJDBName, bool>(ZXJDBName.R_ZXJ_RGVMode);
                        OHTJob.oHTReadData.R_ZXJ_TCMode = device.GetValue<ZXJDBName, bool>(ZXJDBName.R_ZXJ_TCMode);
                        OHTJob.oHTReadData.R_ZXJ_TC_isready = device.GetValue<ZXJDBName, bool>(ZXJDBName.R_ZXJ_TC_isready);
                        OHTJob.oHTReadData.R_TCMode_TC = device.GetValue<ZXJDBName, bool>(ZXJDBName.R_TCMode_TC);
                        OHTJob.oHTReadData.R_TCMode_CC = device.GetValue<ZXJDBName, bool>(ZXJDBName.R_TCMode_CC);
                        OHTJob.oHTReadData.R_HC_isReady = device.GetValue<ZXJDBName, bool>(ZXJDBName.R_HC_isReady);
                        OHTJob.oHTReadData.R_HC_isReadyWork = device.GetValue<ZXJDBName, bool>(ZXJDBName.R_HC_isReadyWork);
                        OHTJob.oHTReadData.R_issafe = device.GetValue<ZXJDBName, bool>(ZXJDBName.R_issafe);
                        #endregion
                        if (W_ZXJ_Heat)
                        {
                            W_ZXJ_Heat = false;
                            device.SetValue(ZXJDBName.W_ZXJ_HeartBeat, W_ZXJ_Heat);
                        }
                        else
                        {
                            W_ZXJ_Heat = true;
                            device.SetValue(ZXJDBName.W_ZXJ_HeartBeat, W_ZXJ_Heat);
                        }
                    }
                    else
                    {
                        throw new Exception($"整形机PLC连接失败");
                    }
                    //规整机PLC对象
                    OtherDevice GZJevice = (OtherDevice)Storage.Devices.Find(v => v.DeviceName == "阳极规整机");
                    if (GZJevice.Communicator.IsConnected)
                    {
                        #region è¯»å–规整机设备数据
                        OHTJob.oHTReadData.R_ZXJ_HeartBeat = GZJevice.GetValue<GZJDBName, bool>(GZJDBName.R_GZJ_HeartBeat);
                        OHTJob.oHTReadData.R_GZJ_isWork = GZJevice.GetValue<GZJDBName, bool>(GZJDBName.R_GZJ_isWork);
                        OHTJob.oHTReadData.R_RGVMode = GZJevice.GetValue<GZJDBName, bool>(GZJDBName.R_RGVMode);
                        OHTJob.oHTReadData.R_CCMode = GZJevice.GetValue<GZJDBName, bool>(GZJDBName.R_CCMode);
                        OHTJob.oHTReadData.R_TCMode = GZJevice.GetValue<GZJDBName, bool>(GZJDBName.R_TCMode);
                        OHTJob.oHTReadData.R_DK_isready = GZJevice.GetValue<GZJDBName, bool>(GZJDBName.R_DK_isready);
                        OHTJob.oHTReadData.R_XK_isready = GZJevice.GetValue<GZJDBName, bool>(GZJDBName.R_XK_isready);
                        OHTJob.oHTReadData.R_TC_isready = GZJevice.GetValue<GZJDBName, bool>(GZJDBName.R_TC_isready);
                        #endregion
                    }
                    else
                    {
                        throw new Exception($"规整机PLC连接失败");
                    }
                    //状态数据发送给前端
                    string ohtData = JsonConvert.SerializeObject(OHTJob.oHTReadData);
                    _webSocketServer.PublishAllClientPayload(ohtData);
                }
                catch (Exception ex)
                {
                    WriteError(device.DeviceName, "错误", ex);
                    //状态数据发送给前端
                    string ohtData = JsonConvert.SerializeObject(OHTJob.oHTReadData);
                    _webSocketServer.PublishAllClientPayload(ohtData);
                    _ErrormsginfoService.UpdateErrorMsg(ex.Message, 1);
                }
            }
            return Task.CompletedTask;
        }