物联网工具——可视化看板(17)

324 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情 

最近项目比较忙,没空更新,目前回来补上进度。

仓库地址

gitee.com/vectorli/te…

目前计划实现最V2版本如下:

  • 一个可视化大屏(简单的功能) 可视化部分分为一下几个方面讲解:
    1: 视频对接 (海康威视)
    2: LED对接
    3: 可视化面板制作
  • 报表导出(word)

可视化面板框架制作

修改页面,增加可视化面板按钮

  1. 我们在在前的mainwin中,增加一个menu item。叫做信息中心(就是可视化大屏),并增加单机回调函数
  2. 在form文件夹下,创建子文件夹dashboard。创建一个页面,命名为:dashboard.cs
  3. 修改dashboard的窗体属性,边框选择为none(formborderstyle:none)
  4. 实现回调函数,点击打开dashboard
  5. 上代码:
        /// <summary>
        /// 可视化大屏
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 信息中心ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!DashBoardOpend)
            {
                dashboard dashwin = new dashboard();
                dashwin.ShowDialog();
            }
        }

调整面板布局

布局.png

简单的大屏布局如上图所示
这种布局就是典型的tablelayout
1.拖动一个tablelayout到dashboard
2.按照上图的结构,创建行列值 image.png 3,放置panel,方便以后动态的添加子窗口
4,效果如下:

image.png

放置图表和表格

按照之前的布局,我们在底部放置一个line
右上角放置一个bar,这些图标我们均使用scottplot
右侧的报警信息,放置一个表格窗体 datagride

tips:目前没有对接实时数据,我们先使用scottplot的datagen功能,把曲线画出来
这样开起来有个大体的样子,方便以后调整页面布局和美化
表格初始化和窗体load回调函数如下:

/// <summary>
        /// 实时数据
        /// </summary>
        private void InitRealBar()
        {
            this.formsPlotrealdata.Plot.Style(Style.Blue1);
            // create sample data
            double[] valuesA = { 1, 2, 3, 2, 1, 2, 1 };
            double[] valuesB = { 3, 3, 2, 1, 3, 2, 1 };
            // to simulate stacking B on A, shift B up by A
            double[] valuesB2 = new double[valuesB.Length];
            for (int i = 0; i < valuesB.Length; i++)
                valuesB2[i] = valuesA[i] + valuesB[i];
            // plot the bar charts in reverse order (highest first)
            this.formsPlotrealdata.Plot.AddBar(valuesB2);
            this.formsPlotrealdata.Plot.AddBar(valuesA);
            // adjust axis limits so there is no padding below the bar graph
            this.formsPlotrealdata.Plot.SetAxisLimits(yMin: 0);

            this.formsPlotrealdata.Refresh();
        }
        /// <summary>
        /// 历史曲线
        /// </summary>
        private void InitHisLine()
        {
            this.formsPlothisline.Plot.Style(Style.Blue1);
            // sample data
            double[] xs = DataGen.Consecutive(51);
            double[] sin = DataGen.Sin(51);
            double[] cos = DataGen.Cos(51);
            // plot the data
            this.formsPlothisline.Plot.AddScatter(xs, sin);
            this.formsPlothisline.Plot.AddScatter(xs, cos);
            // customize the axis labels
            this.formsPlothisline.Plot.Title("历史曲线");
            this.formsPlothisline.Plot.XLabel("Horizontal Axis");
            this.formsPlothisline.Plot.YLabel("Vertical Axis");

            this.formsPlothisline.Refresh();
        }
        /// <summary>
        /// 报警饼图
        /// </summary>
        private void InitalarmPie()
        {
            this.formsPlotalarmpie.Plot.Style(Style.Blue1);
            double[] values = { 778, 283, 184, 76, 43 };
            var pie = this.formsPlotalarmpie.Plot.AddPie(values);
            pie.Explode = true;
            pie.DonutSize = .6;

            this.formsPlotalarmpie.Refresh();
        }
        /// <summary>
        /// 测试
        /// </summary>
        private void InitTest()
        {
            this.formsPlottest.Plot.Style(Style.Blue1);
            // plot sample data
            this.formsPlottest.Plot.AddSignal(DataGen.Sin(51));
            this.formsPlottest.Plot.AddSignal(DataGen.Cos(51));
            // dragging can be enabled and optionally limited to a range
            var vSpan = this.formsPlottest.Plot.AddVerticalSpan(.15, .85);
            vSpan.DragEnabled = true;
            vSpan.DragLimitMin = -1;
            vSpan.DragLimitMax = 1;
            // spans can be configured to allow dragging but disallow resizing
            var hSpan = this.formsPlottest.Plot.AddHorizontalSpan(10, 25);
            hSpan.DragEnabled = true;
            hSpan.DragFixedSize = true;

            this.formsPlottest.Refresh();
        }
        /// <summary>
        /// 加载函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dashboard_Load(object sender, EventArgs e)
        {
            InitTest();
            InitHisLine();
            InitalarmPie();
            InitRealBar();
            this.WindowState = FormWindowState.Maximized;
        }

效果

image.png