WPF_报警专题
WPF_报警逻辑专题
1.上位机应用中的监控报警
基本流程:上位机=》获取设备的点位数据=》监控过程中动态的判断数据=》显示报警信息
2.基本报警逻辑处理
思路:数据库表记录报警的信息,代码获取报警信息与数据比较。
难点:要动态的获取和不同的报警信息比较,所以设计报警信息表比较重要
表的设计:

3.报警逻辑的升级与拓展方案
三个重点:1.数据库表报警信息的设计 2.代表逻辑编写
3.3 .如何显示最终的报警状态
思路:将所有符合报警信息筛选成一个新的集合,根据判断条件,显示出最合适得报警信息
完整代码逻辑
using System.Data;
using System.Data.SqlClient;
//连接数据库
Console.WriteLine("Hello, World!");
List<condition> list_cont = new List<condition>();
string connectionString = "server=localhost;database=DB_Study;integrated security=SSPI";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
//RetrieveData(connection,"study_info");
//InsertData(connection, "study_info","4","60");
//1.从设备获取一个温度数据,通过设备通信获取一个数据
ushort value = 765;
ushort value2 = 165;
//2.界面可以显示=》趋势
//3.两个场景
//if (value * 0.1 > 40)
//{
// Console.WriteLine("温度过高");
//}
//else if (value * 0.1 < 20)
//{
// Console.WriteLine("温度过低");
//}
string selectQuery = $"SELECT * FROM [condition] WHERE addr_id=2";
using (SqlCommand command = new SqlCommand(selectQuery, connection))
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
//Console.WriteLine($"id: {reader["id"]}, condition_value: {reader["condition_value"]}");
//将所有的条件打包成对象集合
list_cont.Add(new condition() { condition_value = ((string)reader["condition_value"]).Replace(" ",""), operatored = ((string)reader["operator"]).Replace(" ",""), alarm_msg = ((string)reader["alarm_msg"]).Replace(" ","")});
}
}
List<condition> list_alarm = new List<condition>();
foreach (var item in list_cont)
{
//显示报警操作符
string conditionStr = (value * 0.1).ToString() + item.operatored + item.condition_value;
//字符串比较,如何得出结果
var result = new DataTable().Compute(conditionStr,"");
//Console.WriteLine($"{conditionStr}:{result}");
if (bool.Parse(result.ToString()))
{
//显示报警信息
//Console.WriteLine($"{item.alarm_msg}");
//解决显示最合适得报警信息打印
list_alarm.Add(new condition() { condition_value = item.condition_value,operatored=item.operatored,alarm_msg=item.alarm_msg});
}
}
var cv = list_alarm.FirstOrDefault(lc => lc.condition_value == list_alarm.Max(l => l.condition_value));
if (cv != null)
{
Console.WriteLine(cv.alarm_msg);
}
//4.从结果呈现上看
}
class condition
{
public string condition_value { get; set; }
public string operatored { get; set; }
public string alarm_msg { get; set; }
}
其它知识点
1.字符串"40>20"得出结果得方法
var result = new DataTable().Compute("40>20","");
浙公网安备 33010602011771号