1
This commit is contained in:
commit
4e115c914c
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
@ -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>
|
||||||
获取或设置厂站名称。
|
获取或设置厂站名称。
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
@ -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>>();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
@ -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
|
||||||
|
@ -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";
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
@ -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
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
/// 将装置状态写入到内存数据库中
|
/// 将装置状态写入到内存数据库中
|
||||||
|
@ -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();
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user