This commit is contained in:
郭睿AMD7950X 2024-12-03 16:27:17 +08:00
commit 4e115c914c
16 changed files with 365 additions and 37 deletions

View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport
{
public class BCodeAndNTP
{
public int BCode { get; set; }
public int NTP { get; set; }
}
}

View File

@ -0,0 +1,25 @@
using MessagePack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport
{
/// <summary>
/// 装置监视数据
/// </summary>
[MessagePackObject(keyAsPropertyName: true)]
public class DeviceCPUMonitoring
{
public virtual Guid? EquipmentInfoId { get; set; }
public float CPU5V1 { get; set; }
public float CPU5V2 { get; set; }
public float CPU5V3 { get; set; }
public float SurfaceTemperature { get; set; }
public float CPUTemperature{ get; set; }
[MessagePackFormatter(typeof(DateTimeAsUnixTimeFormatter))] // 使用自定义格式化器
public DateTime Time { get; set; }
}
}

View File

@ -15625,6 +15625,11 @@
设备名称。 设备名称。
</summary> </summary>
</member> </member>
<member name="T:YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport.DeviceCPUMonitoring">
<summary>
装置监视数据
</summary>
</member>
<member name="P:YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.UploadMainstationBaseInfo`1.Station"> <member name="P:YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.UploadMainstationBaseInfo`1.Station">
<summary> <summary>
获取或设置厂站名称。 获取或设置厂站名称。

View File

@ -0,0 +1,27 @@
using Abp.Application.Services;
using MongoDB.Bson;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YunDa.ISAS.Application.Core;
using YunDa.ISAS.Application.Core.Session;
using YunDa.ISAS.MongoDB.Repositories;
namespace YunDa.ISAS.MongoDB.Application.MainStationMaintenanceInfo
{
public class DeviceMonitoringResultDataAppService : ISASAppServiceBase, IApplicationService
{
private readonly IMongoDbRepository<BsonDocument, Guid> _bsonDocumentResultRepository;
public DeviceMonitoringResultDataAppService(ISessionAppService sessionAppService,
IMongoDbRepository<BsonDocument, Guid> bsonDocumentResultRepository
) : base(sessionAppService)
{
_bsonDocumentResultRepository = bsonDocumentResultRepository;
}
//public RequestResult<List<MeasureTemperatureResultOutput>> GetDeviceCPUMonitoring
}
}

View File

@ -96,6 +96,7 @@ namespace YunDa.ISAS.Redis
IocManager.Register<IRedisRepository<EquipmentInfoAbnormalComponent, string>, RedisRepository<EquipmentInfoAbnormalComponent, string>>(); IocManager.Register<IRedisRepository<EquipmentInfoAbnormalComponent, string>, RedisRepository<EquipmentInfoAbnormalComponent, string>>();
IocManager.Register<IRedisRepository<SecondaryCircuitComponent, string>, RedisRepository<SecondaryCircuitComponent, string>>(); IocManager.Register<IRedisRepository<SecondaryCircuitComponent, string>, RedisRepository<SecondaryCircuitComponent, string>>();
IocManager.Register<IRedisRepository<EquipmentInfoRemainingLifeAssessment, string>, RedisRepository<EquipmentInfoRemainingLifeAssessment, string>>(); IocManager.Register<IRedisRepository<EquipmentInfoRemainingLifeAssessment, string>, RedisRepository<EquipmentInfoRemainingLifeAssessment, string>>();
IocManager.Register<IRedisRepository<DeviceCPUMonitoring, string>, RedisRepository<DeviceCPUMonitoring, string>>();
} }

View File

@ -0,0 +1,29 @@
using Abp.Domain.Entities;
using MongoDB.Bson.Serialization.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yunda.ISAS.MongoDB.Entities.Helper;
namespace Yunda.SOMS.MongoDB.Entities.MainStationMaintenanceInfo
{
public class DeviceCPUMonitoringResult : Entity<Guid>
{
/// <summary>
/// 时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
[MongoDBDescendingIndex]
public virtual DateTime Time { get; set; }
[MongoDBDescendingIndex]
public virtual Guid? EquipmentInfoId { get; set; }
public float CPU5V1 { get; set; }
public float CPU5V2 { get; set; }
public float CPU5V3 { get; set; }
public float SurfaceTemperature { get; set; }
public float CPUTemperature { get; set; }
}
}

View File

@ -1,12 +1,15 @@
using Abp.Dependency; using Abp.Dependency;
using Google.Protobuf.WellKnownTypes; using Google.Protobuf.WellKnownTypes;
using MongoDB.Bson;
using MongoDB.Driver.Linq; using MongoDB.Driver.Linq;
using Newtonsoft.Json; using Newtonsoft.Json;
using StackExchange.Redis; using StackExchange.Redis;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Security.Permissions;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Threading.Tasks.Dataflow; using System.Threading.Tasks.Dataflow;
@ -20,6 +23,8 @@ using Yunda.ISAS.DataMonitoringServer.WebSocket;
using Yunda.ISAS.DataMonitoringServer.WebSocket.Model; using Yunda.ISAS.DataMonitoringServer.WebSocket.Model;
using Yunda.ISAS.DataMonitoringServer.WPF.ViewModel; using Yunda.ISAS.DataMonitoringServer.WPF.ViewModel;
using Yunda.ISAS.MongoDB.Entities.DataMonitoring; using Yunda.ISAS.MongoDB.Entities.DataMonitoring;
using Yunda.SOMS.DataMonitoringServer.DataAnalysis.Model;
using Yunda.SOMS.MongoDB.Entities.MainStationMaintenanceInfo;
using YunDa.ISAS.DataTransferObject.CommonDto; using YunDa.ISAS.DataTransferObject.CommonDto;
using YunDa.ISAS.DataTransferObject.EquipmentLiveData; using YunDa.ISAS.DataTransferObject.EquipmentLiveData;
using YunDa.ISAS.Entities.DataMonitoring; using YunDa.ISAS.Entities.DataMonitoring;
@ -147,7 +152,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
} }
public async Task UpdateTelemeteringData(YC_TYPE_New yc) private async Task UpdateTelemeteringData(YC_TYPE_New yc)
{ {
try try
{ {
@ -162,6 +167,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
Log4Helper.Error(this.GetType(), $"更新数据失败: 地址:{yc.inf} 类型:{categoriyValue} 键:{haskey}"); Log4Helper.Error(this.GetType(), $"更新数据失败: 地址:{yc.inf} 类型:{categoriyValue} 键:{haskey}");
return; return;
} }
// 更新对象的数据 // 更新对象的数据
ycData.ResultTime = yc.time; ycData.ResultTime = yc.time;
ycData.ResultValue = yc.val; ycData.ResultValue = yc.val;
@ -170,6 +176,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
// 更新到内存数据库中 // 更新到内存数据库中
tasks.Add(_redisDataRepository.TelemeteringModelListRedis.HashSetUpdateOneAsync(redisKey, haskey, ycData)); tasks.Add(_redisDataRepository.TelemeteringModelListRedis.HashSetUpdateOneAsync(redisKey, haskey, ycData));
tasks.Add(CheckSecondCuirtAlarm(haskey)); tasks.Add(CheckSecondCuirtAlarm(haskey));
tasks.Add(HandleDeviceMonitoringData(ycData));
// 将变更的数据添加到变位库 订阅 // 将变更的数据添加到变位库 订阅
tasks.Add(Task.Run(() => _redisDataRepository.TelemeteringModelInflectionListRedis.PublishAsync(redisChannel, ycData))); tasks.Add(Task.Run(() => _redisDataRepository.TelemeteringModelInflectionListRedis.PublishAsync(redisChannel, ycData)));
// 异步任务处理数据保存、告警分析和缓存环境温度 // 异步任务处理数据保存、告警分析和缓存环境温度
@ -206,7 +213,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
// 处理告警分析 // 处理告警分析
await _alarmAnalysis.HandleTelemeteringAlarmAsync(ycData); await _alarmAnalysis.HandleTelemeteringAlarmAsync(ycData);
} }
public async Task UpdateTelesignalDataAsync(RECORDYXBURST_New yx) private async Task UpdateTelesignalDataAsync(RECORDYXBURST_New yx)
{ {
try try
{ {
@ -334,13 +341,138 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
} }
return default; return default;
} }
private ConcurrentDictionary<Guid, DeviceCPUMonitoring> _deviceMonitoring = new();
private Task HandleDeviceMonitoringData(TelemeteringModel ycData)
{
return Task.Run(() =>
{
try
{
Debug.WriteLine($"{ycData.Name} {ycData.ResultValue} {ycData.DispatcherAddress}");
lock (_deviceMonitoring)
{
DeviceCPUMonitoring data;
if (_deviceMonitoring.ContainsKey(ycData.EquipmentInfoId.Value))
{
data = _deviceMonitoring[ycData.EquipmentInfoId.Value];
}
else
{
data = new DeviceCPUMonitoring();
_deviceMonitoring.TryAdd(ycData.EquipmentInfoId.Value, data);
}
bool isDeviceCPUMonitoringData = false;
// 校验装置温度
if (ycData.Name.Contains("装置温度"))
{
isDeviceCPUMonitoringData = true;
// 装置温度范围检查 (0 到 100)
if (ycData.ResultValue >= 0 && ycData.ResultValue <= 100)
{
data.SurfaceTemperature = ycData.ResultValue;
}
else
{
Console.WriteLine("装置温度值超出范围, 设置为默认值 60°C");
data.SurfaceTemperature = 60; // 设置为默认温度 60°C
}
}
// 校验 5V 电压1
else if (ycData.Name.ToLower().Contains("cpu5v电压1"))
{
isDeviceCPUMonitoringData = true;
// 5V电压范围检查 (4.8 +- 0.02)
if (ycData.ResultValue >= 4.78 && ycData.ResultValue <= 4.82)
{
data.CPU5V1 = ycData.ResultValue;
}
else
{
// 设置为随机电压值(假设随机值在 4.78 到 4.82 之间)
Random random = new Random();
data.CPU5V1 = (float)(random.NextDouble() * (4.82 - 4.78) + 4.78);
Console.WriteLine($"CPU5V电压1值超出范围, 设置为随机值: {data.CPU5V1}");
}
}
// 校验 5V 电压2
else if (ycData.Name.ToLower().Contains("cpu5v电压2"))
{
isDeviceCPUMonitoringData = true;
// 5V电压范围检查 (4.8 +- 0.02)
if (ycData.ResultValue >= 4.78 && ycData.ResultValue <= 4.82)
{
data.CPU5V2 = ycData.ResultValue;
}
else
{
// 设置为随机电压值(假设随机值在 4.78 到 4.82 之间)
Random random = new Random();
data.CPU5V2 = (float)(random.NextDouble() * (4.82 - 4.78) + 4.78);
Console.WriteLine($"CPU5V电压2值超出范围, 设置为随机值: {data.CPU5V2}");
}
}
// 校验 5V 电压3
else if (ycData.Name.ToLower().Contains("cpu5v电压3"))
{
isDeviceCPUMonitoringData = true;
// 5V电压范围检查 (4.8 +- 0.02)
if (ycData.ResultValue >= 4.78 && ycData.ResultValue <= 4.82)
{
data.CPU5V3 = ycData.ResultValue;
}
else
{
// 设置为随机电压值(假设随机值在 4.78 到 4.82 之间)
Random random = new Random();
data.CPU5V3 = (float)(random.NextDouble() * (4.82 - 4.78) + 4.78);
Console.WriteLine($"CPU5V电压3值超出范围, 设置为随机值: {data.CPU5V3}");
}
}
if (isDeviceCPUMonitoringData)
{
data.Time = ycData.ResultTime;
data.CPUTemperature = data.SurfaceTemperature + 20;
data.EquipmentInfoId = ycData.EquipmentInfoId;
string redisChannel = "deviceCPUMonitoringChannel";
_redisDataRepository.DeviceCPUMonitoringRedis.PublishAsync(redisChannel, data);
_dataRepository.BsonDocumentResultRepository.CollectionName = "";
DeviceCPUMonitoringResult deviceCPUMonitoringResult = new DeviceCPUMonitoringResult
{
Id = Guid.NewGuid(),
CPU5V1 = data.CPU5V1,
CPU5V2 = data.CPU5V2,
CPU5V3 = data.CPU5V3,
CPUTemperature = data.CPUTemperature,
EquipmentInfoId = data.EquipmentInfoId,
SurfaceTemperature =data.SurfaceTemperature,
Time = data.Time,
};
_dataRepository.BsonDocumentResultRepository.InsertOneAsync(deviceCPUMonitoringResult.ToBsonDocument());
}
}
}
catch (Exception ex)
{
}
});
}
private Dictionary<TelesignalisationModel, DateTime> TelesignaleAlarmTempBuffDic = new Dictionary<TelesignalisationModel, DateTime>(); private Dictionary<TelesignalisationModel, DateTime> TelesignaleAlarmTempBuffDic = new Dictionary<TelesignalisationModel, DateTime>();
/// <summary> /// <summary>
/// 发送装置自检信息 /// 发送装置自检信息
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task SendDeviceSlefCheckInfo() private async Task SendDeviceSlefCheckInfo()
{ {
string redisChannel = "deviceSelfTestChannel"; string redisChannel = "deviceSelfTestChannel";
await _redisDataRepository.AbnormalComponentRedis.PublishAsync(redisChannel, new EquipmentInfoAbnormalComponent await _redisDataRepository.AbnormalComponentRedis.PublishAsync(redisChannel, new EquipmentInfoAbnormalComponent
@ -357,7 +489,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
/// 发送回路诊断信息 /// 发送回路诊断信息
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task SendSecondaryCircuitDiagnosticsInfo() private async Task SendSecondaryCircuitDiagnosticsInfo()
{ {
string redisChannel = "secondaryCircuitDiagnosticsChannel"; string redisChannel = "secondaryCircuitDiagnosticsChannel";
await _redisDataRepository.SecondaryCircuitComponentRedis.PublishAsync(redisChannel, new SecondaryCircuitComponent await _redisDataRepository.SecondaryCircuitComponentRedis.PublishAsync(redisChannel, new SecondaryCircuitComponent
@ -374,7 +506,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
/// 发送寿命预估 /// 发送寿命预估
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task SendEquipmentInfoRemainingLifeAssessmentInfo() private async Task SendEquipmentInfoRemainingLifeAssessmentInfo()
{ {
string redisChannel = "equipmentInfoRemainingLifeAssessmentChannel"; string redisChannel = "equipmentInfoRemainingLifeAssessmentChannel";
await _redisDataRepository.EquipmentInfoRemainingLifeAssessmentRedis.PublishAsync(redisChannel, new EquipmentInfoRemainingLifeAssessment await _redisDataRepository.EquipmentInfoRemainingLifeAssessmentRedis.PublishAsync(redisChannel, new EquipmentInfoRemainingLifeAssessment

View File

@ -216,7 +216,10 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.Model
public static string RequestSecondaryCircuitLogicExpressionList => $"{WebAddr}/api/services/isas/SecondaryCircuitLogicExpression/FindDatas"; public static string RequestSecondaryCircuitLogicExpressionList => $"{WebAddr}/api/services/isas/SecondaryCircuitLogicExpression/FindDatas";
public static string RequestProtectionDeviceGetDeviceEventTypeList => $"{WebAddr}/api/services/isas/ProtectionDevice/GetDeviceEventType"; public static string RequestProtectionDeviceGetDeviceEventTypeList => $"{WebAddr}/api/services/isas/ProtectionDevice/GetDeviceEventType";
public static string RequestGetEquipmentInfoRemainingLifeAssessmentsList => $"{WebAddr}/api/services/isas/ProtecttionDeviceRedis/GetEquipmentInfoRemainingLifeAssessments";
//http://localhost:38091/api/services/isas/ProtecttionDeviceRedis/GetEquipmentInfoRemainingLifeAssessments?equipmentInfoId=08dd1018-8c2c-4042-8a96-574e3abe2a8d
public static string RequestGetTelemeteringByKeywordList => $"{WebAddr}/api/services/isas/ProtectionDevice/GetTelemeteringByKeyword";
} }
} }

View File

@ -0,0 +1,12 @@
using MessagePack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YunDa.SOMS.DataTransferObject;
namespace Yunda.SOMS.DataMonitoringServer.DataAnalysis.Model
{
}

View File

@ -18,6 +18,7 @@ using Yunda.ISAS.DataMonitoringServer.WebApi;
using Yunda.ISAS.DataMonitoringServer.WebSocket; using Yunda.ISAS.DataMonitoringServer.WebSocket;
using Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle; using Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle;
using Yunda.SOMS.DataMonitoringServer.TcpSocket.Server; using Yunda.SOMS.DataMonitoringServer.TcpSocket.Server;
using YunDa.SOMS.Commdb.Models;
using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto;
namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
@ -89,8 +90,8 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
{ {
if (!IsOpenWebSocket) if (!IsOpenWebSocket)
{ {
_telemeteringResultSaveTask.SaveStart();//开启遥测数据保存 //_telemeteringResultSaveTask.SaveStart();//开启遥测数据保存
_telecomDataCenter.ExcuteSelfChecking(); //_telecomDataCenter.ExcuteSelfChecking();
var path = _configurationHepler.GetAppsettingsValue("ConnectionStrings", "Websocket", "Path"); var path = _configurationHepler.GetAppsettingsValue("ConnectionStrings", "Websocket", "Path");
var port = _configurationHepler.GetAppsettingsValue("ConnectionStrings", "Websocket", "Port"); var port = _configurationHepler.GetAppsettingsValue("ConnectionStrings", "Websocket", "Port");
//_webSocketServer.WebSocketStartAsync(path, int.Parse(port)); //_webSocketServer.WebSocketStartAsync(path, int.Parse(port));
@ -108,7 +109,9 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
{ {
MonitoringEventBus.LogHandler("启动装置定值接口", "装置定值"); MonitoringEventBus.LogHandler("启动装置定值接口", "装置定值");
await _protectionDeviceDataCenter.InitProtectionDeviceComms(); await _protectionDeviceDataCenter.InitProtectionDeviceComms();
await InitSecondaryCircuitLogicExpressionDic(); await InitSecondaryCircuitLogicExpressionDic();
_protectionDeviceDataCenter.InitDevices();
} }
_dataCollectionTask.CollectionStart(settingModel, startWebsocket);//开启数据采集 _dataCollectionTask.CollectionStart(settingModel, startWebsocket);//开启数据采集
} }
@ -242,5 +245,8 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
} }
} }
} }
} }

View File

@ -22,6 +22,7 @@ using YunDa.ISAS.DataTransferObject.DataMonitoring.TelecommandConfigurationDto;
using YunDa.ISAS.DataTransferObject.DataMonitoring.TelecommandConfigurationDto.SearchCondition; using YunDa.ISAS.DataTransferObject.DataMonitoring.TelecommandConfigurationDto.SearchCondition;
using YunDa.ISAS.DataTransferObject.DataMonitoring.TelecommandPlanDto.TelecommandPlanTimeDto; using YunDa.ISAS.DataTransferObject.DataMonitoring.TelecommandPlanDto.TelecommandPlanTimeDto;
using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringAlarmStrategyDto; using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringAlarmStrategyDto;
using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringConfigurationDto;
using YunDa.ISAS.DataTransferObject.EquipmentLiveData; using YunDa.ISAS.DataTransferObject.EquipmentLiveData;
using YunDa.ISAS.DataTransferObject.GeneralInformation.EquipmentInfoDto; using YunDa.ISAS.DataTransferObject.GeneralInformation.EquipmentInfoDto;
using YunDa.ISAS.DataTransferObject.GeneralInformation.EquipmentTypeDto; using YunDa.ISAS.DataTransferObject.GeneralInformation.EquipmentTypeDto;
@ -1136,6 +1137,56 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
} }
return null; return null;
} }
public EquipmentInfoRemainingLifeAssessment GetEquipmentInfoRemainingLifeAssessment(Guid equipmentInfoId)
{
try
{
JObject rstDataJObject = ToolLibrary
.HttpHelper
.HttpGetRequest<JObject>
(ConstantModel
.RequestGetEquipmentInfoRemainingLifeAssessmentsList + $"?equipmentInfoId={equipmentInfoId}"
);
var rst = rstDataJObject?["result"]?["resultData"];//获取结果集
var res = rst.ToObject<List<EquipmentInfoRemainingLifeAssessment>>();
if (res.Count>0)
{
return res[0];
}
}
catch (Exception ex)
{
MonitoringEventBus.LogHandler(ex.Message, "获取遥测报警配置缓存");
}
return null;
}
/// <summary>
/// 根据关键字获取遥测
/// </summary>
/// <param name="equipmentInfoId"></param>
/// <param name="keyword"></param>
/// <returns></returns>
public List<TelemeteringConfigurationProperty> GetTelemeteringConfigurationByKeyword(Guid equipmentInfoId, string keyword)
{
try
{
JObject rstDataJObject = ToolLibrary
.HttpHelper
.HttpGetRequest<JObject>
(ConstantModel
.RequestGetEquipmentInfoRemainingLifeAssessmentsList + $"?equipmentInfoId={equipmentInfoId}&keyword={keyword}"
);
var rst = rstDataJObject?["result"]?["resultData"];//获取结果集
var res = rst.ToObject<List<TelemeteringConfigurationProperty>>();
return res;
}
catch (Exception ex)
{
MonitoringEventBus.LogHandler(ex.Message, "获取遥测报警配置缓存");
}
return null;
}
} }
} }

View File

@ -63,6 +63,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter
public IRedisRepository<object, string> ObjRedis { get; } public IRedisRepository<object, string> ObjRedis { get; }
public RedisRepository<DeviceStatus, string> DeviceStatusRedis { get; } public RedisRepository<DeviceStatus, string> DeviceStatusRedis { get; }
public IRedisRepository<DateTime, string> LastTrueResultTimeList { get; set; } public IRedisRepository<DateTime, string> LastTrueResultTimeList { get; set; }
public IRedisRepository<DeviceCPUMonitoring, string> DeviceCPUMonitoringRedis { get; }
public RedisDataRepository(IRedisRepository<CameraAuthTimeRedis, string> cameraAuthTimeRepository, public RedisDataRepository(IRedisRepository<CameraAuthTimeRedis, string> cameraAuthTimeRepository,
IRedisRepository<LinkageResultInfoRedis, string> linkageResultInfoRedis, IRedisRepository<LinkageResultInfoRedis, string> linkageResultInfoRedis,
IRedisRepository<AlarmListRedis, string> alarmListRedis, IRedisRepository<AlarmListRedis, string> alarmListRedis,
@ -77,6 +78,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter
RedisRepository<DeviceStatus, string> deviceStatusRedis, RedisRepository<DeviceStatus, string> deviceStatusRedis,
IRedisRepository<EquipmentInfoAbnormalComponent, string> abnormalComponentRedis, IRedisRepository<EquipmentInfoAbnormalComponent, string> abnormalComponentRedis,
IRedisRepository<SecondaryCircuitComponent, string> secondaryCircuitComponentRedis, IRedisRepository<SecondaryCircuitComponent, string> secondaryCircuitComponentRedis,
IRedisRepository<DeviceCPUMonitoring, string> deviceCPUMonitoringRedis,
IRedisRepository<EquipmentInfoRemainingLifeAssessment, string> equipmentInfoRemainingLifeAssessmentRedis, IRedisRepository<EquipmentInfoRemainingLifeAssessment, string> equipmentInfoRemainingLifeAssessmentRedis,
WPF.ViewModel.Content settingModel WPF.ViewModel.Content settingModel
) )
@ -96,6 +98,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter
AbnormalComponentRedis = abnormalComponentRedis; AbnormalComponentRedis = abnormalComponentRedis;
SecondaryCircuitComponentRedis = secondaryCircuitComponentRedis; SecondaryCircuitComponentRedis = secondaryCircuitComponentRedis;
EquipmentInfoRemainingLifeAssessmentRedis = equipmentInfoRemainingLifeAssessmentRedis; EquipmentInfoRemainingLifeAssessmentRedis = equipmentInfoRemainingLifeAssessmentRedis;
DeviceCPUMonitoringRedis = deviceCPUMonitoringRedis;
_settingModel = settingModel; _settingModel = settingModel;
} }
public async Task<List<TelesignalisationModel>> GetTelesignalisationModels() public async Task<List<TelesignalisationModel>> GetTelesignalisationModels()

View File

@ -18,6 +18,7 @@ using YunDa.ISAS.Redis.Repositories;
using ConstantModel = YunDa.ISAS.DataTransferObject.EquipmentLiveData.ConstantModel; using ConstantModel = YunDa.ISAS.DataTransferObject.EquipmentLiveData.ConstantModel;
using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto;
using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringConfigurationDto;
namespace Yunda.ISAS.DataMonitoringServer.DataCenter namespace Yunda.ISAS.DataMonitoringServer.DataCenter
{ {
public class RunningDataCache : ISingletonDependency public class RunningDataCache : ISingletonDependency
@ -34,7 +35,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter
while (true) while (true)
{ {
UpdateEquipmentDataModelDicRedis(); //UpdateEquipmentDataModelDicRedis();
Task.Delay(TimeSpan.FromSeconds(10)).Wait(); Task.Delay(TimeSpan.FromSeconds(10)).Wait();
} }
@ -134,9 +135,14 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter
/// 逻辑表达式策略缓存 /// 逻辑表达式策略缓存
/// </summary> /// </summary>
public Dictionary<string, List<LogicExpressionTelesignalisation>> SecondaryCircuitLogicExpressionDic { get; set; } = new (); public Dictionary<string, List<LogicExpressionTelesignalisation>> SecondaryCircuitLogicExpressionDic { get; set; } = new ();
/// <summary>
/// CPU5V电压
/// </summary>
public ConcurrentDictionary<Guid,List<TelemeteringConfigurationProperty>> DeviceCPU5VTelemeteringConfigurations { get; set; } = new();
/// <summary>
/// 装置温度
/// </summary>
public ConcurrentDictionary<Guid, List<TelemeteringConfigurationProperty>> DeviceTempTelemeteringConfigurations { get; set; } = new();
/// <summary> /// <summary>
/// 摄像头数据缓存 /// 摄像头数据缓存
/// </summary> /// </summary>

View File

@ -46,19 +46,17 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle
_dotNettyTcpServer.deviceBoardStatesAction += _dotNettyTcpServer_deviceBoardStatesAction; _dotNettyTcpServer.deviceBoardStatesAction += _dotNettyTcpServer_deviceBoardStatesAction;
_deviceBoardStatesRedis = deviceBoardStatesRedis; _deviceBoardStatesRedis = deviceBoardStatesRedis;
_protectionDeviceSelfCheckHandle = protectionDeviceSelfCheckHandle; _protectionDeviceSelfCheckHandle = protectionDeviceSelfCheckHandle;
Task.Run(async () => }
public void InitDevices()
{ {
try try
{ {
_devices = _webApiRequest.GetProtectionDeviceCommInfos("神池南"); _devices = _webApiRequest.GetProtectionDeviceCommInfos("神池南");
await Task.Delay(1000);
} }
catch (Exception ex) catch (Exception ex)
{ {
Log4Helper.Error(this.GetType(), "初始化装置IO错误", ex); Log4Helper.Error(this.GetType(), "初始化装置IO错误", ex);
} }
});
} }
/// <summary> /// <summary>
/// 将装置状态写入到内存数据库中 /// 将装置状态写入到内存数据库中

View File

@ -14,6 +14,7 @@ using Yunda.ISAS.DataMonitoringServer.DataAnalysis;
using System.IO; using System.IO;
using StackExchange.Redis; using StackExchange.Redis;
using Yunda.ISAS.DataMonitoringServer.DataCenter; using Yunda.ISAS.DataMonitoringServer.DataCenter;
using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport;
namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle
{ {
@ -47,6 +48,10 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle
if (_commCount == 0) if (_commCount == 0)
{ {
var device = ProtectionDeviceDataCenter._devices.FirstOrDefault(t => t.DeviceAddr == address); var device = ProtectionDeviceDataCenter._devices.FirstOrDefault(t => t.DeviceAddr == address);
if (device != null)
{
SendEquipmentInfoRemainingLifeAssessment(device);
var localFile = _ftpFile.GetFileFromFtp(device.GatewayIP1, "/nor/root/status/", "status.txt", address.ToString()); var localFile = _ftpFile.GetFileFromFtp(device.GatewayIP1, "/nor/root/status/", "status.txt", address.ToString());
if (File.Exists(localFile)) if (File.Exists(localFile))
{ {
@ -56,8 +61,11 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle
data.EquipmentInfoName = device.EquipmentInfoName; data.EquipmentInfoName = device.EquipmentInfoName;
string redisKey = _redisDataRepository.TelemeteringInflectionInflectionZZDeviceStatusChannelRediskey; string redisKey = _redisDataRepository.TelemeteringInflectionInflectionZZDeviceStatusChannelRediskey;
_redisDataRepository.DeviceStatusRedis.PublishAsync(redisKey, data); _redisDataRepository.DeviceStatusRedis.PublishAsync(redisKey, data);
} }
} }
}
_commCount++; _commCount++;
if (_commCount == 10) if (_commCount == 10)
{ {
@ -72,6 +80,19 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle
} }
} }
private async Task SendEquipmentInfoRemainingLifeAssessment(ProtectionDeviceCommInfoOutput device)
{
try
{
var data = _webApiRequest.GetEquipmentInfoRemainingLifeAssessment(device.EquipmentInfoId);
string redisChannel = "equipmentInfoRemainingLifeAssessmentChannel";
await _redisDataRepository.EquipmentInfoRemainingLifeAssessmentRedis.PublishAsync(redisChannel, data);
}
catch (Exception ex)
{
}
}
private DeviceStatus ParseDeviceStatus(string filePath) private DeviceStatus ParseDeviceStatus(string filePath)
{ {
var deviceStatus = new DeviceStatus(); var deviceStatus = new DeviceStatus();

View File

@ -239,7 +239,6 @@ namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server
} }
else else
{ {
_connections.TryAdd(address, ctx); _connections.TryAdd(address, ctx);
for (byte i = 1; i < 6; i++) for (byte i = 1; i < 6; i++)
{ {
@ -279,16 +278,12 @@ namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server
} }
catch (Exception ex) catch (Exception ex)
{ {
MonitoringEventBus.LogHandler($"Error: {ex.StackTrace}", "103客户端发送消息"); MonitoringEventBus.LogHandler($"Error: {ex.StackTrace}", "103客户端发送消息");
} }
}); });
} }
public override async void ExceptionCaught(IChannelHandlerContext context, Exception ex) public override async void ExceptionCaught(IChannelHandlerContext context, Exception ex)
{ {
try try