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