完成二次回路逻辑推理Merge branch 'master' of http://192.168.110.57:3000/guor/SOMS
This commit is contained in:
commit
1c87801075
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 逻辑表达式与遥信地址
|
||||||
|
/// </summary>
|
||||||
|
public class LogicExpressionTelesignalisation
|
||||||
|
{
|
||||||
|
public string LogicExpression { get; set; }
|
||||||
|
public string TelesignalisationAddr { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -15415,6 +15415,11 @@
|
|||||||
是否在用
|
是否在用
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto.LogicExpressionTelesignalisation">
|
||||||
|
<summary>
|
||||||
|
逻辑表达式与遥信地址
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto.SecondaryCircuitLogicExpressionOutput">
|
<member name="T:YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto.SecondaryCircuitLogicExpressionOutput">
|
||||||
<summary>
|
<summary>
|
||||||
二次回路逻辑运算式
|
二次回路逻辑运算式
|
||||||
|
@ -3,6 +3,7 @@ using MongoDB.Driver;
|
|||||||
using MongoDB.Driver.Linq;
|
using MongoDB.Driver.Linq;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -215,9 +216,9 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
|
|||||||
|
|
||||||
|
|
||||||
Dictionary<int, TelesignalisationModel> TelesignalisationModelDic = new Dictionary<int, TelesignalisationModel>();
|
Dictionary<int, TelesignalisationModel> TelesignalisationModelDic = new Dictionary<int, TelesignalisationModel>();
|
||||||
|
|
||||||
List<RECORDYXBURST_New> yxList = new List<RECORDYXBURST_New>();
|
ConcurrentBag<RECORDYXBURST_New> yxList = new ConcurrentBag<RECORDYXBURST_New>();
|
||||||
List<YC_TYPE_New> ycList = new List<YC_TYPE_New>();
|
ConcurrentBag<YC_TYPE_New> ycList = new ConcurrentBag<YC_TYPE_New>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 仅更新遥信数据字典
|
/// 仅更新遥信数据字典
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using Google.Protobuf.WellKnownTypes;
|
using Google.Protobuf.WellKnownTypes;
|
||||||
using MongoDB.Driver.Linq;
|
using MongoDB.Driver.Linq;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using StackExchange.Redis;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -24,6 +25,7 @@ using YunDa.ISAS.Entities.DataMonitoring;
|
|||||||
using YunDa.ISAS.Redis.Entities.DataMonitorCategory;
|
using YunDa.ISAS.Redis.Entities.DataMonitorCategory;
|
||||||
using YunDa.ISAS.Redis.Repositories;
|
using YunDa.ISAS.Redis.Repositories;
|
||||||
using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport;
|
using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport;
|
||||||
|
using Z.Expressions;
|
||||||
|
|
||||||
namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
|
namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
|
||||||
{
|
{
|
||||||
@ -151,76 +153,25 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
|
|||||||
string redisKey = _redisDataRepository.TelemeteringModelListRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName);
|
string redisKey = _redisDataRepository.TelemeteringModelListRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName);
|
||||||
string redisChannel = _redisDataRepository.TelemeteringInflectionInflectionZZChannelRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName); ;
|
string redisChannel = _redisDataRepository.TelemeteringInflectionInflectionZZChannelRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName); ;
|
||||||
// 批量获取 Redis 数据以减少读取次数
|
// 批量获取 Redis 数据以减少读取次数
|
||||||
string hashKey = $"{yc.addr}_{0}_{yc.inf}_{categoriyValue}";
|
string haskey = $"{yc.addr}_{0}_{yc.inf}_{categoriyValue}";
|
||||||
var ycData = _redisDataRepository.TelemeteringModelListRedis.HashSetGetOne(redisKey, hashKey);
|
var ycData = _redisDataRepository.TelemeteringModelListRedis.HashSetGetOne(redisKey, haskey);
|
||||||
if (ycData == null)
|
if (ycData == null)
|
||||||
{
|
{
|
||||||
Log4Helper.Error(this.GetType(), $"更新数据失败: 地址:{yc.inf} 类型:{categoriyValue} 键:{hashKey}");
|
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;
|
||||||
|
|
||||||
// 并行处理多个任务以提高性能
|
// 并行处理多个任务以提高性能
|
||||||
var tasks = new List<Task>();
|
var tasks = new List<Task>();
|
||||||
|
|
||||||
if (_runningDataCache.SecondaryCircuitLogicExpressionDic.ContainsKey(hashKey))
|
|
||||||
{
|
|
||||||
var listLogics = _runningDataCache.SecondaryCircuitLogicExpressionDic[hashKey];
|
|
||||||
foreach (var listLogic in listLogics)
|
|
||||||
{
|
|
||||||
// 示例字符串
|
|
||||||
|
|
||||||
// 正则表达式匹配花括号中的内容
|
|
||||||
string pattern = @"\{([^}]*)\}";
|
|
||||||
Regex regex = new Regex(pattern);
|
|
||||||
|
|
||||||
// 提取匹配内容
|
|
||||||
MatchCollection matches = regex.Matches(listLogic);
|
|
||||||
List<string> extractedStrings = new List<string>();
|
|
||||||
foreach (Match match in matches)
|
|
||||||
{
|
|
||||||
var logichasKey = match.Groups[1].Value;
|
|
||||||
var ycLiveData = _redisDataRepository.TelemeteringModelListRedis.HashSetGetOne(redisKey, logichasKey);
|
|
||||||
if (ycLiveData!=null)
|
|
||||||
{
|
|
||||||
listLogic.Replace(logichasKey, ycLiveData.ResultValue.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新到内存数据库中
|
// 更新到内存数据库中
|
||||||
tasks.Add(_redisDataRepository.TelemeteringModelListRedis.HashSetUpdateOneAsync(redisKey, hashKey, ycData));
|
tasks.Add(_redisDataRepository.TelemeteringModelListRedis.HashSetUpdateOneAsync(redisKey, haskey, ycData));
|
||||||
//Log4Helper.Info(this.GetType(), $"更新数据成功: 地址:{yc.inf} 类型:{categoriyValue}");
|
tasks.Add(CheckSecondCuirtAlarm(haskey));
|
||||||
// 将变更的数据添加到变位库 订阅
|
// 将变更的数据添加到变位库 订阅
|
||||||
tasks.Add(Task.Run(() => _redisDataRepository.TelemeteringModelInflectionListRedis.PublishAsync(redisChannel, ycData)));
|
tasks.Add(Task.Run(() => _redisDataRepository.TelemeteringModelInflectionListRedis.PublishAsync(redisChannel, ycData)));
|
||||||
|
|
||||||
// 异步任务处理数据保存、告警分析和缓存环境温度
|
// 异步任务处理数据保存、告警分析和缓存环境温度
|
||||||
tasks.Add(Task.Run(async () =>
|
tasks.Add(SetEnvirmentTemp(ycData));
|
||||||
{
|
|
||||||
var rst = new TelemeteringResult
|
|
||||||
{
|
|
||||||
ResultTime = ycData.ResultTime,
|
|
||||||
ResultValue = ycData.ResultValue,
|
|
||||||
TelemeteringConfigurationId = ycData.Id,
|
|
||||||
SaveMethod = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
// 保存变更数据
|
|
||||||
_telemeteringResultSaveTask.SaveTelemeteringResultActionBlock?.Post(rst);
|
|
||||||
|
|
||||||
// 缓存环境温度(如果适用)
|
|
||||||
if (ycData.IsEnvironmentTemp)
|
|
||||||
{
|
|
||||||
var environmentTempValue = new EnvironmentTempValue(yc.val);
|
|
||||||
await _redisDataRepository.EnvironmentTempValueRedis.HashSetUpdateOneAsync(nameof(EnvironmentTempValue), ycData.Id.ToString(), environmentTempValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理告警分析
|
|
||||||
await _alarmAnalysis.HandleTelemeteringAlarmAsync(ycData);
|
|
||||||
}));
|
|
||||||
|
|
||||||
// 执行所有任务并等待完成
|
// 执行所有任务并等待完成
|
||||||
await Task.WhenAll(tasks);
|
await Task.WhenAll(tasks);
|
||||||
@ -231,7 +182,28 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
|
|||||||
MonitoringEventBus.LogHandler(ex.Message, "错误信息");
|
MonitoringEventBus.LogHandler(ex.Message, "错误信息");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public async Task SetEnvirmentTemp(TelemeteringModel ycData)
|
||||||
|
{
|
||||||
|
var rst = new TelemeteringResult
|
||||||
|
{
|
||||||
|
ResultTime = ycData.ResultTime,
|
||||||
|
ResultValue = ycData.ResultValue,
|
||||||
|
TelemeteringConfigurationId = ycData.Id,
|
||||||
|
SaveMethod = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
// 保存变更数据
|
||||||
|
_telemeteringResultSaveTask.SaveTelemeteringResultActionBlock?.Post(rst);
|
||||||
|
|
||||||
|
// 缓存环境温度(如果适用)
|
||||||
|
if (ycData.IsEnvironmentTemp)
|
||||||
|
{
|
||||||
|
var environmentTempValue = new EnvironmentTempValue(ycData.ResultValue);
|
||||||
|
await _redisDataRepository.EnvironmentTempValueRedis.HashSetUpdateOneAsync(nameof(EnvironmentTempValue), ycData.Id.ToString(), environmentTempValue);
|
||||||
|
}
|
||||||
|
// 处理告警分析
|
||||||
|
await _alarmAnalysis.HandleTelemeteringAlarmAsync(ycData);
|
||||||
|
}
|
||||||
public async Task UpdateTelesignalDataAsync(RECORDYXBURST_New yx)
|
public async Task UpdateTelesignalDataAsync(RECORDYXBURST_New yx)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -256,7 +228,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
|
|||||||
|
|
||||||
// 1. 更新 Redis 中的数据
|
// 1. 更新 Redis 中的数据
|
||||||
tasks.Add(_redisDataRepository.TelesignalisationModelListRedis.HashSetUpdateOneAsync(redisKey, haskey, yxData));
|
tasks.Add(_redisDataRepository.TelesignalisationModelListRedis.HashSetUpdateOneAsync(redisKey, haskey, yxData));
|
||||||
//Log4Helper.Info(this.GetType(), $"更新数据成功: 地址:{yx.dev_inf} 类型:{categoriyValue}");
|
tasks.Add(CheckSecondCuirtAlarm(haskey));
|
||||||
// 2. 将更新的数据加入到变位库中
|
// 2. 将更新的数据加入到变位库中
|
||||||
tasks.Add(Task.Run(() => _redisDataRepository.TelesignalisationModelInflectionListRedis.PublishAsync(redisChannel, yxData)));
|
tasks.Add(Task.Run(() => _redisDataRepository.TelesignalisationModelInflectionListRedis.PublishAsync(redisChannel, yxData)));
|
||||||
|
|
||||||
@ -283,7 +255,58 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection
|
|||||||
MonitoringEventBus.LogHandler(ex.Message, "错误信息");
|
MonitoringEventBus.LogHandler(ex.Message, "错误信息");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private async Task CheckSecondCuirtAlarm(string haskey)
|
||||||
|
{
|
||||||
|
if (_runningDataCache.SecondaryCircuitLogicExpressionDic.ContainsKey(haskey))
|
||||||
|
{
|
||||||
|
var listLogics = _runningDataCache.SecondaryCircuitLogicExpressionDic[haskey];
|
||||||
|
foreach (var listLogic in listLogics)
|
||||||
|
{
|
||||||
|
// 示例字符串
|
||||||
|
|
||||||
|
// 正则表达式匹配花括号中的内容
|
||||||
|
string pattern = @"\{([^}]*)\}";
|
||||||
|
Regex regex = new Regex(pattern);
|
||||||
|
|
||||||
|
// 提取匹配内容
|
||||||
|
MatchCollection matches = regex.Matches(listLogic.LogicExpression);
|
||||||
|
List<string> extractedStrings = new List<string>();
|
||||||
|
foreach (Match match in matches)
|
||||||
|
{
|
||||||
|
var logichasKey = match.Groups[1].Value;
|
||||||
|
string telemeteringredisKey = _redisDataRepository.TelemeteringModelListRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName);
|
||||||
|
|
||||||
|
var ycLiveData = _redisDataRepository.TelemeteringModelListRedis.HashSetGetOne(telemeteringredisKey, logichasKey);
|
||||||
|
if (ycLiveData != null)
|
||||||
|
{
|
||||||
|
listLogic.LogicExpression.Replace(logichasKey, ycLiveData.ResultValue.ToString());
|
||||||
|
}
|
||||||
|
string telesignalisationredisKey = _redisDataRepository.TelesignalisationModelListRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName);
|
||||||
|
|
||||||
|
var yxLiveData = _redisDataRepository.TelesignalisationModelListRedis.HashSetGetOne(telesignalisationredisKey, logichasKey);
|
||||||
|
if (yxLiveData != null)
|
||||||
|
{
|
||||||
|
listLogic.LogicExpression.Replace(logichasKey, yxLiveData.ResultValue.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var result = Eval.Execute<bool>(listLogic.LogicExpression);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
string telesignalisationredisKey = _redisDataRepository.TelesignalisationModelListRediskey + "_" + _settingModel.GetDatacatgoryName("无");
|
||||||
|
var yxData = _redisDataRepository.TelesignalisationModelListRedis.HashSetGetOne(telesignalisationredisKey, listLogic.TelesignalisationAddr);
|
||||||
|
yxData.ResultValue = yxData.RemoteType == RemoteTypeEnum.DoublePoint ? 2 : 1;
|
||||||
|
_webApiRequest.SendVisualYx(yxData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MonitoringEventBus.LogHandler(ex.Message, "错误信息");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
private Dictionary<TelesignalisationModel, DateTime> TelesignaleAlarmTempBuffDic = new Dictionary<TelesignalisationModel, DateTime>();
|
private Dictionary<TelesignalisationModel, DateTime> TelesignaleAlarmTempBuffDic = new Dictionary<TelesignalisationModel, DateTime>();
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 发送装置自检信息
|
/// 发送装置自检信息
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using Abp.Dependency;
|
using Abp.Dependency;
|
||||||
using Castle.MicroKernel.Util;
|
using Castle.MicroKernel.Util;
|
||||||
using Microsoft.ClearScript.V8;
|
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -18,6 +17,7 @@ using Yunda.ISAS.DataMonitoringServer.WebSocket.Model;
|
|||||||
using YunDa.ISAS.DataTransferObject.DataMonitoring.LinkageConditionDto;
|
using YunDa.ISAS.DataTransferObject.DataMonitoring.LinkageConditionDto;
|
||||||
using YunDa.ISAS.DataTransferObject.EquipmentLiveData;
|
using YunDa.ISAS.DataTransferObject.EquipmentLiveData;
|
||||||
using YunDa.ISAS.Entities.MySQL.DataMonitoring;
|
using YunDa.ISAS.Entities.MySQL.DataMonitoring;
|
||||||
|
using Z.Expressions;
|
||||||
using ConstantModel = Yunda.ISAS.DataMonitoringServer.DataAnalysis.Model.ConstantModel;
|
using ConstantModel = Yunda.ISAS.DataMonitoringServer.DataAnalysis.Model.ConstantModel;
|
||||||
|
|
||||||
namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.LinkageAnalysis
|
namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.LinkageAnalysis
|
||||||
@ -245,11 +245,14 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.LinkageAnalysis
|
|||||||
|
|
||||||
}
|
}
|
||||||
string ruleStr = string.Format(linkageStrategy.Rule, conditionStrs.ToArray());
|
string ruleStr = string.Format(linkageStrategy.Rule, conditionStrs.ToArray());
|
||||||
|
try
|
||||||
using (var engine = new V8ScriptEngine())
|
|
||||||
{
|
{
|
||||||
object isLinkageObj = engine.Evaluate(ruleStr);
|
isNeedLinkage = ruleStr.Execute<bool>();
|
||||||
bool.TryParse(isLinkageObj.ToString(), out isNeedLinkage);
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log4Helper.Error(this.GetType(), "解析联动表达式",ex);
|
||||||
|
isNeedLinkage = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
using Abp.Dependency;
|
using Abp.Dependency;
|
||||||
|
using Amazon.Runtime.Internal.Transform;
|
||||||
|
using MongoDB.Driver.Linq;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
@ -16,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.DataTransferObject.GeneralInformation.SecondaryCircuitDto;
|
||||||
|
|
||||||
namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
|
namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
|
||||||
{
|
{
|
||||||
@ -163,18 +166,22 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
|
|||||||
var yxlist =await _redisDataRepository.GetTelesignalisationModels();
|
var yxlist =await _redisDataRepository.GetTelesignalisationModels();
|
||||||
var yclist =await _redisDataRepository.GetTelemeteringModels();
|
var yclist =await _redisDataRepository.GetTelemeteringModels();
|
||||||
var ycCheckList =( await _redisDataRepository.GetCheckTelemeteringModels()).ToDictionary(t => t.Id);
|
var ycCheckList =( await _redisDataRepository.GetCheckTelemeteringModels()).ToDictionary(t => t.Id);
|
||||||
|
var yxSendList =( await _redisDataRepository.GetSendTelesignalisationModels()).ToDictionary(t => t.Id);
|
||||||
|
|
||||||
var yxDic = yxlist.ToDictionary(t => t.Id);
|
var yxDic = yxlist.ToDictionary(t => t.Id);
|
||||||
var ycDic = yclist.ToDictionary(t => t.Id);
|
var ycDic = yclist.ToDictionary(t => t.Id);
|
||||||
var list = _webApiRequest.GetSecondaryCircuitLogicExpressionList();
|
var list = _webApiRequest.GetSecondaryCircuitLogicExpressionList();
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
if (!ycCheckList.ContainsKey(item.TelemeteringConfigurationId.Value))
|
if (!ycCheckList.ContainsKey(item.TelemeteringConfigurationId.Value)|| yxSendList.ContainsKey(item.TelesignalisationConfigurationId.Value))
|
||||||
{
|
{
|
||||||
Debug.WriteLine("错误,没有找到遥测");
|
Debug.WriteLine("错误,没有找到遥测/遥信");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var checktelemeteringConfiguration = ycCheckList[item.TelemeteringConfigurationId.Value];
|
var checktelemeteringConfiguration = ycCheckList[item.TelemeteringConfigurationId.Value];
|
||||||
|
var sendtelesignalConfiguration = yxSendList[item.TelesignalisationConfigurationId.Value];
|
||||||
|
|
||||||
|
|
||||||
float? upperLimit = checktelemeteringConfiguration.UpperLimit;
|
float? upperLimit = checktelemeteringConfiguration.UpperLimit;
|
||||||
float? lowerLimit = checktelemeteringConfiguration.LowerLimit;
|
float? lowerLimit = checktelemeteringConfiguration.LowerLimit;
|
||||||
// 正则表达式匹配花括号中的内容,包括 GUID
|
// 正则表达式匹配花括号中的内容,包括 GUID
|
||||||
@ -213,13 +220,18 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
|
|||||||
foreach (Match match in matches)
|
foreach (Match match in matches)
|
||||||
{
|
{
|
||||||
string key = match.Groups[1].Value;
|
string key = match.Groups[1].Value;
|
||||||
|
var logicExpressionTelesignalisation = new LogicExpressionTelesignalisation
|
||||||
|
{
|
||||||
|
LogicExpression = logicalExpression,
|
||||||
|
TelesignalisationAddr = $"{sendtelesignalConfiguration.DeviceAddress}_{sendtelesignalConfiguration.CPUSector}_{sendtelesignalConfiguration.DispatcherAddress}_{(int)sendtelesignalConfiguration.DataSourceCategory}"
|
||||||
|
};
|
||||||
if (_runningDataCache.SecondaryCircuitLogicExpressionDic.ContainsKey(key))
|
if (_runningDataCache.SecondaryCircuitLogicExpressionDic.ContainsKey(key))
|
||||||
{
|
{
|
||||||
_runningDataCache.SecondaryCircuitLogicExpressionDic[key].Add(logicalExpression);
|
_runningDataCache.SecondaryCircuitLogicExpressionDic[key].Add(logicExpressionTelesignalisation);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_runningDataCache.SecondaryCircuitLogicExpressionDic.Add(key, new List<string> { logicalExpression });
|
_runningDataCache.SecondaryCircuitLogicExpressionDic.Add(key, new List<LogicExpressionTelesignalisation> { logicExpressionTelesignalisation });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -546,6 +546,12 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
|
|||||||
(ConstantModel
|
(ConstantModel
|
||||||
.RequestInitYCRedisListUri + "?dataSourceCategory=" + (int)DataSourceCategoryEnum.None
|
.RequestInitYCRedisListUri + "?dataSourceCategory=" + (int)DataSourceCategoryEnum.None
|
||||||
);
|
);
|
||||||
|
var resObj3 = ToolLibrary
|
||||||
|
.HttpHelper
|
||||||
|
.HttpGetRequest<JObject>
|
||||||
|
(ConstantModel
|
||||||
|
.RequestInitYXRedisListUri + "?dataSourceCategory=" + (int)DataSourceCategoryEnum.None
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -798,7 +804,27 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
public async Task SendVisualYx(TelesignalisationModel telesign)
|
||||||
|
{
|
||||||
|
if (telesign != null)
|
||||||
|
{
|
||||||
|
var iecdata = new IecServerData();
|
||||||
|
iecdata.devAddr = (byte)telesign.InfoDeviceAddress;
|
||||||
|
iecdata.dateTime = DateTime.Now;
|
||||||
|
iecdata.devCpu = (byte)telesign.InfoCPUSector;
|
||||||
|
iecdata.inf = telesign.InfoAddress;
|
||||||
|
iecdata.dataType = 2;
|
||||||
|
iecdata.devName = "test";
|
||||||
|
iecdata.yxValue = telesign.ResultValue;
|
||||||
|
MonitoringEventBus.LogHandler($"装置地址:{telesign.InfoDeviceAddress} cpu扇区:{telesign.InfoCPUSector} 信息体地址:{telesign.InfoAddress} 遥信值:{telesign.ResultValue}", "发送虚遥信");
|
||||||
|
await Task.Run(
|
||||||
|
|
||||||
|
() => ToolLibrary.HttpHelper
|
||||||
|
.HttpPostRequest(_runningDataCache._transformerSubstation.Iec104ServerUrl + "SendData", iecdata)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取设备缓存
|
/// 获取设备缓存
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -117,5 +117,12 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter
|
|||||||
var ycDatas = await TelemeteringModelListRedis.HashSetGetAllAsync(redisKey);
|
var ycDatas = await TelemeteringModelListRedis.HashSetGetAllAsync(redisKey);
|
||||||
return ycDatas;
|
return ycDatas;
|
||||||
}
|
}
|
||||||
|
public async Task<List<TelesignalisationModel>> GetSendTelesignalisationModels()
|
||||||
|
{
|
||||||
|
string redisKey = TelesignalisationModelListRediskey + "_" + _settingModel.GetDatacatgoryName("无"); ;
|
||||||
|
// 从 Redis 中批量获取所有遥测数据
|
||||||
|
var yxDatas = await TelesignalisationModelListRedis.HashSetGetAllAsync(redisKey);
|
||||||
|
return yxDatas;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -133,7 +133,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 逻辑表达式策略缓存
|
/// 逻辑表达式策略缓存
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Dictionary<string, List<string>> SecondaryCircuitLogicExpressionDic { get; set; } = new ();
|
public Dictionary<string, List<LogicExpressionTelesignalisation>> SecondaryCircuitLogicExpressionDic { get; set; } = new ();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,10 +103,10 @@
|
|||||||
<PackageReference Include="FluentFTP" Version="51.1.0" />
|
<PackageReference Include="FluentFTP" Version="51.1.0" />
|
||||||
<PackageReference Include="Hardcodet.NotifyIcon.Wpf" Version="2.0.1" />
|
<PackageReference Include="Hardcodet.NotifyIcon.Wpf" Version="2.0.1" />
|
||||||
<PackageReference Include="MaterialDesignThemes" Version="5.1.0" />
|
<PackageReference Include="MaterialDesignThemes" Version="5.1.0" />
|
||||||
<PackageReference Include="Microsoft.ClearScript.V8" Version="7.4.5" />
|
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0" />
|
||||||
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.135" />
|
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.135" />
|
||||||
<PackageReference Include="SkiaSharp" Version="2.88.9" />
|
<PackageReference Include="SkiaSharp" Version="2.88.9" />
|
||||||
|
<PackageReference Include="Z.Expressions.Eval" Version="6.2.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
"FunctionName": "综自(配电)"
|
"FunctionName": "综自(配电)"
|
||||||
},
|
},
|
||||||
"SysBaseConfig": {
|
"SysBaseConfig": {
|
||||||
"WebAddrUrl": "http://192.168.81.229:38091",
|
"WebAddrUrl": "http://192.168.81.143:38091",
|
||||||
"WebExternBaseUrl": "https://127.0.0.1:4431",
|
"WebExternBaseUrl": "https://127.0.0.1:4431",
|
||||||
"OpenVideoLog": false,
|
"OpenVideoLog": false,
|
||||||
"LinkAgingSecond": 60 //联动防抖时间,例如设置60,表示60秒内只联动一次
|
"LinkAgingSecond": 60 //联动防抖时间,例如设置60,表示60秒内只联动一次
|
||||||
|
Loading…
x
Reference in New Issue
Block a user