using HslCommunication.WebSocket;
|
using Newtonsoft.Json;
|
using Quartz;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Core.HttpContextUser;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_TelescopicService;
|
using WIDESEAWCS_ISystemServices;
|
using WIDESEAWCS_Core.Helper;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
[DisallowConcurrentExecution]
|
public class AlarmResetJob : JobBase, IJob
|
{
|
private readonly IAlarmResetHsyServer _alarmResetHsyServer;
|
private readonly ISys_UserService _UserService;
|
WebSocketServer _webSocketServer;
|
private readonly Idt_ErrormsginfoService _ErrormsginfoService;
|
private readonly AlarmResetHsyServer _alarmResetHsy;
|
//private static readonly object _lockObj = new object(); //加锁
|
|
|
// 增添的字典跟踪报警为每个装置 Quartz 默认每次调度任务时会重新创建
|
private static readonly Dictionary<string, bool> _leftAlarmStates = new Dictionary<string, bool>() //加锁
|
{
|
["M109"] = false,//伺服报警
|
["M111"] = false,//其他报警
|
["M110"] = false,//急停报警
|
["M120"] = false,//障碍报警
|
};
|
private static readonly Dictionary<string, bool> _rightAlarmStates = new Dictionary<string, bool>()
|
{
|
["M109"] = false,//伺服报警
|
["M111"] = false,//其他报警
|
["M110"] = false,//急停报警
|
["M120"] = false,//障碍报警
|
};
|
|
public AlarmResetJob(Idt_ErrormsginfoService errormsginfoService, WebSocketServer webSocketServer, IAlarmResetHsyServer alarmResetHsyServer, ISys_UserService UserService)
|
{
|
_webSocketServer = webSocketServer;
|
_alarmResetHsyServer = alarmResetHsyServer;
|
_UserService = UserService;
|
_ErrormsginfoService = errormsginfoService;
|
}
|
|
public Task Execute(IJobExecutionContext context)
|
{
|
try
|
{
|
if (!int.TryParse(AppSettings.Get("DepartmentID"), out int deid))
|
{
|
Console.WriteLine("配置项 DepartmentID 无法转换为整数");
|
}
|
var devices = GetDevicesByDeptId(deid);
|
if (devices != null)
|
{
|
// Left PLC processing
|
try
|
{
|
if (devices.Value.left.IsConnected)
|
{
|
var leftPLcstuck1 = devices.Value.left.Communicator.Read<bool>("M109"); // Servo alarm
|
var leftPLcOher1 = devices.Value.left.Communicator.Read<bool>("M111"); // Other alarm
|
var leftscram = devices.Value.left.Communicator.Read<bool>("M110"); // Emergency stop
|
var leftstop = devices.Value.left.Communicator.Read<bool>("M120"); // Obstacle stop
|
|
var leftPLcNowAdd = devices.Value.left.Communicator.Read<float>("D80");
|
Console.WriteLine($"{devices.Value.left.DeviceName}:卡住报警{leftPLcstuck1},其他报警{leftPLcOher1}");
|
|
|
// Check and record alarms only when state changes from false to true
|
if (leftPLcstuck1 && !_leftAlarmStates["M109"])
|
{
|
string text = $"检8道左侧警惕机构:伸缩卡住报警";
|
var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcstuck1);
|
_leftAlarmStates["M109"] = true;
|
}
|
else if (!leftPLcstuck1)
|
{
|
_leftAlarmStates["M109"] = false;
|
}
|
|
if (leftPLcOher1 && !_leftAlarmStates["M111"])
|
{
|
string text = $"检8道左侧警惕机构:其他故障报警";
|
var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcOher1);
|
_leftAlarmStates["M111"] = true;
|
}
|
else if (!leftPLcOher1)
|
{
|
_leftAlarmStates["M111"] = false;
|
}
|
|
if (leftscram && !_leftAlarmStates["M110"])
|
{
|
string text = $"检8道左侧警惕机构:急停报警";
|
var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftscram);
|
_leftAlarmStates["M110"] = true;
|
}
|
else if (!leftscram)
|
{
|
_leftAlarmStates["M110"] = false;
|
}
|
|
if (leftstop && !_leftAlarmStates["M120"])
|
{
|
string text = $"检8道左侧警惕机构:遇障碍停止报警";
|
var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftstop);
|
_leftAlarmStates["M120"] = true;
|
}
|
else if (!leftstop)
|
{
|
_leftAlarmStates["M120"] = false;
|
}
|
|
|
_webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(new
|
{
|
device = "左Plc",
|
Liftvalue = leftPLcNowAdd
|
}));
|
}
|
}
|
catch (Exception)
|
{
|
string text = $"轨道{deid}:左PLC未连接";
|
//var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);
|
}
|
|
// Right PLC processing
|
try
|
{
|
if (devices.Value.right.IsConnected)
|
{
|
var rightPLcSuck = devices.Value.right.Communicator.Read<bool>("M109"); // Servo alarm
|
var rightPLcOher = devices.Value.right.Communicator.Read<bool>("M111"); // Other alarm
|
var rightscram = devices.Value.right.Communicator.Read<bool>("M110"); // Emergency stop
|
var rightstop = devices.Value.right.Communicator.Read<bool>("M120"); // Obstacle stop
|
|
var rightPLcNowAdd = devices.Value.right.Communicator.Read<float>("D80");
|
Console.WriteLine($"{devices.Value.right.DeviceName}:卡住报警{rightPLcSuck},其他报警{rightPLcOher}");
|
|
|
// Check and record alarms only when state changes from false to true
|
if (rightPLcSuck && !_rightAlarmStates["M109"])
|
{
|
string text = $"检8道右侧警惕机构:报警伸缩卡住报警";
|
var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcSuck);
|
_rightAlarmStates["M109"] = true;
|
}
|
else if (!rightPLcSuck)
|
{
|
_rightAlarmStates["M109"] = false;
|
}
|
|
if (rightPLcOher && !_rightAlarmStates["M111"])
|
{
|
string text = $"检8道右侧警惕机构:其他故障报警";
|
var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcOher);
|
_rightAlarmStates["M111"] = true;
|
}
|
else if (!rightPLcOher)
|
{
|
_rightAlarmStates["M111"] = false;
|
}
|
|
if (rightscram && !_rightAlarmStates["M110"])
|
{
|
string text = $"检8道右侧警惕机构:急停报警";
|
var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightscram);
|
_rightAlarmStates["M110"] = true;
|
}
|
else if (!rightscram)
|
{
|
_rightAlarmStates["M110"] = false;
|
}
|
|
if (rightstop && !_rightAlarmStates["M120"])
|
{
|
string text = $"检8道右侧警惕机构:遇障碍停止报警";
|
var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightstop);
|
_rightAlarmStates["M120"] = true;
|
}
|
else if (!rightstop)
|
{
|
_rightAlarmStates["M120"] = false;
|
}
|
|
_webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(new
|
{
|
device = "右Plc",
|
Rightvalue = rightPLcNowAdd
|
}));
|
}
|
}
|
catch (Exception)
|
{
|
string text = $"轨道{deid}:右PLC未连接";
|
//var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);
|
}
|
|
var alrt = _alarmResetHsyServer.GetWebSocketInfo(deid);
|
_webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(alrt));
|
}
|
}
|
catch (Exception ex)
|
{
|
_ErrormsginfoService.UpdateErrorMsg(ex.Message, 1);
|
Console.WriteLine("错误信息:" + ex.Message);
|
Console.WriteLine(ex.StackTrace);
|
}
|
return Task.CompletedTask;
|
}
|
|
public (OtherDevice left, OtherDevice right)? GetDevicesByDeptId(int deptId)
|
{
|
int baseCode = 1 + (deptId - 1) * 2;
|
string leftCode = $"SSG{baseCode.ToString("D3")}";
|
string rightCode = $"SSG{(baseCode + 1).ToString("D3")}";
|
|
var left = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == leftCode);
|
var right = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == rightCode);
|
|
return (left, right);
|
}
|
}
|
}
|