Недавно для меня случилось открытие, что оказывается мой opc2web клиент, может запросто стать opc2excel клиентом - то есть показывает значения (к сожалению только показывать) с OPC сервера в таблице excel, с возможностью использования всех плюшек экселя. Вот есть видео как это может работать
Такая возможность на самом деле вполне очевидна, потому как по большому счету, этот opc2web клиент по сути преобразует OPC данные в JSON строку (opc2json если придерживаться установившихся наименований). Этот формат передачи данных довольно универсальный и может с легкостью использоваться почти в любом приложении и виде. Соответственно и принцип работы остается прежний: каждую секунду происходит запрос данных OPC у клиента (который по сути HPPT сервер, но для OPC это клиент) и клиент возвращает строку с данными в виде JSON. Теперь остается эту строку распарсить и красиво оформить чтобы было понятно что и где наблюдать. На скрине в начале видно что все значения друг за другом складываются в первую строку, а уже оттуда с помощью формул их можно поместить в другие ячейки, разукрасив их как угодно, добавить жирности, или применив условное форматирование. Нарисовать столбчатую диаграмму тоже не проблема - будет меняться так же в онлайн режиме.
Делается все это при помощи vba макроса - запрос на получение тегов
Sub gettags()
Dim objHTTP, response
Dim Result() As String
Dim Val() As String' получить данные с сервера (клиента)
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
objHTTP.Open "GET", "http://127.0.0.1:45455", False
objHTTP.Send
response = objHTTP.ResponseText'удалить из строки все двойные ковычки
response = Replace(response, Chr(34), vbNullString)
' убрать последний символ }
response = Left(response, Len(response) - 1)
' убрать первый символ {
response = Right(response, Len(response) - 1)
'разбить строку запятыми на массив
Result = Split(response, ", ")' проходимся по массивуFor i = LBound(Result()) To UBound(Result())' теперь каждый элемент массива разбиваем еще раз на массив используя двоеточие' и меняем запятые на точки чтобы получились числаVal = Split(Replace(Result(i), ",", "."), ":")
' так как вторым элементом полученного находится значение которое нам нужно, его-то и помещаем в ячейку на странице
ActiveSheet.Cells(1, i + 2).Value = Val(1)
Next i
End Sub
Комментариев нет:
Отправить комментарий