Просмотр полной версии : реализация ветвления IF ELSE
Как реализовать в OL этот кусок программы
if bool then
i:=10;
else
i:=20;
lara197a
10.04.2015, 22:08
пятница в разгаре?
планируется портирование для ПР языка ST.
Элемент SEL используйте
это не совсем корректная альтернатива, потому что в ST есть SEL :)
надо что то, вроде этого преобраовать буль через TO_INT потом умножить на 10 и далее прибавить десять и присвоить результат переменной i
это не совсем корректная альтернатива, потому что в ST есть SEL :)
Эммм... а можно для тупых? ))
это не совсем корректная альтернатива, потому что в ST есть SEL :)
надо что то, вроде этого преобраовать буль через TO_INT потом умножить на 10 и далее прибавить десять и присвоить результат переменной i
частный случай ,а если мне нужно при нуле 20 ,а при единице 10 ,то что формулу менять ?
частный случай ,а если мне нужно при нуле 20 ,а при единице 10 ,то что формулу менять ?
именно что частный, а если в теле условия нужно будет выполнить ряд операций, плюсом условие будет множественное
например в codesys есть язык CFC, очень похожий на тот что в OL, там у каждого блока есть условие выполнения инструкции. было бы хорошо если добавить такую функцию в OL.
17669
например в codesys есть язык CFC, очень похожий на тот что в OL, там у каждого блока есть условие выполнения инструкции. было бы хорошо если добавить такую функцию в OL.
17669
в этом и отличие программируемого реле, оно будет выполнять весь написанный код, использование EN/ENO там не предусмотрено концепцией
ЗЫ надеюсь на картинке нарисован пример, а не действующая схема, блок move лишний
17669
Может вместо TRUE должна быть переменная типа WORD ?
В ОЛ можно так сделать:
17670
в этом и отличие программируемого реле, оно будет выполнять весь написанный код, использование EN/ENO там не предусмотрено концепцией
а в чем преимущество такой концепции? Или дело в железе.
ведь использование EN/ENO облегчает программирование.
ЗЫ надеюсь на картинке нарисован пример, а не действующая схема, блок move лишний
ЗЫ это был пример:)
а в чем преимущество такой концепции? Или дело в железе.
ведь использование EN/ENO облегчает программирование.
а цена ПР vs плк, не наводит ни на какие мысли?
а цена ПР vs плк, не наводит ни на какие мысли?
теперь все понятно.
Вот программисты ...по чирикали что то на своем языке ,а остальным ...:cool:
Вот программисты ...по чирикали что то на своем языке ,а остальным ...:cool:
по поводу чего EN/ENO, так это просто в реальной эл.схеме как не подать питание на логическую микросхему, нет питания нет обработки сигналов
Без питания микросхема не запомнит последнее состояние, это скорее вход разрешения работы блока
Без питания микросхема не запомнит последнее состояние, это скорее вход разрешения работы блока
я имел ввиду сравнение с ПР, а не плк
lara197a
12.04.2015, 20:53
я конечно сужу исключительно со своей колокольни
по этому прошу извинить и не в коей мере не кого не хочу обидеть.
но зачем такие тупые темы?
в этом и отличие программируемого реле, оно будет выполнять весь написанный код, использование EN/ENO там не предусмотрено концепцией
Если говорить обо всём выполняемом коде, я могу ошибаться, но и в ПЛК и в ПР весь код присутствует в памяти микроконтроллера. И в ПЛК и в ПР есть ветвления при исполнении. И там и там микроконтроллер, пропускает или выполняет куски кода. Если в ПЛК, при помощи EN/ENO можно отключить часть исполняемых блоков, и микроконтроллер, если я не ошибаюсь, "проскакивает" данный кусок кода, то в ПР, как мне кажется, тоже не исполняются определенные "ложные" участки инструкций. Но в последнем случае они, видимо, мельче. Речь здесь идет о том, что в ПЛК отключить часть ФБ можно явно, а в ПР это процесс как бы недоступен программисту? Поправьте меня, если я неправ.
На счет частного случая с SEL все равно не понял. Что мешает выбрать 20, если FALSE и 10 если TRUE? Если кроме выбора ,нужно еще, чтобы выполнялись дополнительные операции в IF-ELSE то, что мешает выполнить это по стробу? В чем смысл паровозика из sel и двух add? Объясните, пожалуйста!
я конечно сужу исключительно со своей колокольни
по этому прошу извинить и не в коей мере не кого не хочу обидеть.
но зачем такие тупые темы?
Поддерживаю ....не к чему ST с ПЛК перетаскивать в ОЛ и мусолить .Тут свои средства ....и возможности
Если говорить обо всём выполняемом коде, я могу ошибаться, но и в ПЛК и в ПР весь код присутствует в памяти микроконтроллера. И в ПЛК и в ПР есть ветвления при исполнении. И там и там микроконтроллер, пропускает или выполняет куски кода. Если в ПЛК, при помощи EN/ENO можно отключить часть исполняемых блоков, и микроконтроллер, если я не ошибаюсь, "проскакивает" данный кусок кода, то в ПР, как мне кажется, тоже не исполняются определенные "ложные" участки инструкций. Но в последнем случае они, видимо, мельче. Речь здесь идет о том, что в ПЛК отключить часть ФБ можно явно, а в ПР это процесс как бы недоступен программисту? Поправьте меня, если я неправ.
На счет частного случая с SEL все равно не понял. Что мешает выбрать 20, если FALSE и 10 если TRUE? Если кроме выбора ,нужно еще, чтобы выполнялись дополнительные операции в IF-ELSE то, что мешает выполнить это по стробу? В чем смысл паровозика из sel и двух add? Объясните, пожалуйста!
Отсоедините связь(выход) от ненужного куска программы (кода) и он исполнятся не будет ...
Вот что вы пытаетесь сделать.Можно в принципе ,а нужно ли ???когда есть другое :rolleyes:
Поддерживаю ....не к чему ST с ПЛК перетаскивать в ОЛ и мусолить .Тут свои средства ....и возможности
в ОЛ есть средства и возможность, я сегодня закончил проект на ПР110, но на ST или CFC я закончил бы быстрее.
17681
Отсоедините связь(выход) от ненужного куска программы (кода) и он исполнятся не будет ...
Я думаю, не только не исполняться, он еще и загружен в ПР не будет. И еще, я думаю, что если есть состояние "ложно" для ветви ФБ, то они тоже будут, вроде как, "перепрыгнуты".
в ОЛ есть средства и возможность, я сегодня закончил проект на ПР110, но на ST или CFC я закончил бы быстрее.
17681
Так это говорит не о достоинствах/недостатках ПР(ОЛ) ,а о вашем опыте работы с ПЛК .Ну не для Вас делался ПР ,если хотите освоить -абстрагируйтесь от ST .Еще десяток простых проектов на ОЛ и вы сможете быстрее делать на ПР ,чем ПЛК ,но только проекты которые по зубам ПР (ОЛ) ,то есть такие проекты ,как на вашем фото .я всегда говорил -не стреляйте из пушки по воробьям ,а вы правильно добавили - не забивайте копеечные гвозди дорогим микроскопом ...:rolleyes: ИЛИ Кесарю - кесарево ....
в ОЛ есть средства и возможность, я сегодня закончил проект на ПР110, но на ST или CFC я закончил бы быстрее.
ПР110 машинка достаточная для многих задач. То что обещаю в ПР200 ещё более могло бы расширить область применения. Но ОЛ сир и убог по сравнению с КДС даже в варианте с одним СFC. Как по мне, так чистый маркетинг. Что бы не создавать конкуренцию с ПЛК.
Извиняюсь что не по теме, вопрос к rovki. У меня сейчас версия 1.7 build 50 beta. Ни чего нового не появилось? А то как то Евгений Сергеевич обещался что переменные можно будет нормально именовать, а не тремя буквами (не, я понимаю, в России три буквы это основа основ :D). Названия макросам можно будет нормальные давать, без ограничений в длине. А то у меня проекты больше похожи на блокнот с кучей пометок. Без которых через месяц проще проект с нуля сделать, чем разобратся как это работает.
я работаю на 51 релизе (на сайте овен есть) .В версии 1,8 для ПР200 все это учтено ,но пока его не выкладывают ...
ПР и ПЛК или ОЛ и кодесис сравнивать не корректно ...Для другого контингента и других задач ПР .Появление направления ПРОГРАММИРУЕМЫХ РЕЛЕ в мире ,соглашусь это маркетинговый ход ,правильный ход ...но это ход не назад ,а в сторону.Поэтому можно сравнивать оборудование находящееся на одной ветви развития...
Что же убого в ОЛ ,интересно знать.:confused:,но не в сравнении с кодесис .
Что же убого в ОЛ ,интересно знать.:confused:,но не в сравнении с кодесис .
Спасибо.
ИМХО.
Не удобное поле. Или маленькое, или при увеличении размера все входа и выхода оказываются в верху. И если программа большая то не удобно отслеживать выхода. Если уменьшить масштаб поля, то всё получается мелко.Ограничение по макросам в восемь входов-выходов. Эти чертовы ограничения на длину названия переменных и макросов. В конце концов не возможность проследить работу программы в реальном времени.
Что поделать, я начинал с КДС. ПР появились у Овена сильно позже. А когда время с проектом поджимает или на пусконаладке что то идет не так, напряжно.
в новых версиях не будет ограничений таких на входа\выхода макросов и тогда снимутся и другие вопросы по выбору масштаба ...про переменные я уже сказал ... Но если честно ,то макрос на 16 входов\выходов не придаст картине ясности... За исключением частных случаев ,например дешифратор 4 на 16 ,то есть каких то регулярных структур ... А вы хотите весь проект ,например для ПР114 -12входов/8выходов в один макрос засунуть ?Вот тогда точно без бутылке не разобраться :D .Просто ,не визуальный язык ST , не учит правильно разбивать визуализацию (в ОЛ) на куски (функциональные) ,с точки зрения минимизации входов/выходов макросов.
Интересно неужели в кодесис (не в плане сравнения) имеет большее рабочее поле и более наглядное чем в ОЛ,если работать в CFC и там есть макросы?
П,С кто же виноват ,что на ПР стали делать проекты на десятки и сотни элементов и ФБ .Начали с черного квадрата Малевича ,а закончили Девятым валом Айвазовского.:rolleyes:
Каюсь ,частично приложил к этому руку
А вы хотите весь проект ,например для ПР114 -12входов/8выходов в один макрос засунуть ? Просто ,не визуальный язык ST , не учит правильно разбивать визуализацию (в ОЛ) на куски (функциональные) ,с точки зрения минимизации входов/выходов макросов.
Да я на FBD основную программу всегда пишу. Именное по тому, что программа получается разбита на законченные функциональные куски и легко отслеживается её работа. А отсутствие в FDB явных обратных связей меня, как старого релейщика не напрягает. А на ST пишу функциональные блоки (макросы) для основной программы и то не всегда. :)
И в ОЛ каждый макрос стараюсь делать законченным узлом. Один макрос например - это аварийные сигналы, Другой Пуск-Стоп, Третий блокировки. И как на зло не хватает чаще всего двух - трех входов-выходов.
Интересно неужели в кодесис (не в плане сравнения) имеет большее рабочее поле и более наглядное чем в ОЛ,если работать в CFC и там есть макросы?
КДС немного другой принцип. В отдельном окне (Визуализация называется) создаются кнопки для входов и допустим лампочки для выходов. И это окно с лампочками и кнопками (уменьшив) можно таскать по всему полю основной программы. Как то так (пример на FBD, но принцип тот же ):
17684
А в ОЛ при увеличении поля все входа - выхода оказываются в верху. И чаше всего скрыты.
Просто сейчас делаю проект с 7 ПР, контроллером, СПК 107 и Скадой. Вот и ворчу. Львиная доля времени уходит на программы для ПР.
кто же виноват ,что на ПР стали делать проекты на десятки и сотни элементов и ФБ .Начали с черного квадрата Малевича ,а закончили Девятым валом Айвазовского.
Да что Вы, какие сотни. Тут с 10 - 15 уже не удобно работать. :D
Нормально. Хотел в сообщении изменить изображение и оба остались. Хотя в редакторе только одно видно.
Ну не может Овен не косячить. :D
Ну не знаю ,почему вам не удобно при 10-15 Фб ....:confused: А у кого из аналогичных лоджиков удобнее ?Хоть бы глазком увидеть один проект ,без описаний ,который отнял кучу времени у вас....
ПРО кнопки и лампочки это вы про отладку (визуализацию) ,а мы про отладку пока не говорили ,мы говорили о разработке проекта (процесс)..вроде как.
Из первого что нашлось.
Постоянно скролить поле приходится. Особенно когда дистанционное управление по RS-485 надо с имитировать. Не удобно.
Интересно неужели в кодесис (не в плане сравнения) имеет большее рабочее поле и более наглядное чем в ОЛ,если работать в CFC и там есть макросы?
поле то может и ограничивается размером разрешения монитора, но вот ради интереса попробуйте наваять в КДС на холсте CFC программу, такую же как в лоджике и посмотрите как располагаются линии связи и вдобавок выделите группу элементов и потаскайте их по экрану, чтоб посмотреть за теми же самыми линиями связи
И там и там микроконтроллер, пропускает или выполняет куски кода.
есть доказательства что пропускает, покажите пример
ЗЫ на первой картинке выполнение кода как бы будет показывать что нижняя часть не выполняется, но стоит добавить возмущение и сразу будет видно что оба куска работают, поэтому покажите какой кусок кода не выполняется в лоджике
Василий Кашуба
13.04.2015, 09:36
есть доказательства что пропускает, покажите пример
ЗЫ на первой картинке выполнение кода как бы будет показывать что нижняя часть не выполняется, но стоит добавить возмущение и сразу будет видно что оба куска работают, поэтому покажите какой кусок кода не выполняется в лоджике
Разорвите связь от ADD до UNO и верхняя ветка работать не будет.
Разорвите связь от ADD до UNO и верхняя ветка работать не будет.
программно можно разорвать связь или только при создании проекта, превратив группу элементов в за комментированный код. О чем мы говорим?
Разорвите связь от ADD до UNO и верхняя ветка работать не будет.
Вы же не будите каждый раз программу переделывать.
Но в ОЛ хватает инструментов для 100% работы
17690
если делать все с умом.
ЗЫ картинка простой пример на скорую руку.
Василий Кашуба
13.04.2015, 10:27
программно можно разорвать связь или только при создании проекта, превратив группу элементов в за комментированный код. О чем мы говорим?
Если программно, то после схемы сравнения поставьте ФБ "И" и можно будет каждой веткой управлять.
Если программно, то после схемы сравнения поставьте ФБ "И" и можно будет каждой веткой управлять.
у меня и так в начале стоит некая схема И
да хоть десять И каждая ветка будет продолжать работать, а в плк исключаемый код не будет выполнятся
Евгений Сергеевич
14.04.2015, 14:05
Отрисовка линий был и пока остается больным вопросом.
на счет внешнего вида блоков и макросов будет вот такое обновление
17713
На счет реализации If и Case (в широком смысле). можно сделать и на лоджике, например вот так:
17715
Case по аналогии, только надо добавить селектор.
Но в ПР будут обсчитаны обе ветки, исключать код он не умеет.
Алексей Геннадьевич
14.04.2015, 14:26
на счет внешнего вида блоков и макросов будет вот такое обновление
17713
Когда можно будет пощупать?
есть доказательства что пропускает, покажите пример
у меня и так в начале стоит некая схема И
да хоть десять И каждая ветка будет продолжать работать, а в плк исключаемый код не будет выполнятся
Здравствуйте capzap! К сожалению, я не смогу предоставить Вам доказательства, поскольку "прошивка" или, суть -- программа для микроконтроллера не лежит на диске, а сразу "улетает" в EEPROM последнего. Однако Вы, как профессионал, знаете, что на этапе компиляции (сборки) кода, исключаются, например, заведомо невыполняющиеся участки программы, ложные условия и прочее "ложное", если присутствует. Это про оборванную связь, о которой пишут выше. Однако, и любое ложное условие в любой программе (естественно) не выполняется. То есть процессор (микроконтроллер и т п) просто тем или иным образом "перепрыгивает" кусок кода. Очевидно, что реальная параллельность вычислений может быть достигнута только при соответствующих аппаратных возможностях, в остальных случаях псевдопараллельности вряд ли разумно, чтобы выполнялся тотально весь код без разбора. Равно как и так называемые RTOS -- операционные системы реального времени как бы не совсем реального времени. Так мануал одного достаточно известного микроконтроллера справедливо гласит: "Вы должны понимать, что обработка данных в реальном времени зависит от способа написания кода, имеющихся на текущий момент прерываниях (в том числе вложенных), а так же чем именно "занято" в данный момент времени ядро процессора... Кхм, да я просто Капитан Очевидность, чего мне меньше всего хочется.
Если речь идет о том, что ветвления в программе ПЛК можно программно отключать -- да, в ПР так нельзя. Но, понятно, что любая "часть" состояния конечного автомата, которыми являются и ПЛК, и ПР не исполнится при условии "ложно" на входе... Я все правильно понял? )
Здравствуйте capzap! К сожалению, я не смогу предоставить Вам доказательства, поскольку "прошивка" или, суть -- программа для микроконтроллера не лежит на диске, а сразу "улетает" в EEPROM последнего. Однако Вы, как профессионал, знаете, что на этапе компиляции (сборки) кода, исключаются, например, заведомо невыполняющиеся участки программы, ложные условия и прочее "ложное", если присутствует. Это про оборванную связь, о которой пишут выше. Однако, и любое ложное условие в любой программе (естественно) не выполняется. То есть процессор (микроконтроллер и т п) просто тем или иным образом "перепрыгивает" кусок кода. Очевидно, что реальная параллельность вычислений может быть достигнута только при соответствующих аппаратных возможностях, в остальных случаях псевдопараллельности вряд ли разумно, чтобы выполнялся тотально весь код без разбора. Равно как и так называемые RTOS -- операционные системы реального времени как бы не совсем реального времени. Так мануал одного достаточно известного микроконтроллера справедливо гласит: "Вы должны понимать, что обработка данных в реальном времени зависит от способа написания кода, имеющихся на текущий момент прерываниях (в том числе вложенных), а так же чем именно "занято" в данный момент времени ядро процессора... Кхм, да я просто Капитан Очевидность, чего мне меньше всего хочется.
Если речь идет о том, что ветвления в программе ПЛК можно программно отключать -- да, в ПР так нельзя. Но, понятно, что любая "часть" состояния конечного автомата, которыми являются и ПЛК, и ПР не исполнится при условии "ложно" на входе... Я все правильно понял? )
сколько "воды" :) , тех.поддержка, в лице Евгения, дала однозначный ответ ПР исключать код не умеет (пост #42)
сколько "воды" :) , тех.поддержка, в лице Евгения, дала однозначный ответ ПР исключать код не умеет (пост #42)
Исключать код(ПР) не умеет ,а транслирует ОЛ только исполняемый код ,ИМХО.
Исключать код(ПР) не умеет ,а транслирует ОЛ только исполняемый код ,ИМХО.
Вы почему то хотите меня втянуть в спор совершенно про другое. Я говорю про код который уже работает в ПР. Как там поступил программист на этапе создания проекта и компилятор меня не интересует, согласитесь заливать в контроллер условие,одна из ветвей которого никогда не будет выполнятся,мягко говоря нелогично. Поэтому я высказывась про то, что работает, с самим SEL вобще всё просто, обе ветви исполнятся и взависимосьи от состояния селектор выберет результат с соответствующей ветви, на картике я показывал, что и после,если ветка даже неучаствует более нигде она всё равно произведет свои вычисления
на том и порешим :rolleyes:сегодня стал Дедом :o.
Василий Кашуба
18.04.2015, 16:09
на том и порешим :rolleyes:сегодня стал Дедом :o.
Который раз?
Поздравляю!
Который раз?
Поздравляю!
первый ,спасибо.
Поздравим просто, без прикрас
С победой из побед:
Немало званий есть у вас,
Но всех превыше это — дед!
Пожелаю себе поздравить Вас еще разок с рождением правнука... ;)
на том и порешим :rolleyes:сегодня стал Дедом :o.
Примите искренние поздравления!
присоединяюсь к поздравлениям
Спасибо ,вот и смена приходит ...Надо ПР500 внуку на 5лет подарить;)
Лютерный
19.04.2015, 12:28
:сегодня стал Дедом :o.
Поздравляю!
Отменного здоровья молодому и много сил взрослому!
Мордорец
20.04.2015, 00:09
на том и порешим :rolleyes:сегодня стал Дедом :o.
Поздравляю
И от меня примите поздравление!
Спасибо,спасибо .Вылетело на эмоциях ....а то за флуд накажут :cool:
Спасибо ,вот и смена приходит ...Надо ПР500 внуку на 5лет подарить;)
Не, это внук подарит дедушке ПР200 на его двухсотлетие... ))
За такой флуд не накажут. Есть вещи куда гораздо более знаменательные, чем проблемы IF-THEN
Хотел бы организовать стек очереди (загрузки материалла) (8 каналов). Подскажите как сделать SEL "наобарот" (один вход - два выхода). Или как сделать "косвенную адресацию". Или какое нубудь другое решение. Мне нужно чтобы по запросу на входе, этот канал вставал в очередь (на загрузку материалла) со своим временем загрузки. Время загрузки отрабатывалось выходным реле. Я немного запутолся с реализацией.
что вам нужно? стек или ROM? и то и другое уже есть на форуме...
Отлично! Буду дальше искать. А что Вы подразумеваете под буквами ROM. Заранее благодарен. Буду искать и то и другое.
ПЗУ = ROM
постоянная память, которая возвращает содержимое ячейки по её адресу...
Ок! Если ROM это функциональный блок, я немогу найти его описание (Среда программирования OWEN Logicrp_programma_owen_logic_v08.pdf). Как его использовать?
ROM - это макрос, тут (http://www.owen.ru/forum/showthread.php?t=7023&page=382) есть примеры его использования
PS скорее всего оригинальный макрос называется ПЗУ или ППЗУ
PPS нашел (http://www.owen.ru/forum/showthread.php?t=7023&p=56559&viewfull=1#post56559) и стек (http://www.owen.ru/forum/showthread.php?t=7023&p=98212&viewfull=1#post98212)
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot