to Денис_Гуливатенко. Будет. Я только что проверил. Можно еще так:
(*пользовательский блок proba*)
VAR_INPUT
i: BYTE;
END_VAR
VAR_OUTPUT
q: BYTE;
END_VAR
-------
i.2:=1;
q:=i;
(*вызвающая программа*)
proba1(i:=by1,q=>by1);
to Денис_Гуливатенко. Будет. Я только что проверил. Можно еще так:
(*пользовательский блок proba*)
VAR_INPUT
i: BYTE;
END_VAR
VAR_OUTPUT
q: BYTE;
END_VAR
-------
i.2:=1;
q:=i;
(*вызвающая программа*)
proba1(i:=by1,q=>by1);
Спасибо. В не сообразил в эмуляторе проверить
По моему Вы куда-то не туда свернули.
А почему нельзя использовать явную адресацию переменных? Используйте входные и выходные переменные ФБ.
Ведь ФБ делают тогда, когда предполагается использовать его многократно в разных частях проекта и в главной программе и в не главных программах или внутри других ФБ. При каждом использовании одного и того же ФБ создаются его копии(реализации) и каждая живет своей жизнью.
Если же в ФБ изменять косвенно значения переменной в вызывающей программе , то о использовании такого ФБ в других POU бессмысленно. И это уже не ФБ, а программа(подпрограмма). Но и у программы есть входные и выходные переменные.
Эти переменные и предназначены для передачи значений между ФБ или программой и вызывающей их главной программой.
Разница между ФБ и программой
Программа
Программа - это POU, способный формировать произвольное число значение во время вычислений. Значения всех переменных программы сохраняются между вызовами. В отличие от функционального блока экземпляров программы не существует. Программа является глобальной во всем проекте.
Нельзя вызывать программу из функции.
Если вызвать программу, которая изменит значения своих переменных, то при следующем вызове ее переменные будут иметь те же значения, даже если она вызвана из другого POU.
В этом заключается главное различие между программой и функциональным блоком, в котором изменяются только значения переменных данного экземпляра функционального блока.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Создаем массив из 6 элементов типа структура. Структура из наработки, флага разрешения запуска и текущего состояния. дальше создаем переменную A где будет хранится номер выбранного котла и пишем туда ноль. Далее в цикле FOR i=1 TO 6 DO Проверяем возможность запуска котла и что он остановлен. Если условия выполнены то если А=0 то A= текущий котел. Если не нулю то проверяем если наработка текущего котла меньше чем наработка котла в массиве с индексом равным А то А= номер текущего котла.
P.S. У меня есть аналогичный пример с наработкой насосов, могу прислать на почту.
Я попробую объяснить для чего я это затеял. Мне нужно к ПЛК73 подключить чатотник iG5A. В данном контроллере все настройки подключения нужно описывать в программе. А управление через командное слово, в котором каждый бит определенная команда для него. Я хочу сделать отдельно функции для запуска/останова/аварийного установа/ и т.д. А в значении переменной(глобальной) буду после запуска той или иной функции менять биты, чтобы командное слово было "правильно" записано, то есть чтобы не было противоречий "запуск" и "останов" одновременно.По моему Вы куда-то не туда свернули.
Поправьте, если я неправильно думаю))
Уважаемый petera, Вы увлеклись или зациклились на ФБ, а есть ведь еще и функции, если возвращать необходимо множество значений, то можно пойти двумя способами: возвратить структуру, а потом после вызова распределять знчения по переменным программы, а можно послать функции указатели и прям в теле функции изменить требуемые значениЯ
Что-то про простой VAR_IN_OUT никто ничего не сказал. Нелюбят штоли
Добрый день... До сих пор занимаюсь каскадом с котлами. Интересует такой вопрос:
Допустим у нас есть диапазоны разностей температур уставки и подачи (0-5 градусов - включаем один котел, 5-15 градусов - включаем второй (два) котел и т.д). К примеру я задаю условие (см. приложение) для включения одного котла, он включается, в режиме отладки меняю текущую температуру на более высокую, прописываю условие, что при такой температуре котел с макс наработкой должен выключиться, он выключается...
Не могу сделать включение второго котла при переходе в диапазон работы двух котлов...
Vlad_45, тут тема про это есть. Может там Вам быстрей ответят http://www.owen.ru/forum/showthread.php?t=14338