PDA

Просмотр полной версии : реализация ветвления IF ELSE



iman
10.04.2015, 22:06
Как реализовать в OL этот кусок программы
if bool then
i:=10;
else
i:=20;

lara197a
10.04.2015, 22:08
пятница в разгаре?

rovki
10.04.2015, 22:22
Элемент SEL используйте

iman
10.04.2015, 22:37
планируется портирование для ПР языка ST.

capzap
10.04.2015, 22:45
Элемент SEL используйте

это не совсем корректная альтернатива, потому что в ST есть SEL :)
надо что то, вроде этого преобраовать буль через TO_INT потом умножить на 10 и далее прибавить десять и присвоить результат переменной i

tigdin
11.04.2015, 23:17
это не совсем корректная альтернатива, потому что в ST есть SEL :)
Эммм... а можно для тупых? ))

rovki
12.04.2015, 08:05
это не совсем корректная альтернатива, потому что в ST есть SEL :)
надо что то, вроде этого преобраовать буль через TO_INT потом умножить на 10 и далее прибавить десять и присвоить результат переменной i
частный случай ,а если мне нужно при нуле 20 ,а при единице 10 ,то что формулу менять ?

capzap
12.04.2015, 08:48
частный случай ,а если мне нужно при нуле 20 ,а при единице 10 ,то что формулу менять ?

именно что частный, а если в теле условия нужно будет выполнить ряд операций, плюсом условие будет множественное

iman
12.04.2015, 11:04
например в codesys есть язык CFC, очень похожий на тот что в OL, там у каждого блока есть условие выполнения инструкции. было бы хорошо если добавить такую функцию в OL.
17669

capzap
12.04.2015, 11:40
например в codesys есть язык CFC, очень похожий на тот что в OL, там у каждого блока есть условие выполнения инструкции. было бы хорошо если добавить такую функцию в OL.
17669

в этом и отличие программируемого реле, оно будет выполнять весь написанный код, использование EN/ENO там не предусмотрено концепцией

ЗЫ надеюсь на картинке нарисован пример, а не действующая схема, блок move лишний

smk1635
12.04.2015, 11:49
17669

Может вместо TRUE должна быть переменная типа WORD ?
В ОЛ можно так сделать:
17670

iman
12.04.2015, 14:04
в этом и отличие программируемого реле, оно будет выполнять весь написанный код, использование EN/ENO там не предусмотрено концепцией

а в чем преимущество такой концепции? Или дело в железе.
ведь использование EN/ENO облегчает программирование.


ЗЫ надеюсь на картинке нарисован пример, а не действующая схема, блок move лишний
ЗЫ это был пример:)

capzap
12.04.2015, 14:06
а в чем преимущество такой концепции? Или дело в железе.
ведь использование EN/ENO облегчает программирование.

а цена ПР vs плк, не наводит ни на какие мысли?

iman
12.04.2015, 14:10
а цена ПР vs плк, не наводит ни на какие мысли?

теперь все понятно.

rovki
12.04.2015, 14:39
Вот программисты ...по чирикали что то на своем языке ,а остальным ...:cool:

capzap
12.04.2015, 14:47
Вот программисты ...по чирикали что то на своем языке ,а остальным ...:cool:

по поводу чего EN/ENO, так это просто в реальной эл.схеме как не подать питание на логическую микросхему, нет питания нет обработки сигналов

жекон
12.04.2015, 17:48
Без питания микросхема не запомнит последнее состояние, это скорее вход разрешения работы блока

capzap
12.04.2015, 17:54
Без питания микросхема не запомнит последнее состояние, это скорее вход разрешения работы блока

я имел ввиду сравнение с ПР, а не плк

lara197a
12.04.2015, 20:53
я конечно сужу исключительно со своей колокольни
по этому прошу извинить и не в коей мере не кого не хочу обидеть.
но зачем такие тупые темы?

tigdin
12.04.2015, 21:11
в этом и отличие программируемого реле, оно будет выполнять весь написанный код, использование EN/ENO там не предусмотрено концепцией
Если говорить обо всём выполняемом коде, я могу ошибаться, но и в ПЛК и в ПР весь код присутствует в памяти микроконтроллера. И в ПЛК и в ПР есть ветвления при исполнении. И там и там микроконтроллер, пропускает или выполняет куски кода. Если в ПЛК, при помощи EN/ENO можно отключить часть исполняемых блоков, и микроконтроллер, если я не ошибаюсь, "проскакивает" данный кусок кода, то в ПР, как мне кажется, тоже не исполняются определенные "ложные" участки инструкций. Но в последнем случае они, видимо, мельче. Речь здесь идет о том, что в ПЛК отключить часть ФБ можно явно, а в ПР это процесс как бы недоступен программисту? Поправьте меня, если я неправ.
На счет частного случая с SEL все равно не понял. Что мешает выбрать 20, если FALSE и 10 если TRUE? Если кроме выбора ,нужно еще, чтобы выполнялись дополнительные операции в IF-ELSE то, что мешает выполнить это по стробу? В чем смысл паровозика из sel и двух add? Объясните, пожалуйста!

rovki
12.04.2015, 21:11
я конечно сужу исключительно со своей колокольни
по этому прошу извинить и не в коей мере не кого не хочу обидеть.
но зачем такие тупые темы?
Поддерживаю ....не к чему ST с ПЛК перетаскивать в ОЛ и мусолить .Тут свои средства ....и возможности

rovki
12.04.2015, 21:15
Если говорить обо всём выполняемом коде, я могу ошибаться, но и в ПЛК и в ПР весь код присутствует в памяти микроконтроллера. И в ПЛК и в ПР есть ветвления при исполнении. И там и там микроконтроллер, пропускает или выполняет куски кода. Если в ПЛК, при помощи EN/ENO можно отключить часть исполняемых блоков, и микроконтроллер, если я не ошибаюсь, "проскакивает" данный кусок кода, то в ПР, как мне кажется, тоже не исполняются определенные "ложные" участки инструкций. Но в последнем случае они, видимо, мельче. Речь здесь идет о том, что в ПЛК отключить часть ФБ можно явно, а в ПР это процесс как бы недоступен программисту? Поправьте меня, если я неправ.
На счет частного случая с SEL все равно не понял. Что мешает выбрать 20, если FALSE и 10 если TRUE? Если кроме выбора ,нужно еще, чтобы выполнялись дополнительные операции в IF-ELSE то, что мешает выполнить это по стробу? В чем смысл паровозика из sel и двух add? Объясните, пожалуйста!
Отсоедините связь(выход) от ненужного куска программы (кода) и он исполнятся не будет ...

rovki
12.04.2015, 21:25
Вот что вы пытаетесь сделать.Можно в принципе ,а нужно ли ???когда есть другое :rolleyes:

iman
12.04.2015, 22:35
Поддерживаю ....не к чему ST с ПЛК перетаскивать в ОЛ и мусолить .Тут свои средства ....и возможности

в ОЛ есть средства и возможность, я сегодня закончил проект на ПР110, но на ST или CFC я закончил бы быстрее.
17681

tigdin
12.04.2015, 22:50
Отсоедините связь(выход) от ненужного куска программы (кода) и он исполнятся не будет ...
Я думаю, не только не исполняться, он еще и загружен в ПР не будет. И еще, я думаю, что если есть состояние "ложно" для ветви ФБ, то они тоже будут, вроде как, "перепрыгнуты".

rovki
12.04.2015, 22:51
в ОЛ есть средства и возможность, я сегодня закончил проект на ПР110, но на ST или CFC я закончил бы быстрее.
17681
Так это говорит не о достоинствах/недостатках ПР(ОЛ) ,а о вашем опыте работы с ПЛК .Ну не для Вас делался ПР ,если хотите освоить -абстрагируйтесь от ST .Еще десяток простых проектов на ОЛ и вы сможете быстрее делать на ПР ,чем ПЛК ,но только проекты которые по зубам ПР (ОЛ) ,то есть такие проекты ,как на вашем фото .я всегда говорил -не стреляйте из пушки по воробьям ,а вы правильно добавили - не забивайте копеечные гвозди дорогим микроскопом ...:rolleyes: ИЛИ Кесарю - кесарево ....

smk1635
12.04.2015, 23:20
в ОЛ есть средства и возможность, я сегодня закончил проект на ПР110, но на ST или CFC я закончил бы быстрее.


ПР110 машинка достаточная для многих задач. То что обещаю в ПР200 ещё более могло бы расширить область применения. Но ОЛ сир и убог по сравнению с КДС даже в варианте с одним СFC. Как по мне, так чистый маркетинг. Что бы не создавать конкуренцию с ПЛК.

Извиняюсь что не по теме, вопрос к rovki. У меня сейчас версия 1.7 build 50 beta. Ни чего нового не появилось? А то как то Евгений Сергеевич обещался что переменные можно будет нормально именовать, а не тремя буквами (не, я понимаю, в России три буквы это основа основ :D). Названия макросам можно будет нормальные давать, без ограничений в длине. А то у меня проекты больше похожи на блокнот с кучей пометок. Без которых через месяц проще проект с нуля сделать, чем разобратся как это работает.

rovki
12.04.2015, 23:29
я работаю на 51 релизе (на сайте овен есть) .В версии 1,8 для ПР200 все это учтено ,но пока его не выкладывают ...
ПР и ПЛК или ОЛ и кодесис сравнивать не корректно ...Для другого контингента и других задач ПР .Появление направления ПРОГРАММИРУЕМЫХ РЕЛЕ в мире ,соглашусь это маркетинговый ход ,правильный ход ...но это ход не назад ,а в сторону.Поэтому можно сравнивать оборудование находящееся на одной ветви развития...
Что же убого в ОЛ ,интересно знать.:confused:,но не в сравнении с кодесис .

smk1635
12.04.2015, 23:52
Что же убого в ОЛ ,интересно знать.:confused:,но не в сравнении с кодесис .

Спасибо.
ИМХО.
Не удобное поле. Или маленькое, или при увеличении размера все входа и выхода оказываются в верху. И если программа большая то не удобно отслеживать выхода. Если уменьшить масштаб поля, то всё получается мелко.Ограничение по макросам в восемь входов-выходов. Эти чертовы ограничения на длину названия переменных и макросов. В конце концов не возможность проследить работу программы в реальном времени.

Что поделать, я начинал с КДС. ПР появились у Овена сильно позже. А когда время с проектом поджимает или на пусконаладке что то идет не так, напряжно.

rovki
13.04.2015, 00:11
в новых версиях не будет ограничений таких на входа\выхода макросов и тогда снимутся и другие вопросы по выбору масштаба ...про переменные я уже сказал ... Но если честно ,то макрос на 16 входов\выходов не придаст картине ясности... За исключением частных случаев ,например дешифратор 4 на 16 ,то есть каких то регулярных структур ... А вы хотите весь проект ,например для ПР114 -12входов/8выходов в один макрос засунуть ?Вот тогда точно без бутылке не разобраться :D .Просто ,не визуальный язык ST , не учит правильно разбивать визуализацию (в ОЛ) на куски (функциональные) ,с точки зрения минимизации входов/выходов макросов.
Интересно неужели в кодесис (не в плане сравнения) имеет большее рабочее поле и более наглядное чем в ОЛ,если работать в CFC и там есть макросы?



П,С кто же виноват ,что на ПР стали делать проекты на десятки и сотни элементов и ФБ .Начали с черного квадрата Малевича ,а закончили Девятым валом Айвазовского.:rolleyes:
Каюсь ,частично приложил к этому руку

smk1635
13.04.2015, 00:57
А вы хотите весь проект ,например для ПР114 -12входов/8выходов в один макрос засунуть ? Просто ,не визуальный язык ST , не учит правильно разбивать визуализацию (в ОЛ) на куски (функциональные) ,с точки зрения минимизации входов/выходов макросов.

Да я на FBD основную программу всегда пишу. Именное по тому, что программа получается разбита на законченные функциональные куски и легко отслеживается её работа. А отсутствие в FDB явных обратных связей меня, как старого релейщика не напрягает. А на ST пишу функциональные блоки (макросы) для основной программы и то не всегда. :)
И в ОЛ каждый макрос стараюсь делать законченным узлом. Один макрос например - это аварийные сигналы, Другой Пуск-Стоп, Третий блокировки. И как на зло не хватает чаще всего двух - трех входов-выходов.



Интересно неужели в кодесис (не в плане сравнения) имеет большее рабочее поле и более наглядное чем в ОЛ,если работать в CFC и там есть макросы?

КДС немного другой принцип. В отдельном окне (Визуализация называется) создаются кнопки для входов и допустим лампочки для выходов. И это окно с лампочками и кнопками (уменьшив) можно таскать по всему полю основной программы. Как то так (пример на FBD, но принцип тот же ):
17684
А в ОЛ при увеличении поля все входа - выхода оказываются в верху. И чаше всего скрыты.
Просто сейчас делаю проект с 7 ПР, контроллером, СПК 107 и Скадой. Вот и ворчу. Львиная доля времени уходит на программы для ПР.


кто же виноват ,что на ПР стали делать проекты на десятки и сотни элементов и ФБ .Начали с черного квадрата Малевича ,а закончили Девятым валом Айвазовского.

Да что Вы, какие сотни. Тут с 10 - 15 уже не удобно работать. :D

smk1635
13.04.2015, 00:59
Нормально. Хотел в сообщении изменить изображение и оба остались. Хотя в редакторе только одно видно.
Ну не может Овен не косячить. :D

rovki
13.04.2015, 01:17
Ну не знаю ,почему вам не удобно при 10-15 Фб ....:confused: А у кого из аналогичных лоджиков удобнее ?Хоть бы глазком увидеть один проект ,без описаний ,который отнял кучу времени у вас....
ПРО кнопки и лампочки это вы про отладку (визуализацию) ,а мы про отладку пока не говорили ,мы говорили о разработке проекта (процесс)..вроде как.

smk1635
13.04.2015, 01:38
Из первого что нашлось.

Постоянно скролить поле приходится. Особенно когда дистанционное управление по RS-485 надо с имитировать. Не удобно.

capzap
13.04.2015, 08:18
Интересно неужели в кодесис (не в плане сравнения) имеет большее рабочее поле и более наглядное чем в ОЛ,если работать в CFC и там есть макросы?

поле то может и ограничивается размером разрешения монитора, но вот ради интереса попробуйте наваять в КДС на холсте CFC программу, такую же как в лоджике и посмотрите как располагаются линии связи и вдобавок выделите группу элементов и потаскайте их по экрану, чтоб посмотреть за теми же самыми линиями связи

capzap
13.04.2015, 08:36
И там и там микроконтроллер, пропускает или выполняет куски кода.

есть доказательства что пропускает, покажите пример
ЗЫ на первой картинке выполнение кода как бы будет показывать что нижняя часть не выполняется, но стоит добавить возмущение и сразу будет видно что оба куска работают, поэтому покажите какой кусок кода не выполняется в лоджике

Василий Кашуба
13.04.2015, 09:36
есть доказательства что пропускает, покажите пример
ЗЫ на первой картинке выполнение кода как бы будет показывать что нижняя часть не выполняется, но стоит добавить возмущение и сразу будет видно что оба куска работают, поэтому покажите какой кусок кода не выполняется в лоджике
Разорвите связь от ADD до UNO и верхняя ветка работать не будет.

capzap
13.04.2015, 09:41
Разорвите связь от ADD до UNO и верхняя ветка работать не будет.

программно можно разорвать связь или только при создании проекта, превратив группу элементов в за комментированный код. О чем мы говорим?

iman
13.04.2015, 09:45
Разорвите связь от ADD до UNO и верхняя ветка работать не будет.
Вы же не будите каждый раз программу переделывать.

Но в ОЛ хватает инструментов для 100% работы
17690
если делать все с умом.

ЗЫ картинка простой пример на скорую руку.

Василий Кашуба
13.04.2015, 10:27
программно можно разорвать связь или только при создании проекта, превратив группу элементов в за комментированный код. О чем мы говорим?
Если программно, то после схемы сравнения поставьте ФБ "И" и можно будет каждой веткой управлять.

capzap
13.04.2015, 10:32
Если программно, то после схемы сравнения поставьте ФБ "И" и можно будет каждой веткой управлять.
у меня и так в начале стоит некая схема И
да хоть десять И каждая ветка будет продолжать работать, а в плк исключаемый код не будет выполнятся

Евгений Сергеевич
14.04.2015, 14:05
Отрисовка линий был и пока остается больным вопросом.

на счет внешнего вида блоков и макросов будет вот такое обновление
17713

На счет реализации If и Case (в широком смысле). можно сделать и на лоджике, например вот так:
17715
Case по аналогии, только надо добавить селектор.
Но в ПР будут обсчитаны обе ветки, исключать код он не умеет.

Алексей Геннадьевич
14.04.2015, 14:26
на счет внешнего вида блоков и макросов будет вот такое обновление
17713

Когда можно будет пощупать?

tigdin
17.04.2015, 22:46
есть доказательства что пропускает, покажите пример

у меня и так в начале стоит некая схема И
да хоть десять И каждая ветка будет продолжать работать, а в плк исключаемый код не будет выполнятся
Здравствуйте capzap! К сожалению, я не смогу предоставить Вам доказательства, поскольку "прошивка" или, суть -- программа для микроконтроллера не лежит на диске, а сразу "улетает" в EEPROM последнего. Однако Вы, как профессионал, знаете, что на этапе компиляции (сборки) кода, исключаются, например, заведомо невыполняющиеся участки программы, ложные условия и прочее "ложное", если присутствует. Это про оборванную связь, о которой пишут выше. Однако, и любое ложное условие в любой программе (естественно) не выполняется. То есть процессор (микроконтроллер и т п) просто тем или иным образом "перепрыгивает" кусок кода. Очевидно, что реальная параллельность вычислений может быть достигнута только при соответствующих аппаратных возможностях, в остальных случаях псевдопараллельности вряд ли разумно, чтобы выполнялся тотально весь код без разбора. Равно как и так называемые RTOS -- операционные системы реального времени как бы не совсем реального времени. Так мануал одного достаточно известного микроконтроллера справедливо гласит: "Вы должны понимать, что обработка данных в реальном времени зависит от способа написания кода, имеющихся на текущий момент прерываниях (в том числе вложенных), а так же чем именно "занято" в данный момент времени ядро процессора... Кхм, да я просто Капитан Очевидность, чего мне меньше всего хочется.
Если речь идет о том, что ветвления в программе ПЛК можно программно отключать -- да, в ПР так нельзя. Но, понятно, что любая "часть" состояния конечного автомата, которыми являются и ПЛК, и ПР не исполнится при условии "ложно" на входе... Я все правильно понял? )

capzap
18.04.2015, 05:02
Здравствуйте capzap! К сожалению, я не смогу предоставить Вам доказательства, поскольку "прошивка" или, суть -- программа для микроконтроллера не лежит на диске, а сразу "улетает" в EEPROM последнего. Однако Вы, как профессионал, знаете, что на этапе компиляции (сборки) кода, исключаются, например, заведомо невыполняющиеся участки программы, ложные условия и прочее "ложное", если присутствует. Это про оборванную связь, о которой пишут выше. Однако, и любое ложное условие в любой программе (естественно) не выполняется. То есть процессор (микроконтроллер и т п) просто тем или иным образом "перепрыгивает" кусок кода. Очевидно, что реальная параллельность вычислений может быть достигнута только при соответствующих аппаратных возможностях, в остальных случаях псевдопараллельности вряд ли разумно, чтобы выполнялся тотально весь код без разбора. Равно как и так называемые RTOS -- операционные системы реального времени как бы не совсем реального времени. Так мануал одного достаточно известного микроконтроллера справедливо гласит: "Вы должны понимать, что обработка данных в реальном времени зависит от способа написания кода, имеющихся на текущий момент прерываниях (в том числе вложенных), а так же чем именно "занято" в данный момент времени ядро процессора... Кхм, да я просто Капитан Очевидность, чего мне меньше всего хочется.
Если речь идет о том, что ветвления в программе ПЛК можно программно отключать -- да, в ПР так нельзя. Но, понятно, что любая "часть" состояния конечного автомата, которыми являются и ПЛК, и ПР не исполнится при условии "ложно" на входе... Я все правильно понял? )

сколько "воды" :) , тех.поддержка, в лице Евгения, дала однозначный ответ ПР исключать код не умеет (пост #42)

rovki
18.04.2015, 07:33
сколько "воды" :) , тех.поддержка, в лице Евгения, дала однозначный ответ ПР исключать код не умеет (пост #42)
Исключать код(ПР) не умеет ,а транслирует ОЛ только исполняемый код ,ИМХО.

capzap
18.04.2015, 08:51
Исключать код(ПР) не умеет ,а транслирует ОЛ только исполняемый код ,ИМХО.

Вы почему то хотите меня втянуть в спор совершенно про другое. Я говорю про код который уже работает в ПР. Как там поступил программист на этапе создания проекта и компилятор меня не интересует, согласитесь заливать в контроллер условие,одна из ветвей которого никогда не будет выполнятся,мягко говоря нелогично. Поэтому я высказывась про то, что работает, с самим SEL вобще всё просто, обе ветви исполнятся и взависимосьи от состояния селектор выберет результат с соответствующей ветви, на картике я показывал, что и после,если ветка даже неучаствует более нигде она всё равно произведет свои вычисления

rovki
18.04.2015, 14:15
на том и порешим :rolleyes:сегодня стал Дедом :o.

Василий Кашуба
18.04.2015, 16:09
на том и порешим :rolleyes:сегодня стал Дедом :o.
Который раз?
Поздравляю!

rovki
18.04.2015, 17:49
Который раз?
Поздравляю!
первый ,спасибо.

tigdin
18.04.2015, 19:02
Поздравим просто, без прикрас
С победой из побед:
Немало званий есть у вас,
Но всех превыше это — дед!

Пожелаю себе поздравить Вас еще разок с рождением правнука... ;)

kolyan
18.04.2015, 19:12
на том и порешим :rolleyes:сегодня стал Дедом :o.

Примите искренние поздравления!

capzap
18.04.2015, 19:34
присоединяюсь к поздравлениям

rovki
18.04.2015, 19:34
Спасибо ,вот и смена приходит ...Надо ПР500 внуку на 5лет подарить;)

Лютерный
19.04.2015, 12:28
:сегодня стал Дедом :o.
Поздравляю!
Отменного здоровья молодому и много сил взрослому!

rovki
19.04.2015, 17:42
Спасибо.И Вам Мира.

Мордорец
20.04.2015, 00:09
на том и порешим :rolleyes:сегодня стал Дедом :o.

Поздравляю

amn
20.04.2015, 01:03
И от меня примите поздравление!

rovki
20.04.2015, 07:05
Спасибо,спасибо .Вылетело на эмоциях ....а то за флуд накажут :cool:

tigdin
21.04.2015, 22:53
Спасибо ,вот и смена приходит ...Надо ПР500 внуку на 5лет подарить;)
Не, это внук подарит дедушке ПР200 на его двухсотлетие... ))
За такой флуд не накажут. Есть вещи куда гораздо более знаменательные, чем проблемы IF-THEN

trejer
14.12.2015, 12:11
Хотел бы организовать стек очереди (загрузки материалла) (8 каналов). Подскажите как сделать SEL "наобарот" (один вход - два выхода). Или как сделать "косвенную адресацию". Или какое нубудь другое решение. Мне нужно чтобы по запросу на входе, этот канал вставал в очередь (на загрузку материалла) со своим временем загрузки. Время загрузки отрабатывалось выходным реле. Я немного запутолся с реализацией.

AI!
14.12.2015, 12:38
что вам нужно? стек или ROM? и то и другое уже есть на форуме...

trejer
14.12.2015, 12:48
Отлично! Буду дальше искать. А что Вы подразумеваете под буквами ROM. Заранее благодарен. Буду искать и то и другое.

AI!
14.12.2015, 13:02
ПЗУ = ROM
постоянная память, которая возвращает содержимое ячейки по её адресу...

trejer
14.12.2015, 13:23
Ок! Если ROM это функциональный блок, я немогу найти его описание (Среда программирования OWEN Logicrp_programma_owen_logic_v08.pdf). Как его использовать?

AI!
14.12.2015, 14:12
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)