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