最近生产现场有一个这样的需求:操作人员需要定期抄录系统运行过程中多个特定数据的实时值,目前采用的是人工从WinCC上眼看笔抄。如此原始落后肯定不能忍,于是做了一个excel的值班记录表,通过OPC服务器获取在线数据并记录到表格中,见下图:

表格中,点击“手动记录”,记录一次实时值,不点击按钮,wincc数据变化并不会触发表格进行任何记录动作。点击“自动记录”,表格每小时记录一次实时值,每次读取的新值填写在表格的第一个空白行中。点击“停止记录”,表格退出自动记录。(表格中标黄部分实际使用时隐藏,操作人员不需要看到,未写入脚本中是为了方便修改需记录的参数)
按键的宏代码如下:
“自动记录”宏:
Sub run()
Dim stopF As String
stopF = GetSetting("ab", "cd", "ef", "")
If stopF = "1" Then
SaveSetting "ab", "cd", "ef", "False"
Exit Sub
End If
Sheet1.Manual
Application.OnTime Now() + TimeValue("1:" + "0:" + "0"), "run"
End Sub
“停止记录”宏:
Sub stp()
SaveSetting "ab", "cd", "ef", "1"
End Sub
说明:“自动记录”其实就是定时(1小时)反复调用“手动记录”,实现每1小时记录一次实时数据。“停止记录”用于中断反复调用。
“自动记录”宏和“停止记录”宏的关键之处在于用到了GetSetting 和SaveSetting。当时为了实现定时+循环+停止,用了很多方法,都不正常。这是参照老外的一段代码,用GetSetting 和SaveSetting就完全正常了。
“手动记录”宏的代码比较长,就不贴了,大家可参照wincc在线帮助或我以前的一个帖子:
我2004年在西门子论坛发了个《wincc和excel实现报表》的帖子,当时用的用户名是“zxl-net”,后来好多年没有登录过论坛,密码就忘记了,尝试用手机和邮箱找回密码都失败了,可能当时还不流行手机注册,而邮箱也不记得是哪一个了,且有些邮箱的密码也忘了。见下图:

链接是:https://www.ad.siemens.com.cn/club/bbs/post_one_floor.aspx?b_id=5&a_id=57928
(这种情况还有没有办法找回用户名和密码?)