1. 项目概述:威伦触摸屏产量数据自动化管理方案
在工业自动化控制领域,生产数据的实时采集和历史追溯一直是生产管理的关键环节。我最近基于威伦(Weinview)触摸屏开发了一套完整的月产量数据自动采集与查询系统,通过宏指令脚本实现了每日产量的自动记录和多年数据的灵活查询。这套方案特别适合需要长期追踪生产数据但又不想额外投入PLC存储资源的中小型生产线。
传统做法通常需要依赖PLC的存储功能或者上位机软件,而本方案巧妙利用了威伦触摸屏内置的脚本执行能力和文件系统,实现了以下核心功能:
- 每日零点自动记录当前产量到日期命名的文本文件
- 支持按日期查询任意历史日期的生产数据
- 数据存储结构清晰,可保存多年数据不丢失
- 完全独立运行,不占用PLC存储空间
2. 系统设计与实现原理
2.1 硬件与软件环境配置
本系统基于威伦MT8000系列触摸屏开发,具体型号为MT8071iE,系统要求如下:
硬件配置:
- 威伦MT系列触摸屏(需支持宏指令功能)
- 至少2GB存储空间(用于历史数据存储)
- 通过RS485或以太网与PLC连接
软件环境:
- EB Pro编程软件(V6.02及以上版本)
- 宏指令功能已启用
- 文件系统访问权限已配置
重要提示:不同型号的威伦触摸屏在文件系统路径和宏指令支持上可能有差异,实施前请确认设备规格。
2.2 数据存储架构设计
系统采用基于日期的文件存储方案,具有以下特点:
-
目录结构:
code复制D:\ProductionData\ ├── 20230101.txt ├── 20230102.txt ├── ... └── 20231231.txt -
文件命名规则:
- 采用8位数字表示日期:YYYYMMDD
- 例如:20230520.txt表示2023年5月20日的产量数据
-
数据格式:
- 每文件单行存储当日总产量
- 纯文本格式,便于直接查看和后期处理
这种设计具有极好的扩展性,理论上可以存储无限天数的数据,只要磁盘空间足够。
3. 核心功能实现详解
3.1 自动存储功能的实现
每日产量自动存储是系统的核心功能,通过定时执行的宏指令实现。以下是增强版的实现代码:
vb复制' 产量自动存储宏指令
Sub AutoSaveProduction()
' 定义变量
Dim todayProduction As Long ' 使用Long类型防止产量过大溢出
Dim filePath As String
Dim currentDate As String
Dim fs, ts As Object
' 获取当前日期(格式:YYYYMMDD)
currentDate = Format(Now, "yyyyMMdd")
' 从PLC读取产量数据(地址根据实际PLC配置修改)
todayProduction = GetDeviceValue("D100") ' 假设产量数据存储在D100寄存器
' 构建文件路径
filePath = "D:\ProductionData\" & currentDate & ".dat" ' 使用.dat后缀避免误删
' 创建文件系统对象
On Error Resume Next ' 错误处理
Set fs = CreateObject("Scripting.FileSystemObject")
' 检查目录是否存在,不存在则创建
If Not fs.FolderExists("D:\ProductionData") Then
fs.CreateFolder("D:\ProductionData")
End If
' 写入数据
Set ts = fs.CreateTextFile(filePath, True) ' True表示覆盖已存在文件
ts.WriteLine CStr(todayProduction) ' 转换为字符串写入
ts.Close
' 释放对象
Set ts = Nothing
Set fs = Nothing
' 记录操作日志
WriteLog "Production data saved for " & currentDate & ": " & todayProduction
End Sub
关键改进点说明:
- 使用
.dat后缀替代.txt,降低被误删的风险 - 增加了目录自动创建的检查逻辑
- 采用覆盖写入模式而非追加模式,确保每日只保留最新数据
- 添加了完善的错误处理机制
- 增加了操作日志功能,便于后期排查问题
3.2 数据查询功能的实现
数据查询功能通过触摸屏界面调用查询宏指令实现。以下是增强版的查询函数:
vb复制Function QueryProduction(queryDate As String) As Variant
' 定义变量
Dim filePath As String
Dim fs, ts As Object
Dim result As Variant
' 验证日期格式(8位数字)
If Not IsDate(Left(queryDate,4) & "/" & Mid(queryDate,5,2) & "/" & Right(queryDate,2)) Then
QueryProduction = "Invalid date format"
Exit Function
End If
' 构建文件路径
filePath = "D:\ProductionData\" & queryDate & ".dat"
' 创建文件系统对象
Set fs = CreateObject("Scripting.FileSystemObject")
' 检查文件是否存在
If fs.FileExists(filePath) Then
Set ts = fs.OpenTextFile(filePath, 1) ' 1表示只读模式
result = ts.ReadLine
ts.Close
Set ts = Nothing
' 验证数据有效性
If IsNumeric(result) Then
QueryProduction = CLng(result) ' 返回长整型数值
Else
QueryProduction = "Data corrupted"
End If
Else
QueryProduction = "No data" ' 无数据
End If
Set fs = Nothing
End Function
功能增强说明:
- 增加了日期格式验证,防止非法输入
- 对读取的数据进行有效性检查
- 返回结果采用Variant类型,可以返回多种状态信息
- 添加了详细的数据校验逻辑
4. 系统部署与优化实践
4.1 定时触发配置
要实现每日自动存储,需要在EB Pro中配置定时触发器:
-
触发方式选择:
- 推荐使用"每日固定时间"触发
- 最佳触发时间设为交接班后的稳定时段,如早上8:05
-
触发设置步骤:
- 在EB Pro中打开"宏指令"设置
- 创建新的定时触发器
- 设置触发时间为每天特定时刻
- 关联AutoSaveProduction宏指令
-
备用触发方案:
- 增加产量变化超过阈值时的触发条件
- 配置手动触发按钮作为应急方案
4.2 存储优化策略
随着时间推移,数据量会不断增长,需要采取以下优化措施:
-
数据压缩归档:
vb复制Sub MonthlyArchive() Dim lastMonth As String lastMonth = Format(DateAdd("m", -1, Now), "yyyyMM") ' 压缩上个月的所有数据文件 Shell "C:\Program Files\7-Zip\7z.exe a -tzip D:\ProductionData\Archive\" & lastMonth & ".zip D:\ProductionData\" & lastMonth & "*.dat" ' 删除已压缩的源文件 Kill "D:\ProductionData\" & lastMonth & "*.dat" End Sub -
存储监控机制:
- 每月检查磁盘剩余空间
- 空间不足时自动提醒
- 可配置自动删除最早的数据
-
数据备份方案:
- 每周自动备份到U盘
- 可通过触摸屏界面手动触发即时备份
5. 常见问题与解决方案
5.1 数据存储失败排查
问题现象:
- 每日产量数据未正确保存
- 查询时显示"No data"
排查步骤:
-
检查宏指令执行权限:
- 确认"文件系统操作"权限已开启
- 验证宏指令是否被正确触发
-
检查存储路径:
vb复制Function CheckPath() As Boolean Dim fs As Object Set fs = CreateObject("Scripting.FileSystemObject") CheckPath = fs.FolderExists("D:\ProductionData") Set fs = Nothing End Function -
检查磁盘空间:
- 通过系统信息查看可用空间
- 建议保留至少100MB可用空间
5.2 查询性能优化
当数据量很大时,查询可能需要优化:
-
缓存最近查询结果:
vb复制Dim cacheDate As String Dim cacheValue As Long Function SmartQuery(queryDate As String) As Long If cacheDate = queryDate Then SmartQuery = cacheValue ' 返回缓存值 Exit Function End If cacheValue = QueryProduction(queryDate) ' 调用原始查询 cacheDate = queryDate SmartQuery = cacheValue End Function -
批量查询优化:
- 实现按月预加载数据
- 采用后台线程提前加载可能查询的数据
-
查询界面优化:
- 添加日期范围限制
- 实现模糊查询和自动补全
6. 系统扩展与高级功能
6.1 产量数据分析报表
基于存储的历史数据,可以扩展以下分析功能:
-
月产量统计:
vb复制Function MonthlyTotal(yearMonth As String) As Long Dim total As Long Dim i As Integer Dim dailyValue As Variant total = 0 For i = 1 To 31 dailyValue = QueryProduction(yearMonth & Format(i, "00")) If IsNumeric(dailyValue) Then total = total + dailyValue End If Next MonthlyTotal = total End Function -
同比环比分析:
- 实现与上月同期的比较
- 计算增长率等指标
-
可视化图表:
- 使用威伦触摸屏的图表控件
- 展示产量趋势曲线
6.2 异常检测与报警
-
产量突降检测:
vb复制Sub CheckAbnormalDrop() Dim yesterday, today As Long Dim threshold As Integer threshold = 30 ' 下降30%视为异常 yesterday = QueryProduction(Format(DateAdd("d", -1, Now), "yyyyMMdd")) today = GetDeviceValue("D100") If yesterday > 0 And today > 0 Then If (yesterday - today) / yesterday * 100 >= threshold Then TriggerAlarm "产量异常下降:" & CStr((yesterday - today) / yesterday * 100) & "%" End If End If End Sub -
连续低产报警:
- 检测连续多日产量低于平均水平
- 自动通知管理人员
-
设备效率分析:
- 结合设备运行时间计算OEE
- 识别生产效率瓶颈