воскресенье, 18 марта 2018 г.

Запись данных в лог на vbs

Данная конструкция представленная ниже, использовалась в 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 - перенос каретки на новую строку, чтобы каждая запись была  с новой строки. В конце файл закрывается. Вот и все.

1 комментарий:

  1. 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

    ОтветитьУдалить