PDA

Просмотр полной версии : Hardella IDE



Страницы : [1] 2 3 4 5 6

Владимир Ситников
28.12.2015, 00:16
Планирую использовать ПЛК110, посмотрел на CoDeSys 2.3 и нахожусь в шоковом состоянии.
Как можно программировать в среде, в которой нет автодополнения, нет подсказок обязательных/опциональных параметров, нет возможности "найти все использования функции", нет возможности переименовать POU?

Собственно, вопрос: только мне редактор CoDeSys'а кажется невыносимым?

Что если сделать среду с нормальным автодополнением? Будет успех?
Сделать "автодополнение для ST/CFC" легко -- язык простой.

Есть желающие попробовать/обкатать?
Что ещё нужно для полного счастья?

Текущая версия: https://hardella.com/download

Видеопример "создаём проект": https://www.youtube.com/watch?v=zCULGT3yZwA&feature=youtu.be

UPD 20 мар 2017: v1.7.0
PRU: Поправлен обмен PRU-host (в 1.6.2 был сломан)
PRU: Поправлен блок PDM_DW (он работал наоборот)
PRU: Статистика времени длительности работы PRU цикла в online режиме
ST: Возможность добавления комментариев справа от точки с запятой, IF, ELSIF, т.п.

UPD 24 янв 2017: v1.6.2
Регистронезависимый ввод (т.е. можно писать bool, и среда поправит на BOOL)
PRU: разделение MemoryTransfer на MemoryRead и MemoryWrite
PRU: Подключать библиотеку pruAccessLib.lib больше не требуется
Убраны лишние скобки после операции NOT
CoDeSys: поддержка PLC100 таргетов в демо проекте

UPD 25 дек 2016: v1.6.1
При замене TON(...) -> TOF(...) параметры не краснеют как раньше
Введён в строй механизм автообновлений

UPD 19 дек 2016: v1.6.0
Теперь можно программировать оба PRU ядра
Расширена библиотека встроенных блоков
Добавлена документация: https://hardella.com/docs/introduction
Добавлены встроенные примеры (при создании проекта)

UPD 27 окт 2016: v1.5.0
Добавлен режим PRU программирования (управления быстрыми входами-выходами ПЛК110М02)
Демо-проект для работы с КДС сломался. Т.е. версия подходит только для PRU программирования.
Демо "создаём PRU проект": http://recordit.co/beYcl4OfDO (в виде анимированного gif: http://g.recordit.co/beYcl4OfDO.gif)

UPD 12 июн 2016: v1.4.0
Сделал логотип: 24920
Экран загрузки: 24921
Экран приветствия: 24922

UPD 30 апр 2016: v1.3.0
Появилась кнопка "создать проект с лампочкой": https://youtu.be/zCULGT3yZwA
24240

UPD 22 мар 2016: v1.2.0
Заработал пример с "кнопкой, TON и лампочкой": http://recordit.co/bJe2u0b3xy
Кнопка привязывается к DI1, лампочка -- к DO1.
Картинка: 23284


UPD 12 мар 2016
Редактирование PLC configuration: http://recordit.co/23jp25ziAh

UPD 24 фев 2016
Первые шаги импорта PLC Target файлов (*.cfg): http://recordit.co/WbJeBXABXN

UPD 15 фев 2016
Редактор CFC: http://recordit.co/2Itr7umnlo
Редактор диаграмм, конечно, совсем сырой, но интеграция с остальными POU работает. Например, меняем добавляем/удаляем input/output переменную -- на CFC добавляется вход-выход.

Тут: https://github.com/vlsi/ide61131/releases/tag/v1.2.0

UPD 14 фев 2016
указатели: http://recordit.co/U6TTCkqOI4
массивы, структуры, перечисления: http://recordit.co/ijjFqJuiZv
CASE

Тут: https://github.com/vlsi/ide61131/releases/tag/v1.1.0

UPD 10 фев 2016
1-ая версия, которую можно пощупать: https://github.com/vlsi/ide61131/releases/tag/v1.0.0
Инструкция тут: http://www.owen.ru/forum/showthread.php?t=23013&page=14&p=197300&viewfull=1#post197300

UPD 18 янв 2016
"Импорт библиотек": http://recordit.co/kSuJuPbMSA

UPD 11 янв 2016
Картинки "как выглядит" среда: http://www.owen.ru/forum/showthread.php?t=23013&page=6&p=191796&viewfull=1#post191796
Видео "интеграция с CoDeSys": http://www.owen.ru/forum/showthread.php?t=23013&p=192243&viewfull=1#post192243

http://www.owen.ru/forum/showthread.php?t=23013&p=192291&viewfull=1#post192291
Видео "поиск использований": http://recordit.co/rx38caMeIA
Видео "переименование переменных": http://recordit.co/g1qQlwj1Co

murdemon
28.12.2015, 00:50
Я думаю такое не будет пользоваться популярностью... сильно. Тут обычно мало код пишется. Обычно из старых проектов, которые еже во многих местах работает, копипастится все в один и проверяется. Тем более ST - это не совсем то для чего делался МЭК 61131-3 Вот LAD и тд - это тот самый уровень.

Валенок
28.12.2015, 00:50
режиме "нормальный редактор -> экспорт в codesys " будет удобнее
..до первого пнр в полях.
Не в смысле что проблемы с программированием, это тут далеко не узкое место, а в смысле что вдруг обнаружится - датчик не di а ai...
вот например
http://www.owen.ru/forum/showthread.php?t=22990
Программирования - на 10-30минут. Ну станет 5-15минут. Это серьезно. Только сутки выяснять/уточнять надо - что есть, и что хотят.

Scream
28.12.2015, 09:14
Планирую использовать ПЛК110, посмотрел на CoDeSys 2.3 и нахожусь в шоковом состоянии.
Как можно программировать в среде, в которой нет автодополнения, нет подсказок обязательных/опциональных параметров, нет возможности "найти все использования функции", нет возможности переименовать POU?

Собственно, вопрос: только мне редактор CoDeSys'а кажется невыносимым?

Что если сделать среду с нормальным автодополнением? Будет успех?
Среду можно на основе такого проекта сделать: http://mbeddr.com/index.html

Сделать "автодополнение для ST" легко -- язык простой.

Думаю, даже в режиме "нормальный редактор -> экспорт в codesys" будет удобнее, чем в codesys сейчас.

Есть желающие попробовать/обкатать такое?
Как это нет возможности переименовать POU? пр. кн. мыши не пробовали на POU? главный только нельзя.
Нет автодополнения? читать дальше не стал, человек тупо наезжает на среду разработки с которой работать не умеет, все как и везде ctrl+пробел.
Да, не очень удобно, табуляция в ручную и много еще чего, но выбирать не приходится, к сожалению.

Владимир Ситников
28.12.2015, 10:20
Понять бы с чем Вы пытаетесь сравнить программирование ПЛК?
Это намеренно все сокращено и урезано в соответствии с МЭК 61131-3.
Понятно, что языковые возможности специально урезаны.
Я сравниваю с IntelliJ IDEA: https://dzone.com/articles/top-20-code-completions-in-intellij-idea, https://www.jetbrains.com/idea/
Даже если по английски не читаете, по картинкам понятно, что там совсем другой класс.


Нет анимационных таблиц.
Это что такое?



Как это нет возможности переименовать POU? пр. кн. мыши не пробовали на POU?
И что? Разве использования этого POU переименовались?
У меня вот нет (CS 2.3 из wine)

А переменную переименовать?
Ведь, понятные названия сильно повышают читабельность, а, значит, и надёжность.

Смотрю я на проект там написано такое:

dim1 : Dimmer_12L; (* это для вкл/выкл диммируемого света*)
Внимание, вопрос: как мне перейти к этому самому "Dimmer_12L"?


Нет автодополнения?
Я смотрел справку и пробовал "F2". Ну не хочет это автодополнение появляться.
Максимум что получилось -- открыть окно со списком вообще всех переменных/функций (input assisstant).
Но, блин, это далеко не то же самое, когда пишешь, а оно тебе подсказывает как пишется переменная.

Здесь, возможно, сказывается то, что я запускаю из MacOS через wine. Да, на ctrl+пробел экран смаргивает, но мне то от этого не легче...


Да, не очень удобно, табуляция в ручную и много еще чего, но выбирать не приходится, к сожалению.
Так я и говорю, что можно себе нормальную среду сделать.


Только сутки выяснять/уточнять надо - что есть, и что хотят.
Так всегда.

Scream
28.12.2015, 10:27
Дак это проблема отнюдь не codesys, раз у вас не вылазиет автодопонение, мне оно жизнь здорово облегчает, да не такое как у IntelliJ IDEA например или NetBeans, но всеже есть.

"И что? Разве использования этого POU переименовались?"
Проект -> глобальная замена.

Владимир Ситников
28.12.2015, 11:56
начнем с того что все претензии к немцам

Так я с этого и начал.
Тут вопрос в другом: я же не просто говорю "CS отстой", а предлагаю сдвинуть ситуацию с мёртвой точки.

Но, с другой стороны, я в CS ни одной программы не написал ещё, поэтому и хочу понять насколько CS реально является проблемой.

И, да, wine использую от безысходности. Да, под windows надо попробовать, но сдаётся мне сильно лучше CS выглядеть под windows не будет.


Проект -> глобальная замена.
Это же каменный век какой-то... Случайно совпали имена в разных POU и привет.

capzap
28.12.2015, 13:00
Так я с этого и начал.
Тут вопрос в другом: я же не просто говорю "CS отстой", а предлагаю сдвинуть ситуацию с мёртвой точки.




так на этом то форуме зачем это писать, овен выбрал среду разработки потому что бесплатно, незнаю как это может повлиять на то что немцы прислушаются к Вашим хотелкам

Scream
28.12.2015, 13:07
Так я с этого и начал.
Тут вопрос в другом: я же не просто говорю "CS отстой", а предлагаю сдвинуть ситуацию с мёртвой точки.

Но, с другой стороны, я в CS ни одной программы не написал ещё, поэтому и хочу понять насколько CS реально является проблемой.

И, да, wine использую от безысходности. Да, под windows надо попробовать, но сдаётся мне сильно лучше CS выглядеть под windows не будет.


Это же каменный век какой-то... Случайно совпали имена в разных POU и привет.

для этого вы выбираете те, где хотите сделать.

Владимир Ситников
28.12.2015, 14:05
так на этом то форуме зачем это писать, овен выбрал среду разработки потому что бесплатно, незнаю как это может повлиять на то что немцы прислушаются к Вашим хотелкам

Ещё раз: для ST я сам могу среду сделать. Разработчикам CS, судя по всему, наплевать на среду разработки.
Ну и пёс с ними.

Пишу тут, чтобы понять есть ли вообще потребность, ну и найти того, кто "со знанием предметной области" сможет посмотреть (попробовать) и сказать норм или не норм получается.

Владимир Ситников
28.12.2015, 14:06
Сделай и успокойся. Если больше делать нечего. ;)

Не, если никто кроме меня пользоваться не будет, то всё-таки лень пока перевешивает :)

Владимир Ситников
28.12.2015, 14:17
Посмотри CoDeSys V3, там многое чего ты хочешь есть.

Для ПЛК110 CoDeSys V3 работать будет?

Вольд
28.12.2015, 14:19
Для ПЛК110 CoDeSys V3 работать будет?

Нет, не будет. Есть еще вариант ПЛК110 с Linux (этот вопрос надо уточнить у Филоненко Владислава из компании "ОВЕН").

rapucha
28.12.2015, 14:43
Баловство это))
Ну сравнили вы с Idea! круче-то и нет никого.

Codesys v2, как я понимаю, тянется в режиме минимальной поддержки, основные силы в v3, а там чуть получше. Хотя тоже страх конечно...

Но тул не будет самодостаточным, потому что:
1 конфигурация ПЛК не будет поддержана (да ведь?)
2 графические языки не будут поддержаны (да ведь?)
3 задолбаемся передавать сорцы на компиляцию, CDS мне показалось весьма слабо умеет работать в пакетном режиме.

Я вот резко стал пользоваться SFC, мне так удобнее обсуждать с заказчиком постановку задачи. Наколбасить все в ST не вопрос, но сдача работы будет очень формальной и непростой тогда.

Так что со средой я смирился. В конце концов, это не сильно хуже классического Multiedit'а и точно лучше нотепада ))

А вот тестового фреймворка не хватает. Мне кажется его и нет толком, и вот там усилия имели бы некоторый смысл.

PS А еще с контролем версий полный атас. Работающий ENI сервер продают толи за полторы тыщи евро, толи за 2.5, и это будет интерфейс к Sourcesafe ))
Но тут я бы и браться не стал -- хороший дифф для визуально-представляемых компонентов тянет на революцию в индустрии. Если есть идеи, как это делать -- то надо пробовать сразу в CAD системах или фотошопе, бабло можно грести лопатой. Сериализовать в XML и показать дифф там -- плохая идея, потому что ничерта не понятно будет, что это в реале означает.

Вольд
28.12.2015, 14:56
Я вот резко стал пользоваться SFC, мне так удобнее обсуждать с заказчиком постановку задачи. Наколбасить все в ST не вопрос, но сдача работы будет очень формальной и непростой тогда.

Обычно заказчика волнует только один вопрос: соответствует ли то, что делает система управления тому, что записано в ТЗ.

capzap
28.12.2015, 15:17
Я вот резко стал пользоваться SFC, мне так удобнее обсуждать с заказчиком постановку задачи. Наколбасить все в ST не вопрос, но сдача работы будет очень формальной и непростой тогда.
ну и как Вы растолковываете заказчику, далекому от программирования, вопросы которые сами здесь задавали недавно по SFC? :)

Валенок
28.12.2015, 15:39
Так всегда.
Ну вот и нафига эта экономия на спичках ? Затратить на задачу 24,5 часа или (применив не спорю хорошие вещи) затратить 24,25 часа.
Вы пытаетесь сделать эдакое стильное рабочее место дровосека со специальным модным крепежом топора и пилы.

Валенок
28.12.2015, 15:41
ну и как Вы растолковываете заказчику, далекому от программирования, вопросы которые сами здесь задавали недавно по SFC? :)
Далекому - как раз не сложно. Сложнее рядом проходившему ))

Владимир Ситников
28.12.2015, 15:58
1 конфигурация ПЛК не будет поддержана (да ведь?)
О чём речь?
"PLC Configuration" где настраиваются входы-выходы?
ХЗ насколько сложно это сделать.


2 графические языки не будут поддержаны (да ведь?)
Ну, мне самому в первую очередь показалась бОльшая польза от ST.
Тем не менее, mbeddr платформа поддерживает и графические языки. Как это выглядит можно посмотреть тут: http://mbeddr.com/platform.html (поиск по слову Diagrams)



А вот тестового фреймворка не хватает. Мне кажется его и нет толком, и вот там усилия имели бы некоторый смысл.


Вроде, есть http://store.codesys.com/codesys-test-manager.html.
С ценником: 1.500,00 €

Честно говоря, как делать тесты тоже пока без понятия.
Но, опять же, если сделать "свою IDE", то и с тестами должно быть проще.

Хотя, конечно, непонятно как это добро тестировать.
Прикольно было бы "failover" тесты делать: "запускаешь программу, подаёшь данные на входы, и, бац, вырубаешь питание". Мечты, мечты.


PS А еще с контролем версий полный атас.
В mbeddr точно работает git: http://www.youtube.com/watch?v=2QzGHHez2nc

rapucha
28.12.2015, 16:21
Обычно заказчика волнует только один вопрос: соответствует ли то, что делает система управления тому, что записано в ТЗ.

У меня немного иная ситуация, ПЛК используется для прототипирования: как установки, так и алгоритма управления. По итогам этой работы будем делать специализированнную железяку.


ну и как Вы растолковываете заказчику, далекому от программирования, вопросы которые сами здесь задавали недавно по SFC? :)
Вот прям все эти вопросы им не важны. Мужики нарисовали мне в качестве ТЗ блок-схему на 2 метра с небольшим. Смотрим в отладке, как передается управление с шага на шаг, для начала. Потом на каждом шаге проведем контроль параметров.

Требования к алгоритму нередко меняются, так что это не работа по ТЗ а скорее НИОКР.

rapucha
28.12.2015, 17:24
Вроде, есть http://store.codesys.com/codesys-test-manager.html.
С ценником: 1.500,00 €

Version 3.5.3.0 or higher

v3 во многом более человечная версия. Но в Овене используется v2. Довольно нишевое решение будет.

Владимир Ситников
28.12.2015, 18:19
v3 во многом более человечная версия. Но в Овене используется v2. Довольно нишевое решение будет.
Да, посмотрел видео в youtube, v3 действительно более человечна.

А для "поддержки V3" от ОВЕНА требуется что-то менять в оборудовании?
Или деньги за лицензию платить?
Или ещё что-то?

capzap
28.12.2015, 18:29
Смотрим в отладке, как передается управление с шага на шаг, для начала.

так и в ST тоже самое, только инфы больше видно, к тому же каждую строчку можно окружить подробными комментариями

ЗЫ по поводу сочетания клавиш ctrl+пробел, так же можно просто поставить точку, это будет работать если в опциях проекта поставить нужные галки. Но скорее всего имеется ввиду не вставка переменных, а завершение конструкций IF,CASE и циклов, что там еще есть набрать комбинацию символов и нажать табуляцию. Это вроде бы облегчает жизнь, но в программировании плк обычно не нужно создавать велосипед, готовые блоки уже кем то были придуманы, реализованы и где нибудь выложены, обычно разработчику остается накидать готовые блоки и соединить их связями, расставить где нужно константы и все в общем

Владимир Ситников
28.12.2015, 18:32
ЗЫ по поводу сочетания клавиш ctrl+пробел, так же можно просто поставить точку, это будет работать если в опциях проекта поставить нужные галки
Похоже, в wine точка не работает.

Yegor
28.12.2015, 18:43
Сделать "автодополнение для ST" легко -- язык простой.Cекции объявлений в 61131-3 пишутся не на ST (сюрпрайз!). А развитое контекстуальное автодополнение предполагает частичную компиляцию некорректного кода (чтобы вычислить контекст и варианты) — не самая тривиальная задача. Когда вы сделаете нормально работающее автодополнение, у вас уже будет целая IDE.

Вообще программы для ПЛК немногословны и содержат куда меньше абстракций, чем то, что обычно пишут на джаве. Я сам сначала испугался второго кодесиса после Visual Studio, но потом заметил одну интересную вещь: программу на ПЛК я легко напишу в блокноте, а вот что-нибудь серьёзное на C# — ну на фиг. То есть автодополнение не так критично, я считаю.

Николаев Андрей
28.12.2015, 19:05
Вопрос к автору топика.
А вопрос то у Вас в чем?
Ну кроме того что Вам что-то нравится, что-то не нравится и Вы хотите сами поразрабатывать системы программирования ПРОМЫШЛЕННЫХ контроллеров?

Если потрепаться, то как Вы логично предполагаете, тема будет перенесена в курилку.

rapucha
28.12.2015, 19:08
То есть автодополнение не так критично, я считаю.

Угу. вот интерфейсов бы.. или абстрактных классов, хотя бы))

Владимир Ситников
28.12.2015, 20:08
Вопрос к автору топика.
А вопрос то у Вас в чем?
Ну кроме того что Вам что-то нравится, что-то не нравится и Вы хотите сами поразрабатывать системы программирования ПРОМЫШЛЕННЫХ контроллеров?
Вполне конкретный вопрос, про вполне конкретную среду. Хочу понять мнение народа, реально работающего с CS 2.
Судя по всему, мнение тех, кто заглядывает в ветку CS 2 уже собрано. Можно и в курилку -- может, там ещё что скажут.


Если потрепаться, то как Вы логично предполагаете, тема будет перенесена в курилку.
Вообще, трепаться мне меньше всего хочется.
Если надо -- делаем. Если не надо -- не делаем. Трепаться на тему C# vs ST это не моё.

Scream
28.12.2015, 20:59
Делайте, посмотрим что получится оценим.

Валенок
28.12.2015, 21:05
Обиделся он. 100 пудов не сделает.

Валенок
28.12.2015, 21:56
Ну ты помоги. ;)
Не знаю с какого бока подойти. Темный я

Lam-Ka
30.12.2015, 09:10
Вот же "программисты" пошли: нет автодополнения - и уже "в шоке". Черт возьми- как же я 20 лет назад писал на Паскале, в среде, где из всех удобств на этапе написания программы была только подсветка синтаксиса ( и это в то время было "мегакруто")?

Eugene.A
30.12.2015, 09:28
Вот же "программисты" пошли: нет автодополнения - и уже "в шоке". Черт возьми- как же я 20 лет назад писал на Паскале, в среде, где из всех удобств на этапе написания программы была только подсветка синтаксиса ( и это в то время было "мегакруто")?

А как я в 1975 на Алгол 60 (Мир-1) - шариковой ручкой? Потом сдаёшь "исходник" девочке-оператору, и на следующий день "компилятор" выдаёт - ошибка. Где, какая - гадай сам.

capzap
30.12.2015, 09:35
:) а я, да я вообще в перфолентах разбирался

Lam-Ka
30.12.2015, 09:56
:) а я, да я вообще в перфолентах разбирался
Зачет... :eek:

Вольд
30.12.2015, 10:31
А как я в 1975 на Алгол 60 (Мир-1) - шариковой ручкой? Потом сдаёшь "исходник" девочке-оператору, и на следующий день "компилятор" выдаёт - ошибка. Где, какая - гадай сам.

Разве в Мир-1 использовался Алгол 60 ? Там операторы были русскоязычными.

Оператор цикла
Оператор цикла записываются в одном из двух форматов:
"ДЛя" параметр = выражение 1 "Шаг" выражение 2 "ВЫПолнить" оператор
"ДЛя" параметр = выражение 1 "Шаг" выражение 2 "ДО" выражение 3 "ВЫПолнить" оператор

http://we.easyelectronics.ru/trengtor/vspominaya-pro-mir-1-i-almir-65.html

rapucha
30.12.2015, 13:47
Вот же "программисты" пошли: нет автодополнения - и уже "в шоке". Черт возьми- как же я 20 лет назад писал на Паскале, в среде, где из всех удобств на этапе написания программы была только подсветка синтаксиса ( и это в то время было "мегакруто")?

50 лет назад вместо всех нас хватало просто кочегара в котельной ))

Попробуйте без нормальной навигации по коду управляться с проектом, где сорцов под гигабайт, и коммитят человек за 20. Может быть, вы и справитесь -- есть талантливые люди. А обычному программисту без таких средств -- тяжело.
Потом, поймите -- дело не в том что чтобы мочь или не мочь работать. Вопрос в производительности -- сколько уйдет на въезжание в проект и написание рабочей версии, сколько уйдет на внесение изменений в проект годовалой давности, сколько ошибок сделает программист на килограмм кода (и как быстро их починит).. Ну и вопрос сложности проекта, повторюсь. Если программа помещается на одном экране, то и нотпада хватит.

Lam-Ka
30.12.2015, 18:42
50 лет назад вместо всех нас хватало просто кочегара в котельной ))

Попробуйте без нормальной навигации по коду управляться с проектом, где сорцов под гигабайт, и коммитят человек за 20. Может быть, вы и справитесь -- есть талантливые люди. А обычному программисту без таких средств -- тяжело.
Потом, поймите -- дело не в том что чтобы мочь или не мочь работать. Вопрос в производительности -- сколько уйдет на въезжание в проект и написание рабочей версии, сколько уйдет на внесение изменений в проект годовалой давности, сколько ошибок сделает программист на килограмм кода (и как быстро их починит).. Ну и вопрос сложности проекта, повторюсь. Если программа помещается на одном экране, то и нотпада хватит.
Эмм, и как автодополнение поможет навигации? Или- поможет избежать ошибок? Что касается внесения изменений (равно как и навигации)- так даже в том же нотпаде есть поиск по тексту. И да- в нормальных командах каждый коммит обычно снабжается комментариями: "где, что и почему", а если все в одну кучу свалено, да еще и без документации- так тут никакая самая продвинутая IDE с искусственным интеллектом не поможет разгрести "Авгиеву конюшню"

Валенок
30.12.2015, 18:49
Ну Lam-ka вы даёте. Да если в бассейне да расчертить дорожки, да заполировать лесенки, да развестись везде плакаты - то умение плавать само и приходит

rapucha
30.12.2015, 22:33
Эмм, и как автодополнение поможет навигации? Или- поможет избежать ошибок? Что касается внесения изменений (равно как и навигации)- так даже в том же нотпаде есть поиск по тексту. И да- в нормальных командах каждый коммит обычно снабжается комментариями: "где, что и почему", а если все в одну кучу свалено, да еще и без документации- так тут никакая самая продвинутая IDE с искусственным интеллектом не поможет разгрести "Авгиеву конюшню"


автодополнение само по себе навигации мало поможет, конечно. а быстрый просмотр структуры модуля и зависимостей-- очень даже. И компиляция на ходу, с проверкой типов, тоже хорошо.

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

Автодополнение помогает быстрее изучить струкутру проекта или библиотеки, впрочем.

Коммиты, конечно, с комментариями. Но в реальной жизни -- когда вы оказались на проекте такого размера (среднего, в общем-то) через год после его начала -- читать все коммиты от Адама вы не станете. Аннотации изменений к конкретным строчкам, если среда позволяет -- да, полезно глянуть. Но в общем-то никакая помощь от IDE не лишняя. Голова конечного размера, если в нее засунуть весь код проекта в подробностях, не хавтит места под что-то другое ))
Никто не говорит, что IDE сама программы пишет. но чем меньше программист занят глупостями, тем больше внимания остается на дело. И да, в наше время запускать билд кнопкой, чтобы проверить ошибки -- анахронизм.

в бассейне да расчертить дорожки.. заполировать лесенки ..плакаты

на полированой лесенке убиться можно, плакаты нах никому не нужны, а дорожки нужная вещь. И отдышаться можно, если слабоват, и людей разделяет, чтобы головами не бились. Рисунок на дне, кстати, тоже помогает, когда на дорожке больше одного человека.

Eugene.A
30.12.2015, 23:18
Разве в Мир-1 использовался Алгол 60 ? Там операторы были русскоязычными.
http://we.easyelectronics.ru/trengtor/vspominaya-pro-mir-1-i-almir-65.html
Вполне вероятно. Но Алгол нам тоже пришлось изучать. Поэтому в деталях уже не помню, на каком именно языке пришлось писать программу обработки данных лабораторной работы. Она заключалась во взвешивании на аналитических весах 200(!) шариков от шариковой ручки, с последующим вычислением среднеквадратичных отклонений, погрешности изменеий(коэффициент Стьюдента, если кто помнит) и прочей скучной ерунды.
Поэтому впоследствии, лет через 15, заимев собственный компьютер (Радио РК-86), все эти GOTO, REAL и INTEGER показались как родными.

Валенок
30.12.2015, 23:27
на полированой лесенке убиться можно, плакаты нах никому не нужны, а дорожки нужная вещь. И отдышаться можно, если слабоват, и людей разделяет, чтобы головами не бились. Рисунок на дне, кстати, тоже помогает, когда на дорожке больше одного человека.
Уговорили. Лесенки и плакаты вычеркиваем.
Чтоб научится плавать нужны всего лишь дорожки и рисунок на дне !!!
А тема рисунка важна для умения плавать ?
(Шапочка !! про шапочку забыли. Мне простительно - я лысый)

Валенок
30.12.2015, 23:56
Никто не говорит, что IDE сама программы пишет. но чем меньше программист занят глупостями, тем больше внимания остается на дело. И да, в наше время запускать билд кнопкой, чтобы проверить ошибки -- анахронизм.
Есть здесь супер IDE - хорошо. Нету супера, как сейчас, так хуже что просто незаметно. Здесь нет многометровых прог чтоб это имело заметное значение. ТЗ, схемы, пнр, рэ - на это уходит 95% времени

rapucha
30.12.2015, 23:56
Уговорили. Лесенки и плакаты вычеркиваем.
Чтоб научится плавать нужны всего лишь дорожки и рисунок на дне !!!
А тема рисунка важна для умения плавать ?
(шапочка !! про шапочку забыли)

PS
откуда вообще тема про обучение взялась? причем тут это? автор топика, скорее всего, за станком не первый год. Не думаю, что у того, кто готов дописать к среде автокомплит, возникнут трудности с программированием на еще одном процедурном языке.

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

Валенок
30.12.2015, 23:59
откуда вообще тема про обучение взялась.
Имхо - пост #2 и #3 за глаза

rapucha
31.12.2015, 00:19
Есть здесь супер IDE - хорошо. Нету супера, как сейчас, так хуже что просто незаметно. Здесь нет многометровых прог чтоб это имело заметное значение. ТЗ, схемы, пнр, рэ - на это уходит 95% времени

кстати, лично меня скорее раздражает сам язык ST, с отдельным блоком деклараций (и дебильным отдельным окном под него у кдс), и с отсутствием наследования\полиморфизма. получается очень многословно, куча букв ради капли смысла. Среда в общем пофиг, видали и хуже.

Зато можно картинки рисовать ))

Lam-Ka
31.12.2015, 09:09
Ну Lam-ka вы даёте. Да если в бассейне да расчертить дорожки, да заполировать лесенки, да развестись везде плакаты - то умение плавать само и приходит
ну так мое начальство уверено, что если человек три дня после трудоустройства провел на работе (неважно чем он занимался на самом деле- главное "был на работе!")- то он уже априори все умеет.:rolleyes:
А Вы- "дорожки, лесенки".... у нас супертехнологии- одного присутствия достаточно ;)

Lam-Ka
31.12.2015, 09:37
Потому что с простой заменой есть риск переименовать схожий по названию компонент, внеся тем самым багу. Я как-то именно автодополнением внес багу, которую потом дня три выискивал (косяк, конечно больше мой- было несколько функций с похожими именами, а IDE автоматом ставит последнюю использованную.


Автодополнение помогает быстрее изучить струкутру проекта или библиотеки, впрочем.
Возможно, но я предпочитаю хотя бы бегло пролистать описание библиотеки. В целом- согласен: возможности современных IDE (Visual Studio, как пример) довольно сильно упрощают процесс разработки ПО.


Коммиты, конечно, с комментариями. Но в реальной жизни -- когда вы оказались на проекте такого размера (среднего, в общем-то) через год после его начала -- читать все коммиты от Адама вы не станете. Аннотации изменений к конкретным строчкам, если среда позволяет -- да, полезно глянуть. Но в общем-то никакая помощь от IDE не лишняя. Голова конечного размера, если в нее засунуть весь код проекта в подробностях, не хавтит места под что-то другое ))

от Адама- может и не стану... Ну вообще-то я из тех людей, кто документацию читает с конца ;)- если мне непонятен тот или иной блок- буду исследовать его "родословную" пока не придет "просветление". А объем головы- штука довольно загадочная: задумайтесь на пару минут- сколько всякой неведомой ерунды мы запоминаем не напрягаясь (новости шоу-бизнеса, дворовые сплетни, курсы валют, итд., и тпю)- причем зачастую это нам абсолютно не нужно, а помнится очень долго. В тоже время- немногие 30-летние особи "хомо сапиенс" могут с ходу вспомнить таблицу умножения.


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

Где-то слышал: "у хорошего программиста программа уже написана в голове пока он читает ТЗ". Разумеется- ТЗ тоже должно быть составлено должным образом. тут невольно вспоминается "правильно заданный вопрос содержит половину ответа". Не знаю, может у меня "неправильная школа и, знания данные ею тоже неправильные", но как по мне- главная задача программиста- разработать алгоритм, все остальное- механический процесс перевода (тут продвинутые IDE безусловно помогают)

Владимир Ситников
05.01.2016, 15:52
Всех с наступившим!

Вот что удалось набросать. И это не mspaint, а настоящие скриншоты с работающей IDE (пока только редактор).

"Объявляем структуры"
216272162821629
21642

"Пишем код"
Мелкие, но правильные штуки: среда понимает, что 29 февраля в 2014 году не было, что в условии IF должно быть значение типа BOOL, что в шестнадцатеричной записи букв "s" не должно быть, что 23 в BYTE помещается, а 454 уже нет и т.п.
21630

216312163221633216342163521636

21644

"У вас ус отклеился"
Среда резонно считает, что в BYTE просто так большое число не поместится и подкрашивает красным.
21637

И не просто подкрашивает, а предлагает добавить преобразование DWORD->BYTE:
2163821639

А если написать BYTE_TO_DWORD, то подкрашивает жёлтым со словами "на кой?" (конечно, может быть тайный смысл при использовании знаковых и беззнаковых типов, но за такое всё равно нужно расстреливать):
21643

"Ищем использования"
Если нажать по переменной с ctrl, то перейдём к её объявлению. Если нажать alt+F7 (find usages на экране), то можно найти использования указанной структуры/функции/переменной в проекте:
2164021641

И как?

Владимир Ситников
05.01.2016, 16:03
кстати, лично меня скорее раздражает сам язык ST, с отдельным блоком деклараций (и дебильным отдельным окном под него у кдс), и с отсутствием наследования\полиморфизма. получается очень многословно, куча букв ради капли смысла

Т.е. добавляем отдельный блок "BEGIN ... END;", разрешаем объявлять локальные переменные/константы прямо посреди кода (или только сразу после begin/if/while, чтобы уж совсем говнокод не плодить), добавляем возможность наследования структур, объявления методов в них и получится норм?

Scream
05.01.2016, 16:44
как будет работать эта IDE с codesys?

Владимир Ситников
05.01.2016, 17:12
как будет работать эта IDE с codesys?

В нулевом приближении, нажимаем "экспорт проекта" и оно генерирует CS проект (ну или несколько CS проектов).
А так, у CS, вроде, есть возможность загрузить проект с командной строки и залить его в устройство. Можно автоматизировать.

Ну и, если Овеновцы (или как правильно?) помогут/не будут против, то можно организовать более прямую связь, в обход CS.
OwenLogic же как-то работает с ПР?

rapucha
05.01.2016, 17:22
Т.е. добавляем отдельный блок "BEGIN ... END;", разрешаем объявлять локальные переменные/константы прямо посреди кода (или только сразу после begin/if/while, чтобы уж совсем говнокод не плодить), добавляем возможность наследования структур, объявления методов в них и получится норм?

ЭЭ.. и как назовем? препроцессором языка ST++ ? ))

IDE выглядит круто. Но работы по увязыванию с кодесисом там же дофигищи: без импорт-экспорта тоскливо, без поддержки библиотек тоже невесело, а там и дебажить захочется..

rapucha
05.01.2016, 17:24
Ну и, если Овеновцы (или как правильно?) помогут/не будут против, то можно организовать более прямую связь, в обход CS.
OwenLogic же как-то работает с ПР?

Вот это будет офигенчик )) Кстати, ваш проект кросс-платформенный?

Владимир Ситников
05.01.2016, 18:05
ЭЭ.. и как назовем? препроцессором языка ST++ ? ))
Ага. Всё что я назвал тривиально преобразуется в простой CS код. Например, те же переменные просто нужно вынести "в область объявления", переименовать чтобы различались и убрать begin/end.
Код пишем "с блоками begin/end", а при экспорте в CS оно преобразует код к "совместимому с CS виду". Сделать extends/implements посложнее, но тоже решаемо.


без поддержки библиотек тоже невесело
Если в режиме "экспорт в CS", то от библиотек будет достаточно описания типов и входных/выходных переменных (т.е. сам код не нужен). В lib файлах описания прямо в текстовом виде.

Для создания эмулятора, конечно, нужно понять в каком формате хранится код внутри *.lib хранится. А тут, глядишь, до декомпилятора недалеко.


а там и дебажить захочется.
Возможно, для этого будет проще эмулятор сделать. Но, конечно, отладка на живом устройстве интереснее, чем на эмуляторе.


Вот это будет офигенчик )) Кстати, ваш проект кросс-платформенный?
Ну, да. Windows/Mac/Linux.
Скриншоты из MacOS, но выглядеть примерно одинаково будет.

Scream
05.01.2016, 20:56
Не ожидал что так быстро и красиво получится у вас, успеха, подпишусь на тему.

rapucha
05.01.2016, 21:51
Синтаксический сахар+поддержка библиотек+заливка в ПЛК -- набор функционала, с которым проект _на_мой_взгляд_ может иметь смысл. Возможно, даже без дебага, если отладку в консоль прокинуть.
Я, впрочем, не очень активный пользователь платформы. У меня свои аберрации восприятия.

Yegor
06.01.2016, 01:30
И как?Весело. Как там нынче с копи-пастом в проекционных редакторах?
Error: type DWORD is not a subtype of BYTEАккуратнее с этой фигнёй. BYTE, WORD и DWORD вообще не являются числами по стандарту 61131-3. Для них не определены арифметические операции и прочая числовая семантика. Это битовые поля. Если уж взялись, то рекомендую открыть стандарт и попробовать сделать по нему, а не как в кодесисе (для которого INT#TRUE является числом, например).
Т.е. добавляем отдельный блок "BEGIN ... END;", разрешаем объявлять локальные переменные/константы прямо посреди кода (или только сразу после begin/if/while, чтобы уж совсем говнокод не плодить), добавляем возможность наследования структур, объявления методов в них и получится норм?Я думаю, отдельным блоком переменные сделаны не просто так. Это часть поддержки редактирования программ на работающем контроллере и часть единообразия с графическими языками. Мне б тоже хотелось анонимные функторы типа IF TON#(IN := x, PT := y).Q THEN ..., но это уже совсем другой язык получается.
Возможно, для этого будет проще эмулятор сделать. Но, конечно, отладка на живом устройстве интереснее, чем на эмуляторе.А чего мелочиться? Прикрутить сюда кодогенерацию через тот же LLVM, а там и до отладчиков недалеко.

Владимир Ситников
06.01.2016, 10:20
Весело. Как там нынче с копи-пастом в проекционных редакторах?
Своеобразно, но норм: https://www.youtube.com/watch?v=o4PN9ggehQk&feature=youtu.be&t=90


Аккуратнее с этой фигнёй. BYTE, WORD и DWORD вообще не являются числами по стандарту 61131-3. Для них не определены арифметические операции и прочая числовая семантика. Это битовые поля. Если уж взялись, то рекомендую открыть стандарт и попробовать сделать по нему, а не как в кодесисе (для которого INT#TRUE является числом, например).

Ну, в стандарте так и сказано, что "результат приведения типов, не описанных явно отдаётся на откуп производителю".
Но INT#TRUE, это, безусловно, жесть.

А неявное преобразование BYTE -> WORD, скорее норма.
Аналогично и неявные преобразования между USINT <-> BYTE. Чего в этом плохого?
А чего плохого в том, чтобы в WORD переменную можно было записать BYTE значение?
Не на ассемблере же пишем.

Мне, на самом деле, не нравится, что в CS результат сложения BYTE и BYTE получается BYTE (в стандарте, к слову, так же). Мне бы больше по душе было получать WORD (т.е. чтобы не терять данные). А уж если нужно в конце концов в BYTE получить, то явное преобразование.


Мне б тоже хотелось анонимные функторы типа IF TON#(IN := x, PT := y).Q THEN ..., но это уже совсем другой язык получается.
Вроде, тот же самый язык. Но, конечно, тут семантически тонко будет в операциях вида IF TON#(...).Q OR TON#(...). "до второй части выполнение может не дойти и т.п."
Т.е. легко ошибиться, что, конечно, нехорошо.



А чего мелочиться? Прикрутить сюда кодогенерацию через тот же LLVM, а там и до отладчиков недалеко.
Воообще, я пока не пойму каким образом идёт обмен данными с контроллером.
Делать runtime с нуля немного странно.
Вот если можно в каком-то "стандартном" формате скармливать скомпилированный проект в контроллер (например, прикидываемся CoDeSys'ом, и кормим бинарник в овен), то, конечно, интересно.

И ещё: если сохранить похожесть на 61131, то есть простой и понятный переход со старых проектов на новые. Или постепенно заменять блоки.
А если целиком с нуля runtime делать, то, может, вообще проще взять mbeddr ide и фигачить на C? Но C это другая история.

Yegor
06.01.2016, 11:38
Воообще, я пока не пойму каким образом идёт обмен данными с контроллером.
Делать runtime с нуля немного странно.
Вот если можно в каком-то "стандартном" формате скармливать скомпилированный проект в контроллер (например, прикидываемся CoDeSys'ом, и кормим бинарник в овен), то, конечно, интересно.Ну, обмен ещё можно попытаться&#185; (http://yegorpetrov.livejournal.com/2401.html) разобрать. Я больше всего застрял на формате бинарника. Конечно, теоретически, можно найти способ протолкнуть программу на готовый контроллер, но я бы не стал рассматривать это всерьёз, т.к. по моему опыту пуско-наладочных работ без возможности отладки всё это теряет смысл. Сделать бы более-менее развитую среду, а железо какое-нибудь найдётся. Вон у Овна вроде как под мастер скаду версии контроллеров есть. «Делать с нуля»... Ну, давайте честно, редактор вы тоже не с нуля делали. Точно так же не с нуля можно делать и рантайм. Сначала интерпретатор шоб поиграться, потом байт-код свой какой-нибудь (да хоть даже в кодесисе свой мелкий рантайм сваять), потом машинный код попробовать... Не так уж сложно вроде бы. Хотя это уже гораздо больше, чем автодополнение, о котором тут вроде шла речь.
фигачить на CОпределённо не стоит фигачить на С, плюсах и других паскалях. Все они делались под другую модель исполнения.

rapucha
06.01.2016, 13:39
сложения BYTE и BYTE

Я наоборот, скорее не понимаю смысла такого сложения. BYTE явно пришел нам из железа, и ничего кроме битовых операций я бы к нему не применял. Даже если это АЦП, в нашей реалии на него надо навернуть калибровку датчика и получить real.
А если надо, то сперва явно кастовал бы BYTE к нужному типу. Но то дело вкуса, во многом.


о второй части выполнение может не дойти и т.п.

эксепшенами пахнет?


а железо какое-нибудь найдётся

Фиг знает. Я в текущем проекте пишу на CoDeSys только потому, что нашелся у Овена сносный контроллер -- пром. исполнения, умеренно безглючный, быстро покупаемый и с живым саппортом/форумом. Смог бы купить промышленного исполнения встраиваемую плату - все было бы иначе. Втолкаться в готовое железо мне казалось бы хорошей идеей.

Другое дело, что рантайм можно спросить у фирмы 3S, я бы на их месте обрадовался и отдал бы что-нибудь типа кодесис-ядра под линукс. Спросив сперва NDA возможно. Как проект это все было бы круто, интересно и молодежно, карма на хабре вверх и все дела))
Но в суровой промышленной жизни разнообразные RPi и проч. недорогие ардуины не выживут. Разве что сделать под них отдельный бокс с фильтрацией питаний, развязкой входов-выходов и так далее. Кстати, может быть это коммерческая ниша?..

Yegor
06.01.2016, 13:50
Рапуча, есть BYTE, а есть SINT и USINT. Все они по 8 бит, но тип BYTE это как бы 8 отдельных бит, не число. BYTE по стандарту вообще складывать нельзя; только поразрядная логика: AND, OR, XOR, NOT.

Владимир Ситников
06.01.2016, 13:53
Я наоборот, скорее не понимаю смысла такого сложения. BYTE явно пришел нам из железа, и ничего кроме битовых операций я бы к нему не применял

Какой смысл иметь два разных беззнаковых типа?
Чем USINT принципиально отличается от BYTE?
Честное слово, не понимаю.

Да и сами по себе беззнаковые типы не нужны. От них только проблемы: http://www.nayuki.io/page/unsigned-int-considered-harmful-for-java
Т.е. знаковые типы + явные операции для того, чтобы работать "как будто с беззнаковыми" и всего делов.


эксепшенами пахнет?

Нет. Речь о том, что при вычислении FALSE AND ... вторую половину AND'а можно и не вычислять -- всё равно понятно что суммарно false будет.

Владимир Ситников
06.01.2016, 14:02
Сделать бы более-менее развитую среду, а железо какое-нибудь найдётся
Ну, делать среду под "мифический" контроллер тоже непонятно как.
Да и среду я не то чтобы "ради среды" делать хотел.

Ко мне ПЛК110 скоро приехать должен. Поэтому вариант "сделать среду, и сангажировать ОВЕН на выпуск ПЛК777 с её поддержкой" как-то не очень греет.

rapucha
06.01.2016, 14:22
Какой смысл иметь два разных беззнаковых типа?
Чем USINT принципиально отличается от BYTE?
Честное слово, не понимаю.

семантика, извиняюсь, разная. byte это набор бит, отражающий состояние железа. делать над ним арифметику -- нет смысла.


Т.е. знаковые типы + явные операции для того, чтобы работать "как будто с беззнаковыми" и всего делов.

мне строгая типизация как-то больше по душе. Меньше шансов налажать, особенно при работе с чужим кодом/библиотеками.

прошу прощения, убегаю, буду рад продолжить вечером

Yegor
06.01.2016, 15:00
Ко мне ПЛК110 скоро приехать должен. Поэтому вариант "сделать среду, и сангажировать ОВЕН на выпуск ПЛК777 с её поддержкой" как-то не очень греет.Расширять/обходить готовую среду разработки ради своих проектов греет разве? Я понимаю, что MPS для этого и создавалась, но в ПЛК я ещё не встречал таких объёмов кода, чтобы это было оправдано. Проще тупо набить код, с подсказками или без них. Хз, мне остаётся пожать плечами в этой теме.

Владимир Ситников
10.01.2016, 23:10
Вот сделал интеграцию среды и CoDeSys: http://recordit.co/xzAv3BGlzS

Вроде, норм получается.
В среде нажимаем "запустить", открывается CS, подхватывается новый код, и всё такое.

Базовый проект (настройки ПЛК) берутся из отдельного *.pro файла.

Т.е. создаём один раз проект в CS (с базовыми настройками, указанием PLC и т.п.), а когда из среды нажимаем "запустить", то открывается CS, загружается этот самый проект, и затем поверх импортируется новый код.

И, да, забавы ради сделал "анонимные функциональные блоки".

Код в среде:

PROGRAM PLC_PRG
variables:
v1 : BOOL := TRUE;
et : TIME;
complex : COMPLEX;

body:
IF TON(IN := v1, PT := T#3s, ET => et).Q THEN
complex.cstm.bingo := TRUE;
END_IF;
END_PROGRAM


Код, который передаётся в CoDeSys:

PROGRAM PLC_PRG
VAR
v1 : BOOL := TRUE;
et : TIME;
complex : COMPLEX;
tmpTON_0 : TON;
END_VAR
tmpTON_0(IN := v1, PT := T#3s, ET => et);
IF tmpTON_0.Q THEN
complex.cstm.bingo := TRUE;
END_IF;
END_PROGRAM

Валенок
11.01.2016, 00:17
А можно вот такой анонимный блок ?


PROGRAM PLC_PRG
variables:
v1 : BOOL := TRUE;
et : TIME;
complex : COMPLEX;

body:
IF TON(IN := NOT TON.Q, PT := T#0s, ET => et).Q and TON(IN := NOT TON.Q, PT := T#0s, ET => et).Q then
complex.cstm.bingo := TRUE;
END_IF;

END_PROGRAM

rapucha
11.01.2016, 00:30
внутри анонимного блока было бы логично требовать уникальности имен полюбому, мне кажется.

Так что, я бы сказал, нельзя.

Клевая штука. По уму, тестов бы ей, а то..

Валенок
11.01.2016, 00:34
А где предложено что-то внутри анонимного блока ? Внутри блока - только его собственный код. А передаваемые параметры - все внешние. Даже если это собственные поля.

Владимир Ситников
11.01.2016, 00:56
внутри анонимного блока было бы логично требовать уникальности имен полюбому, мне кажется.

Тут нормально всё.
Смысл простой: IF TON(...) это не обращение к переменной TON, а "работа с блоком TON, расположенным в конкретном месте кода".
Ну, примерно так же как в CFC внезапно расположенный TON работает и никого не смущает, что он в переменных не объявлен.

Т.е. TON(...).Q OR TON(...).Q будут уже два разных TON'а (т.е. под них будут созданы две разные переменные).


Клевая штука. По уму, тестов бы ей, а то..
Тестов преобразователя?

Надо придумать в каком формате описывать тесты на программу 61131. Тогда набор таких тестов можно использовать и для тестирования самой среды (ну, куча тестов на простые темы).
Есть идеи?

Собственно, вопрос: в какую сторону дальше двигаться?

Выложить сборку "на попробовать"
Импорт библиотек. Сейчас я сигнатуры TON/TOFF внёс вручную ради демонстрации.
Что-то из PLC configuration. Я пока без понятия что из PLC conf чаще используется.
Тесты?
Ещё что-то?
CFC

rapucha
11.01.2016, 01:02
в смысле, у вас два анонимных блока на каждый таймер? затупил. Я почему-то думал что там прямо и декларация блока, а наверное нет.

Вот это вот намекает, что можно:
tmpTON_0 : TON;

Владимир Ситников
11.01.2016, 01:14
А можно вот такой анонимный блок ?

IF TON(IN := NOT TON.Q, PT := T#0s, ET => et).Q and TON(IN := NOT TON.Q, PT := T#0s, ET => et).Q then

Жесть какая.
На самом деле, нельзя.
Синтаксически у меня IF TON(...) это обращение к блоку TON. И TON это не название переменной, а именно ссылка на функциональный блок TON.
Т.е. конструкцию "NOT TON.Q" просто физически не получится ввести в том смысле, что TON это не переменная.

Если хочется "пощупать", могу либо сборку среды выложить, либо давайте примеров -- ещё примеров/картинок запишу.


Возможно, у таких "анонимных" FB блоков стоит сделать возможность "указать имя".
Но я специально делать не стал, чтобы анонимные FB использовались только для простых случаев, и чтобы не возникало разночтений "в каком порядке будет вызываться".


Другое дело, что можно сделать такую конструкцию. Т.е. когда вводим "второй" TON, то автоматически появляются скобки после TON и убрать их невозможно. Либо убирать второй TON целиком, либо указывать параметры.

IF TON(IN := NOT(TON(IN := v1, PT := T#4s).Q), PT := T#3s, ET => et).Q THEN
complex.cstm.bingo := TRUE;
END_IF;

И сейчас она раскрылась в такое:

tmpTON_0 : TON;
tmpTON_1 : TON;
END_VAR
tmpTON_1(IN := v1, PT := T#4s);
tmpTON_0(IN := NOT tmpTON_1.Q, PT := T#3s, ET => et);
IF tmpTON_0.Q THEN
complex.cstm.bingo := TRUE;
END_IF;

С точки зрения ST, вложенные FB выглядят, конечно, стрёмно.
Но если сделать "IF тут небольшая CFC диаграмма", то анонимные блоки могут заиграть новыми красками :)

rapucha
11.01.2016, 01:25
Собственно, вопрос: в какую сторону дальше двигаться?


Это серьезный вопрос. Смотря сколько у вас времени и какие, кхм, амбиции. Т.е. чего вы от этого хотите.

Мне кажется, п.2, импорт, самый острый.
п.3 можно отложить на неопределенное время. предложенный вами подход это дело закрывает и ладно.
п.1 рано.
п.6 наверное полезно, но там же еще и графика?
п.4 суперважно, но надо подумать как их туда воткнуть. Хочется конечно автоматом генерить болванки для юнит-тестов, и гонять все тесты оптом, со списком исключений.
Вроде, можно при помощи каких-то системных либ дернуть любой POU?

Владимир Ситников
11.01.2016, 01:36
п.4 суперважно, но надо подумать как их туда воткнуть.

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

Вопрос в том, как "описывать" тесты.

rapucha
11.01.2016, 01:38
а вот кстати, можно в вашей схеме работы к готовому CDS проекту уже из Идеи добавить новые блоки? если да, то весь тестовый фреймворк можно внутри Идеи сделать.

rapucha
11.01.2016, 01:49
Это, думаю, самая простая часть.

Вопрос в том, как "описывать" тесты. Возможно, я не понял вопрос. Я думал, в лоб: каждый тест - это POU, а то и PLC_PRG, который вызывает тестируемый POU на предмет его какой-то простой единичной функциональности. У каждого теста -- булев результат выполнения. Для каждого тестируемого POU может быть несколько тестов.
Автогенерилка -- "по запросу", типа выделили выходную переменную -- сгенерили для нее болванку теста. С POU которые изменяют чье-то состояние конечно засада, тут на откуп программиста отдать разумнее.

lara197a
11.01.2016, 01:53
vladimirisitnikov
прочел от бессонницы ваш пост.
Наверное правильнее было бы вам потратить время на чтение документации кдс,
а не изобретение велосипеда..
многое бы стало бы понятно, много нового открыто.
Вы просто не умеете пользоваться кдс.

Валенок
11.01.2016, 01:57
. И TON это не название переменной, а именно ссылка на функциональный блок TON. ...Т.е. конструкцию "NOT TON.Q" просто физически не получится ввести в том смысле, что TON это не переменная.)
TON - фб ?
Страшно произнести, но любой фб - это просто переменная. Отсюда и TON - просто переменная.
TON1 := TON2; //пжста.
И даже анонимная переменная - переменная.
Ну а поля ФБ - это переменные сам бог велел.


Ну, примерно так же как в CFC внезапно расположенный TON работает и никого не смущает, что он в переменных не объявлен.
Это где так есть ?

rapucha
11.01.2016, 02:22
TON - фб ?
Страшно произнести, но любой фб - это просто переменная.
Переменная - это экземпляр ФБ.

Yegor
11.01.2016, 07:06
Собственно, вопрос: в какую сторону дальше двигаться?В сторону отладки в реальном времени. Остальное — мелочи.
Т.е. конструкцию "NOT TON.Q" просто физически не получится ввести в том смысле, что TON это не переменная.В третьем кодесисе есть THIS как в плюсах (во втором ADRINST). Его можно разрешить в контексте вызова блока и резолвить во временное имя. Я не просто так предложил именно TON#(...), а не TON(). Такой синтаксис аннотирования используется для литералов встроенных и перечисляемых типов (UDINT#42). Т.к. анонимность один хрен нарушает секцию объявлений, то её можно сделать опциональной и тупо вводить экземпляров: IF TON#(...) / IF TON#ton1(...). Только ни в коем случае не разрешать использование имени за пределами скобок — будет бардак. UPD: хотя не, с видимостью в скобках тоже бардак будет, т.к. другие переменные так себя не ведут.

С тестами всё сложно из-за практики программирования ПЛК. Программисту придётся выбирать между устоявшимися приёмами и возможностью тестировать отдельные POU. Под устоявшимися приёмами я понимаю подход, где входы оказываются связанными с выходами без дополнительных прослоек, а независимые ФБ содержат только обобщённый функционал. Модули с сильным зацеплением сопротивляются юнит-тестированию, как известно. Не TONы же тестировать, ей богу.

Валенок
11.01.2016, 09:53
Переменная - это экземпляр ФБ.
А фб без экземпляра это вообще ничто. Просто NOP.
Какой смысл тогда от "просто" вызова кода ФБ ? Нужно просто занять чем-то проц ?
Для полноценной и независимой работы с 2-мя анонимными фб нужно создавать 2 набора переменных (in1,in2,pt1,pt2,et1,et2,q1,q2) ? (А есть фб у которых 100500 переменных в интерфейсе)
И зачем тогда нужен вообще фб с его инкапсуляцией, когда кучки из наборов однотипных переменных сгребли в просто структурые переменные - фб, а опосля сделали их анонимными и добавили еще такие же кучки..
"Море, на море суша, на суше поп сидит и видит - море, на море.."
Даже в авторском примере за ради экономии 1 (одной) переменной введено 2 (две) переменные.

capzap
11.01.2016, 10:05
возможно надо было скачать пример, но по предоставленному коду в теме, меня вообще не впечатлил такой подход, собственно требуется изучать другой язык, что бы по факту прога заменила слово TON на объявление переменной в КДС

Владимир Ситников
11.01.2016, 11:01
собственно требуется изучать другой язык

А кто вам сказал про другой язык?
Язык тот же самый. Можно писать "в классическом стиле".

Вы же не ругаете CS 3 за поддержку ООП программирования? Хочешь -- используй ООП, не хочешь -- не используй.
Так и тут. Не нравятся анонимные блоки -- не используй и всего делов.


что бы по факту прога заменила слово TON на объявление переменной в КДС
Вы видео (http://www.owen.ru/forum/showthread.php?t=23013&p=192243&viewfull=1#post192243) смотрели?

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

Позволяет "искать использования конкретной переменной/функционального блока".
Вот пример по "поиск использований": http://recordit.co/rx38caMeIA

Вот пример на "переименование переменных": http://recordit.co/g1qQlwj1Co
Переименовываем переменную, автоматически меняются её использования.
При этом, другие переменные с совпадающим именем проблемы не делают.
Аналогично можно переименовывать типы, блоки и т.п.

Подкрашивание красным когда в IF условии оказалось INT выражение.
Автодополнение, в конце концов.

Владимир Ситников
11.01.2016, 11:19
Я не просто так предложил именно TON#(...), а не TON(). Такой синтаксис аннотирования используется для литералов встроенных и перечисляемых типов (UDINT#42). Т.к. анонимность один хрен нарушает секцию объявлений, то её можно сделать опциональной и тупо вводить экземпляров: IF TON#(...) / IF TON#ton1(...). Только ни в коем случае не разрешать использование имени за пределами скобок — будет бардак. UPD: хотя не, с видимостью в скобках тоже бардак будет, т.к. другие переменные так себя не ведут.
Да, на досуге можно подумать стоит ли разрешать именовать блоки, и нужно ли разрешать видимость в скобках.
Возможно, если нужно "с видимостью в скобках", то лучше уж выделить в отдельный "человекопонятный блок".



Под устоявшимися приёмами я понимаю подход, где входы оказываются связанными с выходами без дополнительных прослоек, а независимые ФБ содержат только обобщённый функционал
Можно с этого момента по-подробнее?

Я, вроде, на форуме как-то встречал, что народ вообще mock'и делает. Т.е. из отдельного ПЛК делает "эмулятор реальной системы", подключает его к "боевому ПЛК" и смотрит работает ли "как надо".


Модули с сильным зацеплением сопротивляются юнит-тестированию, как известно. Не TONы же тестировать, ей богу.
Ну, 10 TON'ов уже без поллитра на понять.
Поэтому, лучше лишний раз проверить.

Да и интеграционное тестирование никто не отменял.
Да и chaos monkey тестирование тоже (запускаем тест, и в произвольный момент жмём на перезагрузку ПЛК)

Вот, например, тема про измерение частоты: http://www.owen.ru/forum/showthread.php?t=23057&p=192280&viewfull=1#post192280
Там могли бы помочь тесты вида: "подаём на вход меандр 1.0 Гц -- ожидаем, что через минуту на выходе переменная такая-то должна быть 1.0 +- 0.1 Гц".

С точки зрения тестов, самый сложный момент -- ПЛК завязано на "реальный мир" и на "реальные часы". Т.е. если сказано "среднее за час", то для обычного теста придётся ждать этот самый один час.

Я же могу при "компиляции в режиме теста" незаметно подменять вызовы TIME() на чтение специальнообученной переменной и таким образом "ускорять время". Да, будут некоторые проблемы с зашифрованными библиотеками, но в пользовательском коде вообще без проблем.

capzap
11.01.2016, 11:20
конструкцию IF tik.Q THEN ... END_IF; tik(IN:=NOT tik.Q,PT:=T#5s); сможете через свою разработку создать? Работу с указателями сможете воссоздать?

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

Владимир Ситников
11.01.2016, 11:44
конструкцию IF tik.Q THEN ... END_IF; tik(IN:=NOT tik.Q,PT:=T#5s); сможете через свою разработку создать?

Исходный код:


PROGRAM PLC_PRG
variables:
output v1 : BOOL;
tik : TON;

body:
IF tik.Q THEN
v1 := TRUE;
END_IF;
tik(IN := NOT(tik.Q), PT := T#5s);
END_PROGRAM

Результирующий (наверное, после not стоит скобки генерировать):

PROGRAM PLC_PRG
VAR_OUTPUT
v1 : BOOL;
END_VAR
VAR
tik : TON;
END_VAR
IF tik.Q THEN
v1 := TRUE;
END_IF;
tik(IN := NOT tik.Q, PT := T#5s);
END_PROGRAM



Работу с указателями сможете воссоздать?
Да, проблем не вижу.


ЗЫ обчно готовые блоки уже существуют, кем то написаны, мне легче их "накидать" в новый проект, чем заниматься этим через другую среду разработки, больше времени потрачу
Ну, текущий CoDeSys код это "write-only" код (без разницы ST или CFC). Т.е. код, который 1 раз пишется, и через месяц уже невозможно понять зачем что нужно. Никакой навигации нет, хрен поймёшь где использовалась конкретная переменная, где в неё пишут, значения, а где из неё читают.

Наверняка у меня будет и возможность импорта имеющегося кода -- тогда вообще можно в пару действий перевести имеющийся проект на новые рельсы.

capzap
11.01.2016, 12:15
Ну, текущий CoDeSys код это "write-only" код (без разницы ST или CFC). Т.е. код, который 1 раз пишется, и через месяц уже невозможно понять зачем что нужно. Никакой навигации нет, хрен поймёшь где использовалась конкретная переменная, где в неё пишут, значения, а где из неё читают.
бибку от oscat видели, когда бы я к ней не обращался, мне понятен блок который я хочу из неё взять. Если же речь об использовании такой плюшки как найти случаи использования, в КДС их нет в степе есть, так один продукт бесплатный, другой платный. Сделать для КДС некоторое дополнение улучшений за бесплатно, конечно хорошее начинание, но как мне кажется Вы сейчас не загружены работой, поэтому есть время на развлечение

Yegor
11.01.2016, 12:52
Можно с этого момента по-подробнее?Это всё к сильному зацеплению. Из тех чужих проектов, что я видел, большую часть POU было бы трудно выделить для юнит-тестов. Соответственно покрытие кода тестами будет никакое.
Ну, 10 TON'ов уже без поллитра на понять.
Поэтому, лучше лишний раз проверить.Если мы по-прежнему говорим о юнит-тестах, то TON тестируется один раз, будь в программе хоть сто экземпляров этого типа. Чтобы был смысл в поддержке юнит-тестов, должно быть много разнотипных ФБ, и они должны составлять основную часть логики проекта, и при этом быть изолированными. Я такого кода пока не встречал и сам так не писал. Самое важное мясо обычно в слипшихся пельменях типа 'программа'. Этому способствуют разные вещи: непортабельность логики управления (проекты пишутся под конкретный объект эксплуатации, зачастую в единственном экземпляре); «паблик морозов» в реализации стандарта кодесисом; да даже необходимость вводить переменные на каждый чих — почему я про анонимные блоки и написал. Но это по моему опыту, а большую часть проектов я смотрел в открытом доступе, куда обычно попадают работы новичков.
найти случаи использования, в КДС их нет в степе естьПо крайней мере переменные кодесис умеет искать:

21699

Владимир Ситников
11.01.2016, 12:58
Если мы по-прежнему говорим о юнит-тестах, то TON тестируется один раз, будь в программе хоть сто экземпляров этого типа. Чтобы был смысл в поддержке юнит-тестов, должно быть много разнотипных ФБ, и они должны составлять основную часть логики проекта, и при этом быть изолированными.

Я и про юнит-тестирование, и про интеграционное тестирование.
В интеграционном тестировании как раз нужно "программу" тестировать, без поштучного разделения пельменей.

Yegor
11.01.2016, 13:08
Да, всю программу целиком — было бы очень интересно. Даже если бы просто прогонять сценарии управляя входами и временем, и сопоставлять что на выходах — я бы с написания тестов кодить начинал. Основная сложность поддержки таких тестов в IDE это, по-моему, модули ввода-вывода, механизм обмена с которыми не формализован.

rapucha
11.01.2016, 13:10
можно и чтение входов на этапе тестирования переопределить. но в итоге получится этакий тестирующий рантайм, который потребует ресурсов ПЛК. Писать "в обрез" не получится.

Юнит-тесты больше полезны самому программисту при написании кода. Чисто проверить, что при работе над модулем ничего не развалилось. Ну а наличие такой возможности может побудить к работе в другом стиле, с более независимыми ФБ.

Функциональные тесты - сценарии, похожие на жизнь - полезная конечно штука, но по-хорошему отдельный человек должен этим заниматься. И дело не только в лени программиста, просто знание потрохов при функц. подходе мешает. Тонкие места интуитивно обходятся стороной.

Yegor
11.01.2016, 13:22
Можно вообще хоть что сделать спасибо, Тьюринг-полнота. Я даже таймеры с глобальной перемоткой делал как-то раз для демонстрации и тестирования многочасовых процессов. Но гораздо веселее было бы в полном автомате прогонять ряд тестов программно.

Владимир Ситников
11.01.2016, 13:24
можно и чтение входов на этапе тестирования переопределить

Либо значения через force write подкладывать. Или force write не работает с реальными ПЛК?


Основная сложность поддержки таких тестов в IDE это, по-моему, модули ввода-вывода, механизм обмена с которыми не формализован.
Это же тоже через force write можно эмулировать?
Или там какие-то особенности?

Кстати, чтобы "залить программу в модуль ввода-вывода и в ПЛК" нужно 2 разных CS проекта?
Или достаточно одного и там plc conf?

Yegor
11.01.2016, 13:48
Это же тоже через force write можно эмулировать?
Или там какие-то особенности?Конкретно в кодесисе работает это не очень стабильно и вызвать можно только вручную.
Кстати, чтобы "залить программу в модуль ввода-вывода и в ПЛК" нужно 2 разных CS проекта?
Или достаточно одного и там plc conf?Программируется только ПЛК. Обмен с модулями — по поддерживаемым модулями протоколам. Делается либо через PLC Configuration, либо с портом напрямую через функции в SysLibCom — 50 / 50 в зависимости от разных тонкостей. Протокол у Овна чаще всего модбас, который поддерживается и в конфигураторе, и через распространённую modbus.lib (которая поверх SysLibCom). Модбас примитивен — практически набор функций чтения и записи адресного пространства подчинённых устройств.

Заковырка — адреса входов/выходов модулей пишутся в руководствах, то есть из абстрактного проекта полный расклад модуля получить нельзя. Из PLC Configuration, впрочем, можно вытащить уже заданные программистом для конкретного проекта узлы. Так как использование существующих программ всё равно под вопросом из-за проекционного редактора, наверное, стоило бы рассмотреть аннотирование входных/выходных переменных на случай, когда обмен реализуется в обход конфигуратора (modbus.lib или вообще что-нибудь своё).

Владимир Ситников
11.01.2016, 14:04
Конкретно в кодесисе работает это не очень стабильно и вызвать можно только вручную.

Хоть что-то там работает?
Я, если честно, думал о том, чтобы "force write" делать через программную интеграцию.
https://en.wikipedia.org/wiki/Data_scraping#Screen_scraping

Т.е. подкидываем в CS "нажатия клавиш", чтобы оно думало, что мы "вручную" вызвали force write.


то есть из абстрактного проекта полный расклад модуля получить нельзя
Я так понимаю, полный расклад не очень-то и нужен. Ведь, тестируем то, что используется. А если какие-то выходы не используются, то чего их тестировать?
Да, посмотрю что такое modbus.lib

Yegor
11.01.2016, 14:21
Т.е. подкидываем в CS "нажатия клавиш", чтобы оно думало, что мы "вручную" вызвали force write.Пункты меню можно попытаться без клавиатуры и мыши вызывать через WinAPI. Идентификаторы команд можно редактором ресурсов подсмотреть:

21701

Но я не совсем понимаю, как вы собираетесь предварительно эти переменные на экране находить, чтобы их «щёлкнуть» и подготовить к force write. Судя по википедии, искать распознаванием на экране? Чёт я очкую, Славик.

Владимир Ситников
11.01.2016, 14:37
Пункты меню можно попытаться без клавиатуры и мыши вызывать через WinAPI. Идентификаторы команд можно редактором ресурсов подсмотреть:
Эх, где, она, молодость? HWND и SendMessage...
Да, разумеется SendMessage лучше чем эмуляция клавиатуры.


Но я не совсем понимаю, как вы собираетесь предварительно эти переменные на экране находить, чтобы их «щёлкнуть» и подготовить к force write. Судя по википедии, искать распознаванием на экране? Чёт я очкую, Славик.
Товарищи из CoDeSys заботливо сделали окно Online -> Write/Force dialog.
Там "машиночитаемый" список всех переменных в виде таблицы переменная-значение.

Правда, как добавить туда новую запись, конечно, вопрос.
Возможно, через команду "watchlist load <file>" и там просто перечислить все возможные переменные.

Либо ещё можно сделать специальную программу, которая нужна только для того, чтобы интеграция открыла её в нужный момент, и воспользовалась открытом окном для редактирования переменных (там раскладка известна заранее, т.к. спец-программу генерируем мы сами)

К распознаванию на экране, конечно, не хотелось бы прибегать.
Хотелось бы, конечно, остаться в рамках вызова каких-то API. Т.е. gettext, вызов команд по ID и т.п.

Владимир Ситников
12.01.2016, 13:31
Не TONы же тестировать, ей богу.

Вот, кстати, пример: http://www.owen.ru/forum/showthread.php?t=23073&p=192422&viewfull=1#post192422

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

Yegor
12.01.2016, 14:27
Тот код с большой вероятностью окажется в теле программы, а не функционального блока. И тестировать его придётся вместе с остальной программой. Об этом я и говорил в #87 и #95. Другое дело, если бы эти две строки были сначала обобщены в функциональный блок, а уже потом встроены в программу — тогда можно было бы говорить о тестировании функционального блока. Но в ПЛК ради одного вызова не обобщают обычно.

rapucha
13.01.2016, 11:49
Другое дело, если бы эти две строки были сначала обобщены в функциональный блок, а уже потом встроены в программу — тогда можно было бы говорить о тестировании функционального блока. Но в ПЛК ради одного вызова не обобщают обычно.

Я вот пытаюсь так писать. Всё даже ничего,только лимит по количеству POU уже близок ))

Владимир Ситников
13.01.2016, 11:52
Я вот пытаюсь так писать. Всё даже ничего,только лимит по количеству POU уже близок ))

А в чём этот предел заключается? Там прямо что-то осязаемое? Или как у классиков https://xkcd.com/844/?

Yegor
13.01.2016, 12:13
Чем толще библиотеки, тем осязаемее. Ещё были сообщения о невидимых заборах в редакторах графических языков (что-то с прокруткой вроде). Но я ни с тем, ни с другим не сталкивался. И ещё есть контроллеры с буквой L, у которых по таргету стоят ограничения размеров сегментов памяти. Когда в них упираешься, компилятор начинает нечленораздельно бредить.

rapucha
13.01.2016, 12:14
А в чём этот предел заключается? Там прямо что-то осязаемое? Или как у классиков https://xkcd.com/844/?

У ПЛК63/73 лимит на количество POU в программе -- 256. Причем 1) сюда включаются все импорты и 2) этого нет в РЭ и РП. Хотя по мне так серьезное ограничение, а главное ну нафигааааа...

Владимир Ситников
13.01.2016, 12:20
И ещё есть контроллеры с буквой L, у которых по таргету стоят ограничения размеров сегментов памяти. Когда в них упираешься, компилятор начинает нечленораздельно бредить.
Да, я долго смотрел на L vs M и решил "не рисковать".

capzap
13.01.2016, 12:25
У ПЛК63/73 лимит на количество POU в программе -- 256. Причем 1) сюда включаются все импорты и 2) этого нет в РЭ и РП. Хотя по мне так серьезное ограничение, а главное ну нафигааааа...
а это ограничение не конкретного устройства, а КДС, там и ищите описалово

rapucha
13.01.2016, 12:43
а это ограничение не конкретного устройства, а КДС, там и ищите описалово

у разных ПЛК оно же разное

capzap
13.01.2016, 12:48
у разных ПЛК оно же разное

Вы нашли где это значение описывается?

rapucha
13.01.2016, 13:01
Пока нет :(

Владимир Ситников
13.01.2016, 13:06
Вы нашли где это значение описывается?
Судя по всему, target settings -> memory layout -> maximum number of POUs

При этом, CS создаёт служебные POU: http://forum.codesys.com/viewtopic.php?t=53#p122

There is a number of internal POUs consuming table entries (depending on the target 3 to 10). Each POU and each library consumes an entry.
Specialty: For data types and for functionblocks we generate initialisation POUs. Therefore, a data type declaration consumeas a tabel antry, a function block (not the instance!) consumes 2 entries.

Т.е. каждый FB считается за 2 POU, каждый тип за 1 POU

rapucha
13.01.2016, 13:13
Судя по всему, target settings -> memory layout -> maximum number of POUs

да, опции "таргета". Почему это ограничение КДС? разве что это жестко заданный процент от общей памяти.

capzap
13.01.2016, 13:26
Выбор платформы определяет базовые параметры генератора кода и функциональность доступных в системе команд
каждый производитель настраивает свой таргет под среду разработки и исходя из возможностей своего устройства на аппаратном уровне, поэтому ограничения, доступные объемы памяти и т.п. у всех разное

rapucha
13.01.2016, 14:31
каждый производитель настраивает свой таргет под среду разработки и исходя из возможностей своего устройства на аппаратном уровне, поэтому ограничения, доступные объемы памяти и т.п. у всех разное
Спасибо, кэп)
так или иначе, 256 POU в обрез.

capzap
13.01.2016, 14:36
Спасибо, кэп)
так или иначе, 256 POU в обрез.

Согласитесь, что те кто Вам отвечал на форуме, написали не один реальный проект для производства, нам хватает ПОУ. Доводить дело до абсурда, создавая ФБ из двух строчек не стоит

lara197a
13.01.2016, 14:39
Согласитесь, что те кто Вам отвечал на форуме, написали не один реальный проект для производства, нам хватает ПОУ. Доводить дело до абсурда, создавая ФБ из двух строчек не стоит

дерево прокручивать и названия придумывать устаните.;)

rapucha
13.01.2016, 14:43
Доводить дело до абсурда, создавая ФБ из двух строчек не стоит
Это действительно удобно по некоторым сображениям, если бы не ужасающая многословность языка, я бы делал это еще чаще.
И я не писал, что мне не хватает POU. Хватает, потому что слежу. Но реально, это оказался самый исчерпаемый ресурс в моей программе. Внезапно.
Я подозреваю, что это ограничение не оправдано экономией чего-либо, и грубо говоря создает сложности на ровном месте. разве что в силу какой-то архитектурной кривизны КДС место под POU надо резервировать с большими накладными расходами.

Владимир Ситников
13.01.2016, 14:43
Доводить дело до абсурда, создавая ФБ из двух строчек не стоит
TON это как раз и есть ФБ из двух строк, ваш Кэп.

capzap
13.01.2016, 14:49
Это действительно удобно по некоторым сображениям, если бы не ужасающая многословность языка, я бы делал это еще чаще.
И я не писал, что мне не хватает POU. Хватает, потому что слежу. Но реально, это оказался самый исчерпаемый ресурс в моей программе.

о какой многословности идет речь, наличие пяти языков? Потому что набор команд из стандартной бибки меньше чем в древнем бейсике

capzap
13.01.2016, 14:51
TON это как раз и есть ФБ из двух строк, ваш Кэп.

внутренности TON-а состоят не из двух строчек, а использовать в ПОУ таймер можно уложиться и в одну строку а можно и по всему проекту разбросать строк натцать

lara197a
13.01.2016, 14:57
TON это как раз и есть ФБ из двух строк, ваш Кэп.
TON и pou разные вещи, вы выдаете очень много поверхностных рассуждений,
не прочитав мануалы.

rapucha
13.01.2016, 14:59
о какой многословности идет речь
Я о количестве текста в секции объявлений. немного со зла, конечно. Но очень неудобно.

Владимир Ситников
13.01.2016, 15:00
внутренности TON-а состоят не из двух строчек

Ок, с TON'ом погорячился, там действительно побольше двух строк.

Но вот R_TRIG / F_TRIG уж точно 2 строки: https://bitbucket.org/mjsousa/matiec/src/c25446920923cd47d19ffdc39528de1895992e30/lib/edge_detection.txt?at=default&fileviewer=file-view-default

И я не агитирую каждые 2 блока в новый ФБ выделять.
Я просто к тому, что иногда имеет смысл даже 2 строки выделить в ФБ, чтобы упростить понимание.

capzap
13.01.2016, 15:27
Я о количестве текста в секции объявлений. немного со зла, конечно. Но очень неудобно.

обычно начинающие в последнюю очередь тянутся к окну объявлений, пишут код, добавляют новую переменную, если её нет КДС сама предложит её объявить, остается её только разместить в нужной области, проинициализировать

capzap
13.01.2016, 15:36
Ок, с TON'ом погорячился, там действительно побольше двух строк.

Но вот R_TRIG / F_TRIG уж точно 2 строки: https://bitbucket.org/mjsousa/matiec/src/c25446920923cd47d19ffdc39528de1895992e30/lib/edge_detection.txt?at=default&fileviewer=file-view-default

И я не агитирую каждые 2 блока в новый ФБ выделять.
Я просто к тому, что иногда имеет смысл даже 2 строки выделить в ФБ, чтобы упростить понимание.

имеет, только если это законченный блок, который выполняет определенную функциональность. Как минимум должна быть необходимость воспользоваться сохраненным значением с предыдущей итерации. Сам TON по себе конечно ФБ, но если уж его выносить отдельно, то я бы обрабатывал его работу через функцию, а не ФБ

Владимир Ситников
18.01.2016, 00:33
"Импорт библиотек": http://recordit.co/kSuJuPbMSA
Указываем lib файл, и оно загружает блоки оттуда.

Миних В.А.
27.01.2016, 14:22
"Импорт библиотек": http://recordit.co/kSuJuPbMSA
Указываем lib файл, и оно загружает блоки оттуда.

Владимир, это круто!
Может вам подарить контроллер Simatic? Чтобы сименовскую IDE переделать))

Владимир Ситников
27.01.2016, 14:45
Может вам подарить контроллер Simatic? Чтобы сименовскую IDE переделать))
Для начала нужно со 110-ым разобраться.

А для Simatic подобное актуально?

Вот такая штука недавно приехала:
22078

Миних В.А.
27.01.2016, 16:32
Для начала нужно со 110-ым разобраться.

А для Simatic подобное актуально?

В тех версиях, с которыми я работал, такого не было. Есть инструмент перекрестных ссылок.
А можно попробовать инструмент в действии?



Вот такая штука недавно приехала:
22078
Ну теперь можно дачу автоматизировать)
А для диммирования лампочек уже что то подыскали?

Владимир Ситников
27.01.2016, 18:24
В тех версиях, с которыми я работал, такого не было. Есть инструмент перекрестных ссылок.
А можно попробовать инструмент в действии?

О, это хороший вопрос. Я, конечно, ожидал такого, но пока это первый вопрос "на попробовать".
Да, постараюсь сделать версию.


Ну теперь можно дачу автоматизировать)
А для диммирования лампочек уже что то подыскали?
Буду пробовать такую комбинацию: MeanWell ELG-150-24B + диодную ленту на основе 5630 Ultra.
На кухне 5x5м 3 двухметровых фрагмента (на высоте 2.5м, между лентами -- 1м) такой ленты показали хорошую яркость.

Планирую быстрый выход соединять с ELG и ШИМ сигналом диммировать. Главное, чтобы не жужжало.

Миних В.А.
27.01.2016, 19:02
О, это хороший вопрос. Я, конечно, ожидал такого, но пока это первый вопрос "на попробовать".
Да, постараюсь сделать версию.

Хорошо, буду ждать. уже не терпится попробовать)

Владимир Ситников
27.01.2016, 19:23
Хорошо, буду ждать. уже не терпится попробовать)

Windows? Mac? Linux?

Миних В.А.
27.01.2016, 19:28
Windows? Mac? Linux?

Давайте виндовс.

thekekc
02.02.2016, 10:00
Давайте виндовс.
Дайте две!

Владимир Ситников
10.02.2016, 14:51
Вот она, рыба моей мечты: https://github.com/vlsi/ide61131/releases/tag/v1.0.0

Инструкция по употреблению:
1) Качаем https://github.com/vlsi/ide61131/releases/download/v1.0.0/st61131-143.SNAPSHOT-win.zip
2) Качаем (это будет тестовый проект) https://github.com/vlsi/ide61131/archive/v1.0.0.zip
3) Распаковываем 1 и 2
4) Запускаем mps.bat. Выбираем "open project", указываем #2
5) View -> Tool Windows -> Project (Alt+1)
6) Разворачиваем com.github.vlsi.iec61131.st.sandbox и там видим PLC_PRG
7) profit!

Чтобы посмотреть "во что генерируется код", нужно нажать правой кнопкой и выбрать "preview generated text".
Чтобы сгенерировать codesys проект, нужно в sandboxRunConfiguration поправить пути, нажать правой кнопкой и выбрать "run .."

Если на шаге #4 не получилось, то качаем и устанавливаем JRE 8 (или JDK 8): http://www.oracle.com/technetwork/java/javase/downloads/index.html
Если всё равно не получилось -- пишем сюда.

Миних В.А.
10.02.2016, 16:57
Вот она, рыба моей мечты: https://github.com/vlsi/ide61131/releases/tag/v1.0.0

Чтобы сгенерировать codesys проект, нужно в sandboxRunConfiguration поправить пути, нажать правой кнопкой и выбрать "run .."



Кодесис версии 2?

Миних В.А.
10.02.2016, 16:58
Вот она, рыба моей мечты: https://github.com/vlsi/ide61131/releases/tag/v1.0.0

Инструкция по употреблению:
1) Качаем https://github.com/vlsi/ide61131/releases/download/v1.0.0/st61131-143.SNAPSHOT-win.zip
2) Качаем (это будет тестовый проект) https://github.com/vlsi/ide61131/archive/v1.0.0.zip
3) Распаковываем 1 и 2
4) Запускаем mps.bat. Выбираем "open project", указываем #2
5) View -> Tool Windows -> Project (Alt+1)
6) Разворачиваем com.github.vlsi.iec61131.st.sandbox и там видим PLC_PRG
7) profit!

Чтобы посмотреть "во что генерируется код", нужно нажать правой кнопкой и выбрать "preview generated text".
Чтобы сгенерировать codesys проект, нужно в sandboxRunConfiguration поправить пути, нажать правой кнопкой и выбрать "run .."

Если на шаге #4 не получилось, то качаем и устанавливаем JRE 8 (или JDK 8): http://www.oracle.com/technetwork/java/javase/downloads/index.html
Если всё равно не получилось -- пишем сюда.
Спасибо, буду пробовать!

Владимир Ситников
10.02.2016, 17:14
Кодесис версии 2?
С 3-им не пробовал. Со 2-ым должно работать.

Но тут больше тестовый выпуск на предмет пощупать, рассказать что нравится/не нравится.

Там, глядишь, и "plc configuration" / "графические языки" / "тесты" появятся.

Миних В.А.
10.02.2016, 17:35
С 3-им не пробовал. Со 2-ым должно работать.

Но тут больше тестовый выпуск на предмет пощупать, рассказать что нравится/не нравится.

Там, глядишь, и "plc configuration" / "графические языки" / "тесты" появятся.

Вот тут помучился)) через буфер обмена не получилось вставить путь, пришлось установить кодесис в более короткий.
22562

Миних В.А.
10.02.2016, 17:37
а тут должно быть красным?
22564

Владимир Ситников
10.02.2016, 18:07
а тут должно быть красным?
22564

Да, тут норм. По-хорошему, нужно бы сделать отдельный проект для теста.

Надо смотреть на com.github.vlsi.iec61131.st.sandbox и com.github.vlsi.iec61131.standard_lib

st61131.build предназначено для сборки самой среды, а для этого нужно ещё много чего скачать.

Владимир Ситников
14.02.2016, 19:14
Добавил
указатели: http://recordit.co/U6TTCkqOI4
массивы, структуры, перечисления: http://recordit.co/ijjFqJuiZv
CASE

Тут: https://github.com/vlsi/ide61131/releases/tag/v1.1.0

Владимир Ситников
15.02.2016, 11:32
Активнее, товарищи!
Особенно, в части "как должно выглядеть PLC configuration вашей мечты"

Вот, сделал CFC: http://recordit.co/2Itr7umnlo
Картинка для привлечения внимания: 22637

capzap
15.02.2016, 11:56
Активнее, товарищи!
Особенно, в части "как должно выглядеть PLC configuration вашей мечты"

Вот, сделал CFC: http://recordit.co/2Itr7umnlo
Картинка для привлечения внимания: 22637
в чем преимущество? Теперь еще кроме(заместо) КДС нужно будет рисовать в стороннем проукте нечто, которое компильнется и это можно будет посмотреть в КДС, если надо подправить и залить в плк, избавление от рутины в чем?
Лучше бы свои силы направили на написание подобие jdbc для плк, вот это была бы реальная помощь многим форумчанам

Yegor
15.02.2016, 12:21
Это изыскания на тему развитого редактора. Пока не стоит рассматривать как боевой продукт и сравнивать с кодесисом по части кодогенерации и отладки — можно необоснованно разочароваться. Избавление от рутины в том, что эта штука потенциально может очень много подсказывать и проверять во время написания кода. Редактор такого типа позволяет вводить только синтаксически корректные программы и на ходу проверяет типизацию.

Вечером гляну чего там нового.

Scream
15.02.2016, 12:24
Кдс 2.3 умирает потихоньку, как бы это не зря всё было.

Владимир Ситников
15.02.2016, 13:41
в чем преимущество? Теперь еще кроме(заместо) КДС нужно будет рисовать в стороннем проукте нечто, которое компильнется и это можно будет посмотреть в КДС, если надо подправить и залить в плк, избавление от рутины в чем?
1) В том, что многие ошибки выявляются до компиляции/заливки в ПЛК. И не просто выявляются, а появляются подсказки "как исправлять".

2) В том, что можно будет делать тесты. Например: задаём диаграмму значений на входах и проверяем значения на выходах. Понятно, что для каких-то случаев нужно подключать "игровой движок". Но для случаев "куча кнопок" должно на ура пойти.

3) В том, что не опечатаешься в имени переменной. Вон в том же КДС: значения ENUM глобальны. По-моему, это жесть. Логичнее Colors.RED и States.ENABLED

4) В том, что можно в сам язык встроить работу с сетью: "классическая проблема" упаковки/распаковки переменных в буфер. С точки зрения языка может быть просто "буфер", который сам собой правильно укладывает значения в памяти, показывает как улеглось и т.п.

5) В том, что привязки языка к КДС как таковой нет. Взять, например, OwenLogic. Там можно перецепить связь на другой вход/выход? Можно заменить TON на TOF? Правильно, нельзя. А у меня можно :)
Или, может, git в OL поддерживается?
Можно было бы взять и скомпилировать CFC в программу для ПР200. Profit!
Но пока wal79 молчит (http://www.owen.ru/forum/showthread.php?t=23251&p=197307&viewfull=1#post197307), и неясно секретен ли протокол заливки программ в ПР или нет.


Лучше бы свои силы направили на написание подобие jdbc для плк, вот это была бы реальная помощь многим форумчанам
Это ещё как?
JDBC это же интерфейс для работы с базами данных.
"select di12 from plc110 where do15=1 and do16=0"? Смысл?
Есть же libmodbus.

Newcomer
15.02.2016, 14:21
Respect, vladimirisitnikov. Не пропадет твой скорбный труд.

А скептикам можно напомнить, что "Всякий труд, выполняемый честно, полезен, а, следовательно, достоин уважения".

capzap
16.02.2016, 07:09
Избавление от рутины в том, что эта штука потенциально может очень много подсказывать и проверять во время написания кода. Редактор такого типа позволяет вводить только синтаксически корректные программы и на ходу проверяет типизацию.
к концепции у меня претензий нет, только если бы эти нововведения появлялись бы в самой КДС

capzap
16.02.2016, 07:31
В том, что многие ошибки выявляются до компиляции/заливки в ПЛК. И не просто выявляются, а появляются подсказки "как исправлять"
а кто будет решать, что есть ощибка? IF foo=TRUE THEN считается ли такой код ошибкой, в КДС можно обойтись и более короткой схемой, а в вейнтеке от версии к версии бывает что нет

В том, что можно будет делать тесты. Например: задаём диаграмму значений на входах и проверяем значения на выходах. Понятно, что для каких-то случаев нужно подключать "игровой движок". Но для случаев "куча кнопок" должно на ура пойти
это есть и в самой КДС

В том, что не опечатаешься в имени переменной. Вон в том же КДС: значения ENUM глобальны. По-моему, это жесть. Логичнее Colors.RED и States.ENABLEDпопробуйте в КДС написать "левое" имя переменной во время редактирования, так что тоже не аргумент. По поводу чего то там глобального, если Вам попался код не отвечающий Вашим требованиям, это не означает что это проблема среды, писать код логично ни кто не запрещает

В том, что можно в сам язык встроить работу с сетью: "классическая проблема" упаковки/распаковки переменных в буфер. С точки зрения языка может быть просто "буфер", который сам собой правильно укладывает значения в памяти, показывает как улеглось и т.п.подобрали в КДС бибку, которая содержит функции работы с сетью и останется только "ложить" или "забирать" просто буффер

В том, что привязки языка к КДС как таковой нет. Взять, например, OwenLogic. Там можно перецепить связь на другой вход/выход? Можно заменить TON на TOF? Правильно, нельзя. А у меня можно
Или, может, git в OL поддерживается?браться за работу то с плк, то с ПР это означает работать с мелкими, в основном разовыми проектами. По поводу смены связей, замены блоков, а где заявленные в начале поста инструменты подсказки, что не правильно пишешь, не туда связь ставишь, не тот блок применяешь?

Yegor
16.02.2016, 09:34
Чёт не могу запустить нормально.

22662

А возможно ли встроить вон тот CFC-редактор с картинки в чисто текстовую среду на той же платформе (IntelliJ), если, скажем, текст уже будет распарсен?

Владимир Ситников
16.02.2016, 11:21
Чёт не могу запустить нормально.22662
Перемудрил я с версиями. Перевыложил https://github.com/vlsi/ide61131/releases/tag/v1.2.0, теперь всё по уму будет.


А возможно ли встроить вон тот CFC-редактор с картинки в чисто текстовую среду на той же платформе (IntelliJ), если, скажем, текст уже будет распарсен?
Можно.
1) Можно как MPS-based плагин. Я, например, могу рядом со standalone версией выложить IDEA plugin (со всем этим ST/CFC ну или что там нужно). Тут плюс в том, что MPS прозрачно хранит модель, поддерживает обновление и т.п.
2) Либо в отдельном IDEA-плагине сделать CFC редактор. Mbeddr опирается на http://www.adaptagrams.org, https://github.com/jgraph/jgraphx, и de.cau.cs.kieler.kiml.libavoid.jar. Но тогда придётся модель (хранение данных этой самой диаграммы) как-то вручную делать.

Владимир Ситников
16.02.2016, 12:41
а кто будет решать, что есть ощибка? IF foo=TRUE THEN считается ли такой код ошибкой, в КДС можно обойтись и более короткой схемой, а в вейнтеке от версии к версии бывает что нет
Сын ошибок трудных и будет решать что есть ошибка, и как сделать, чтобы "в вейнтеке" работало.
В конце концов, target'ом может и определяться. Выбираете target==ОВЕН -- показывает одно. Выбираете Weintek - другое.

Точно так же как "выбираете ПР100 -- оно ругается на REAL/LREAL, выбираете ПР200 -- перестаёт ругаться".

Вот пример: http://www.owen.ru/forum/showthread.php?t=21099&p=197149&viewfull=1#post197149
КДС без проблем запустило "левый код": автор пытался структуру из 8-и BOOL'ов записать в один BOOL. И удивлялся: "А чойта не работает?"

По-моему, то, что КДС разрешает смешивать разные типы указателей это жесть просто. Если указатель на структуру, то и читать оттуда нужно структуру.
Если вместо структуры хочешь прочитать REAL, то будь бобр, ставь приведение типа, чтобы сразу всем было понятно: "тут потенциальная жесть".



Например: задаём диаграмму значений на входах и проверяем значения на выходах это есть и в самой КДС
Обсуждали же уже: http://www.owen.ru/forum/showthread.php?t=22898

Покажите, пожалуйста, как в КДС сделать тест.
Вот для примера: http://www.owen.ru/forum/showthread.php?t=23073&p=192580&viewfull=1#post192580
Есть форма входного сигнала, есть желаемое значение на выходе.
Как сделать так, чтобы КДС проверил программу, и сказал, что "на шаге 4 значение выхода отличается от ожидаемого"?

Вот, если бы КДС умел тестировать, то можно было бы просто взять программу (например, этот ответ: http://www.owen.ru/forum/showthread.php?t=23073&p=192422&viewfull=1#post192422), и посмотреть выдаёт ли она нужный ответ или нет.
Усложняем тестовый сигнал и легко проверяем, что программа ведёт себя так, как нужно.


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

Аналогичный пример: MS Word же не показывает всплывающее окно "орфографии" когда находит опечатку? Так же и тут.
Если вам проще со всплывающим окном, не вопрос. Я вас не собираюсь переубеждать. Я просто говорю, что есть альтернативная точка зрения на всплывающие окна, и там нужно решение проблемы "несуществующих переменных".


ни кто не запрещает подобрали в КДС бибку, которая содержит функции работы с сетью и останется только "ложить" или "забирать" просто буффер
Вы правы, никто не запрещает.

И, разумеется, все должны страдать, в уме вычисляя адреса.
Вот пара примеров: http://www.owen.ru/forum/showthread.php?t=23289&p=196473&viewfull=1#post196473, http://www.owen.ru/forum/showthread.php?t=21594&p=194304&viewfull=1#post194304
браться за работу то с плк, то с ПР это означает работать с мелкими, в основном разовыми проектами. По поводу смены связей, замены блоков, а где заявленные в начале поста инструменты подсказки, что не правильно пишешь, не туда связь ставишь, не тот блок применяешь?[/QUOTE]


браться за работу то с плк, то с ПР это означает работать с мелкими, в основном разовыми проектами
И? Развивайте мысль. Пока не пойму о чём вы.


По поводу смены связей, замены блоков, а где заявленные в начале поста инструменты подсказки, что не правильно пишешь, не туда связь ставишь, не тот блок применяешь?
Вы правы, подсказок "не ту связь/не ту модель ПЛК ставишь" я не делал. Но это же дело нехитрое. Прямо посмотреть хотите как будет?

Основное что хотел проверить, так это то, что диаграммы/связи можно рисовать без матюгов. И оказалось, что "из коробки" оно рисует не хуже, чем библиотека, на которой основан OwenLogic. Связи можно перецеплять, расположение связей выглядит нормально, без проблем делается "подкрашивание красным неверных связей" и далее по списку.

На всю доработку CFC, включая создание видео (а это, знаете ли тоже время), я потратил меньше часа. Если ожидаете, что за это время появится полноценный CFC редактор с подкрашиванием ошибок, то, что ж, я очень рад. Без шуток. Моя цель как раз и есть в том, чтобы выстраивать ожидания от инструмента. Да, разумеется всё должно подкрашиваться, предугадывать какие блоки нужно, показывать "какую модель ПР лучше выбрать, чтобы был запас по выходам и т.п."

Yegor
16.02.2016, 13:55
По-моему, то, что КДС разрешает смешивать разные типы указателей это жесть просто.Уже как-то говорил, но лень искать... Короче, проблема в том, что в кодесисе вообще нет операции взятия указателя. Вместо неё реализовано неявное приведение чисел к указателю любого типа. И нетипизированных указателей для передачи в аргументы функций тоже нет. Вместо этого тоже сделано неявное приведение, но уже наоборот из указателей в число. В итоге имеем симметричное неявное приведение, которое позволяет мешать указатели разных типов. Скорее баг, чем фича.

capzap
16.02.2016, 14:32
Покажите, пожалуйста, как в КДС сделать тест.
Вот для примера: http://www.owen.ru/forum/showthread....l=1#post192580
Есть форма входного сигнала, есть желаемое значение на выходе.
Как сделать так, чтобы КДС проверил программу, и сказал, что "на шаге 4 значение выхода отличается от ожидаемого"?

Вот, если бы КДС умел тестировать, то можно было бы просто взять программу (например, этот ответ: http://www.owen.ru/forum/showthread....l=1#post192422), и посмотреть выдаёт ли она нужный ответ или нет.
Усложняем тестовый сигнал и легко проверяем, что программа ведёт себя так, как нужно.
что тут тестировать, обычный антидребезг с временем в 10 секунд, код простейший, хоть заусложняйтесь с входным сигналом, результат будет всегда правильный

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

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

Валенок
16.02.2016, 16:39
Вы про то, что КДС показывает окно "определения переменной"?
Возможно, это на любителя, но я крайне не люблю лишних всплывающих окон. Логика простая: если я опечатался, то мне проще стереть пару букв. Всплывающее окно перехватывает внимание и отвлекает.
Аналогичный пример: MS Word же не показывает всплывающее окно "орфографии" когда находит опечатку? Так же и тут...
А не пытались это просто отключить ?


И, разумеется, все должны страдать, в уме вычисляя адреса.
Нравится слово 'все'. По себе что-ли судите ? )) Если кто в уме что-то считает - это его проблемы.


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

Владимир Ситников
16.02.2016, 16:55
А не пытались это просто отключить ?
Разумеется, я отключил.



Нравится слово 'все'. По себе что-ли судите ? )) Если кто в уме что-то считает - это его проблемы.
Наоборот. Я привёл конкретные примеры: http://www.owen.ru/forum/showthread.php?t=23289&p=196473&viewfull=1#post196473 и http://www.owen.ru/forum/showthread.php?t=21594&p=194304&viewfull=1#post194304
Наверняка есть и другие -- просто эти были на моей памяти, а я на форуме совсем недавно.

Егор зря что-ли по-вашему утилиту рассчёта адресов (http://www.owen.ru/forum/showthread.php?t=23196) делал?
Моё мнение -- рассчётами и проверкой должны заниматься среда программирования и компилятор. Человек лишь должен попивать то, что любит попивать, и высказывать своё "фи".


По-моему то, что кухонные ножи в свободной продаже - это жесть. Нужно обязательно ввести обязательное предъявление справки о наличии места для хранения и устройств гарантирующих отсутствие порезов пальцев.

Давайте ближе к делу?

Вот лично вы https://github.com/vlsi/ide61131/releases/download/v1.2.0/ide61131-1.2.0-win.zip скачали?
Посмотрели?

Валенок
16.02.2016, 17:21
Разумеется, я отключил.
Ну вот и закрыли вопрос.



Наоборот. Я привёл конкретные примеры...
Это - "все" ?



Егор зря что-ли по-вашему .. делал?

Не зря - раз используют. Я мастера из конфигурации не юзаю.
Меня интересует - почему Вы в очередной раз кому-то что-то приписываете ? - ".. по-вашему ..."



Моё мнение -- рассчётами и проверкой должны заниматься среда программирования и компилятор. Человек лишь должен попивать то, что любит попивать, и высказывать своё "фи".

И я всегда за попивать и всегда был против дурацких адресов когда есть имена, против регистров - когда есть поле структуры или массива и т.д. Но меня абсолютно не парит когда кто-то что-то делает не так я.



Вот лично вы https://github.com/vlsi/ide61131/releases/download/v1.2.0/ide61131-1.2.0-win.zip скачали?
Посмотрели?
Не вижу смысла пока это промежуточное звено. Вот будет прямая компиляция в железо - тогда да.

Владимир Ситников
16.02.2016, 17:54
Разумеется, я отключил.Ну вот и закрыли вопрос.
В том-то и дело, что мне нужна сигнализация о несуществующих переменных.
В КДС её нет. Мне она нужна. Когда мне же capzap говорит, что "Владимир один такой, и никому она не нужна", так это странно.
Ещё раз: я тут не вижу смысла начинать/продолжать дискуссию.


Это - "все" ?
А почему вы отвечаете вопросом на вопрос? == не понял что имелось ввиду под этим вопросом.



Меня интересует - почему Вы в очередной раз кому-то что-то приписываете ? - ".. по-вашему ..."
Ну уж, простите, читать мысли не умею.

Вот это
Нравится слово 'все'. По себе что-ли судите ? )) Если кто в уме что-то считает - это его проблемы.
я понял как "Вы Владимир, по себе судите о необходимости нормального управления адресами. Реально же никому оно не впилось" и всё такое.



всегда был против дурацких адресов когда есть имена, против регистров - когда есть поле структуры или массива и т.д.
Ок, это уже ценный мех на пути к конфигуратору мечты.


Не вижу смысла пока это промежуточное звено. Вот будет прямая компиляция в железо - тогда да.
1) Компиляция в железо -- это вопрос к ОВЕНу. Мне они пока не отвечают. Может, нужно как-то коллективную позицию проявить, и-таки узнать их мнение о "секретности" формата прошивок/протоколов их заливки.

2) А в чём проблема "промежуточного звена"?
Вы код напрямую из мозга в ПЛК заливаете в обход КДС?
У вас, может, КДС прямо на голом железе запущено, без Windows?
Или программы на вашем компьютере работают напрямую с микросхемами памяти, минуя процессор, TLB и всю эту муть?
Или информацией с железом вы обмениваетесь на физическом уровне (https://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D 0%B8%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1 %8C), минуя канальный/сетевой и т.п.?

В общем,

уровни (https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%B0% D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%86%D0%B8%D0 %B8_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0 %BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B 5)): Известный афоризм Дэвида Уилера гласит: Все проблемы в информатике можно решить на другом уровне окольным путем; это часто неверно цитируется с заменой «окольного пути» на «абстракцию». Продолжение от Кевлина Хенни гласит «…за исключением проблем с большим уровнем косвенности.»

3) На раннем этапе проще корректировать направление движения.

Вот взять КДС. Управление адресами там сделано плохо. ХЗ как надо, но в КДС плохо.
И, по-моему, можно сделать лучше.

И это не случай "сделайте мне кухонный нож, чтобы острый был, чтобы резать удобно, и чтобы порезаться невозможно было".
Можно прикинуть, и сделать более лучшую балалайку.

Как раз для этого и полезно пощупать. Как теоретиками быть -- так все горазды. А как рассказать про "конфигуратор мечты" -- так в домик спрятались.

Вот попробую сдвинуть с мёртвой точки: http://recordit.co/ELu7Rm16Hg
Это, конечно, далековато от конфигуратора переменных, но, возможно, на какую-нибудь здравую мысль наведёт.

capzap
16.02.2016, 19:46
Когда мне же capzap говорит, что "Владимир один такой, и никому она не нужна", так это странно.
Ваши потуги не нужны, если это будет в КДС другой разговор, но Вы не разраб КДС-а или хотя бы вариант, как предложил Валенок, доведите свою разработку до загрузки в контроллер
Тот же Егор, Вас первый "съест" когда дело дойдет до соответствия стандарту, Вы в этом не сильны а пытаетесь что то создать и главное других учите, что так будет правильно


ЗЫ
Вот попробую сдвинуть с мёртвой точки: http://recordit.co/ELu7Rm16Hgвот что это, ведь тем кому требуется помощь должны будут сначала вникнуть в логику программирования Вашего продукта, затем всё же изучить основной стандарт языков, чтоб прочитать в КДС что получилось, помощь в правильности синтаксиса улетела в тартары

Валенок
17.02.2016, 00:59
В том-то и дело, что мне нужна сигнализация о несуществующих переменных..
А не пытались включить то что отключили ?



А почему вы отвечаете вопросом на вопрос? == не понял что имелось ввиду под этим вопросом..
Несколько тем (хоть тыща) <> "все".



Ну уж, простите, читать мысли не умею
Я не утверждал что работа Егора никому не нужна. Вы мне приписали эти слова.



А в чём проблема "промежуточного звена"? .. Вы код напрямую из мозга в ПЛК заливаете в обход КДС? ..У вас, может, КДС прямо на голом железе запущено, без Windows? ..Или программы на вашем компьютере работают напрямую с микросхемами памяти, минуя процессор, TLB и всю эту муть?
...
А в чём проблема "промежуточного звена"?
В слове - "онлайн"
Я ничуть не отговариваю Вас от чего либо. Думаю что макс.эффект будет - если нечто обеспечит онлайн самостоятельно, или хотя бы на первый взгляд самостоятельно.


Компиляция в железо -- это вопрос к ОВЕНу. Мне они пока не отвечают.
)) Не слышали как Ходжа вытащил Джафара ?



Ок, это уже ценный мех на пути к конфигуратору мечты.
Как я его вижу :
"...Если бы губы Никанора Ивановича да приставить к носу Ивана Кузьмича, да взять сколь-нибудь развязанное, какая у Балтазара Балтазаровича, да, пожалуй, прибавить к этому еще дородности Ивана Павловича — я бы тогда тотчас же решилась. А теперь — поди подумай!" (C), Николай Васильевич

Владимир Ситников
17.02.2016, 01:30
Я не утверждал что работа Егора никому не нужна. Вы мне приписали эти слова.
Чего не приписывал, того не приписывал. Извольте, сударь, нотариально заверенную ссылку.

На всякий случай, подчеркну, что знак вопроса в конце предложения означает вопрос.

Валенок
18.02.2016, 11:58
Чего не приписывал, того не приписывал. Извольте, сударь, нотариально заверенную ссылку..
Ну вот :

..Егор зря что-ли по-вашему ... утилиту рассчёта адресов...
Можно тоже ссылку где говорил/предполагал о зряшности работы Егора ?
Заверять не обязательно. И на всякий случай подчеркну что тоже "читать мысли не умею" и филологическими изысканиями смыла фраз не занимаюсь.

Ваша работа нужна и полезна. Вопрос лишь кому и в каком виде. Вполне может быть что когда-нить буду пользоваться Вашим трудом, и даже на возмездной основе. Но лично мне это в таком виде - лишний спотык, хотя кому-то очень даже подойдет и в таком виде.

Владимир Ситников
18.02.2016, 12:20
Ну вот :

..Егор зря что-ли по-вашему ... утилиту рассчёта адресов...
Можно тоже ссылку где говорил/предполагал о зряшности работы Егора ?

Вы как-то вырвали мою фразу из контекста.
Вот она полностью:

Егор зря что-ли по-вашему утилиту рассчёта адресов (http://www.owen.ru/forum/showthread.php?t=23196) делал?
Это был вопрос. Вопрос, Карл!
Я хотел понять ваше мнение зря или не зря. Задал вопрос, поставил вопросительный знак. Зачем сразу думать, что что-то кому-то приписано? Простой такой вопрос, без хитростей.

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

Валенок
18.02.2016, 12:56
Я хотел понять ваше мнение зря или не зря. Задал вопрос, поставил вопросительный знак. Зачем сразу думать, что что-то кому-то приписано.

-"Егор зря что-ли утилиту .. рассчёта адресов делал?" без "по-вашему" - без хитростей. Про филологию - сказал. (извини Егор если икается)


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

Владимир Ситников
20.02.2016, 12:38
Без PLC Configuration, разумеется, жить невозможно.
Призываю выссказаться в теме про конфигуратор (http://www.owen.ru/forum/showthread.php?t=23447).

Генерация документации на основе данных конфигуратора, наверное, мечты-мечты (да и у каждого свой способ документирования), но не исключено.

Владимир Ситников
24.02.2016, 00:39
Тем временем, пробую импортировать описания "PLC Target" из *.cfg файлов.

Сейчас выглядит так: http://recordit.co/WbJeBXABXN

Дерево PLC Configuration отображается, и даже можно заменить "Fast discrete outputs" на "PWM". Правила замены приходят из *.cfg, т.е. с таким же успехом будет работать не только со 110-ым.

Остаётся сделать вычисление адресов, работу с параметрами (чтобы задавать разнообразные "MinCycleLength ms" и "интервал фильтрации"), работу с "VAR" модулями, привязку переменных и выгрузку этого добра в *.exp формат.

Владимир Ситников
22.03.2016, 01:23
Доделал PLC Configuration. Не проверял на железе, но дерево, вроде, работает как надо, и КДС подхватывает тоже как надо.

Заработал пример с "кнопкой, TON и лампочкой": http://recordit.co/bJe2u0b3xy
Кнопка привязывается к DI1, лампочка -- к DO1.

Картинка: 23284

В эмуляции КДС работает.

Владимир Ситников
30.04.2016, 20:00
Сделал кнопку "создать проект с лампочкой": https://youtu.be/zCULGT3yZwA

24240

Теперь проект можно целиком в IDE61131 создавать.

Качать новую версию тут: https://github.com/vlsi/ide61131/releases/tag/v1.3.0

славаолд
10.05.2016, 20:05
господа ... возможно ли дополнить графику в ВИЗУАЛЬ.. своей в 3д... типа создать пользовательскую библиотеку в формате бмп 3д... начинаешь прорисовывать примитивы... и понимаешь насколько они не эстетичны по сравнению с мастерскада..

Владимир Ситников
10.05.2016, 20:33
господа ... возможно ли дополнить графику в ВИЗУАЛЬ.. своей в 3д... типа создать пользовательскую библиотеку в формате бмп 3д... начинаешь прорисовывать примитивы... и понимаешь насколько они не эстетичны по сравнению с мастерскада..

Можете сформулировать задачу, которую решаете?
Хотите создать свою мастерскаду?

Владимир Ситников
12.06.2016, 11:28
Очередное обновление: https://github.com/vlsi/ide61131/releases/tag/v1.4.0

Наконец-то появился логотип:24923

Экран запуска: 24921
Экран приветствия: 24922

Serhioromano
24.06.2016, 07:06
Звезда, и watch...

Прекрасная работа! Я думаю это будет очень полезно тем кто привык к высоким стандартам среды написания кода. Где можно менять размер шрифта, подствтку, выдеть предупреждения, автозаполнение и все такое. Я сам сижу в IDEA на других проектах, и кроме нее ни чего больше не хочется. Если можно будет в ней писать ST это будет просто шикардос!

krollcbas
24.06.2016, 07:40
vladimirisitnikov, можете выложить в ютутбе как это работает.
Интересно посмотреть, но не настолько чтоб тренировать реестр на рабочем компьютере.

Владимир Ситников
24.06.2016, 09:12
vladimirisitnikov, можете выложить в ютутбе как это работает.
Интересно посмотреть, но не настолько чтоб тренировать реестр на рабочем компьютере.

А эти видео не работают? (ссылки на них же есть в первом сообщении)
https://github.com/vlsi/ide61131#videos

Вольд
24.06.2016, 12:44
А как то, что сделал vladimirisitnikov согласуется со стандартом МЭК 61131-3 ?

Владимир Ситников
24.06.2016, 13:33
А как то, что сделал vladimirisitnikov согласуется со стандартом МЭК 61131-3 ?

В чём конкретно вопрос?
В Hardella упоминаюся слова "function block", "function", "PLC_PLG". Этого достаточно?

Филоненко Владислав
24.06.2016, 14:51
1) Компиляция в железо -- это вопрос к ОВЕНу. Мне они пока не отвечают. Может, нужно как-то коллективную позицию проявить, и-таки узнать их мнение о "секретности" формата прошивок/протоколов их заливки.

2) А в чём проблема "промежуточного звена"?
Вы код напрямую из мозга в ПЛК заливаете в обход КДС?
У вас, может, КДС прямо на голом железе запущено, без Windows?
Или программы на вашем компьютере работают напрямую с микросхемами памяти, минуя процессор, TLB и всю эту муть?
Или информацией с железом вы обмениваетесь на физическом уровне (https://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D 0%B8%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1 %8C), минуя канальный/сетевой и т.п.?


Владимир, требуя от фирмы ОВЕН раскрыть великий секрет "загрузки кода минуя CoDeSys" в ПЛК, вы адресуете свой вопрос не туда.
Его надо адресовать 3S Software, у которой мы и купили код среды для ПЛК и чьими средствами разработки на ПК Вы и мы пользуемся.

Код на ST, CFC, IL и т.п. + конфигурация, задачи и многое ещё компилируется компилятором 3S в файл программы. Доступа к "формату" программы у нас нет. Реверс инжиниринг в данном случае, во первых запрещён нашим лицензионным соглашением, во вторых труден и в третьих лишён смысла, т.к. 99% "цимуса" именно в компиляторе/среде разработки.
Если у Вас вдруг появится свой компилятор и Вы предложите его нам интегрировать в ПЛК, мы с вниманием рассмотрим Ваше предложение. И поменяем под Вас формат программы и многое другое.
Однако, Вы уж извините, но среда разработки CoDeSys - это около 40-50 человеколет работы и не один десяток миллионов евро ещё по докризисным ценам. И один человек повторить и протестировать это не в состоянии просто физически.
Даже более простая по функционалу среда ОвенЛоджик - это 4 человеко-года минимум.

P.S. альтернативный редактор - это хорошая штука.

Владимир Ситников
24.06.2016, 15:35
Владимир, требуя от фирмы ОВЕН раскрыть великий секрет "загрузки кода минуя CoDeSys" в ПЛК, вы адресуете свой вопрос не туда.
Его надо адресовать 3S Software, у которой мы и купили код среды для ПЛК и чьими средствами разработки на ПК Вы и мы пользуемся.
Тут я имел ввиду не ПЛК, а ПР. Я понимаю, что за протоколом КДС надо ходить не в ОВЕН, а в 3S.
Я говорил про ПР. И я не требую раскрыть протокол, а лишь интересуюсь "секретен ли он". Если несекретен, то вопрос открытия (в каком-нибудь виде), конечно, появится, но если секретен, то меня и такое устроит (ПЛК у меня есть, а ПР нет, поэтому ПР меня волнует чуть меньше)

Вот изначальное сообщение, где я говорил, что IDE61131 может быть альтернативой для ОЛ:


в чем преимущество?
...
5) В том, что привязки языка к КДС как таковой нет. Взять, например, OwenLogic. Там можно перецепить связь на другой вход/выход? Можно заменить TON на TOF? Правильно, нельзя. А у меня можно :)
Или, может, git в OL поддерживается?
Можно было бы взять и скомпилировать CFC в программу для ПР200. Profit!
Но пока wal79 молчит (http://www.owen.ru/forum/showthread.php?t=23251&p=197307&viewfull=1#post197307), и неясно секретен ли протокол заливки программ в ПР или нет.

Из максимально близкого к этой теме я видел многозначный ответ Максима про то, что среда OwenLogic развивается (http://www.owen.ru/forum/showthread.php?t=23740&p=205320&viewfull=1#post205320).



Если у Вас вдруг появится свой компилятор и Вы предложите его нам интегрировать в ПЛК, мы с вниманием рассмотрим Ваше предложение. И поменяем под Вас формат программы и многое другое.
Можно на нейтральной территории потренироваться -- программирование/отладка PRU ФБ. Там процессор нехитрый, нет требований сверхсложный компилятор писать => может легко получиться. Некий минус, что из "быстрых" устройств у меня только ПЛК110 и есть, поэтому тестировать могу разве что подключением выхода на вход (ну или прикупить какой-нибудь ШД/СИ).

Алексей Александрович
25.06.2016, 09:20
Однако, Вы уж извините, но среда разработки CoDeSys - это около 40-50 человеколет работы и не один десяток миллионов евро ещё по докризисным ценам. И один человек повторить и протестировать это не в состоянии просто физически.
Даже более простая по функционалу среда ОвенЛоджик - это 4 человеко-года минимум.
ВЫ подождите тема только развивается. До банкротства 3S Software уже не долго. :D

Сергей0308
28.06.2016, 21:35
ВЫ подождите тема только развивается. До банкротства 3S Software уже не долго. :D

Если Ваши прогнозы сбудутся, то что же получится, Овену свою кодесус придумывать придётся или как ещё выкручиваться??? Одно радует ОЛ у них своя, никуда дёргаться не надо!!!

Николаев Андрей
28.06.2016, 22:56
Если Ваши прогнозы сбудутся, то что же получится, Овену свою кодесус придумывать придётся или как ещё выкручиваться??? Одно радует ОЛ у них своя, никуда дёргаться не надо!!!

Не ведитесь на провокации. С учетом, что уже 50% производителей контроллеров, представленных на Российском рынке используют CODESYS говорит о том, что ничего с ним не случится :)

Eugene.A
30.06.2016, 13:02
Лучше бы вот с этим что-нибудь сделали:25198
Это из из "Руководство по применению в системах каскадного управления насосами", http://www.owen.ru/uploads/rpr_pchv_kaskad_008.pdf
Разве тут можно что-нибудь понять?

Владимир Ситников
30.06.2016, 13:31
Лучше бы вот с этим что-нибудь сделали:25198
Это к кому обращение?


Разве тут можно что-нибудь понять?
Да, там ничего понять невозможно.

rovki
30.06.2016, 15:21
Если пописать входа\выхода ,то элементарно ...Сложно читать на китайском ,когда учил финский ...Хотя причесать схему не мешало бы ,особенно связи поверх элементов .

Eugene.A
30.06.2016, 15:27
Если пописать входа\выхода ,то элементарно ...Сложно читать на китайском ,когда учил финский ...Хотя причесать схему не мешало бы ,особенно связи поверх элементов .

А вы на каком сейчас написали? Куда что пописать? Где ударение?

Eugene.A
30.06.2016, 15:28
Это к кому обращение?

Документ с сайта Овена, стало быть, к ним.

Владимир Ситников
30.06.2016, 15:35
Документ с сайта Овена, стало быть, к ним.

Мне, конечно, импонирует, что мою тему не забывают. Но про доработку документации ОВЕН'а лучше отдельную тему(ы) заводить.

Eugene.A
30.06.2016, 16:00
Мне, конечно, импонирует, что мою тему не забывают. Но про доработку документации ОВЕН'а лучше отдельную тему(ы) заводить.
Да документ-то полбеды, сам Овен Лоджик удручает, после LOGO!Soft Comfort, например. Я и сам сколько пытался нарисовать красиво, весь в синяках был. Может, в нём надо каким-то тайным знанием обладать?
А здесь вроде тема про доработку сред программирования?

Владимир Ситников
30.06.2016, 16:08
А здесь вроде тема про доработку сред программирования?

Да, всё так. Я ж, поэтому и спросил "к кому вопрос".

Идеи/вопросы/пожелания/пожертвования и т.п. -- приветствуются.

Владимир Ситников
22.09.2016, 22:10
Внезапно оказывается, что есть те, кто качают и пробуют Hardella:
26527

Владимир Ситников
26.10.2016, 00:40
Сделал новым подходом программу, мигающую двумя выходами, залил в ПЛК -- работает.

Надо будет проверить обмен данными, входы и можно выпускать обновление Hardella.

Обмен проверил -- работает. Выходы мигают, обмен данными между HOST и PRU идёт.
Входы как-нибудь потом, на свежую голову, проверю, ибо не хочется сдуру спалить ПЛК.

PRU берёт BOOL из основной программы и записывает его в другую переменную.
27274

В КДС замыкаем через NOT и получаем цветомузыку.
27275

Интервал мигания я сделал за счёт "0.25сек цикла PRU".
27276


Результат:
27277

PS. Как же блок питания пищит адски. Если его каким-нибудь клеем залить, то поможет?

Филоненко Владислав
26.10.2016, 12:27
Смотрю тут собрался клуб самоубийц-затейников. Прямой доступ из PRU в программу нельзя так делать.

БП можно просто нагрузить по линии 24В.

Владимир Ситников
26.10.2016, 16:58
потому что выше у вас написано >>>> "PRU берёт BOOL из основной программы и записывает его в другую переменную."

но смысл поста Владислава в том, что нужно, как минимум понимать, что будет с алгоритмом, если ему из другого потока значение переменных менять, а в общем случае - проклясть и не использовать сей "метод"

Я не использую подход "поменять у другого потока переменную на ходу".
Я использую подход "обмена сообщениями". Т.е. передаём в другой поток информацию, что "новые значения готовы" -- он читает/пишет когда у него есть время и когда у него ничего не сломается.

Слова "PRU берёт BOOL из основной программы" выражают сущность происходящего, а не детали реализации. Сам факт обмена данными "скрыт" от пользователя в компиляторе.

Т.е. ни о каком "изменении переменных прямо посреди вычислений" речи не идёт.

На стороне PRU обменом занимается такой код:
27283

Т.е. PRU работает исключительно с локальной памятью, и исключительно со своими переменными.
Само по себе PRU читает/пишет только, если видит, что sys_transferState = PRU_RAM_TRANSFER_STATE.PRU_READWRITE

На КДС стороне выглядит так:
27284

И, да, я тестировал word tearing (т.е. ситуацию, когда PRU поочерёдно пишет 0xFFFFFFFF и 0x00000000, а КДС читает). В КДС палёных, полузаписанных и т.п. значений (0xffff0000) не приходило.


Т.е. мой подход опирается на следующее:
1) Чтение/запись DWORD атомарны (всегда читается/записывается полное значение)
2) Чтение/запись упорядочены. Например, если мы в PRU выполнили x=1; y=42, а потом на HOST стороне прочитали 42 из ячейки y, то чтение x должно вернуть 1. Иначе говоря, PRU/HOST не переупорядочивает чтение/запись PRU DRAM.

К сожалению, по вопросам "атомарности" и "семантики модели памяти" в спецификации на AM1808 ничего не нашёл. Да и у самого PRU ядра нет ни операций "compare and set", ни операций "LL/SC (https://en.wikipedia.org/wiki/Load-link/store-conditional)". Т.е. под "нормальную" многопоточность оно не рассчитано, и я решил, что там модель памяти простая, без хитростей. Иначе как вообще можно какой-то код написать, если возможны произвольные перестановки обращений к памяти, а команд для упорядочивания нет?

Вольд
27.10.2016, 12:11
Владимир Ситников объясните, пожалуйста, по простому из-за чего разгорелся очередной сыр-бор.

Возможно ли решение обозначенной проблемы в рамках вашей концепции PRU-программирования ?

Владимир Ситников
27.10.2016, 16:46
Хорошо будет если В.Ситников пояснит чего не надо делать при разработке программ для PRU чтобы не вляпаться в то, о чем писал В.Филоненко.

Владислав пишет, что в коде КДС программы и в коде PRU программы не надо использовать указатели.
Если сейчас попытаться использовать указатели в Hardella в PRU программе, то возникнет ошибка на этапе компиляции.
В КДС программе же каждый знает, что указатели это мощный, но опасный инструмент.

При использовании Hardella, в прикладном коде указатели вообще не нужны. Обмен данными происходит через обычные "PROGRAM" КДС блоки.


Еще интересно знать какими ресурсами PRU располагает программист при написании программ. Или придется все таки погружаться в архитектуру PRU.
Да, надо написать.
В большинстве случаев, Hardella просто не даст написать нерабочий код.

Сейчас реализован "PRU цикл" фиксированной длительности. Кто знает, что такое "ПЛК цикл" и что "запись выходов происходит после отработки пользовательского кода", тому не нужно учить ничего нового. В Hardella PRU всё точно так же.
Есть одна задача, и она выполняется циклично. В промежутках между вызовами программы идёт обмен данными с основным циклом, и обмен входов/выходов

Из текущих ограничений самого PRU компилятора (это можно будет исправить в будущем, но пока для упрощения возможности не реализованы):
1) Не поддерживаются сложные выражения. Т.е. чтобы записать d := a+b-c нужно делать промежуточную переменную и записывать как u := b-c; d:= a+b; В условных операторах (if/while/repeat) составные AND/OR работают, но тоже не в любых комбинациях. Если скомпилировалось, то норм. Если "не поддерживается", то будет ошибка компиляции.
2) Не поддерживаются структуры
3) Не поддерживаются массивы
4) Пока только unsigned типы: BOOL/BYTE/WORD/DWORD и ENUM'ы
5) Не поддерживается PRU1. Т.е. пока "теряются" 2 быстрых выхода, которые подключены к этому самому PRU1.

Владимир Ситников
27.10.2016, 21:38
Красота, товарищи.
Взялось и удалилось моё сообщение о том, как составлять PRU программы в Hardella.

При этом, ни в почте, ни в личных сообщениях ничего не образовалось.

Интересно, это просто временный глюк форума, или модераторы так скрытно действуют, что просто удаляют сообщения и даже не просят "не писать больше такого"?
Если что, то ко мне ни разу никто не обращался с просьбами/требованиями "не распространяться про Hardella, PRU и т.п."

Что ответят, если обратиться к администрации с вопросом "пропало сообщение"?

В целом, могу повторить. Все картинки у меня остались.
Хотя надёжнее будет на сайте Hardell'ы начать документацию выкладывать -- там надёжнее будет, и теряться записи не будут.

Напомню кратко последний статус: в Hardella 1.5.0 (https://github.com/vlsi/ide61131/releases/tag/v1.5.0) любой желающий может составить PRU программу и управлять быстрыми входами-выходами на частотах порядка 100кГц...1МГц. Всё абсолютно законно и не требует специальных прошивок.

Вольд
28.10.2016, 10:43
Нормальный ход событий. ;)

Новации всегда трудно пробивают себе дорогу.

Надо все основные материалы размещать на сайте Hardella.

Вольд
28.10.2016, 14:21
Уважаемые господа из фирмы "ОВЕН", у вас есть прекрасная возможность на деле доказать, что концепция В.Ситникова является порочной. Попробуйте при помощи Hardella IDE написать ФБ для PRU и покажите всем, что он работает не корректно.

Владимир Ситников
28.10.2016, 15:18
Уважаемые господа из фирмы "ОВЕН", у вас есть прекрасная возможность на деле доказать, что концепция В.Ситникова является порочной. Попробуйте при помощи Hardella написать ФБ для PRU и покажите всем, что он работает не корректно.

Рассмотрим вопрос "надёжности", "тестирования", "чёрного ящика" и всего такого.
Вот в текущем "owenlogic" есть проблема: неясно что со схемой сделал компилятор. Неясно как сработали макросы и какая связь стала "неявной обратной блуждающей связью".

Посмотрим как с этим обстоит дело в Hardella IDE.
Если в двух словах, то хорошо всё обстоит.

Возмьём простую программу:
27317

Результат компиляции выглядит так:
27318

Что? Всё ясно, как на ладони? =)
Ну, само наличие бинарного кода это уже хоть что-то, ведь его можно анализировать.
Но, разумеется, для анализа это непригодно.

В Hardella есть более простой и понятный инструмент.
Для его активации нужно в меню включить сохранение "промежуточных результатов" (поставить галочку "save transient models"):
27319

Потом перекомпилируем проект:
27320


И видим как в нижней левой части экрана добавились эти самые промежуточные представления:
27321

Например, в начале добавляется ФБ для обработки входов.
В PRU configuration мы указывали 0.5мкс фильтрацию 1-го входа, и это как раз и есть 100 тактов:
27322

Одновременно с этим создаётся и каркас будущей программы (WHILE цикл PRU и т.п.)
27323

Можно проследить куда именно в этот цикл встраивается пользовательский код:
27324

Видно как компилируется код:
27325

И можно посмотреть в каких регистрах что хранится:
27327


Кто-то мог бы возразить, что, мол, "тестировать нужно каждый блок отдельно и всё такое".
И?
Кто мешает тестировать каждый блок отдельно?
Правильно, никто не мешает.

Возьмём, например, блок фильтрации: PRU_DEBOUNCE.
В конце концов для конкретно этого блока создаётся java класс
27328

https://www.google-analytics.com/collect?v=1&tid=UA-62628294-2&t=event&cid=debug&cn=test&cs=owen&ec=blogpost_debug&ea=open

Этот java класс можно тестировать обычными java средствами.
Вот пример тестов для блока ABZ энкодера: https://github.com/vlsi/pru-emulator/blob/master/src/test/java/com/github/vlsi/pru/AbzTest.java#L19
В тесте нет никакой шелухи, а просто идут вызовы нашего блока и проверяются значения на выходах.

Точно так же можно тестировать и целиковую программу (с фильтрацией и всем таким).
Конечно, для тестирования "программы целиком" нужно побольше обвязочного кода, т.к. нужно в том числе эмулировать и "цикл ПЛК, который раз в 1мс опрашивает PRU".
Тем не менее, вот код, тестирующий программу "отмерки нужной длины с помощью энкодера": https://github.com/vlsi/pru-emulator/blob/master/src/test/java/com/github/vlsi/pru/MaterialCutterTest.java#L105. Там просто эмуляция опроса из ПЛК цикла и вывод значений на экран. Можно добавить assert'ов, чтобы тест падал, если поведение отличается от желаемого или просто проверять совпадает ли вся выводимая простыня "эталонной простыне значений".

Что мы только что увидели?

1) В Hardella в один щелчок мышкой можно увидеть все промежуточные стадии компиляции кода. Понятное дело, что для понимания "последних стадий" нужно понимание ассемблера PRU. Но первые фазы будут понятны и тому, кто не разбирается в деталях PRU архитектуры.

2) В Hardella можно легко делать автоматические тесты как для отдельных блоков, так и для программы в целом. "Тестирование схем ОЛ" тихо плачет в сторонке. Не исключаю, что в недрах ОВЕН и есть инструмент для автотестирования программ ОЛ, но обывателю он явно недоступен.

3) Всё вышеперечисленное может сделать рядовой программист. Детального понимания PRU архитектуры не требуется.

4) В "тестах ФБ" можно проверять не только правильность работы, но и длительность выполнения. Т.е. можно узнать сколько тактов требует блок на тех или иных входных значениях.

5) В тестах "программы в целом", можно проверять "как часто осуществляется опрос входов"

Владимир Ситников
28.10.2016, 15:55
Объясните Вольду лучше различие, между порочностью концепции и у ОВЕНа денег не хватит, а то парень не в курсе

Вольд-то давно понял, что ни о какой "порочности" концепции речи не идёт.
Нормальная, рабочая концепция.

Если "вдруг" окажется, что "DWORD'ами передавать нельзя, а только байтами", то достаточно лишь будет поправить компилятор и перекомпилировать проект. Концепция "отмечаем флажком @Export те переменные, которые нужно передавать в host" остаётся. Концепция составлять программы на ST,а не на ASM тоже хорошая.
В общем, "порочность" это гнусное слово, которое используют без приведения каких-то разумных аргументов/доводов.


Слова Владислава/Дмитрия про "необходимость фиксированной длительности выполнения ФБ" для PRU не имеют никакого смысла. Да, звучит громко, но именно так это и есть.

Я уже говорил почему именно, но без проблем повторюсь: обмен данными между PRU и HOST является "непредсказуемым" с точки зрения PRU.
1) Поэтому, даже если весь остальной PRU код сделан супер-пупер по фиксированной длительности выполнения, то внезапно пришедший запрос на обмен данными сорвёт весь ритм.
Можно, конечно, "потратить" одно из PRU ядер на обмен с host'ом, но есть ли в этом смысл, если и без "траты ядра" (см №2) прекрасно работает?

2) С другой стороны, у PRU есть "счётчик выполненных тактов", поэтому совершенно без проблем делается "PRU цикл заданной длительности". Например, если цикл 1мкс, то сначала выполняем пользовательский код, а потом просто "ждём". Иными словами, выходы переключаются раз в цикл и там нет никаких плавающих задержек.

Владимир Ситников
28.10.2016, 18:50
Не понятно зачем в теме созданной разработчиком Овен столько времени говорить о черепахе ?Создайте свою тему и если модераторы не будут против продвигайте ее . Приватизировали чужую тему что ли ....

Уважаемый, так вы почитайте. Я же тут о PRU программировании, управлению быстрыми входами/выходами только и пишу.

Ни единого упоминания hardella без PRU не было.

И, да, я создавал отдельную тему, но сообщения из неё перенесли модераторы именно сюда.

Владимир Ситников
28.10.2016, 19:30
А что без hardella PRU ни как не может обойтись?Или что первично для вас -пристроить ее или ФБ сделать ?
Без Hardella-никак. Есть, конечно, способ "от Владислава", описанный в первом сообщении, но называть это способом язык не поворачивается, т.к. Слишком уж тяжело им пользоваться.

Ещё есть инструмент от TI, но он слишком сложен для рядового пользователя. Я в нем даже пустой проект создать не смог. Как там обрабатывать входы/выходы - вопрос. Как обмениваться данными с КДС тоже вопрос. Для экспертов, возможно подходит, но простым людям инструмент TI не подойдет.

А черепаха как раз и находится посредине. И проект создаётся в два счета, и сразу получается готовая к использованию в КДС библиотека.

Да, я пользуюсь тем, что альтернатив черепахе для PRU программирования нет.
Но и сама черепаха не лыком шита. Это не просто "лучшее из имеющегося" (в контексте обычных задач энкодеров/шд), а вполне удобная среда с хорошими возможностями по расширению.

Я показывал, что там можно и FBD язык добавить. И займёт это не годы, а недели-месяцы. Например модуль PRU занял менее двух месяцев. И им уже можно с успехом пользоваться, чего не скажешь о бета инструменте Овен. Понятно, что у бета инструмента не было цели "создавать боевые проекты", но все же.

И, да, как я исходно говорил, мне было интересно не "составлять PRU программу из овеновских блоков, а создавать свои блоки".
Эту цель я достиг. С помощью hardella рядовой асутп программист может сделать программу для PRU, которая нужна ему, при этом алгоритм не ограничен списком блоков, которые представил Владислав.

rovki
28.10.2016, 19:44
Без Hardella-никак. Есть, конечно, способ "от Владислава", описанный в первом сообщении, но называть это способом язык не поворачивается, т.к. Слишком уж тяжело им пользоваться.
.
Я думаю такие слова мало кому понравятся из разработчиков ...Кроме того есть ведь привычки ,опыт ,прототипы итд. Ведь вам по началу и ОЛ казался слишком тяжелым для использования ...

Владимир Ситников
28.10.2016, 20:06
Я думаю такие слова мало кому понравятся из разработчиков ...Кроме того есть ведь привычки ,опыт ,прототипы итд.

Я поправил комментарий в разрезе <<понятно, что у бета инструмента не было цели "создавать боевые проекты">>
Тем не менее, никого не хотел обидеть, а стараюсь рассматривать ситуацию объективно.
Объективно, способ от Владислава есть? Есть. Использовать его можно? Да, кто-то пытался. В этой теме есть лишь негативные отзывы. Приборист, например, реально пытался раскрутить ШД и ничего не вышло.

Есть идеи как можно было "более политкорректно" сказать?
Я прекрасно понимаю, что никому не нравится, когда говорят, что "он дурак". Но, вроде, я стараюсь говорить аккуратно, без фраз типа "такой-то дурак".

Я сказал и имел ввиду ровно то, что способ, описанный в сообщении №1 по факту не подходит для применения в сфере АСУТП.


Ведь вам по началу и ОЛ казался слишком тяжелым для использования ...
И сейчас я подпишусь под всеми "просьбами по улучшению ОЛ", которые я писал полгода (или сколько там) назад.

Я уверен, что на базе Hardella IDE можно сделать более удобный FBD редактор. И это не потребует многих лет работы. 3-4 недели по вечерам и всего делов.
Более того, некоторые алгоритмы на ST языке делаются гораздо проще, чем на FBD, и тут возможность черепахи сочетать разные языки в одной программе выглядит очень перспективно.

Возвращаясь к PRU, я вполне соглашусь, что вполне перспективным может быть подход составление программы из крупных мазков на FBD, с проработкой деталей либо на FBD, либо на ST где реально нужно.

Можно вообще возродить язык ДРАКОН и сделать супер-надёжную систему программирования. Как никак, а в языке разработанном для Бурана подумали над надёжностью, понятностью и непротиворечивостью программ.

Владимир Ситников
31.10.2016, 17:59
Из интересного: Siemens уже несколько лет разрабатывает среду (https://www.plm.automation.siemens.com/en_us/products/lms/imagine-lab/embedded-software-designer.shtml#lightview-close) программирования на основе JetBrains MPS (https://www.jetbrains.com/mps/). http://www.google-analytics.com/collect?v=1&tid=UA-62628294-2&t=event&cn=siemens_mps&cs=siemens_mps&ec=blogpost_siemens_mps&ea=siemens_mps&cid=siemens_mps

https://twitter.com/markusvoelter/status/769150749586624512

Hardella IDE (https://github.com/vlsi/ide61131) тоже основана на JetBrains MPS.
Совпадение? Не думаю! =)

Вольд
31.10.2016, 18:40
Из интересного: Siemens уже несколько лет разрабатывает среду (https://www.plm.automation.siemens.com/en_us/products/lms/imagine-lab/embedded-software-designer.shtml#lightview-close) программирования на основе JetBrains MPS (https://www.jetbrains.com/mps/). http://www.google-analytics.com/collect?v=1&tid=UA-62628294-2&t=event&cn=siemens_mps&cs=siemens_mps&ec=blogpost_siemens_mps&ea=siemens_mps

https://twitter.com/markusvoelter/status/769150749586624512

Hardella IDE (https://github.com/vlsi/ide61131) тоже основана на JetBrains MPS.
Совпадение? Не думаю! =)

Правильной дорогой идете товарищ Ситников. ;)

Владимир Ситников
07.11.2016, 14:18
Что то тема заглохла???????????????

В целом, Владислав уже давольно давно в красках описал ситуацию:

14.05.2016, 12:23 P.S. 3 запроса в теме в раз в 3 месяца ну никак не показывают важность и "рыночность" OwenLogicRT


По Hardella 1.5 сейчас такая статистика:
1) 1 загрузка Linux версии. Если кто-то реально linux версию тестирует, это интересно. Но, скорее, всё прозаичнее, и просто товарищъ ссылку перепутал.
2) 0 загрузок macOS (в целом, ожидаемо)
3) 8 загрузок Windows версии
4) 0 issues на github / писем из России
5) 1 письмо из Германии про использование Hardella для программирования ПЛК на базе Infineon AURIX


Прямо ажиотаж!
Даже "вообще не запустилось" никто не пишет.

Нужно причинять добро и наносить пользу.
У меня в планах запустить сайт Hardella IDE и сделать статью на geektimes про ПЛК110 и ШД. Там охват будет хотя бы поболее 20-и (или сколько там) посетителей темы "Программирование ПЛК110 М02 для задач реального времени"


Переведу с русского на русский. Говорить "тема заглохла???" бесполезно.
А голосовать проектом (т.е. приводить примеры реальных проектов, где реально нужно быстрое управление), рублём (намерением купить ПЛК110М02, обменять ПЛК110 старого образца на новый, или ещё что-то) и т.п. -- полезно.
Ещё раз: "было бы хорошо управлять ШД, но лично мне не нужно" -- почти бесполезная фраза на данном этапе.

Вольд
07.11.2016, 17:03
По моему все только начинается. Просто до большинства еще не дошло. ;)

Владимир Ситников
07.11.2016, 18:16
Как по мне не хватает простых примеров.
Взять что даёт codesys по умолчанию, что даёт ОВЕН (удобство) и вашу работу и сравнить хоть в видео, хоть в таблице, плюсы минусы и аргументы.
Вы о среде в целом, или применительно к "быстрому программированию"?

Если о среде в целом, то, скорее нужно в ветке про Hardella (http://www.owen.ru/forum/showthread.php?t=23013) обсуждать.


Если же "о быстром программировании", то CoDeSys вообще не имеет редактора/компилятора для PRU (управления быстрыми IO).
Beta инструментарий ОВЕН цель beta теста, возможно, достиг, но использовать его для создания реальных проектов либо тяжело, либо невозможно.
Есть "мифические инструменты TI" (Code Composer Studio), но, честное слово, я не смог создать простейший проект там. Возможно, как-то неправильно устанавливал компилятор или ещё что, но одно это уже говорит о сложности применения. Скорее всего, инструмент TI сделан для задач совсем другого калибра, ради которых можно и потратить неделю-месяц на установку самого инструмента.

В итоге, Hardella IDE (https://hardella.com) это единственный инструментарий, который реально можно применить без особых хлопот. Разумеется, полной объективности от меня ждать вряд ли стоит (как-никак, я автор Hardella IDE, и мне играет на руку то, то Hardella это единственный рабочий вариант создания PRU программ), тем не менее, попробую сравнить "таблицей":
<table><tr><th>Параметр</th><th>beta инструментарий ОВЕН (http://www.owen.ru/forum/showthread.php?t=22169&p=180471&viewfull=1#post180471)</th><th>Hardella IDE (https://hardella.com)</th></tr><!--
--><tr><td>Пригодность для рядового разработчика</td><td>-, едва ли</td><td>+, вполне</td></tr><!--
--><tr><td>Обмен с основным циклом</td><td>нужно делать на КДС вручную</td><td>КДС библиотека создаётся автоматически</td></tr><!--
--><tr><td>ST язык</td><td>-</td><td>+</td></tr><!--
--><tr><td>CFC язык</td><td>+, программу нужно редактировать в КДС,<br>и затем экспортировать и прогонять через bat файл</td><td>-, CFC в планах развития Hardella, но это явно не приоритет</td></tr><!--
--><tr><td>Максимальная длина программы</td><td>512 команды</td><td>1024 команды</td></tr><!--
--><tr><td>Сложение переменных (a+b) и сложение переменной с константой (a+5) выполняются одним блоком</td><td>-, это два разных блока PRU_ADD2 и PRU_ADD2_CONST,<br>редактор не сообщит о проблеме</td><td>+, сложение делается оператором "+"</td></tr><!--
--><tr><td>Составление программы для PRU0 (4 входа, 2 выхода)</td><td>+</td><td>+</td></tr><!--
--><tr><td>Составление программы для PRU1 (ещё 2 выхода)</td><td>+</td><td>-, в Hardella 1.5 это не реализовано</td></tr><!--
--><tr><td>Возможность использовать BYTE</td><td>+</td><td>+</td></tr><!--
--><tr><td>Возможность использовать BOOL</td><td>-+, можно использовать BYTE,<br>но TRUE/FALSE не поддерживается</td><td>+</td></tr><!--
--><tr><td>Возможность использовать WORD, DWORD</td><td>-</td><td>+</td></tr><!--
--><tr><td>Возможность использовать ENUM (перечисления)</td><td>-</td><td>+</td></tr><!--
--><tr><td>Возможность использовать STRUCT</td><td>-</td><td>-</td></tr><!--
--><tr><td>Возможность использовать массивы</td><td>-</td><td>-</td></tr><!--
--><tr><td>Поддержка FOR/WHILE/REPEAT</td><td>-</td><td>+</td></tr><!--
--><tr><td>Поддержка фильтрации входов</td><td>?, блок PRU_IN1_FILT есть,<br>но работает ли он -- неясно,<br>т.к. у него на вход только 2 BOOL</td><td>+, фильтрация в микросекундах настраивается независимо для каждого входа</td></tr><!--
--><tr><td>Использование "текущего времени" в программе</td><td>-</td><td>+, доступен "счётчик выполненных тактов"</td></tr><!--
--><tr><td>Возможность создавать свои ФБ</td><td>-, блоки пишутся на ассемблере<br>инструментарий просто так не скачать<br>без спецподготовки блок не напишешь</td><td>+, блоки пишутся на ST</td></tr><!--
--><tr><td>Автотесты</td><td>-</td><td>+, через pru-emulator (https://github.com/vlsi/pru-emulator)</td></tr><!--
--><tr><td>Обновление PRU программы</td><td>запись PRU файла в ПЛК и перезагрузка ПЛК</td><td>вызов ФБ, перезагрузка не требуется</td></tr><!--
--><tr><td>Операционные системы</td><td>Windows</td><td>Windows, Linux, macOS</td></tr><!--
--><tr><td>Есть пример проекта</td><td>+</td><td>+, по кнопке File -> new project создаётся demo проект</td></tr><!--
--><tr><td>Размер дистрибутива</td><td>несколько мегабайт</td><td>300 мегабайт</td></tr><!--
--><tr><td>Примеры созданных проектов</td><td>???, есть такие?</td><td>управление ШД (движение, разгон/торможение)<br>управление мотором от сигнала с энкодера</td></tr><!--
--><tr><td>Поддержка компанией ОВЕН</td><td>-, т.к. это был beta test</td><td>-</td></tr><!--
--><tr><td>Лицензия</td><td>???, вроде, бесплатно</td><td>MIT, бесплатно</td></tr><!--
--><tr><td>Возможность создавать PRU программы без заключения договоров с кем-либо</td><td>???, мне без договора инструментарий создания ФБ не давали</td><td>+</td></tr><!--
--><tr><td>Документация</td><td>-, по наитию</td><td>-, по наитию</td></tr><!--
--></table>

Дмитрий Артюховский
08.11.2016, 12:40
все несколько не так ....

"Мифический" Соde Composer это практически чистый Eclipse IDE, просто с модами под конкретные чипы... и вряд ли картинка с рабочими окнами отличается от той же "черепахи" - но вот команда которая работает над ней несколько иная... кстати, там присутствует эмуляция работы модулей PRU и даже цепляются аппаратные приблуды для отладки на кристалле... ну и понятно что работает под любой операционкой

а для тех кто не любит извращаться с visual приблудами - есть pasm, размером в 65 кб и однострочным командным интерфейсом... но это ему не мешает работать с данными, например, в виде с-подобных структур.. (есть линукс версия)

Я не вижу проблем с автоматической загрузкой модулей по мере необходимости, а не в момент включения питания.. библиотечные функции PRU_enable() PRU_load() и прочие, ничем идеологически не отличаются от того же включения быстрого таймера и не реализованы овеновцами чисто временно (как думается!) и кстати, совершенно не сложно сделать их самостоятельно )))

есть некий смысл составлять мнемосхему программы из модулей fbd - это наглядно и понятно схемотехникам, но использовать ST (C) для блоков в 20-30 команд - по моему - сильное извращение ))) ... но С++ вполне поддерживается композером..

Ну и собственно работающий проект: https://yadi.sk/i/S7aacmrcyG9Nz
PRU0 - энкодер 2000 имп/оборот на валу (без ошибок реверса-дребезга) в нескольких режимах пересчета, трансляция быстрых выводов из основного цикла, обмен настройками-данными с основным циклом
PRU1 - ШД синхронизируемый в нескольких режимах из счетчика энкодера (PRU0), из основного цикла ПЛК, из хост-компьютера

а выводы каждый делает сам... овеновцы хотят допилить "инструмент" чтобы он работал железобетонно и однозначно в руках людей которые задают на этом форуме смешные вопросы, ну а тем кто имеет время немножко подумать самому - ничто не мешает самому выбрать инструменты для своей работы..

Вольд
08.11.2016, 12:56
Ну и собственно работающий проект: https://yadi.sk/i/S7aacmrcyG9Nz

Красивых картинок в интернете много. Только какой с них кайф ? ;)

Что там у вас работает и работает ли вообще оценить не возможно.

В.Ситников бесплатно выложил свой инструментарий и работающие примеры. Любой желающий может попробовать и оценить. С консультациями (ответами на вопросы) я думаю проблем то же не будет.

Владимир Ситников
08.11.2016, 13:01
"Мифический" Соde Composer это практически чистый Eclipse IDE, просто с модами под конкретные чипы... и вряд ли картинка с рабочими окнами отличается от той же "черепахи" - но вот команда которая работает над ней несколько иная... кстати, там присутствует эмуляция работы модулей PRU и даже цепляются аппаратные приблуды для отладки на кристалле... ну и понятно что работает под любой операционкой
Свежо придание, но есть разница между теорией и практикой:
http://www.ti.com/tool/ccstudio-sitara

macos не поддерживается. На Windows 7 запустить не получилось. Я же не говорю, что сам по себе CCS плохой инструмент. Он просто не подходит для "простого смертного".
Можно ли доработать CCS и встроить в CCS что-то ОВЕН-специфичное, не возьмусь сказать. По-моему, это непросто будет. Исходные коды у CCS закрыты.


Я не вижу проблем с автоматической загрузкой модулей по мере необходимости, а не в момент включения питания
Ок. Запишем.

Я же не ставил плюсы или минусы. Написал в таблице, что сделано по-разному. У ОВЕН так, в Hardella сяк.
Не исключаю, что кому-то вообще будет больше по душе только вариант "запуск при старте", чтобы исключить мифическую (или неочень) проблему "внезапно в ПЛК залилась не та программа прямо на ходу" (например, выполнение зашло в какую-то редкую ветку)

В целом, комментарии/дополнения приветствуются. Я вполне мог не подумать о каком-то аспекте.



PRU1 - ШД синхронизируемый в нескольких режимах из счетчика энкодера (PRU0), из основного цикла ПЛК, из хост-компьютера
Это, конечно, интересно, с учётом того, что PRU инструментарий ОВЕН довольно долго в принципе не поддерживал создание PRU1.prg.
Этот проект на CCS сделан, я правильно понимаю?
Кхм. На фотографии на ноутбуке открыт код, похожий на ассемблер. Т.е. на CCS не похоже. Странно это.



допилить "инструмент" чтобы он работал железобетонно и однозначно в руках людей которые задают на этом форуме смешные вопросы
Посмотрим, что из этого выйдет.
Скажу прямо: ассемблер для таких людей явно не подходит. И вариант с блоками PRU_ADD2/PRU_ADD2_CONST тоже не подходит.

Владимир Ситников
08.11.2016, 14:48
Давайте всё-таки ближе к теме?
Дмитрий всё верно сказал. Над CCS работало более одного человека, и явно больше одного года.
В железе они тоже наверняка больше разбираются.

Другое дело, что сделать прозрачную связку CCS и ПЛК110 с его КДС'ом тяжело (если вообще возможно).
Т.е. для суровых программ CCS может подходить. А для программ типа моя-твоя-энкодер-шатал CCS использовать тяжело. Там накладные расходы на загрузку-выгрузку между CCS-КДС будут мешать разработке/отладке/наладке.

Владимир Ситников
08.11.2016, 14:59
Можно конечно, попробовать съездить на экскурсию в ОВЕН и выпить чаю с Владиславом/Кириллом с целью выяснения перспектив Hardella IDE и ПЛК ОВЕН. Так сказать, на других посмотреть, себя показать.
Но я никуда не тороплюсь, и вполне могу подождать-посмотреть как ОВЕН будет развивать ПЛК, PRU, рожь, овёс вот это всё.

Предлагаю вернуться к теме: проекты, жаждущие быстрого управления, ШД, энкодеры, протоколы обмена данными (дополнительный software RS-485), вот это всё.

Sizov_Alex
25.11.2016, 10:20
Вопрос Владимиру Ситникову. Используя ваш блок управления шд, потребовалось в автоматическом режиме проверять состояние выхода STATE. Но формат данных у этого выхода PRU_STAPPER_STATE. Как быть? может можно преобразовать в стринг или какой другой формат?

Владимир Ситников
25.11.2016, 11:16
Вопрос Владимиру Ситникову. Используя ваш блок управления шд, потребовалось в автоматическом режиме проверять состояние выхода STATE. Но формат данных у этого выхода PRU_STAPPER_STATE. Как быть? может можно преобразовать в стринг или какой другой формат?

PRU_STEPPER_STATE это "перечисление". Никуда преобразовывать не нужно. Перечисление сделано специально для того, чтобы в отладке (симуляции) оно по-нормальному показывалось.

Сравнивать нужно, например, так:


motor : PRU_STEPPER;

motor(...);

IF motor.STATE = STOP_STEPPER THEN
(* уже приплыли *)
END_IF;


Описание возможных значений можно посмотреть либо в библиотеке pru_stepper.lib (моей), либо тут: http://www.owen.ru/forum/showthread.php?t=22169&p=221928&viewfull=1#post221928

Владимир Ситников
02.12.2016, 16:50
Адаптировал блок "шагового двигателя" к "постоянной длительности цикла" и пришёл к следующему выводу.
Наряду с PWM (~ ШИМ) модуляцией выхода может быть полезна и PDM (~сигма-дельта модуляция).

1) У классической ШИМ передний фронт всегда повторяется через равные интервалы времени. А скважность управляет длительность самого импульса задаёт нужную скважность.

2) PDM (https://en.wikipedia.org/wiki/Pulse-density_modulation) же идёт другим путём: возникающие импульсы имеют возможность переключиться в любой момент, а уже их плотность и определяется нужной скважностью.

Вот пример: https://hackaday.io/project/6356-delta-sigma-versus-pwm


Из плюсов PDM:

1) Можно получить гораздо большую частоту переключений при той же разрядности выхода.
Например, если мы умеем отмерять 1мкс, и хотим 65536 градаций скважности.
Длительность ШИМ цикла будет 65536*1мкс == 65 мс.

При этом, на 50% переключение будет каждые 32мс.

PDM вариант может создавать 65536 градаций, и при этом переключаться каждую 1 микросекунду.
Грубо говоря, в режиме 50% это будет 10101010.

2) Можно менять скважность прямо на ходу и не нужно дожидаться следующего "ШИМ цикла".
В примере выше, значение новой скважности "подхватится" только через 65мс (ну, когда добежит очередной цикл)
Дельта-сигма же сможет сразу подхватить новую скважность и ждать 65мс не придётся.

К ШД это напрямую не относится, но может представлять интерес в части ШИМ (или не ШИМ?) выходов.

Александр Бакин
03.12.2016, 18:19
для работы pru_setter нужно-ли быстрые выходы переводить в fast direkt control-direct kontrol ?

Владимир Ситников
03.12.2016, 18:26
для работы pru_setter нужно-ли быстрые выходы переводить в fast direkt control-direct kontrol ?

Нет. Достаточно загрузить PRU0.prg и подключить библиотеки pru_stepper.lib / pruAccessLib.lib.
plc configuration не играет роли.

Александр Бакин
03.12.2016, 19:52
Pruo.prg это что такое?

Александр Бакин
03.12.2016, 20:10
Подключаю шаговые двигатели к ПЛК110 м02. При использовании библиотеки syslipports заявленная частота 25кГц на быстрых выходах не достигается, только 400 Гц. Использовать pru_stepper - тоже не выходит. При запуске программы в ПЛК - ПЛК перезагружается, разрывает соединение с ПК и "забывает" программу. Что делать-непонятно.

Владимир Ситников
03.12.2016, 20:50
Pruo.prg это что такое?

Вот тут: http://www.owen.ru/forum/showthread.php?t=22169&page=29&p=221928&highlight=pru_stepper#post221928

В архиве pru_stepper_v12.zip находятся файлы PRU0.prg и PRU1.prg.
Их предварительно нужно заливать в контроллер (и после заливки перезагружать)
Если достаточно одного ШД на 3 или 4 выходе, то достаточно заливать только PRU0.prg

Александр Бакин
03.12.2016, 22:55
Спасибо. Заработало наконец. Эффективная частота на двигателе 7кГц - реально существует ! Записал PRU0.prg на контроллер и питание выключил/включил...

Владимир Ситников
04.12.2016, 00:32
Спасибо. Заработало наконец. Эффективная частота на двигателе 7кГц - реально существует ! Записал PRU0.prg на контроллер и питание выключил/включил...

Рассказывайте что заработало, а что не заработало.
Фото/видео и т.п.

Интересно же.

Владимир Ситников
04.12.2016, 10:48
Может быть попробуем ПЧ организовать на PRU? Есть ПЛК110-60 М2 +3 драйвера полумоста с транзисторами 20А под 3Ф, также имеется двигатель и цифровой осциллограф.

В каком смысле?

Сдаётся мне, что для векторного управления PRU не подходит.
То, что пишут тут (https://geektimes.ru/company/npf_vektor/blog/269486/) и тут (https://geektimes.ru/company/npf_vektor/blog/269246/) это прямо отдельный процессор с ЦАПами и ALU/FPU.

Вольд
04.12.2016, 11:35
Спасибо. Заработало наконец. Эффективная частота на двигателе 7кГц - реально существует ! Записал PRU0.prg на контроллер и питание выключил/включил...

А Hardella то работает. Это подтвердили уже несколько пользователей. Интересно, послушать скептиков. Что-то их давно не слышно.

Вольд
04.12.2016, 11:41
Заработало наконец. Эффективная частота на двигателе 7кГц - реально существует !

Сообщите с какой частотой вращается вал вашего ШД. Дробился ли шаг ? Еще интересно знать какой драйвер и ШД используете.

Вольд
04.12.2016, 12:34
Вот здесь то и начинается самое интересное.

Что именно ?

Александр Бакин
04.12.2016, 13:14
Шаговый двигатель MDM1F34. - 5шт.

Пробовал при разных частотах - при 10 кГц может работать только на холостом ходу, 5кГц - уверенная частота под нагрузкой, 7кГц - оптимальная скорость (резонанс). Жаль, что не получиться все 5шт одновременно крутить.

Владимир Ситников
04.12.2016, 13:19
Шаговый двигатель MDM1F34. - 5шт.

Пробовал при разных частотах - при 10 кГц может работать только на холостом ходу, 5кГц - уверенная частота под нагрузкой, 7кГц - оптимальная скорость (резонанс). Жаль, что не получиться все 5шт одновременно крутить.

А что значит "может работать только на холостом ходу"?

Прямо с 0 включаете 10кГц?
Или всё-таки с разгоном? (если что, то ускорение разгона должно быть меньше, чем min_speed2)

Да, 4шт можно "по очереди" (по парам), а 5 штук уже непонятно как.

Александр Бакин
04.12.2016, 13:25
Вот у ускорением не очень разобрался.

Min_speed:=0,
max_speed:=7000,
accel и deccel - если значение больше 2000, то 100000 имп выробатывается менее 1 сек., если менее 2000, то резгон и торможение нормальное.

Владимир Ситников
04.12.2016, 13:26
Почему нельзя. Крутить по алгоритму или как.

Так нужен демультиплексор какой-то.
Быстрых оптронов в ПЛК110М02 всего 4шт.
Как от них запитывать 5 двигателей?

Понятно, что для "DIR" можно взять простые выходы. Но как сделать 5 быстрых STEP выходов?

Александр Бакин
04.12.2016, 13:31
продолжение предыдущего сообщения

частота на выходе 7кГц.

Про срыв синхронизации - на частотах более 10кГц . менее 8кГц - не наблюдается, но это зависит от двигателя.

Александр Бакин
04.12.2016, 13:32
Все просто. мы будете смеяться - у меня два плк110м02.

Владимир Ситников
04.12.2016, 13:32
Вот у ускорением не очень разобрался.

Min_speed:=0,
max_speed:=7000,
accel и deccel - если значение больше 2000, то 100000 имп выробатывается менее 1 сек., если менее 2000, то резгон и торможение нормальное.

Приводите, пожалуйста, конкретные значения параметров и конкретный наблюдаемый эффект.
Проверил в симуляторе
min_speed=0
max_speed=7000
quantity=100000
accel_ramp=3000
decel_ramp=3000

Разгон длится чуть более двух секунд (по горизонтали секунды, по вертикали герцы, цвет -- режим работы разгон/ход, на графике чуть более 13'000 точек).
27916

Владимир Ситников
04.12.2016, 17:53
Все просто. мы будете смеяться - у меня два плк110м02.

Звучит так, как будто у вас куча ПЛК110М02, куча ШД и вы решили развлечься на выходных )

Или это прямо какой-то боевой проект?

Владимир Ситников
04.12.2016, 17:55
Взять ПЛК с транзисторами но уже алгоритм нужно использовать не в режиме шим. Все зависит от поставленной задачи конечно. Вообще ШИМ нельзя использовать для управления в этом случае. ШИМ рассчитан на аналог. Я по началу тоже с него начинал но увы пришлось отказаться.

Можете ещё разок мысль выразить?
Вот не улавливаю о чём речь.

О каком алгоритме речь и каким образом тут возникло слово ШИМ?

Владимир Ситников
04.12.2016, 19:20
Я про PWM, дело в том что двигатель нужно насытить магнитным полем для совершение работы к крутящиму моменту нагрузки. Вот и здесь происходит насыщение в районе 7кГц как подтвердил Александр где длительность времени совпала насыщению соответствующему номиналу двигателя, где снижение длительности приводит к потери мощности а повышение приводит к перенасышению железа что отрицательно влияет на двиготель и транзисторы. Так что нужно еще поработать над этим моментом вот я вам и предложил объединить усилия по проработки этого момента так как вы молодой и одаренный человек и в вас плещит энергия но не хватает практического опыта но это поправимо.

Не понимаю каким образом связаны PWM и шаговые двигатели.
Шаговому двигателю же должно быть без разницы какую скважность подавать на вход.
На всякий случай: я не использую ШИМ выход, не использую аппаратный ШИМ и т.п. Мои программы генерируют каждый импульс отдельно.

Тут пишут, что резонанс зависит от фактической нагрузки: http://electroprivod.ru/resonans.htm
Если у конкретной механической системы резонанс на 7кГц, то остаётся всё то, что указано по ссылке выше. Микрошаг, эластичные муфты, демпферы, вот это всё.

Александр Бакин
06.12.2016, 16:56
Приводите, пожалуйста, конкретные значения параметров и конкретный наблюдаемый эффект.
Проверил в симуляторе
min_speed=0
max_speed=7000
quantity=100000
accel_ramp=3000
decel_ramp=3000

Разгон длится чуть более двух секунд (по горизонтали секунды, по вертикали герцы, цвет -- режим работы разгон/ход, на графике чуть более 13'000 точек).
27916


Хочу продолжить эту тему.

Честно говоря не выполнил вашу просьбу - сделать видеозахват работы программы при accel_ramp>2500.

Сейчас хочу задать вопрос по работе вашей программы PRU_STEPPER.

1. Можно-ли из программы ПЛК управлять быстрыми выходами? , или pru0.prg берет управление этими выходами на себя и блокирует обращение к ним.
2. как приделать аварийную остановку к вашей программе? т.е. во время генерации импульсов происходит срабатывание аварийной сигнализации - как остановить генерацию? Сейчас для этого нужно несколько циклов программы. т.е. сначала ставим на вход eneble:=false? затем на вход quantity:=0, затем снова на вход enable:=true. для этой операции нужна как минимум 3 цикла контроллера, за это время двигатель при частоте 5000 кГц пройдет несколько оборотов - что делать?

Владимир Ситников
06.12.2016, 17:25
Хочу продолжить эту тему.

Честно говоря не выполнил вашу просьбу - сделать видеозахват работы программы при accel_ramp>2500.

Сейчас хочу задать вопрос по работе вашей программы PRU_STEPPER.


1. Можно-ли из программы ПЛК управлять быстрыми выходами? , или pru0.prg берет управление этими выходами на себя и блокирует обращение к ним.
Как нужно?

Я готовлю очередную версию Hardella IDE.
Есть такие примеры.
Пример "моргаем двумя выходами" (запись в быстрые выходы):
27986

Настройка "PRU цикла" (PRU0 100мс, PRU1 200мс)
27988

Пример "делаем быстрый счётчик" (==чтение быстрых входов):
27987

Можно сделать и пример, когда BOOL значение из КДС просто записывается в fast out.
Это будет так:


@Export()
val : BOOL;
...
FAST_OUTPUTS(out3 := val);




2. как приделать аварийную остановку к вашей программе? т.е. во время генерации импульсов происходит срабатывание аварийной сигнализации - как остановить генерацию? Сейчас для этого нужно несколько циклов программы. т.е. сначала ставим на вход eneble:=false? затем на вход quantity:=0, затем снова на вход enable:=true. для этой операции нужна как минимум 3 цикла контроллера, за это время двигатель при частоте 5000 кГц пройдет несколько оборотов - что делать?
Тут два варианта:
2.1) enable:=false и quantity:=0 можно менять одновременно. Да, потребуется цикл ПЛК + ещё время от того, как ПЛК осознает значение "аварии".

2.2) При составлении программы в Hardella можно напрямую читать быстрые входы, вообще без "основного цикла ПЛК". Если аварийный сигнал завести на один из быстрых входов, то можно останавливать блок ШД "прямо сразу"

Например, так (считаем, что в случае аварии сигнал на in1 пропадает, и импульсы нужно прекращать):
27989

Тут интервал от появления аварии до реакции будет порядка микросекунд (зависит от того, какой настроить цикл PRU)

Александр Бакин
06.12.2016, 17:47
Как нужно?

Мне нужно выходы поставить в true, при отсутствии генерации. Просто назначить переменную DO1 на выход №1 и установка ее в true результатов не дает. Т.к. я наблюдаю наводки на проводе между ПЛК и приводом, А в ПЛК транзистор на выходе соединяет выход с минусом. (провод использую экранированный).


27986[/ATTACH]

Настройка "PRU цикла" (PRU0 100мс, PRU1 200мс)
27988

Пример "делаем быстрый счётчик" (==чтение быстрых входов):
27987

Можно сделать и пример, когда BOOL значение из КДС просто записывается в fast out.
Это будет так:


@Export()
val : BOOL;
...
FAST_OUTPUTS(out3 := val);



Тут два варианта:
2.1) enable:=false и quantity:=0 можно менять одновременно. Да, потребуется цикл ПЛК + ещё время от того, как ПЛК осознает значение "аварии".

2.2) При составлении программы в Hardella можно напрямую читать быстрые входы, вообще без "основного цикла ПЛК". Если аварийный сигнал завести на один из быстрых входов, то можно останавливать блок ШД "прямо сразу"

Например, так (считаем, что в случае аварии сигнал на in1 пропадает, и импульсы нужно прекращать):
27989

Тут интервал от появления аварии до реакции будет порядка микросекунд (зависит от того, какой настроить цикл PRU)

На pru0 v12 можно-ли настраивать циклы? или это не относиться к версии 12?

Александр Бакин
06.12.2016, 17:54
Вообще хотелось-бы видеть на ПЛК транзисторные выходы в виде полумостов. Так все-равно выходные транзисторы на наприяжение не более 30в, при этом минусы объединены. Ну до кучи нужно и плюсы объединить через второй транзистор. При наличии таких выходов ( в виде полумостов) снимается сразу много проблем:
1. нет наводок и помех от проводов ( к.т. выходной провод всегда будет подключен к + или - питания,
2. можно подключать двигатели постоянного тока с реверсивным включением,
3. нет геморроя при подключении к станку в существующую схему т.к. не будет разницы к какому проводу питания подключена нагрузка.

Владимир Ситников
06.12.2016, 17:59
На pru0 v12 можно-ли настраивать циклы? или это не относиться к версии 12?
На pru_stepper_v12 ни управлять выходами из программы, ни настраивать циклы нельзя. Можно потратить немного времени и сделать pru_stepper_v13, но лучше просто дождаться Hardella 1.6.0 и уж там составлять программы как нужно.

Вышеобозначенные картинки относятся к созданию PRU программы из Hardella IDE (https://github.com/vlsi/ide61131).

murdemon
12.12.2016, 16:29
Как там обстоят с делами.. управления серводвигателей ? На какой частоте могут работать ваши блоки и сколько возможно серводвигателей подключить ? (В pru возможно засунуть сигналы от энкодера с быстрых входов?) Спасибо

Владимир Ситников
12.12.2016, 16:52
Как там обстоят с делами.. управления серводвигателей ? На какой частоте могут работать ваши блоки и сколько возможно серводвигателей подключить ? (В pru возможно засунуть сигналы от энкодера с быстрых входов?) Спасибо

Имеющийся подход http://www.owen.ru/forum/showthread.php?t=22169&page=29&p=221928&highlight=pru_stepper#post221928 позволяет управлять 4-мя ШД (по 2 штуки одновременно).
Быстрые входы там работать не будут.
Проверяли частоту до 500кГц.

Сейчас в разработке версия Hardella 1.6.0, в которой будут те же 4 ШД (по 2 одновременно) и будут работать быстрые входы (хоть энкодер, хоть два, хоть просто как входы).
Какая будет частота -- сказать не возьмусь. Надо будет тестировать.

murdemon
12.12.2016, 17:58
Есть какие-либо реализованы в жизни промышленные примеры использования? (или пока все только на уровне тестов) ? (какой интерфейс для пользователя, есть ли интерфейс для пусконаладки и проверки серводвигателей.) И есть ли в планах задачи прикрутить библиотеку подобную PLCOpen, которая используется во всех Motion контроллера http://www.plcopen.org/pages/tc2_motion_control/ ?

Владимир Ситников
12.12.2016, 18:21
Есть какие-либо реализованы в жизни промышленные примеры использования? (или пока все только на уровне тестов) ?

Недавно (30 ноября) был такой отзыв:

А я на старом степпере уже запускаю портальную мойку
Работает круче чем на дельте
Особенно разгон и торможение
Просто бомба
Ни одного удара


здорово
Т.е. плавно трогается и тормозит, без ударов?


Да
Видео спрошу у парней




(какой интерфейс для пользователя, есть ли интерфейс для пусконаладки и проверки серводвигателей.)
Не пойму вопрос. Интерфейс -- КДС библиотека. Вызываешь программу -- ШД управляется.

Попробую так вопрос задать: "какой интерфейс для пользователя, есть ли интерфейс для пусконаладки и проверки обычных входов-выходов?"



И есть ли в планах задачи прикрутить библиотеку подобную PLCOpen, которая используется во всех Motion контроллера http://www.plcopen.org/pages/tc2_motion_control/ ?

Тут думать нужно. Как-никак, а конкретные программы могут отличаться. Кому-то нужно 4 ШД, а кому-то достаточно одного и остальное как простые выходы.

murdemon
12.12.2016, 18:37
на счет интерфейса (примерно как тут https://www.youtube.com/watch?v=Ve8YcLyyq4s на 6й минуте, подобный есть у всех ПЛК с Motion)... по PLCOpen... я имею ввиду некую абстракцию мы забили настройки ШД или Серво в режим степ дир, (такие как сколько мм движение 1 шаг и тд) А потом через абстракцию говорим разогнать двигатель, с ускорением 0.1 м/c^2 до 3м .. или если позиционирование, то подвинуть на позицию 2 метра со скоростью разгона 0.1 м/c^2 и тд. Там также в бибке реализована абстракция (позиция 1 двигателя - "оси" от другой "оси" в виде 2D графика) и много еще чего. + кинематика вроде есть (для дельта робота например) задаем 3 оси (двигателя, длины плеча дельта робота и тд ) и говорим уже в координатах 3д подвинуть руку в позицию X Y Z. + CNC в PLC Open уже добавлен. Те перемещения можно задавать как некий стандартный CNC код.

Владимир Ситников
12.12.2016, 18:42
на счет интерфейса (примерно как тут https://www.youtube.com/watch?v=Ve8YcLyyq4s на 6й минуте, подобный есть у всех ПЛК с Motion)... по PLCOpen... я имею ввиду некую абстракцию мы забили настройки ШД или Серво в режим степ дир, (такие как сколько мм движение 1 шаг и тд) А потом через абстракцию говорим разогнать двигатель, с ускорением 0.1 м/c^2 до 3м .. или если позиционирование, то подвинуть на позицию 2 метра со скоростью разгона 0.1 м/c^2 и тд. Там также в бибке реализована абстракция (позиция 1 двигателя - "оси" от другой "оси" в виде 2D графика) и много еще чего. + кинематика вроде есть (для дельта робота например) задаем 3 оси (двигателя, длины плеча дельта робота и тд ) и говорим уже в координатах 3д подвинуть руку в позицию X Y Z. + CNC в PLC Open уже добавлен. Те перемещения можно задавать как некий стандартный CNC код.

Мысль разумная. Но надо подумать как это органично встроить (с учётом того, что программы могут различаться)

murdemon
12.12.2016, 18:46
ну там все функции и есть уже готовый вставляешь те что в бибке (те что надо по технологии движения) задаешь параметры и поехали , + эти блоки должны работать на уровне (процесса управления PRU) + передавать свои основные параметры на уровень выше в кодезис, так например мы делаем в PRU программу бесконечное движение оси с параметром скорости, а параметр скорости берем из процесса кодезиса. Это как обычно это делают, в той же Дельте.