携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
最近项目比较忙,没空更新,目前回来补上进度。
仓库地址
目前计划实现最V2版本如下:
- 一个可视化大屏(简单的功能)
可视化部分分为一下几个方面讲解:
1: 视频对接 (海康威视)
2: LED对接
3: 可视化面板制作 - 报表导出(word)
可视化面板框架制作
修改页面,增加可视化面板按钮
- 我们在在前的mainwin中,增加一个menu item。叫做信息中心(就是可视化大屏),并增加单机回调函数
- 在form文件夹下,创建子文件夹dashboard。创建一个页面,命名为:dashboard.cs
- 修改dashboard的窗体属性,边框选择为none(formborderstyle:none)
- 实现回调函数,点击打开dashboard
- 上代码:
/// <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();
}
}
调整面板布局
简单的大屏布局如上图所示
这种布局就是典型的tablelayout
1.拖动一个tablelayout到dashboard
2.按照上图的结构,创建行列值
3,放置panel,方便以后动态的添加子窗口
4,效果如下:
放置图表和表格
按照之前的布局,我们在底部放置一个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;
}