Данная конструкция представленная ниже, использовалась в WinCC, но поскольку она сделана на vbs, то является довольно универсальной, и применима везде, где есть поддержка Visual Basic. Создавалась она для того, чтобы записывать в лог файл дату и время события, которое необходимо мониторить. То есть при возникновении события (в данном случае это изменение данных в поле ввода-вывода), запускается этот скрипт, который открывает текстовый файл, записывает в конец время и дату, и значение поля, которое было до его изменения.
Sub OnKeyDown(Byval Item, Byval nChar, Byval nRepCnt, Byval nFlags)
Dim fso,txt,value
Set value = HMIRuntime.Tags("NewTag")
If nFlags = 284 Then
Set fso=CreateObject ("Scripting.FileSystemObject")
Set txt=fso.OpenTextFile("c://logcc.txt",8,True,-1)
txt.Write (value.read & "- данное значение было изменено " & Date &" "& Time & vbCrLf)
txt.close
End If
End Sub
Теперь по порядку: где-что и для чего.
При помощи Dim мы объявляем переменные fso,txt,value. value - это чисто для винсс - считывает то самое предыдущее значение, которое хранится в теге.
nFlags = 284 - это означает что скрипт заносит запись в лог, только после нажатия Enter (код 284 в винсс). Если не ставить такое условие, то при любом нажатии в активном поле будет добавляться запись в лог
Самое главное - и это и есть тот самый универсальный кусок - это то что находится в конструкции условия: создается объект работы с файловой системой, потом
txt=fso.OpenTextFile("c://logcc.txt",8,True,-1) - открывается файл на диске с:// с названием logcc.txt. Тут 8 означает, что запись будет производиться в конец файла. True означает что если такого файла нет, то он автоматически создается, -1 означает что кодировка у него будет Unicode. Подробнее узнать об опциях можно погуглив OpenTextFile vbs.
Далее указывается что конкретно будет записываться в файл - это значение тега, потом информация в кавычках, потом дата, потом время, и в конце vbCrLf - перенос каретки на новую строку, чтобы каждая запись была с новой строки. В конце файл закрывается. Вот и все.
Sub OnKeyDown(Byval Item, Byval nChar, Byval nRepCnt, Byval nFlags)
ОтветитьУдалитьDim fso,txt,valu
Set valu = HMIRuntime.Tags("NewTag")
If nFlags =284 Then
Set fso=CreateObject ("Scripting.FileSystemObject")
Set txt=fso.OpenTextFile("c://logcc.txt",8,True,-1)
txt.Write (valu.read & " keybo " & Date &" "& Time & vbCrLf)
txt.close
End If
End Sub
Sub OnClick(ByVal Item)
Dim fso,txt
Dim NewTag0
Set NewTag0 = HMIRuntime.Tags("arrow")
MsgBox ("Current encoder value = " & NewTag0.read)
Set fso=CreateObject ("Scripting.FileSystemObject")
Set txt=fso.OpenTextFile("c://logcc.txt",8,True,-1)
txt.Write (NewTag0.read &" Pump on " &Date &" "& Time &vbCrLf)
txt.close
End Sub
Sub OnClick(ByVal Item)
Dim m1,a
Set m1 = HMIRuntime.Tags("m1")
a= MsgBox("Do you want to turn on bit m120.0? Yes - on, No - off",vbYesNo+vbQuestion,"Question")
If a=6 Then
m1.write(1)
Else
m1.write(0)
End if
End Sub