Добрый день. Нигде не нашел информацию, можно ли создавать переменные типа inout на st?
Вид для печати
Добрый день. Нигде не нашел информацию, можно ли создавать переменные типа inout на st?
Там все переменные, слава богу, независимые.
Нет только входных, или выходных.
То что объявлено как вход, или выход - обычные переменные!
А вот глобальные, для всей программы, ещё не сделаны.
Обещались.
Это бы сильно упростило программы.
Сейчас заманывают эти бесчисленные переназначения.
Ужас... :(
Т.е. её значение на входе должно тут же появиться на выходе?
Код:function_block fb
var_input //объявление входных переменных
U : udint;
end_var
var_output //объявление выходных переменных
U_ : udint; //выходная переменная с типом данных udint
end_var
U_ := U;
end_function_block
можно блок так написать
Вложение 73270
а можно использовать var_in_out
Вложение 73271
обычный блок
блок с входной/выходной переменнойКод:function_block functionblock1 //имя функционального блока.
var_input //объявление входных переменных
A : udint; //входная переменная
end_var
var_output //объявление выходных переменных
Q : udint; //выходная переменная с типом данных udint
end_var
Q := A + 1;
end_function_block
по работе они одинаковыеКод:function_block functionblock1 //имя функционального блока.
var_in_out //объявление переменных входа/выхода
A : udint; //входная переменная
end_var
A := A + 1;
end_function_block
Вложение 73272
вот, еще из справки
Вложение 73273
Здесь пример программ на ST в среде Codesys 2.3 и в Лоджике, где использована переменная VAR_IN_OUT
https://owen.ru/forum/showthread.php?t=38453&page=10#93
При переделке для Лоджика, переменная It подаётся на вход Y_ : REAL; (ФБ INTEGR:INTEGRATE; ) , рассчитывается в ФБ, подаётся на выход Y: REAL; и в следующем цикле попадает на вход ФБ, всё работает, как в Codesys 2.3
Код:INTEGR(RES:=b1,
ET:=ET, Y_:=It,
X:= ABS(diff)-zone,
K:=1.0/60, (* /60 - привязка к минутам*)
hour:=hour,min:=min,sec:=sec
Y=>It);
Так вот не понятно, какое принципиальное значение имеет var_in_out?
Только совпадение входного имени параметра с выходным? И всё?
Т.е. только для того, чтобы укоротить запись?
Вместо:
написатьКод:B := fb1(inB:=B).outB;
чтобы не дорисовывать правую часть?Код:fb1(B:=B); //Где B передается по ссылке (и блок fb1 может сделать туда запись)
Вложение 73274
это для простых переменных то?
Вот тут интересная тема https://owen.ru/forum/showthread.php...8%E5+OwenLogic
Добрый день, надеюсь, тут удобно спросить: почему не реализуете в функциях/ФБ на ST возможность использования уже существующих в программе переменных? Это бы конечно ухудшило очевидность изменения переменных в онлайн или симуляции, но добавило бы гибкости и мощи коду. А об неочевидных переменных можно было бы делать предупреждение.
Всем добрый день, нужна помощь.
Задача кода вот в чем, имеются 9 ванн и две корзины которые по ним перемещаются, нужен вывод номера ванны.
проблема в том, что минимальное значение всегда 0, многими способами пытался решить проблему, надеюсь на помощь более опытных специалистов.
Заранее спасибо.
Вложение 73453Вложение 73454Вложение 73455Вложение 73456
Подскажите новичку (ST). Как вложить функцию в функциональный блок для выполнения.
Да просто, вызываем и все
Ну, и на всякий случай, вот так функциональные блоки вызываютсяКод:function_block primer_1 //имя функционального блока.
var_input //объявление входных переменных
U : bool; //входная переменная с типом данных bool
end_var
var_output //объявление выходных переменных
Q : udint; //выходная переменная с типом данных udint
end_var
Q := function1(U); //вызов функции
end_function_block
Код:var_output //объявление выходных переменных
D : udint; //выходная переменная с типом данных udint
end_var
var //объявление локальных переменных
fb1, fb2, fb3: functionblock1; //объявляем функциональный блок
A1, A2, A3: bool;
B1, B2: bool;
C1, C2, C3: udint;
end_var
//1-й способ
fb1(U:=A1,Res:=B1,N:=0, Q=>C1);
//2-й способ
fb2.U := A2; //задаем входные значения
fb2.Res := false;
fb2.N := 0;
fb2(); //вызываем функциональный блок
C2 := fb2.Q; //читаем результат
//3-й способ (комбинированный)
fb3.Res := false;
fb3(U:=A3,N:=C3);
D := fb3.Q;
end_function_block
Вот вам готовые примеры, с вложенными блоками, вложенные функции и ФБ тоже должны быть на ST. Есть триггеры, таймеры, счётчики, функции SEL, MOD, Log, Lg, Lb, Ln и т. д.
Пример вызова функции Логарифма https://owen.ru/forum/showthread.php...&page=752#7515https://owen.ru/forum/showthread.php...&page=752#7515Код:function_block fB1 //имя функционального блока.
var_input
A:real;
B:real;
end_var
var_output //объявление выходных переменных
Q :real; //выходная переменная с типом данных real
end_var
//PRG
Q:=fLog(A,B) ; //вызов функции "fLog"
end_function_block
https://owen.ru/forum/showthread.php...39&page=11#105
https://owen.ru/forum/showthread.php?t=38453&page=10#93
https://owen.ru/forum/showthread.php...052#post426052
https://owen.ru/forum/showthread.php?t=38891#6
https://owen.ru/forum/showthread.php?t=38619&page=3#24
https://owen.ru/forum/showthread.php...39&page=20#200
Спасибо. Если можно ещё вопрос функции добавляются тоже так же как и функционирование блоки. (fb1) это я так понимаю название блока.
Посмотрите примеры выше, функция просто вызывается (в скобках входы функции), а ФБ должен быть объявлен в VAR, а в теле программы вызван, со входами, выходами
или без них (3 способа)
Пример таймера TON (2 варианта) и его вызов в ФБ https://owen.ru/forum/showthread.php...39&page=24#235
Спасибо за информацию теперь разобрался.
Интересно, вы Codesys 2.3 вообще не знаете? Советую поставить и отлаживать код в нём. Язык ST очень похож, зато любой блок ФБ, можно посмотреть в работе, в отличие от Лоджика. Таймеры, счётчики, триггеры в Codesys 2.3 можно использовать как самописные, так и стандартные, опять же в отличие от Лоджика ( тут только самописные).
Спасибо за совет! Только какая связь Кодесус и Овен Лоджик ? Как Си и Бейсик, что-ли? Есть операнд, в справке про него не слова, вот и всё. И у нас нет устройств на работе с средой Кодесус, поэтому неинтересно. А Овен Лоджик часто выручает. Ключевая фраза - очень похож. Есть программа, нужно и описание.
Вы не обязаны устанавливать КДС, но стандарт промышленных языков, к кторому все более или менее стремятся, Вы должны прочитать. https://docs.cntd.ru/document/1200135008 раздел 6.6.1.2.2 последние два абзаца перед примером
Почему не прав? Почему на форуме стандартный функционал Овен лоджик обсуждается? Сам отвечу - нет информации в справке, хочу Вам предложить: прежде чем программировать в ОЛ - изучите Коесус, много реле будет продано?
Вы не правы в том, что опять все переворачиваете. Вы должны минимально знать не кодесис, а язык, на котором реле программируется, и этот язык не зависит ни от производителя, ни от оборудования. Он зависит от стандарта, на который вам и дали ссылку. Другой вопрос это реализованы ли все функции данного языка в этом устройстве или нет, но это уже не нам решать, производитель постепенно расширяет функционал до уровня прописанного в стандарте.
Как это не отражен? Или вы предлагаете им еще 300 страниц этого стандарта в документацию добавить, а еще и все стандарты по электромагнитной совместимости устройств, руководство по пользованию ПК и пр.?
Вложение 73537