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","");

posted on 2025-06-25 10:29  小王爱打王者  阅读(62)  评论(0)    收藏  举报

导航