This is topic особенности вызова fbd-функций in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001369.html

Posted by merny (Участник № / Member № 2290) on :
 
внутри st-программы понадобилось реализовать схему с триггером и формирователем импульса. решено было создать функцию в виде fbd-программы (функции), которая вызывалась бы из основной программы с набором аргументов.
в описании на блок формирователя сказано
Этот блок формирует прямоугольный импульс длиной в один такт пересчета при изменении значения младшего разряда INP с 0 на 1
но это должно быть справедливо лишь для основной программы. для функции все совсем по-другому
- функция может быть вызвана при отработке программы, а может и не быть вызвана. и сколько для не будет длиться такт пересчета?
- одна и та же функция может вызываться для аналогичных, но разных задач и с разными аргументами. при этом обращение идет к одной и той же программной структуре. не будет ли трактоваться изменение чужих переменных в роли тех же аргументов как повод для срабатывания формирователей и триггеров?
- повторный вызов функции не будет ли трактоваться ею как новый такт пересчета?
- если некая переменная используется как аргумент (вход формирователя) при вызове fbd-функции то будет ли как-либо трактоваться функцией изменение переменной в теле программы вне вызова функции или этот вопрос лишен смысла?

и отдельный вопрос по полноценной fbd-программе:
при последовательном включении формирователя импульса и триггера (формирователь генерирует импульс, сбрасывающий триггер) когда будет происходить переключение триггера: во время текущего пересчета или на следующей итерации? влияет ли на это наличие между формирователем и триггером дополнительных блоков вроде логических или побитовых вентилей типа И, ИЛИ и им подобных?


еще возник один небольшой вопрос по работе ГЭ кнопка:
есть ГЭ кнопка на экране
для нее запрограммированы следующие действия:
по нажатию кнопки происходит посылка числа (0 или 1 в зависимости от обстоятельств) в аргумент экрана
по отпусканию кнопки происходит запись в тот же аргумент нуля.
т.е. в этом аргументе всегда должен быть 0, за исключением некоторых случаев, когда левая кнопка мыши нажата и не отпущена. в реальности при отпускании левой кнопки значение аргумента не меняется (оно выведено в ГЭ текст).
правда проект отрабатывается на ноутбуке и вместо мыши у него тачпад, но левая кнопка тачпада при нажатии действует так как и положено
в чем здесь может быть дело?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Из документации;
"Кроме входов/выходов, некоторые встроенные FBD-блоки имеют внутренние переменные, недоступные пользователю. Переменные FBD-блока (входы/выходы и внутренние) являются глобальными, т.е. сохраняют свое значение между вызовами программы, в том числе при RUN=1."
"Следующие функции (функции-блоки) могут быть вызваны в основной программе только однократно:
содержащие глобальные переменные программы;
содержащие FBD-блоки с внутренними переменными (см. Редактирование FBD-программ ). "

Т.о., любые пользовательские функции, в которых имеются собственные статические переменные, могут корректно вызываться в материнской программе только однократно.
Это снимает вопросы о "разных аргументах" и "чужих переменных".
Пользовательские функции определены только в рамках материнской программы.
"Разные задачи" - это, прежде всего, разные материнские программы. Между глобальными переменными разных программ нет связей. Глобальные переменные программы определены также для всех пользовательских функций программы.

Тактом пересчета пользовательской функции является ее вызов в материнской функции. Не было вызова - не было такта пересчета.

Единичный импульс блока rTRIG будет отрабатываться последующими блоками программы только в пределах того такта, в котором он сформирован.

Надо промоделировать работу кнопки в режиме эмуляции в РПД (редактор шаблонов экранов).
Если на соответствующий аргумент экрана нет постороннего воздействия, то при отжатии ЛК в аргументе должен устанавливаться 0.
 
Posted by merny (Участник № / Member № 2290) on :
 
понятно
с кнопкой все прояснилось, там было 2 состояния указано, т.е. на отпускание реагировать и не должна
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2