В овен лоджик для таких случаев есть пунктирная связь ,означающая связь задержанная на один цикл (линия задержки).Если есть неоднозначность при обработки обратных связей компилятор помечает связь желтым цветом и предлагает поставить линию задержки на цикл .Может воспользоваться их опытом ....support писал(а):При создании новых соеденений в следующей версии создание непосредственных обратных связей будет просто невозможно, программа будет сама за этим следить и не позволит Вам создать такое соеденение.
вылет версии 3.0
- Rovki
- Полковник
- Сообщения: 5746
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 69 раз
- Поблагодарили: 224 раза
- Контактная информация:
вылет версии 3.0
Электронщик до мозга костей и не только
-
- Лейтенант
- Сообщения: 676
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 3 раза
- Поблагодарили: 1 раз
вылет версии 3.0
Еще баг СКАДА
_uVideoPlayer({'url':'https://www.youtube.com/watch?v=K5ZfMe4 ... 03cd1EmIw6');
_uVideoPlayer({'url':'https://www.youtube.com/watch?v=K5ZfMe4 ... 03cd1EmIw6');
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
вылет версии 3.0
Я думаю над этим, но пока не до конца представляю себе реализацию в коде. Возможно со временем что то и сделаю. Я работал с Овен лоджиком, и их решение мне понравилось, вот только при текущей реализации компилятора и системы отрисовки напрямую это решение перенести не получится. Есть сложности.Rovki писал(а):В овен лоджик для таких случаев есть пунктирная связь ,означающая связь задержанная на один цикл (линия задержки).Если есть неоднозначность при обработки обратных связей компилятор помечает связь желтым цветом и предлагает поставить линию задержки на цикл .Может воспользоваться их опытом
Добавлено (07.12.2017, 10:56)
---------------------------------------------
Исправил.CraCk писал(а):Еще баг СКАДА
Автор программы FLProg.
-
- Лейтенант
- Сообщения: 676
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 3 раза
- Поблагодарили: 1 раз
вылет версии 3.0
Не знаю так должно быть? При включенной опции подавать сигнал при достижение заданного значения на счетчике. В переменную записывается на одно значение меньше заданного.
_uVideoPlayer({'url':'https://www.youtube.com/watch?v=mErPv4s ... 10hH1Enp1A');
_uVideoPlayer({'url':'https://www.youtube.com/watch?v=mErPv4s ... 10hH1Enp1A');
Последний раз редактировалось CraCk 08 дек 2017, 23:14, всего редактировалось 1 раз.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
вылет версии 3.0
Что то я не понимаю, какая здесь может быть обратная связь?
[spoiler=Спойлер][/spoiler]Теперь что, любой выход со входом нужно обвешивать переменными?
[spoiler=Спойлер][/spoiler]Теперь что, любой выход со входом нужно обвешивать переменными?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
вылет версии 3.0
rw6cm,
В Вашем случае промежуточная переменная не нужна.
Попробую объяснить, как понимаю я.
Если в качестве сигнала "обратной связи" используется выход блока с запоминанием состояния, т.е. счетчики, триггеры и т.д., то никаких дополнительных действий не требуется.
Если же попытаться использовать сигнал функций, т. е. сложение/вычитание, умножение/деление, сравнение и т.д., которые выполняются с операндами и не имеют выделенной переменной под результат, то варриантов 2:
1. использовать(создать) выделенную(промежуточную) переменную
2. ставить необходимые функции перед входом обратной связи, а уже в них подавать сохраняемые значения.
Это, неправильная обратная связь, читал на просторах инета, называется рекурсия.
Надеюсь, свою мысль изложил понятно.
В Вашем случае промежуточная переменная не нужна.
Попробую объяснить, как понимаю я.
Если в качестве сигнала "обратной связи" используется выход блока с запоминанием состояния, т.е. счетчики, триггеры и т.д., то никаких дополнительных действий не требуется.
Если же попытаться использовать сигнал функций, т. е. сложение/вычитание, умножение/деление, сравнение и т.д., которые выполняются с операндами и не имеют выделенной переменной под результат, то варриантов 2:
1. использовать(создать) выделенную(промежуточную) переменную
2. ставить необходимые функции перед входом обратной связи, а уже в них подавать сохраняемые значения.
Это, неправильная обратная связь, читал на просторах инета, называется рекурсия.
Надеюсь, свою мысль изложил понятно.
Последний раз редактировалось Sancho 09 дек 2017, 09:01, всего редактировалось 1 раз.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
вылет версии 3.0
rw6cm писал(а):Что то я не понимаю, какая здесь может быть обратная связь?
rw6cm писал(а):Теперь что, любой выход со входом нужно обвешивать переменными?
Нет, только эту цепь пустить через переменную.
Объясню в чем проблема. Новый компилятор (как и в принципе все компиляторы в подобных системах) анализируют схему. Они "растягивают" схему в последовательность блоков в одну линейку. При этом для каждого блока определяются блоки которые нужны для его расчета (которые подключены к его входам), и эти блоки ставятся перед ним. А теперь попробуйте посмотреть с точки зрения компилятора, кто должен стоять впереди - блок триггера или блок счётчика? Вот компилятор и "сходит с ума" пытаясь определиться. Скоро выйдет новая версия где создание таких соеденений будет невозможно, а для старых проектов где они есть - будет выдаваться соответствующее сообщение, и до устранения таких связей проект не будет компилироваться (уже реализованно).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Автор программы FLProg.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
вылет версии 3.0
Понимаю это особенность FLProg, которую теперь надо учитывать.
т.к. аналогичный код в IDE работает без проблем.
дополнено
В той схеме можно не только булевой переменной развязать, но и итежел.
Программа будет это учитывать? т.е. не принципиально где разорвать соединение переменной?
т.к. раскладка кода в этих вариантах совершенно разная.
[spoiler=Спойлер]
[/spoiler]
т.к. аналогичный код в IDE работает без проблем.
дополнено
В той схеме можно не только булевой переменной развязать, но и итежел.
Программа будет это учитывать? т.е. не принципиально где разорвать соединение переменной?
т.к. раскладка кода в этих вариантах совершенно разная.
[spoiler=Спойлер]
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось rw6cm 09 дек 2017, 10:14, всего редактировалось 1 раз.
Win10-64, FLProg (portable)
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
вылет версии 3.0
Не только FLProg.rw6cm писал(а):Понимаю это особенность FLProg, которую теперь надо учитывать.
Честно говоря я долго не мог придумать нормальный (читай правильный) алгоритм анализа схемы. До версии 3.0.2 использовался придуманный мной ещё четыре года назад алгоритм основанный на гомерическом положении блоков на плате. Ну и Вы сами помните к чему это приводило))) Передвинул блок на схеме - программа работает совсем по другому.
Я перелопатил достаточно много инфы по промышленным средам программирования, ну и постепенно в голове сложилась общая картина работы их компиляторов, основанных именно на анализе схемы. На основе этого я и написал новый компилятор.
Например у Овена такая ситуация то же отслеживается, и при создании такой связи предлагается создать так называемую "линия задержки на цикл" - ту же переменную. Я не знаю стоит ли вводить такое понятие в FLProg? Если так будет понятнее, я могу это сделать (конечно потребуется время, и я не знаю стоит ли оно того, или правильнее оставить необходимость ручного создания переменной. Ведь по большому счету, переменная и так создается).
У сименса вообще все расчеты ведутся с обязательной записью окончания цепочки в ячейку памяти, и непосредственную обратную связь так же создать не позволяется.
В общем практически во всех профессиональных средах так или иначе эта проблема решена через ручное или автоматическое создание переменной (тэга, ячейки памяти.....)
Единственно отличается шнайдер (ZelioSoft), там такую связь создать можно, но как это у них реализовано, я пока не разобрался
Добавлено (09.12.2017, 10:05)
---------------------------------------------
Ну а поскольку я все таки создаю свой проект для подготовки молодых к специалистов к работе на "настоящих" промышленных средах программирования, то считаю что привить им понимание того что "непосредственные обратные связи создавать нельзя" - это правильный путь.
Автор программы FLProg.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
вылет версии 3.0
Компилирует без проблем.support писал(а):Нет, только эту цепь пустить через переменную.
Все используемые переменные в обратных связях объявлены и проведена начальная инициализация значений.
[spoiler=Спойлер]bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _count1I = 0;
int _count1P = 0;
bool _trgs1 = 0;
void setup()
{
}
void loop()
{
//Плата:1
if (1) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
if (_gen1I) { if ( _isTimer ( _gen1P , 100 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
if (_gen1O)
{
if (! _count1I)
{
if (_trgs1) {_count1P = _count1P+1;} else {_count1P = _count1P-1;};
_count1I = 1;
}
}
else
{
_count1I=0;
}
if((_count1P) < (0)) _trgs1 = 1;
if((_count1P) > (100)) _trgs1 = 0;
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}[/spoiler]
Последний раз редактировалось Sancho 09 дек 2017, 10:17, всего редактировалось 1 раз.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
вылет версии 3.0
Sancho,
я тоже утром на этом зациклился, когда не смог запустить свой рабочий проект )))
Здесь загвоздка не в коде, а в схемном решении правильной последовательности расположения кода блоков.
Это как то упустил из вида.
support,
Было бы замечательно если мы моли не только смотреть последовательность, но и выставлять ее сами.
тогда можно от лишних переменных избавится
я тоже утром на этом зациклился, когда не смог запустить свой рабочий проект )))
Здесь загвоздка не в коде, а в схемном решении правильной последовательности расположения кода блоков.
Это как то упустил из вида.
support,
Было бы замечательно если мы моли не только смотреть последовательность, но и выставлять ее сами.
тогда можно от лишних переменных избавится
Последний раз редактировалось rw6cm 09 дек 2017, 10:31, всего редактировалось 1 раз.
Win10-64, FLProg (portable)
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
вылет версии 3.0
Вопрос стоит не в компиляторе ардуины, а в компиляторы FLProg (FBD -> C). В принципе конечно можно поднапрячься, и сделать возможным создание непосредственных обратных связей, можно даже научить компилятор обрабатывать такие цепочки, но:Sancho писал(а):Компилирует без проблем.Все используемые переменные в обратных связях объявлены и проведена начальная инициализация значений.
Добавлено (09.12.2017, 10:40)support писал(а):Ну а поскольку я все таки создаю свой проект для подготовки молодых к специалистов к работе на "настоящих" промышленных средах программирования, то считаю что привить им понимание того что "непосредственные обратные связи создавать нельзя" - это правильный путь.
---------------------------------------------
Повторюсь:rw6cm писал(а):Было бы замечательно если мы моли не только смотреть последовательность, но и выставлять ее сами.тогда можно от лишних переменных избавится
Цитата support (

специалистов к работе на "настоящих" промышленных средах
программирования, то считаю что привить им понимание того что
"непосредственные обратные связи создавать нельзя" - это правильный
путь.
А ни в одной из промышленных систем возможности самостоятельно задавать порядок выполнения блоков (кроме разбиения на Network -и как у сименса например - но это есть и у меня) не существует.
Автор программы FLProg.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
вылет версии 3.0
Все когда то не существовало.support писал(а):не существует.
Но было сделано такими же первопроходцами как Вы!
Win10-64, FLProg (portable)
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
вылет версии 3.0
Это скомпилировано в FLProg.support писал(а):Вопрос стоит не в компиляторе ардуины, а в компиляторы FLProg (FBD -> C)
Согласен с Вами, сам всегда придерживаюсь такого правила- промежуточная переменная.support писал(а):Цитата support ()Ну а поскольку я все таки создаю свой проект для подготовки молодых к специалистов к работе на "настоящих" промышленных средах программирования, то считаю что привить им понимание того что "непосредственные обратные связи создавать нельзя" - это правильный путь.
Просто захотел посмотреть, как FLProg справится с такой задачей. V 3.0.0
Добавлено (09.12.2017, 11:00)
---------------------------------------------
Вы не правы, есть в CDS v2.3.support писал(а):А ни в одной из промышленных систем возможности самостоятельно задавать порядок выполнения блоков (кроме разбиения на Network -и как у сименса например - но это есть и у меня) не существует.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
вылет версии 3.0
Ну надо быть очень самоуверенным что бы думать что FLProg станет стандартом в промышленном программировании хотя бы в России.
До CodeSys которая по факту является стандартом в этой области в мире мне ещё ой как далеко.
Добавлено (09.12.2017, 11:07)
---------------------------------------------
До CodeSys которая по факту является стандартом в этой области в мире мне ещё ой как далеко.
Добавлено (09.12.2017, 11:07)
---------------------------------------------
В CodeSys можно задать порядок выполнения блоков в схеме на FBD? Интересно как? Я не слышал о таком.Sancho писал(а):Вы не правы, есть в CDS v2.3.
Это было в старом компиляторе (до версии 3.0.2) где анализировалась не схема, а позиционное расположение блоков (тупо - расстояние от нуля координат на схеме). Это приводило к непредсказуемому поведению схемы, когда работа программы зависела не только от схемы соеденеий но и то взаимного расположения блоков. Это очень плохо.Sancho писал(а):Это скомпилировано в FLProg.
Автор программы FLProg.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
вылет версии 3.0
НО!!! После освоения Вашей программы FLProg порог вхождения в CDS, для желающих продолжить, снижается до минимума.support писал(а):До CodeSys которая по факту является стандартом в этой области в мире мне ещё ой как далеко.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
вылет версии 3.0
Этого и добиваюсьSancho писал(а):НО!!! После освоения Вашей программы FLProg порог вхождения в CDS, для желающих продолжить, снижается до минимума.
Автор программы FLProg.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
вылет версии 3.0
Да, плохо. Но указанная схема будет работать даже если блоки перенести, изменится только лишь порядок выполнения, т.к.support писал(а):Это было в старом компиляторе (до версии 3.0.2) где анализировалась не схема, а позиционное расположение блоков (тупо - расстояние от нуля координат на схеме). Это приводило к непредсказуемому поведению схемы, когда работа программы зависела не только от схемы соеденеий но и то взаимного расположения блоков. Это очень плохо.
А насчёт порядка выполнения я уже проходил эти "грабли" в ранних версиях - смотришь на плату одно, смотришь в код IDE - мозг сносит....Все используемые переменные в обратных связях объявлены и проведена начальная инициализация значений.
Последний раз редактировалось Sancho 09 дек 2017, 11:55, всего редактировалось 1 раз.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
вылет версии 3.0
Именно это и плохо. Сейчас конечно гуру научились предугадывать поведение старого компилятора, но это всегда лотерея)))) Ведь согласитесь, порядок выполнения (даже в пределах одного цикла программы) очень важен, и часто может сломать логику работы программы. Схемы бывают разные, и не раз такое случалось . Да Вы и сами сказалиSancho писал(а):изменится только лишь порядок выполнения, т.к.
Поэтому и попытался исправить это.Sancho писал(а):А насчёт порядка выполнения я уже проходил эти "грабли" в ранних версиях - смотришь на плату одно, смотришь в код IDE - мозг сносит....
Автор программы FLProg.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
вылет версии 3.0
CFC - можно. FLProg в режиме FBD ближе к стандарту CFC, как мне кажется.support писал(а):В CodeSys можно задать порядок выполнения блоков в схеме на FBD? Интересно как? Я не слышал о таком.
Сам использую только CFC и ST.
Добавлено (09.12.2017, 11:51)
---------------------------------------------
P.S. Позволю себе немного отвлечься от темы и, пока Автор здесь, спросить: планируется-ли возможность доступа к "глобальным переменным" из блока пользователя?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Sancho 09 дек 2017, 11:58, всего редактировалось 1 раз.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей