ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Kingscada日报表与趋势曲线:基于任意变量查询的完整实现

Kingscada日报表与趋势曲线:基于任意变量查询的完整实现 最近接触了不少做产线数字化改造的同行大家不约而同地在问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的你有点帮助。
返回列表