天塔之光组态王6.55模拟仿真带曲线报表报警等5个画面
先看曲线画面,动态曲线需要绑定实时数据库。在脚本里这么写:
Sub OnCurveRefresh() Dim tagVal tagVal = GetTagValue("Pressure_1") UpdateCurve "Curve1", tagVal, Now() End Sub这段脚本每500ms执行一次,核心是GetTagValue获取压力传感器的实时值,UpdateCurve把当前时间戳和数据点推送给曲线控件。注意时间戳要用Now()而不是固定间隔,这样停电恢复后曲线不会出现断层。
报警画面重点在条件触发逻辑:
If GetTagValue("Temp_2") > 85 Then FireAlarm "高温警报", 2, "温度超过安全阈值" FlashObject "AlarmLight", 200 ' 红色报警灯闪烁 End If这里用FireAlarm函数触发二级报警,参数依次是报警名称、等级和描述。FlashObject控制画面上的指示灯快闪,200ms间隔刚好符合人眼识别频率。调试时建议把阈值调低到50测试触发机制。
报表生成有个坑要注意——日期格式必须用FormatDateTime:
fileName = "Report_" & FormatDateTime(Now(), 2) & ".csv" WriteDataToFile fileName, GetShiftData()FormatDateTime的第二个参数选2会生成yyyyMMdd格式,避免中文系统默认的斜杠分隔符导致文件保存失败。GetShiftData函数建议提前在数据库里做好班次时间筛选,直接拉取整点数据。
在画面切换逻辑上,推荐用分层式设计:
Sub SwitchToScreen(screenName) HideAllScreens Select Case screenName Case "Curve": ShowScreen "SCREEN_CURVE", 1 Case "Alarm": ShowScreen "SCREEN_ALARM", 2 '...其他画面控制 End Select End Sub用层级参数控制画面叠加顺序,1表示底层主画面,2是弹出式次级画面。这样处理报警弹窗时不会影响底层曲线画面的持续更新。
最后说下仿真模式下的IO模拟:
Function SimulatePLC() Randomize SetTagValue "FlowRate", Rnd() * 100 SetTagValue "Voltage", 220 + (Rnd() - 0.5) * 10 End Function用Rnd()函数生成随机波动,注意要先调用Randomize初始化随机种子,否则每次仿真数值变化规律会重复。电压模拟加入±5%波动量,更接近真实工况。
调试中发现个有趣现象:当曲线画面和报表画面同时打开时,如果没做资源释放,半小时后内存会涨到200M以上。后来在画面隐藏时加了ReleaseUnusedObjects,内存稳定在80M左右。这提醒我们组态项目也要做好资源管理,别以为工控软件不用考虑性能优化。