Одним из методов реализации управления объектом с помощью SCADA-систем является выдача в контроллер импульсных команд.
Для обеспечения реакции на команду во многих случаях будет вполне достаточно импульса длиной в один скан ПЛК. Если используемый контроллер обновляет значения внешних переменных (получаемых через коммуникационные интерфейсы или I/O) между сканами, то для того, чтобы выдать импульс длительностью по крайней мере в один скан, необходимо:
Функция синхронного обмена (как записи, так и чтения):
Вызов из обработчика нажатия на кнопку:
Вызов из обработчика:
Продолжение...
WinCC V7.0+SP3
Для обеспечения реакции на команду во многих случаях будет вполне достаточно импульса длиной в один скан ПЛК. Если используемый контроллер обновляет значения внешних переменных (получаемых через коммуникационные интерфейсы или I/O) между сканами, то для того, чтобы выдать импульс длительностью по крайней мере в один скан, необходимо:
- установить значение выходного тега в 1;
- убедиться, что это значение попало в контроллер;
- установить значение выходного тега в 0. Теперь мы можем быть уверены, что нулевое значение тега будет прочтено контроллером в следующем или еще более позднем скане.
Функция синхронного обмена (как записи, так и чтения):
- выдает команду на запись/чтение значения тега из контроллера;
- ожидает ответа от ПЛК об успешном выполнении команды (или истечения таймаута ожидания ответа);
- возвращает управление скрипту, из которого она была вызвана.
При выполнении же асинхронных функций обмена значение тега устанавливается/читается из внутреннего массива тегов WinCC и управление немедленно передается вызывавшему скрипту. Реальные команды чтения/записи в контроллер в этом случае выполняются коммуникационной подсистемой WinCC позднее. Поэтому при последовательном вызове двух асинхронных функций записи для одного и того же тега велика вероятность, что значение записанное при первом вызове будет переписано при втором вызове до передачи его в контроллер.
Необходимо помнить, что при использовании синхронных команд обмена выполнение локальных скриптов приостанавливается на время ожидания ответа контроллера. Поэтому, в случае возникновения проблем со связью, элементы управления на экране не будут реагировать на действия оператора до тех пор, пока не истечет таймаут ожидания ответа.C-скрипт
Имя синхронной функции в C-скрипте содержит слово Wait в конце:void ShortPulse(char* tagName) { SetTagBitWait(tagName, 1); SetTagBit(tagName, 0); }
Вызов из обработчика нажатия на кнопку:
#include "apdefap.h" void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { // WINCC:TAGNAME_SECTION_START // syntax: #define TagNameInAction "DMTagName" // next TagID : 1 #define tagName "_tag1" // WINCC:TAGNAME_SECTION_END ShortPulse(tagName); }
VBS
В VB-скрипте, чтобы функция Write выполнялась синхронно, необходимо вызывать её со вторым опциональным аргументом равным единице:Sub ShortPulse(Byval tagName) Dim tagObj Set tagObj = HMIRuntime.Tags(tagName) tagObj.Write 1, 1 tagObj.Write 0 End Sub
Вызов из обработчика:
Sub OnClick(Byval Item) ' WINCC:TAGNAME_SECTION_START Const tagName = "_tag1" ' WINCC:TAGNAME_SECTION_END ShortPulse(tagName) End Sub
Продолжение...
WinCC V7.0+SP3
Комментариев нет:
Отправить комментарий