最近接触了不少做产线数字化改造的同行,大家不约而同地在问Kingscada里日报表和趋势曲线的做法。很多人一上来就想着接数据库、写脚本,其实Kingscada自带的实时历史库完全够用,而且用起来比你想的简单得多。标题里那句话“通过查询ks任意一变量生成”,就是这套玩法最核心的思路:先有历史数据,再基于变量名去查、去算、去画,最终落到日报表和趋势曲线上。
这篇就围绕Kingscada自带的实时数据库,把从变量归档、日报表生成到趋势曲线联动的完整流程捋一遍。不管你是刚接触组态软件的新手,还是被项目报表折磨过几次的老手,按这个思路走,基本都能少踩一半的坑。
1. 需求分析与整体设计思路
1.1 日报表和趋势曲线到底在解决什么问题
工业现场做日报表,本质上不是在“做表格”,而是在回答三个问题:今天这台设备到底运行了多久?产量是多少?有没有异常时段?趋势曲线则是把时间轴拉出来,让人直观看到变量的变化过程,比如温度在几点开始超限、液位在哪个时间段波动最大。
很多人第一反应是“那我用SQLite、MySQL记录数据,然后写查询语句生成报表”。这个方向没错,但如果你用的是Kingscada,其实是在重复造轮子。Kingscada自带的实时数据库模块已经把数据采集、压缩存储、按时间检索这些事情做完了,你只需要把变量归档打开,然后通过查询任意一个变量名,就能把数据捞出来生成报表、绘制曲线。省掉的不仅是开发工作量,还有后期维护数据同步的麻烦。
1.2 为什么首选“Kingscada自带历史数据库”
组态软件里做历史数据,绕不开两条路:一条是自带实时库,另一条是外接关系数据库。我做了几个项目对比下来,自带历史库的优势非常明显。
第一是数据写入及时。Kingscada采集变量的频率可以做到几百毫秒一次,数据先写入实时库再批量落盘。而外接数据库如果频繁连接、插入,很容易成为瓶颈,尤其点位多的时候,写库延迟直接拖累采集线程。
第二是查询方便。自带历史库对时间范围、变量名称做了索引,查询某个变量某段时间的数据,接口调用非常直接。你不需要关心数据表结构,不用学SQL,甚至不用理解数据库连接串怎么配。
第三是部署省心。外接数据库要考虑安装服务、配置账号、备份数据,现场如果是个老工控机,内存资源本来就紧张,多一个数据库服务只会添乱。Kingscada自带历史库随工程走,换机器、拷工程,数据跟着走,不用额外处理。
当然,自带历史库也不是没有短板。它的定位偏“产线监控级”数据存储,如果要做复杂的业务分析、跨系统共享数据,还是建议用OPC或者接口把数据同步到专门的数据平台。但就日报表和趋势曲线这个需求来说,自带库已经足够。
1.3 变量规划是后边所有操作的地基
别看“任意变量查询”听起来很自由,实际项目里,变量规划做得不好,后边查询和报表会特别痛苦。我有一个比较深的体会:变量名就是数据资产的身份证,一开始就按统一规则命名,后边所有功能开发都会很顺畅。
建议在工程创建之初就定义变量命名规范,比如:
- 温度类:
TAG_Temp_React_001表示反应釜1号温度 - 压力类:
TAG_Press_React_001表示反应釜1号压力 - 状态类:
TAG_Status_Pump_001表示1号泵运行状态
这样做的原因有两个。一是查询任意变量时,通过关键字能快速筛选,不至于几百个变量里一个个找。二是在日报表模板里做批量配置时,利用变量名的前缀规律,可以复制模板快速修改,而不用每次都从下拉列表里翻半天。
2. 历史数据存储机制深度解析
2.1 什么是“历史数据归档”以及为什么要手动开启
几乎每个新手都会遇到一个问题:变量都建立了,报表也做了,但运行起来报表就是空的。这时候90%的原因是变量没有开启历史数据归档。
在Kingscada里,“归档”就是指把变量的实时值按设定的周期和时间段保存下来。和PLC里的保持性存储器概念类似——只有你把数据“保持”下来,之后才能随时去查。新建变量时默认是不归档的,你需要进变量属性,找到“历史数据”或者“归档”选项,勾选启用,设置存储周期。
归档频率怎么定?这个很关键。如果产线波动快,比如温度、压力、流量,建议500毫秒到1秒存一次。如果是液位或者累计量这种变化相对平滑的,可以5秒到10秒存一次。归档频率越密,数据越精细,但存储文件膨胀也快。一个变量按1秒存一次,24小时就是86400条记录,几十个变量跑一个月,文件体量会非常可观,所以不要无脑设成最小间隔。
2.2 实时值、平均值、最大值、最小值几种存储方式的区别
Kingscada的历史存储通常支持几种方式:存实时值、存区间平均值、存区间最大值和最小值。很多人不理解这些选项到底影响什么。
简单理解:如果你关心变化过程,存实时值;如果你关心一段时间里的平均水平,存平均值;如果你要看报警峰值,存最大值。日报表里的“今日最高温度”“今日最低压力”,就依赖最大值、最小值的归档记录。
实际操作中,我会把变量按用途分开归档。用于趋势展示的核心工艺变量,存实时值,周期1秒;用于日报表统计的变量,再单独配置平均值归档,周期1分钟。这样报表查询1分钟平均数据,趋势曲线看1秒实时数据,两不耽误。一个变量可以同时配置多种存储类型,不要只勾一个。
2.3 历史数据库的存储位置和生命周期
Kingscada自带历史数据通常存储在工程目录下的指定文件夹中,按时间分块保存。这块数据是二进制格式,不能用文本工具打开,但它有自己的管理机制,比如按存储天数拆分文件,支持定期自动清理。
建议在一开始就设置好最大存储天数。比如现场要求保留90天数据,那就把保存周期配成90天,超期数据自动覆盖。如果不设置,文件会越滚越大,最后磁盘满了,第一个遭殃的就是历史查询,报表直接卡死。
注意:修改历史存储配置后,不是立即生效的。很多时候需要重启Kingscada的运行环境,或者至少重新初始化历史库服务,新手在这儿卡的时间最多。配完记得“重启使生效”这个动作。
3. 日报表的实现思路与具体步骤
3.1 日报表本质上是“按时间分组、按变量聚合”
日报表的逻辑并不复杂:把某一天24小时的数据,按小时或按班次分组,然后对每个变量计算平均值、累计值、最大值、最小值。Kingscada的报表模块背后就是帮你完成这么一件事——你只需要告诉它变量名、起始时间、结束时间、统计方式,它自动去历史库里捞数据。
一个我常用的类比:日报表就像去查一个人的体检报告。历史库是抽血样本,变量名是体检项目,起始结束时间是你挂号的日期范围,统计方式是你关心的指标——看全称平均值、最高值、最低值,完全由你决定。
3.2 创建日报表的逐步操作
在Kingscada的工程环境中新建一个画面并插入报表/表格控件,之后的配置步骤如下:
第一步,确定时间范围。报表控件通常有“起始时间”和“结束时间”属性,可以绑定到两个内部变量,运行时由操作员在画面上选择日期。不要写死时间,否则每天都要改工程,很傻。
第二步,添加报表行。每一行绑定一个变量,设置变量名后,再指定统计方式。比如要出温度日报,就添加一行,变量选择TAG_Temp_React_001,统计方式选择“平均值”,显示单位选择℃。
第三步,设置统计周期。日报表通常按小时出数据,那就把分段时间设成60分钟。这样一张日报表自动生成24行,每行是某个小时的统计数据。
第四步,设计表头和格式。设置列标题、表头文字、字体字号、小数位数。这一步决定了报表能不能直接打印给领导看,建议把有效数字位预留出来,温度显示一位小数,压力显示两位小数。
第五步,绑定查询触发条件。画面放一个“生成日报表”按钮,按钮的弹起事件里调用报表查询函数,让它根据当前时间控件的值去查历史库,刷新报表数据区域。
3.3 日报表白底数据为空的快速自查
即便你完全按上面五步做了,还是可能遇到数据空白。这里有一个排查顺序极其实用:先看变量有没有归档,再看归档时间段对不对,最后看报表统计方式是否匹配。
如果变量归档没开,历史库根本没有这个变量的数据,报表控件再聪明也查不到任何东西。如果归档开了,但时间范围选的是今天,而数据存在昨天,报表当然也是空的。还有一个隐藏问题,就是统计方式不匹配——比如你存的是实时值,却偏要查平均值,部分版本里会直接查不到数据,因为平均值的归档序列是空的。
提示:日报表的查询时间范围,最好默认设置成“昨天0点到今天0点”。因为生产上很多班报表是早上统计前一天的数据,如果默认选今天0点到当前时刻,那上午运行时数据是残缺的,很容易误判。
3.4 导出Excel和打印的几个细节
Kingscada的报表控件基本都支持导出和打印。导出Excel时注意三点:一是提前在目标电脑上装好对应版本的Office或WPS,否则导出组件会直接报错;二是导出路径要选到有写权限的文件夹,别放到系统盘根目录;三是导出前一定先把报表数据刷新出来,没刷新就导出,Excel里就是空表。
打印的话,页面设置里要改成横向,因为日报表通常列数和宽度都比较占地方,纵向打印经常被裁掉最右边的列。这个坑我踩过不止一次,每次都是现场办公室的打印机打出来少了几列数据,特别尴尬。
4. 趋势曲线的搭建与实用技巧
4.1 趋势曲线不只是“折线图”
Kingscada的趋势曲线控件和普通图表不一样,它是带时间轴联动、支持历史回放、支持多变量叠加显示的专用控件。在画面上插入趋势控件后,主要配置点包括:曲线数量、变量绑定、时间轴范围、数据源类型。
关键的一个设置是数据源要选“历史数据”,而不是“实时数据”。很多新手插入趋势控件后,默认是实时刷新模式,画出来的曲线只从当前时刻往右走,看不到任何历史波形。要查某一天的数据,必须在属性里把数据源改成历史库,并指定起始时间。
4.2 多变量趋势曲线怎么摆才不乱
设备上有温度、压力、流量多个变量,一股脑塞进同一个趋势控件,曲线叠在一起根本没法看。我的习惯是分两种情况处理:
如果变量数量不超过4个,且量纲接近,比如都是温度,可以放同一个趋势控件,用不同颜色区分。如果量纲差异大,比如温度和压力一起,建议用双Y轴,左侧Y轴给温度,右侧Y轴给压力。
如果变量超过4个,就别硬塞了,多用几个趋势控件,每个控件放一两类变量,画面用标签页切换。这样画面看起来清爽,操作员也好用。
绑定额外的一个小技巧:曲线的线宽和颜色,尽量按现场习惯统一。比如温度用红色,压力用蓝色,状态量用绿色,这不需要什么标准,但会极大提升值班人员看图的速度。
4.3 时间轴缩放和定位
趋势曲线的价值在于回看。Kingscada里可以通过鼠标拖拽或者按钮来缩放时间轴。我一般会在趋势画面下面放几个快捷按钮:24小时、12小时、8小时、1小时。“24小时”按钮把时间轴设成近一天,“1小时”按钮则看最近一小时的变化细节。
这里有一个注意点:时间轴的起始时间要设置成“远端”,也就是相对当前时间的偏移量。比如点“1小时”按钮,就把起始时间设为当前时间减去3600秒,结束时间设为当前时间。这样每次点按钮,显示的都是最近一小时,而不是某一天某一小时,更符合现场巡检的直觉。
4.4 趋势曲线的数据断线和“毛刺”怎么解决
实际运行中,趋势曲线最常遇到两类问题:曲线中途断线、曲线出现异常跳变。
断线通常是变量归档通道不稳定。排查思路是先看这个变量在历史报表里有没有数据,如果报表有数据而趋势没有,问题大概率出在趋势控件的数据源配置上,检查是不是误选了实时模式。如果报表里这段数据本身就是空白,那就是采集断线了,去查PLC通讯连接。
异常跳变通常是数值滤波没做。现场工况下,传感器偶发干扰是家常便饭,一个瞬间的尖峰值能直接把曲线拉得很难看。解决办法是给变量添加滤波或者限幅处理。Kingscada的变量属性里如果有滤波选项,直接用;没有的话,在PLC程序里加一个简单的高低限判断也能解决大部分毛刺。
5. 常见问题与排查技巧实录
5.1 常见问题速查表
下面这张表是我在几个项目里整理出来的高频问题,基本覆盖了日报表和趋势曲线联调阶段的绝大多数情况。
| 现象 | 大概率原因 | 快速处理办法 |
|---|---|---|
| 日报表全部是空的 | 变量归档没启用 | 检查变量属性,勾选历史归档并重启 |
| 今天的数据有,昨天的没有 | 存储天数设置太短 | 调大历史保存时间范围 |
| 部分变量有数据,部分没有 | 变量没归档或者采集未连接 | 查PLC通讯,确认变量实时值是否刷新 |
| 趋势曲线只有当前时刻一条线 | 数据源选了实时模式 | 切换为历史数据源,设置查询时间 |
| 趋势曲线断断续续 | 采集通道不稳定 | 用通讯诊断工具查丢包率,重新初始化通道 |
| 报表数据总和和实际产量对不上 | 统计方式选错 | 累计量应该选累计值而不是平均值 |
| 导出Excel失败 | 缺少Excel组件或路径无权限 | 安装办公软件,换可写路径 |
| 打印报表缺列 | 页面方向不对 | 改成横向打印,调整页边距 |
5.2 因为“类型不匹配”折腾一整天的一个案例
有一个项目,做的是储罐液位日报表。变量在Kingscada里定义的是模拟量,报表行配置时我随手在“数据类型”下拉里选了整型。结果查询出来的液位全部是0,试了好几次都以为是归档没生效,折腾很久才发现是数据类型不匹配。
这个启发是:报表字段的数据类型必须和变量定义保持一致。模拟量是浮点数就选浮点,整数标签就选整型,状态量就选离散/布尔。选错的话,历史库读取数据时会按错误类型解析,轻则显示异常,重则直接空白。
5.3 时间同步问题最容易在交接班时暴露
生产现场经常有多台触摸屏、多个上位机,如果各设备时间不统一,日报表的交班时段就会错位。比如交接班时间名义上是8点,但电脑时间快了两分钟,最后统计出来的8点产量就少了一截。
解决这个问题的笨但有效办法是:在Kingscada启动时加上时间自动校时,让所有上位机以一台时钟源为准。公司里有NTP服务器最好,没有的话,至少保证工控机每周和手机时间对一次。虽然土,但比事后查报表里的数据缺口要省心得多。
5.4 从其他组态软件迁移数据的一个思路
有些工厂以前用别的组态软件,比如mcgs,历史数据堆了一大堆,想迁移到Kingscada里继续用。如果原系统数据没有按标准格式导出,想直接把历史数据“平移”过来基本不现实,因为各家历史库的底层存储格式各不相同。
我的建议是:不要纠结历史数据迁移,把重点放在“当前值和后续数据”的连续采集上。原系统的历史数据如果有必要留存,可以让原系统继续运行一段时间,或者让它把历史数据导出成CSV/Excel存档,作为备份供查询。Kingscada这边的历史库从接入那天开始积累新数据,两套体系并行一段时间,等新系统数据量够了,再停旧系统。
6. 几个能让日报表和趋势曲线更好用的经验
日报表和趋势曲线做到“能显示”只是及格线,做到“好用”才是经验值。这里分享几个我在项目里反复用的小做法。
第一,把“查询时间段”做成一个独立的小控件区,放上“昨日”“本周”“本月”三个快捷按钮。操作员不需要去手动输入时间,点一下按钮,报表自动刷新。这能省掉大量培训成本,因为工人真的不愿意研究怎么选时间范围。
第二,报表的画面里,很重要的一个细节是“刷新提示”。查询操作完成后,在画面角落显示一下“数据已更新”的状态,或者显示查询所花的时间。这个小提示在现场很有用,不然你以为画面卡死了,实际上数据已经在刷新。
第三,趋势曲线的画面不要塞太满,保留一些空白区域。曲线旁边至少要留一个信息栏,显示当前鼠标所在位置的时间戳和对应数值。值班人员排查异常时,移动鼠标就能读到精确值,比肉眼去刻度上估要准得多。
第四,做好“一键回到正常模式”。很多人会去缩放趋势时间轴看历史,看完之后需要恢复到实时刷新模式。如果没这个功能,操作员就会被困在历史画面里,以为监控丢了。做一个“恢复实时”按钮,把数据源切回实时、时间轴归零,这是人机工程上的小细节,但很能提升体验。
第五,如果项目有条件,建议给日报表做一个“数据导出自动命名”的规矩。导出的Excel文件名不要叫“报表1”,而是用变量名加日期时间,比如TAG_Temp_React_001_20250614.xlsx。文件多了以后找起来真的省事,这个习惯从第一个项目就值得养成。
说实话,Kingscada这套自带历史库的工具链,本质上就是让你把精力集中在“变量怎么定义、报表怎么呈现”上,而不必去研究底层存储和查询机制。我自己做项目时,日报表和趋势曲线这一整套,从零搭建到跑通,顺利的话一天之内就能完成。遇到问题也别慌,按着“变量是否归档、时间范围是否正确、类型是否匹配、数据源是否选历史”这几个方向排查,绝大多数坑都能很快爬出来。希望这篇整理对正在折腾Kingscada的你有点帮助。