上位机学习记录(8) 编写上位机报警功能(使用SeeSharp开源控件)

发布时间 2023-03-25 18:07:04作者: 聆听微风

上位机学习记录(8) 编写上位机报警功能(使用SeeSharp开源控件)

第一步:安装SeeSharp

在Nuget中搜索SeeSharp。

第二步:程序设计

大致样式如下:

image-20230325173741162

230325 173829

简要说明:

一个固定文本框显示:系统正常(Label)

一个滚动条显示报警问题(ScrollingText)

一个指示灯(绿色:正常;红色:报警)(LED)

文本框和滚动条在相同位置,彼此覆盖

流程设计:

当系统正常的时候,滚动条隐藏。文本框显示。指示灯显示绿色

当系统异常的时候,指示灯变为红色:

  1. 报警数量为1条时:文本框显示报警原因
  2. 报警数量为多条时,滚动条滚动显示多条报警数据

细节说明:

  1. 只有不相同的报警信息会加入报警显示信息中,相同的不会加入

  2. isAck (报警是触发还是消除):如果反馈触发,添加报警;反馈移除报警,就删除报警信息

代码实现如下:

        public void AddAlarm(string info, bool isAck)
        {
            if (isAck)
            {
                if (!AlarmInfoList.Contains(info))
                {
                    AlarmInfoList.Add(info);
                }
            }
            else
            {
                if (AlarmInfoList.Contains(info))
                {
                    AlarmInfoList.Remove(info);
                }
            }

            //更新界面
            RefreshAlarm();
        }
        
        /// <summary>
        /// 更新报警界面
        /// </summary>
        private void RefreshAlarm()
        {
            this.Invoke(new Action(() =>
            {
                if (AlarmInfoList.Count == 0)
                {
                    this.led_state.Value = true;
                    this.lbl_Info.Visible = true;
                    this.lbl_ScrollInfo.Visible = false;
                    this.lbl_Info.Text = "系统运行正常";

                }

                else if (AlarmInfoList.Count == 1)
                {
                    this.led_state.Value = false;
                    this.lbl_Info.Visible = true;
                    this.lbl_ScrollInfo.Visible = false;
                    this.lbl_Info.Text = AlarmInfoList[0];

                }
                else
                {
                    this.led_state.Value = false;
                    this.lbl_Info.Visible = false;
                    this.lbl_ScrollInfo.Visible = true;
                    this.lbl_ScrollInfo.Text = string.Join("  ", AlarmInfoList).Trim();
                }
            }));


        }

        /// <summary>
        /// 报警信息列表
        /// </summary>
        private List<string> AlarmInfoList = new List<string>();