从零搭建工业控制系统(十九):图表可视化——LiveCharts2集成

发布时间:2026/10/26 6:27:54

从零搭建工业控制系统(十九):图表可视化——LiveCharts2集成 图表可视化LiveCharts2集成这是「从零搭建工业控制系统」系列第19篇。前面讲了数据存储这篇讲数据展示——怎么用LiveCharts2在WPF里画实时图表。为什么选LiveCharts2工业系统需要实时图表——气体流量趋势、压力变化曲线、温度走势。WPF自带的图表控件没有得用第三方。选型时对比了几个库优点缺点LiveCharts2WPF原生、开源、实时更新好文档少OxyPlot功能全、成熟API复杂、实时更新慢ScottPlot性能好WPF支持弱自己画Canvas完全可控工作量大选LiveCharts2的原因实时更新做得好。工业数据每秒都在变图表要跟着变。LiveCharts2用ObservableCollection绑定数据变了图表自动更新不用手动刷新。基本折线图最简单的实时折线图lvc:CartesianChartSeries{Binding SeriesCollection}/publicObservableCollectionISeriesSeriesCollection{get;}new();// 初始化SeriesCollection.Add(newLineSeriesdouble{ValuesnewObservableCollectiondouble(),Name通道A流量,StrokenewSolidColorPaint(SKColors.SteelBlue),FillnewSolidColorPaint(SKColors.SteelBlue.WithAlpha(50))});添加数据点varvalues(ObservableCollectiondouble)SeriesCollection[0].Values;values.Add(currentFlow);数据点加了图表自动更新。不用调 InvalidateVisual不用手动刷新。多通道同时显示气体流量有多个通道需要同时画在一张图上foreach(varchannelinchannels){SeriesCollection.Add(newLineSeriesdouble{ValuesnewObservableCollectiondouble(),Namechannel.Name,StrokenewSolidColorPaint(channel.Color)});}每条线一个Series颜色区分。图例自动生成。性能优化数据点控制这是最大的坑。实时图表每秒加一个点跑一天就是86400个点。图表渲染8万个点会卡。解决办法限制数据点数量。privateconstintMAX_POINTS300;// 最多300个点privatevoidAddDataPoint(ObservableCollectiondoublevalues,doublenewValue){values.Add(newValue);if(values.CountMAX_POINTS){values.RemoveAt(0);// 移除最老的点}}300个点相当于5分钟的数据每秒一个点。操作员看趋势不需要看一整天的数据看最近几分钟就够了。如果要看历史数据从数据库查用单独的历史图表展示不影响实时图表的性能。性能优化渲染降频另一个性能问题数据每秒更新但图表不需要每秒重绘。人眼分辨不出60fps以上的变化。privateDateTime_lastUpdateDateTime.MinValue;privateconstintUPDATE_INTERVAL_MS200;// 200ms更新一次privatevoidOnDataReceived(doublevalue){if((DateTime.Now-_lastUpdate).TotalMillisecondsUPDATE_INTERVAL_MS)return;_lastUpdateDateTime.Now;AddDataPoint(values,value);}200ms更新一次每秒5帧足够看趋势了。CPU占用从30%降到5%。轴配置时间轴用日期格式lvc:CartesianChartlvc:CartesianChart.XAxeslvc:AxisLabeler{Binding TimeSpanLabeler}//lvc:CartesianChart.XAxeslvc:CartesianChart.YAxeslvc:AxisName流量(sccm)MinLimit0//lvc:CartesianChart.YAxes/lvc:CartesianChartY轴设了MinLimit0流量不会显示负数。踩坑记录坑1数据点太多卡顿一开始没限制数据点数量跑了两小时后图表卡得动不了。加了MAX_POINTS限制后解决。坑2图表不释放内存页面切换后图表还在后台更新。需要在页面卸载时清空SeriesCollection取消订阅数据源。坑3轴标签格式化时间轴默认显示秒数操作员看不懂。自定义Labeler改成HH:mm:ss格式。本篇小结概念关键做法实时绑定ObservableCollection自动更新多通道每条线一个Series数据点限制最多300个点FIFO渲染降频200ms更新一次轴配置自定义Labeler和范围实时图表的核心控制数据量。点太多会卡更新太快会卡。限制点数降频更新是关键。下期预告第20篇MVVM消息传递机制图表讲完了下篇讲ViewModel之间怎么通信——消息机制、弱引用、避免内存泄漏。
延伸阅读

更多相关文章

2026/10/26 6:27:16

嵌入式三温区酒柜:家庭饮品与轻食存储的场景化解决方案

你有没有遇到过这样的场景:朋友来家里聚会,想从冰箱里拿瓶冰镇啤酒,却发现啤酒和蔬菜挤在一起,拿取不便;想开瓶红酒助兴,又担心冰箱的震动和温度波动影响了酒的口感;夏天想随时喝到冰爽的饮料&a…

2026/10/25 2:01:35

1.电机停稳后重启仍过流?PWM寄存器的“隐形坑”及解决方案

在电机控制开发中,你是否遇到过这种情况:电机已经完全停稳,按下启动按钮却瞬间触发过流保护?很多人第一反应是电机没停干净,但真正容易被忽略的,往往是PWM寄存器里的“旧指令”。本文将结合视频中的核心原理…

2026/10/26 6:26:14

LT8718视频桥接SoC:TTL/BT1120转DisplayPort工程实战

简介:本资源为龙迅半导体LT8718芯片的官方产品简报PDF文档,面向嵌入式硬件工程师、视频接口开发人员及单片机系统集成者,解决TTL/RGB/YUV/BT656/BT1120等并行视频信号向DisplayPort 1.2/EDP/Type-C高清显示接口转换的核心桥接需求。文档完整涵…

2026/10/26 6:26:14

PyTorch GPU训练卡顿排查:数据流贯通与性能优化实战

1. 这不是“装个CUDA就能跑”的事:为什么GPU训练常卡在第一步“使用Pytorch,在GPU上训练模型”——这行字看起来像一句再普通不过的操作指令,但在我带过的二十多个实际项目里,它几乎总是新手踩坑率最高的起点。不是模型写错了&…

2026/10/26 6:26:14

CUT图像翻译用于SSDA-YOLO数据准备的原理与实践

1. 项目概述:这不是在“翻译”图像,而是在教模型理解“为什么这张图看起来像那张图”你点开这个标题,大概率是刚读完那篇CUT(Contrastive Unpaired Translation)论文,或者在复现某个基于SSDA-YOLO的跨域检测…

2026/10/26 6:26:14

KLA缺陷检查培训:原理、参数与产线实战

简介:这份PPT是KLA缺陷检查培训的文档资料,面向半导体制造与工艺工程师,系统讲解晶圆缺陷检测的核心概念。内容从KLA设备基本操作与21xx系列检测能力切入,覆盖运行晶圆检查、停止检查、缺陷监控的目的,并重点展开19类典…

2026/10/26 6:26:14

PyTorch计算KL散度避坑指南:kl_div参数详解与实战场景

KL散度这个概念,刚接触深度学习那会儿我吃了不少亏。当时手头有个蒸馏任务,教师模型和学生模型的输出都是原始logits,我图省事直接把两边都过了一遍softmax,然后丢进torch.nn.functional.kl_div里算,结果loss一直是负数…

2026/10/26 6:21:14

二维光栅内部场分析器的算法原理与工程实现

1. 二维光栅元件内部场分析器概述在光学元件设计与分析领域,二维光栅作为一种重要的衍射元件,其内部电磁场分布特性直接影响着元件的性能表现。传统的光学仿真软件往往只能提供宏观层面的光强分布或远场衍射图案,而无法直观展示元件内部每个位…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑