Gwxa1_Main (он открывается по умолчанию) запишем следующую програм-
му (табл. 7.1).
|
Таблица 7.1 |
|
Текст программы |
Комментарий |
|
Public Declare Function GetOPCValue Lib |
Для получения значения из |
|
OPC и записи значения в OPC |
||
"OPCDualSource" _ |
||
описаны две функции: |
||
(ByRef a_pvOpcTag As Variant, ByRef a_pvValue As |
||
GetOPCValue и SetOPCValue |
||
Variant) As Long |
||
|
||
Public Declare Function SetOPCValue Lib |
Водим две глобальные |
|
"OPCDualSource.dll" _ |
переменные для хранения |
|
(ByRef a_pvOpcTag As Variant, ByRef a_pvValue As |
предыдущего состояния |
|
Variant) As Long |
нагрева и охлаждения |
|
Dim Heat_Out_Curr As Boolean |
|
|
Dim Cool_Out_Curr As Boolean |
|
|
|
|
|
Public Sub имя сценария (o As GwxPick) |
|
|
|
|
|
Dim Heat_In As Variant |
Объявление переменных |
|
произвольного типа |
||
Dim Stop As Variant |
||
|
||
Dim Cool_ In As Variant |
|
|
Dim Heat_Out As Variant |
|
|
Dim Cool_Out As Variant |
|
|
|
|
|
Dim iRet As Long |
Объявление локальной |
|
переменной числового типа |
||
|
||
iRet = GetOPCValue("ОРС сигнал нагрев", Heat_In) |
Чтение сигналов ОРС сервера. |
|
Необходимо прописать полный |
||
iRet = GetOPCValue("ОРС сигнал стоп", Stop) |
||
путь к сигналу |
||
iRet = GetOPCValue("ОРС вкл нагрев", Heat_Out) |
||
|
||
iRet = GetOPCValue("ОРС сигнал вкл охлаждение", |
|
|
Cool_Out) |
|
|
|
|
|
If Heat_In And Not Cool_Out And Not Cool_Out_Curr |
Реализации «старт-стоп» |
|
логики при помощи операторов |
||
Then |
||
if |
||
Heat_Out_Curr = True |
||
|
||
End If |
|
|
If Cool_ In And Not Heat_Out And Not Heat_Out_Curr |
|
|
Then |
|
|
Cool_Out_Curr = True |
|
|
End If |
|
|
If Stop Then |
|
|
Heat_Out_Curr = False |
|
|
Cool_Out_Curr = False |
|
|
End If |
|
|
|
|
|
iRet = SetOPCValue("ОРС вкл нагрев ", Heat_Out_Curr) |
Запись сигналов ОРС сервера. |
|
Необходимо прописать полный |
||
iRet = SetOPCValue("ОРС сигнал вкл охлаждение ", |
||
путь к сигналу |
||
Cool_Out_Curr) |
||
|
||
End Sub |
|
31
Обратите внимание на выделенные курсивом строки в программе. Здесь следует указывать имена и пути к переменным в вашем дереве ОРС-сервера.
Сохраните разработанный сценарий и запустите мнемосхему на исполнение. Если все сделано правильно, то реализованная на VBA «старт-стоп»- логика не позволит одновременно включить и охлаждение, и нагрев.
После того, как закончите отладку VBA-скрипта, можно сделать так, чтобы он работал непрерывно.
7.2.2. Экспорт данных в MSExcel
Cохраним график изменения температуры с интервалом в 1 с в таблице
Excel.
В предыдущей мнемосхеме создайте кнопку «Экспорт значения в Excel». Настройте для этой кнопки выполнение сценария VBA и откройте этот сценарий на редактирование.
Далее необходимо установить связь с данными, предоставляемыми Excel. Для этого в редакторе VBA в меню Сервис → Ссылки (Tools → References) выберите Microsoft Excel 11.0 Object Library (версия Excel, уста-
новленная на вашем компьютере может быть другая).
Выберите в дереве проекта объект Infinity HMI Objects → ThisDisplay. В окне редактирования исходного текста, в левом верхнем выпадающем списке выберите элемент «Общая область» (General), а в правом верхнем углу «Описания» (Declarations) (обычно эта область открыта по умолчанию). Внесите здесь строку «Option Explicit». В данной секции окна программы могут быть сделаны объявления глобальных переменных и введены прототипы
функций, используемых во всех процедурах:
Option Explicit
Public g_Excel_App As Excel.Application
Public g_Excel_Book As Excel.Workbook
Public g_Excel_Sheet As Excel.Worksheet
Public g_LineNumber As Integer.
В окне программы объекта ThisDisplay, в левом верхнем выпадающем списке выберите элемент GwxDisplay, а в правом верхнем углу – PreRunTimeStart. При этом будет сгенерирована процедура – обработчик этого события. Данная процедура будет вызываться всякий раз при переходе в режим исполнения. Запишите в нее следующий код:
Private Sub GwxDisplay_PreRuntimeStart()
32
g_LineNumber = 1
' Открыть Excel и сделать его видимым
Set g_Excel_App = CreateObject("Excel.application")
g_Excel_App.Visible = False ' Открыть лист Excel
Set g_Excel_Book = g_Excel_App.Workbooks.Add
Set g_Excel_Sheet = g_Excel_Book.Worksheets(1)
End Sub
Лишние процедуры, сгенерированные VBA можно удалить.
Выберите в дереве проекта ветку «Gwx[Имя процедуры]_Main» и в процедуру [Имя процедуры] запишите код для сохранения значения сигнала Temp в очередную строку первого столбца текущего листа Excel.
Dim Temp As Variant
Dim sLineName As String
Dim iRet As Long
iRet = GetOPCValue("Сигнал ОРС сервера температура", Temp) 'Преобразование числовых данных в строку, где g_LineNumber – это но-
мер строки:
sLineName = Str(ThisDisplay.g_LineNumber) 'Формирование значения текущей ячейки в листе Excel
sCellNameb = "B" + Trim(sLineName)
sCellName = "A" + Trim(sLineName)
'Запись значения Temp в sCellName, где sCellName – это строка, идентифицирующая ячейкуExcel, например, "A1".
ThisDisplay.g_Excel_Sheet.Range(sCellName) = Level
'Запись даты и времени генерации сигнала в соседнюю ячейку Excel, например, "В1":
ThisDisplay.g_Excel_Sheet.Range(sCellNameb) |
= |
Format(Now, |
"dd.mm.yyyy hh:nn:ss")
'Увеличение номера строки на единицу:
ThisDisplay.g_LineNumber = ThisDisplay.g_LineNumber + 1
End Sub
Создайте кнопку на мнемосхеме «Отобразить отчет», при нажатии которой будет отображаться Excel, первый лист которого будет содержать сгенерированный ранее отчет. Сценарий VBA, который будет запускаться по нажатию этой кнопки, содержит одну строку:
33
ThisDisplay.g_Excel_App.Visible = True.
Самостоятельно создайте кнопку «Скрыть отчет».
Убедитесь, что созданный вами сценарий корректно работает. В текущем варианте при переходе в режим исполнения откроется Excel, однако он будет невидимым. В нем будет создано несколько листов (так как это настроено по умолчанию в Excel). В активном листе при нажатии на кнопку «Экспорт значения в Excel» будет появляться текущее значение температуры. Каждое очередное значение в новой строке. При каждом запуске мнемосхемы открывается новая книга Excel. Отображение отчета происходит при нажатии на созданную ранее кнопку «Отобразить отчет».
7.3. Содержание отчета
Отчет должен содержать выполнение двух упражнений лабораторной работы:
−мнемосхемы с описанием созданных VBA-сценариев;
−полученные в результате выполнения работы таблицы MSExcel.
34
Содержание |
|
Лабораторная работа №1 |
|
ПРОГРАММИРОВАНИЕ ПЛК В СРЕДЕ OPENPCS ................................. |
3 |
Лабораторная работа №2 |
|
КОНФИГУРИРОВАНИЕ И ПРОГРАММИРОВАНИЕ |
|
ПЛК ЭЛСИ-ТМ ............................................................................................. |
10 |
Лабораторная работа №3 |
|
НАСТРОЙКА ПРОТОКОЛА MODBUSTCP ............................................. |
16 |
Лабораторная работа №4 |
|
РАЗРАБОТКА SCADA-СИСТЕМЫ ДЛЯ ТЕПЛОВОГО ОБЪЕКТА ..... |
20 |
Лабораторная работа №5 |
|
АЛАРМЫ И ТРЕНДЫ.................................................................................. |
22 |
Лабораторная работа №6 |
|
ВСТРАИВАНИЕ ОБЪЕКТОВ ACTIVEX .................................................. |
25 |
Лабораторная работа №7 |
|
РАЗРАБОТКА VBA-ПРИЛОЖЕНИЙ В INFINIHMI................................ |
29 |
35