Вход

Просмотр полной версии : CodeSys 3.5 Опрос входов/ запись выходов...



B.S.V
07.05.2024, 17:54
Всем привет!
Думаю это вопрос больше для курилки )
Вопрос для повышения уровня образованности.
Обычно ( да что там - всегда), я делаю так: К входам/выходам привязываю битовые переменные, потом в программе я с входной что то делаю и записываю в выходную...
А есть другой подход: в начале программы опрос всех входов по маске, потом маску разбираем на биты, используем, собираем в маску и записываем в выход...

Какой подход более правильный ? Я понимаю что вопрос не однозначен, но все же...

Заранее благодарен!

Евгений Кислов
08.05.2024, 07:29
Добрый день.


Какой подход более правильный?

Каковы критерии "правильности"?

Sergey666
08.05.2024, 08:09
Не считая того, что каждый отдельный BOOL в памяти занимает байт, то разницы особой нет.

melky
08.05.2024, 08:58
Sergey666 разве в таком варианте bool будет занимать байт, peremennaya.4 ? то есть не приводить постоянно к bool что и так можно использовать. Может не всегда так удобно, но часто ведь и не требуется, если под руками всегда есть подсказка за что отвечает тот или иной бит переменной. Например это входы - InputMask.x

Задумкин Сергей
08.05.2024, 09:26
Я тоже думал, что разницы особо никакой. Пока не столкнулся с выравниванием памяти в структурах (кстати, я до конца не уверен, что дело именно в этом). Я тоже привязывал BOOL-переменные. Не знаю как насчет дискретных входов-выходов ПЛК, но вот если привязывать BOOL-переменные (которые обычно упакованы в разные структуры) к Holding или Input-регистрам ПЛК, то начинаются всякие чудеса.
https://owen.ru/forum/showthread.php?t=39084&page=2

melky
08.05.2024, 09:28
Задумкин Сергей выравнивание вероятно не в структурах, как вы думаете, а именно в регистрах хранения, когда вы создаете slave. Там оно однозначно есть.
dword переменный адрес будет кратен 2-м, float переменные адрес будет кратен 4-м (вроде или тоже 2-м, не помню.) в документации должно быть указано по программированию.

Задумкин Сергей
08.05.2024, 09:30
Задумкин Сергей выравнивание вероятно не в структурах, как вы думаете, а именно в регистрах хранения, когда вы создаете slave. Там оно однозначно есть.

А как оно работает в регистрах? Можно об этом где-то почитать?

Cs-Cs
08.05.2024, 09:35
B.S.V Я использую работу с масками тогда, когда надо данные с модулей IO разбирать.
И ещё использую маски для удобства работы с переменными: чтобы все IO-переменные были объявлены в одном списке.
Мой опыт описан в этой моей статье (заголовки 4, 5). Не поленись, глянь, там много интересных приёмов: https://cs-cs.net/technologii-testirovaniya-i-otladky-shhgitov-s-svtomatikoy-na-plk#4_____io

melky
08.05.2024, 09:37
Задумкин Сергей был документик по выравниванию в рэ по программированию CodeSys 2.3 еще для ПЛК1хх вроде. Там прямо табличка для понимания была.
надо поискать в вопросах и ответах или в примерах на сайте. И если вы структуры натягиваете сразу на slave то так и получится с выравниванием.

https://docs.owen.ru/product/plk160m02/759/62787#topic-62821 там про выравнивание.

https://owen.ru/uploads/23/rp_plc100-plc150-plc154_25.pdf - страница 60

Задумкин Сергей
08.05.2024, 10:15
был документик по выравниванию в рэ по программированию CodeSys 2.3 еще для ПЛК1хх вроде

Интересно, а для Codesys 3.5 и ПЛК210 это тоже все актуально?

kondor3000
08.05.2024, 10:44
Интересно, а для Codesys 3.5 и ПЛК210 это тоже все актуально?

Никогда вы всего не предусмотрите, делайте SIZOF над нужной структурой помещённой в слейв и смотрите сколько она занимает байт, если у вас есть смещение по адресам.
Всё выше сказанное с рисунком выравнивания, вам уже выкладывали в теме.
В 2.3 и 3.5 всё одинаково, кроме 8Bit в конфигурации, в 3.5 этого нет.

melky
08.05.2024, 11:08
Задумкин Сергей ну поищите аналогичные документы по ПЛК200 и организации в них переменных Modbus slave.

B.S.V
08.05.2024, 14:38
Добрый день.



Каковы критерии "правильности"?

Ну "правильность" с позиции оптимизации кода...
С позиции логичности... скорости, красоты ))

B.S.V
08.05.2024, 14:52
Я тоже думал, что разницы особо никакой. Пока не столкнулся с выравниванием памяти в структурах (кстати, я до конца не уверен, что дело именно в этом). Я тоже привязывал BOOL-переменные. Не знаю как насчет дискретных входов-выходов ПЛК, но вот если привязывать BOOL-переменные (которые обычно упакованы в разные структуры) к Holding или Input-регистрам ПЛК, то начинаются всякие чудеса.
https://owen.ru/forum/showthread.php?t=39084&page=2

О, я похоже по этим граблям иду ))

B.S.V
08.05.2024, 15:11
B.S.V Я использую работу с масками тогда, когда надо данные с модулей IO разбирать.
И ещё использую маски для удобства работы с переменными: чтобы все IO-переменные были объявлены в одном списке.
Мой опыт описан в этой моей статье (заголовки 4, 5). Не поленись, глянь, там много интересных приёмов: https://cs-cs.net/technologii-testirovaniya-i-otladky-shhgitov-s-svtomatikoy-na-plk#4_____io

Благодарю, идея понравилась. Я не знал что так можно реализовать ) На досуге прочитаю все остальное )

МихаилГл
08.05.2024, 15:26
Не знаю, я сразу завожу переменную ворд под всё алармы и другие дела. При чтении входов присваиваю нужным битам були, при записи выходов проще, там уже через соотнесение, либо обратная последовательность. А на весь проект подробный excel файл. Металлургический цех на 6ти ПЛК210 нормально запустился, без танцев и с первого раза, даже косяков не было. Так там и ИП320, и СП315Р. Всё через регистры. Главное никаких булов, сразу планировать карту регистров и только так.

Cs-Cs
08.05.2024, 16:36
Благодарю, идея понравилась. Я не знал что так можно реализовать ) На досуге прочитаю все остальное ) Давай! Там дофига интересных приёмов и штуковин - это мой опыт ну... лет за 4-5!

B.S.V
08.05.2024, 16:36
Ну вот у меня сейчас 200/200 входов/выходов + 16/8 аналоговых входов/выходов, ПЛК200 и СП310... туннельная печь декольного обжига... 14 газовых горелок крови попили ))... Была замена старого буржуйского контроллера STANGE SE-404.
Дали 3 недели на замену, это при том что никто толком не знает как она работает. Короче работать я ее заставил, уже пол года отработала, все довольны, но пришло время привести программу в порядок, кое что изменить, морду дорисовать...
Ну и с многозадачностью хочу здесь поиграться. Здесь как раз две задачи : поддержание температур в 9 зонах и управление "дорогой" (тележки по кругу катаются)...
Кстати вопрос по дороге: Дорога состоит из 7 участков. Тележки двигаются цепями с зацепами. куча концевиков. Каждый участок передвигает тележку на другой участок и зацеп возвращается домой. С крайними положениями все нормально но если в промежуточном положении выключить питание то после включения не всегда понятно что делать - куда двигалась цепь - тянула тележку или возвращалась в домашнее положение... 18 ретайн переменных решают задачу - но их придется перезаписывать грубо каждую минуту - это нормально ? Или их физический ресурс быстро кончится ? А если на SD карте их хранить ? Сдохла - поменяли...

Евгений Кислов
08.05.2024, 16:41
Ну "правильность" с позиции оптимизации кода...
С позиции логичности... скорости, красоты ))

Красота - субъективное понятие.
С точки зрения "скорости" - в среднестатическом проекте (с несколькими тысячами переменных) между двумя описанными в первом посте вариантами, вероятнее всего, просто не будет измеримой разницы.

B.S.V
08.05.2024, 16:54
Красота - субъективное понятие.
С точки зрения "скорости" - в среднестатическом проекте (с несколькими тысячами переменных) между двумя описанными в первом посте вариантами, вероятнее всего, просто не будет измеримой разницы.

Понял, благодарю. Получается оба подхода правильные. А дальше - кому то нравятся блондинки а кому то брюнетки...

Cs-Cs
08.05.2024, 17:03
Про RETAIN на ОВЕНе переживать не надо: все ОВЕНские современные ПЛК (ну, в смысле года с 2018го и далее) сохраняют RETAIN на Flash-память только при выключении питания. То есть, можно в RETAIN писать что угодно и сколько угодно.
Я не спец в такой крутой автоматике, как у тебя, но думаю что всё же надо выдумать что-то и на случай того, когда в RETAIN ничего не сохранено, и надо аппаратно (через какие-нить концевики?) вернуть всё на начало.

B.S.V
08.05.2024, 20:27
Про RETAIN на ОВЕНе переживать не надо: все ОВЕНские современные ПЛК (ну, в смысле года с 2018го и далее) сохраняют RETAIN на Flash-память только при выключении питания. То есть, можно в RETAIN писать что угодно и сколько угодно.
Я не спец в такой крутой автоматике, как у тебя, но думаю что всё же надо выдумать что-то и на случай того, когда в RETAIN ничего не сохранено, и надо аппаратно (через какие-нить концевики?) вернуть всё на начало.

То есть, ПЛК успеет при пропадании питания переписать все на флэш ? Надо внимательнее этот вопрос изучить...
Сейчас операторы показывают контроллеру в такой ситуации что делать... Но там девочки - поэтому желательна одна кнопка Вглюк/Выглюк и все ))) При нажатии кнопки "Запуск Печи" или "Останов Печи" выскакивает окно "Вы уверенны? Да Нет" - Они стоят и думают - уверенны ли они )))) А обслуга категорически против изменений в схеме - уже привыкли и переучиваться не хотят.

Cs-Cs
09.05.2024, 07:53
То есть, ПЛК успеет при пропадании питания переписать все на флэш ? Надо внимательнее этот вопрос изучить...
Да. А уж на CodeSys 3.5 - тем более. Это делается прозрачно для нас (пользователей-программистов).
Вот ссылка на FAQ от Евгения Кислова: https://owen.ru/forum/showthread.php?t=28167&page=6&p=308592&viewfull=1#post308592

МихаилГл
09.05.2024, 08:27
Если это не критично, то при запуске контроллера при неизвестном положении концевиков, т.е. механизма, я бы однократно запустил этот механизм до срабатывания любого промежуточного, либо основного концевика. И не надеялся на ретейн переменные. Но только там, где это можно применять.

B.S.V
09.05.2024, 11:39
Да. А уж на CodeSys 3.5 - тем более. Это делается прозрачно для нас (пользователей-программистов).
Вот ссылка на FAQ от Евгения Кислова: https://owen.ru/forum/showthread.php?t=28167&page=6&p=308592&viewfull=1#post308592

Да, я почитал про MRAM... И че я к нему как к богемскому хрусталю относился )))

B.S.V
09.05.2024, 11:45
Если это не критично, то при запуске контроллера при неизвестном положении концевиков, т.е. механизма, я бы однократно запустил этот механизм до срабатывания любого промежуточного, либо основного концевика. И не надеялся на ретейн переменные. Но только там, где это можно применять.

Где можно - так и реализовано, но в основном так не можно... Но не жалея ретайн я перекрою эти моменты )

Cs-Cs
09.05.2024, 15:34
Да, я почитал про MRAM... И че я к нему как к богемскому хрусталю относился )))
Вот хрен тебя знает =))

Емельянов Кирилл
10.05.2024, 00:12
Да, я почитал про MRAM... И че я к нему как к богемскому хрусталю относился )))

Наверное потому, что в недалёком прошлом к перезаписи энергонезависимых переменных следовало относиться очень серьёзно

B.S.V
10.05.2024, 10:32
Вот хрен тебя знает =))

Старая привычка...

Cs-Cs
10.05.2024, 10:49
Старая привычка... Давай, читай мою ту статью и переучивайся на новые фишечки =)

МихаилГл
19.02.2025, 19:17
Наклон 1 вроде надо сделать...