在组态王(KingView)中实现一天的数据自动保存为Excel文档,可以通过以下步骤完成,结合组态王内置的数据库功能、脚本编程以及定时任务配置:
一、核心思路
数据采集与存储:组态王实时采集设备数据并存储到内置的历史数据库(如SQL数据库或组态王自带的数据库)。
定时触发:利用组态王的定时器或系统时间判断,在每天固定时间(如午夜24:00)触发数据导出操作。
数据导出:通过组态王的脚本(如VBscript或组态王自带的命令语言)将历史数据导出为Excel格式。
文件管理:自动命名Excel文件(如按日期命名)并保存到指定路径。
二、详细实现步骤
1. 配置历史数据存储
步骤:
在组态王工程浏览器中,双击“数据库”下的“数据词典”,确认需要导出的变量已定义。
右键点击“历史库配置”,选择“配置历史库”,启用历史记录功能,并设置存储周期(如每分钟记录一次)。
指定历史数据存储路径(如
C:\KingView\HistoryData)。
2. 创建定时触发脚本
方法一:使用组态王命令语言(推荐)
注意:组态王原生命令语言不支持直接导出Excel,需通过以下方式扩展功能:
使用组态王ActiveX控件:插入Excel对象,通过脚本操作Excel(需安装Excel)。
调用外部程序:通过
RunApp命令调用自定义的导出工具(如Python脚本或C#程序)。步骤:
vbscript// 判断当前时间是否为24:00if (Hour() == 24 && Minute() == 0 && Second() == 0) { // 调用数据导出函数(需自定义或使用组态王扩展功能) ExportToExcel(); }在工程浏览器中,双击“命令语言”下的“应用程序命令语言”,选择“运行时”。
在“运行时”标签页中,编写以下脚本(示例为每天24:00执行):
方法二:使用Windows任务计划(辅助方案)
步骤:
编写一个外部脚本(如Python或VBscript),用于从组态王历史数据库中读取数据并导出为Excel。
在Windows任务计划程序中设置每天24:00运行该脚本。
3. 使用ActiveX控件导出Excel(组态王内置方法)
步骤:
vbscript// 获取ActiveX控件对象ExcelApp = GetObject("Excel.Application"); ExcelWorkbook = ExcelApp.Workbooks.Open("C:\KingView\Template.xlsx"); // 打开模板文件 ExcelSheet = ExcelWorkbook.Sheets(1); // 从历史库读取数据并填充到Excel(需自定义函数) FillDataFromHistory(ExcelSheet); // 保存为新文件(按日期命名) fileName = "C:\KingView\Data_" + StrFromDate(Date(), 0) + ".xlsx"; ExcelWorkbook.SaveAs(fileName); ExcelWorkbook.Close(); ExcelApp.Quit();在组态王画面中插入“Microsoft Excel 报表”ActiveX控件(需安装Excel)。
右键控件,选择“属性”,配置数据源(如连接到组态王历史数据库)。
编写脚本控制Excel导出:
4. 使用组态王扩展功能(如KingHistorian)
步骤:
如果使用组态王的高级版(如KingView+KingHistorian),可直接通过KingHistorian的报表功能导出Excel。
在KingHistorian中配置历史数据查询,并设置定时生成报表任务,输出为Excel格式。
5. 替代方案:使用第三方工具
工具推荐:
KEPServerEX:通过OPC接口读取组态王数据,再导出为Excel。
WinCC Flexible:若与西门子设备配合,可使用其数据导出功能。
自定义脚本:使用Python(
pandas库)或C#编写数据导出程序,通过OPC或数据库接口读取组态王数据。
三、完整示例(基于组态王命令语言+外部脚本)
组态王脚本部分:
在“应用程序命令语言”中编写:
vbscriptif (Hour() == 24 && Minute() == 0) { RunApp("C:\KingView\ExportData.bat"); // 调用批处理文件 }批处理文件(ExportData.bat):
batch@echo offpython C:\KingView\ExportToExcel.py %date% // 调用Python脚本
Python脚本(ExportToExcel.py):
pythonimport pandas as pdimport sysfrom datetime import datetime# 假设从组态王历史数据库(CSV或SQL)读取数据data = pd.read_csv("C:\KingView\HistoryData.csv") # 按日期过滤当天数据today = sys.argv[1].split('/')[0] # 根据实际日期格式调整today_data = data[data['Timestamp'].str.contains(today)]# 保存为Excelfilename = f"C:\KingView\Data_{today}.xlsx"today_data.to_excel(filename, index=False)
四、注意事项
权限问题:确保组态王运行账户有权限写入目标文件夹。
时间同步:确保组态王服务器时间与实际时间一致。
数据量:若数据量较大,需优化导出逻辑(如分页导出)。
错误处理:在脚本中添加错误处理逻辑,避免因导出失败导致程序崩溃。


