Сделаю несколько дополнений и замечаний. При объяснение функции и функционального блока, все-таки лучше оперировать входная переменная или вход и выходная переменная или выход. Несколько раз было сказано "входная функция", тут лучше было сказать "функция", т.к. там имеет ввиду уже выходное состояние функции. Функция может иметь несколько входов и только один выход. Она при каждом цикле не сохраняет состояние. Пример IF I=2 THEN Q:=true. Если I=2, то выход Q выдаст сигнал, то при следующем цикле если I уже не будет равен 2, а любому другому числу, то Q прекратит сигнал. Функциональный блок же может иметь несколько входов и выходов и сохраняет состояние при следующем цикле. И в примере выше если I=2, то выход Q выдаст сигнал и не снимет сигнал если в следующем I будет равен другим числам. Поэтому или обязательно прописывать оператор ELSE(иначе) и присвоение или другое условие(IF(ELSIF) THEN.
В данном случае. Через if смысла нет делать. Код через if дольше будет испоняться, чем через case. То есть каждый if это шаг программы, который обязан исполнить контроллер, а в case в зависимости от значения происходит в два шага первый шаг это переход на функцию внутри case, а второй это выполнение функции.
Замечательное видео, по поводу задержек Овен сказали что типо ни чего страшного, жёлтые не красные, Но по поводу времени жаль что они не реализовали ПР чисто с транзисторными PNP выходами вместо реле.
@@alexzhukblog я просто делал не помню где и мне кретично было быстрота исполнения, а с линией задержки уже поздно сигнал уходил, в версии 1.2 вроде или более старой небыло такой ерунды как жёлтые линии открыл старый проект с совой ещё (это иконка ов тогда была).
Самостоятельно учусь программировать логические контроллеры , с языком FBD разобрался очень быстро , так же как и с LD , но язык ST привносит некоторые трудности . Каким образом написать таймер внутри кода на язвке ST ? Необходимо , чтоб при срабатывании дискретного входа X (кнопка без фиксации) включался выход Y на 5 секунд и после выход отключается: IF x= true THEN Y:= TRUE; END_IF Каким образом в этот код внедрить таймер , чтоб логика работала как описано выше ?
Гугл в помощь, как говорится) Первые же ссылки по запросу "Таймер на ST" дали подробнейший ответ, а ещё в самом OL есть "Справка", где по запросу "TON" так же можно найти нужную Вам информацию)
Здравствуйте, Александр. Программерством лет 15 не занимался (раньше мелкосы в мысыйокселе сочинял), но как увидел - сразу все понятно. Могу не знать особенностей конкретного языка, но логику ухватил чуть ли не за планковское время (10^-43с) 🙂 А начало видео - "ВАЩЕ ЧУМА!!!" - Ну когда еще Черный Электрик тебе зеленым глазом подмигнет? 🙂
я обычно функциональный блок беру, не помню можно ли в функции применять elsif и другие условия вместо того чтобы после if каждый раз не делать end_if и потом If новое с новым условием.
при получении ПР103 я задолбался складывать клемные коннекторы в верном порядке, но потом понял для аналоговых вводов 3 по 5 pin, дискретные вводы и RS 2pin + 5 pin + 3 pin + 5 pin. А на дискретные выводы остальные, затем это меня не устроило и на дискретные выводы я заказал отдельные клеммы целиковые на китайском этом самом.
А в массивы этот язык ST не умеет? Потому что если он умеет в массивы, то проще, вместо кучи сравнений, сразу брать соответствующий элемент из массива.
Сделаю несколько дополнений и замечаний. При объяснение функции и функционального блока, все-таки лучше оперировать входная переменная или вход и выходная переменная или выход. Несколько раз было сказано "входная функция", тут лучше было сказать "функция", т.к. там имеет ввиду уже выходное состояние функции. Функция может иметь несколько входов и только один выход. Она при каждом цикле не сохраняет состояние. Пример IF I=2 THEN Q:=true. Если I=2, то выход Q выдаст сигнал, то при следующем цикле если I уже не будет равен 2, а любому другому числу, то Q прекратит сигнал. Функциональный блок же может иметь несколько входов и выходов и сохраняет состояние при следующем цикле. И в примере выше если I=2, то выход Q выдаст сигнал и не снимет сигнал если в следующем I будет равен другим числам. Поэтому или обязательно прописывать оператор ELSE(иначе) и присвоение или другое условие(IF(ELSIF) THEN.
В данном случае. Через if смысла нет делать. Код через if дольше будет испоняться, чем через case. То есть каждый if это шаг программы, который обязан исполнить контроллер, а в case в зависимости от значения происходит в два шага первый шаг это переход на функцию внутри case, а второй это выполнение функции.
Замечательное видео, по поводу задержек Овен сказали что типо ни чего страшного, жёлтые не красные, Но по поводу времени жаль что они не реализовали ПР чисто с транзисторными PNP выходами вместо реле.
Да, у них в стандартных макросах желтые линии попадаются. Но это раздражает слегка.
@@alexzhukblog я просто делал не помню где и мне кретично было быстрота исполнения, а с линией задержки уже поздно сигнал уходил, в версии 1.2 вроде или более старой небыло такой ерунды как жёлтые линии открыл старый проект с совой ещё (это иконка ов тогда была).
Самостоятельно учусь программировать логические контроллеры , с языком FBD разобрался очень быстро , так же как и с LD , но язык ST привносит некоторые трудности . Каким образом написать таймер внутри кода на язвке ST ? Необходимо , чтоб при срабатывании дискретного входа X (кнопка без фиксации) включался выход Y на 5 секунд и после выход отключается:
IF x= true THEN
Y:= TRUE;
END_IF
Каким образом в этот код внедрить таймер , чтоб логика работала как описано выше ?
Гугл в помощь, как говорится) Первые же ссылки по запросу "Таймер на ST" дали подробнейший ответ, а ещё в самом OL есть "Справка", где по запросу "TON" так же можно найти нужную Вам информацию)
Здравствуйте, Александр. Программерством лет 15 не занимался (раньше мелкосы в мысыйокселе сочинял),
но как увидел - сразу все понятно. Могу не знать особенностей конкретного языка, но логику ухватил
чуть ли не за планковское время (10^-43с) 🙂
А начало видео - "ВАЩЕ ЧУМА!!!" - Ну когда еще Черный Электрик тебе зеленым глазом подмигнет? 🙂
З.Ы А во времена дедушки DOS'a и наСИльничал и ПАСКудничал и ASMатривался
и даже на ВАСИКе сочинял - школьнику все интересно было.
На Барсике и я начинал. QBasic )
я обычно функциональный блок беру, не помню можно ли в функции применять elsif и другие условия вместо того чтобы после if каждый раз не делать end_if и потом If новое с новым условием.
Есть вложеность. Не знаю как она ОЛ, но в кодесис без проблем
@@sbersh у меня в функциональном блоке ок, а вот функции я пока не создавал.
Для этого есть case, да и else и else if тут присутствует.
при получении ПР103 я задолбался складывать клемные коннекторы в верном порядке, но потом понял для аналоговых вводов 3 по 5 pin, дискретные вводы и RS 2pin + 5 pin + 3 pin + 5 pin. А на дискретные выводы остальные, затем это меня не устроило и на дискретные выводы я заказал отдельные клеммы целиковые на китайском этом самом.
А в массивы этот язык ST не умеет? Потому что если он умеет в массивы, то проще, вместо кучи сравнений, сразу брать соответствующий элемент из массива.
в ОВ он не такой полный как в кодесис.
Пока не умеет.
Только в последней версии добавили вызов системных функций.
В пр от Овена нет типа данных массив.