Чего не приписывал, того не приписывал. Извольте, сударь, нотариально заверенную ссылку.
На всякий случай, подчеркну, что знак вопроса в конце предложения означает вопрос.
Вид для печати
Ну вот :
Можно тоже ссылку где говорил/предполагал о зряшности работы Егора ?
Заверять не обязательно. И на всякий случай подчеркну что тоже "читать мысли не умею" и филологическими изысканиями смыла фраз не занимаюсь.
Ваша работа нужна и полезна. Вопрос лишь кому и в каком виде. Вполне может быть что когда-нить буду пользоваться Вашим трудом, и даже на возмездной основе. Но лично мне это в таком виде - лишний спотык, хотя кому-то очень даже подойдет и в таком виде.
Вы как-то вырвали мою фразу из контекста.
Вот она полностью:
Это был вопрос. Вопрос, Карл!
Я хотел понять ваше мнение зря или не зря. Задал вопрос, поставил вопросительный знак. Зачем сразу думать, что что-то кому-то приписано? Простой такой вопрос, без хитростей.
Не зря -- ок. Я ожидал такого ответа, но гадать о чужих мыслях -- последнее дело.
-"Егор зря что-ли утилиту .. рассчёта адресов делал?" без "по-вашему" - без хитростей. Про филологию - сказал. (извини Егор если икается)
Поясню мысль своего самого первого поста в этой ветке.
В списке задач необходимых решить от получения заказа, согласования техзадания, разработки схем, составления алгоритма, написания программы, проведения пнр на железе, составления рэ, внесения изменений по вновь возникшим просьбам заказчика, повторного проведения пнр, повторной правки документации, подписания акта приемки, получения денег, до покупки пива - написание программы является незначительным действом. Разве только оное не является узкой специализацией где все остальное делает кто-то другой.
Например точить кухонные ножи надо многим, но редко кто ставит точильный станок. Но если чел специализируется заточкой ножей, странно будет если его не поставит
Без PLC Configuration, разумеется, жить невозможно.
Призываю выссказаться в теме про конфигуратор.
Генерация документации на основе данных конфигуратора, наверное, мечты-мечты (да и у каждого свой способ документирования), но не исключено.
Тем временем, пробую импортировать описания "PLC Target" из *.cfg файлов.
Сейчас выглядит так: http://recordit.co/WbJeBXABXN
Дерево PLC Configuration отображается, и даже можно заменить "Fast discrete outputs" на "PWM". Правила замены приходят из *.cfg, т.е. с таким же успехом будет работать не только со 110-ым.
Остаётся сделать вычисление адресов, работу с параметрами (чтобы задавать разнообразные "MinCycleLength ms" и "интервал фильтрации"), работу с "VAR" модулями, привязку переменных и выгрузку этого добра в *.exp формат.
Доделал PLC Configuration. Не проверял на железе, но дерево, вроде, работает как надо, и КДС подхватывает тоже как надо.
Заработал пример с "кнопкой, TON и лампочкой": http://recordit.co/bJe2u0b3xy
Кнопка привязывается к DI1, лампочка -- к DO1.
Картинка: Вложение 23284
В эмуляции КДС работает.
Сделал кнопку "создать проект с лампочкой": https://youtu.be/zCULGT3yZwA
Вложение 24240
Теперь проект можно целиком в IDE61131 создавать.
Качать новую версию тут: https://github.com/vlsi/ide61131/releases/tag/v1.3.0
господа ... возможно ли дополнить графику в ВИЗУАЛЬ.. своей в 3д... типа создать пользовательскую библиотеку в формате бмп 3д... начинаешь прорисовывать примитивы... и понимаешь насколько они не эстетичны по сравнению с мастерскада..
Очередное обновление: https://github.com/vlsi/ide61131/releases/tag/v1.4.0
Наконец-то появился логотип:Вложение 24923
Экран запуска: Вложение 24921
Экран приветствия: Вложение 24922
Звезда, и watch...
Прекрасная работа! Я думаю это будет очень полезно тем кто привык к высоким стандартам среды написания кода. Где можно менять размер шрифта, подствтку, выдеть предупреждения, автозаполнение и все такое. Я сам сижу в IDEA на других проектах, и кроме нее ни чего больше не хочется. Если можно будет в ней писать ST это будет просто шикардос!
vladimirisitnikov, можете выложить в ютутбе как это работает.
Интересно посмотреть, но не настолько чтоб тренировать реестр на рабочем компьютере.
А эти видео не работают? (ссылки на них же есть в первом сообщении)
https://github.com/vlsi/ide61131#videos
А как то, что сделал vladimirisitnikov согласуется со стандартом МЭК 61131-3 ?
Владимир, требуя от фирмы ОВЕН раскрыть великий секрет "загрузки кода минуя CoDeSys" в ПЛК, вы адресуете свой вопрос не туда.
Его надо адресовать 3S Software, у которой мы и купили код среды для ПЛК и чьими средствами разработки на ПК Вы и мы пользуемся.
Код на ST, CFC, IL и т.п. + конфигурация, задачи и многое ещё компилируется компилятором 3S в файл программы. Доступа к "формату" программы у нас нет. Реверс инжиниринг в данном случае, во первых запрещён нашим лицензионным соглашением, во вторых труден и в третьих лишён смысла, т.к. 99% "цимуса" именно в компиляторе/среде разработки.
Если у Вас вдруг появится свой компилятор и Вы предложите его нам интегрировать в ПЛК, мы с вниманием рассмотрим Ваше предложение. И поменяем под Вас формат программы и многое другое.
Однако, Вы уж извините, но среда разработки CoDeSys - это около 40-50 человеколет работы и не один десяток миллионов евро ещё по докризисным ценам. И один человек повторить и протестировать это не в состоянии просто физически.
Даже более простая по функционалу среда ОвенЛоджик - это 4 человеко-года минимум.
P.S. альтернативный редактор - это хорошая штука.
Тут я имел ввиду не ПЛК, а ПР. Я понимаю, что за протоколом КДС надо ходить не в ОВЕН, а в 3S.
Я говорил про ПР. И я не требую раскрыть протокол, а лишь интересуюсь "секретен ли он". Если несекретен, то вопрос открытия (в каком-нибудь виде), конечно, появится, но если секретен, то меня и такое устроит (ПЛК у меня есть, а ПР нет, поэтому ПР меня волнует чуть меньше)
Вот изначальное сообщение, где я говорил, что IDE61131 может быть альтернативой для ОЛ:
Из максимально близкого к этой теме я видел многозначный ответ Максима про то, что среда OwenLogic развивается.
Можно на нейтральной территории потренироваться -- программирование/отладка PRU ФБ. Там процессор нехитрый, нет требований сверхсложный компилятор писать => может легко получиться. Некий минус, что из "быстрых" устройств у меня только ПЛК110 и есть, поэтому тестировать могу разве что подключением выхода на вход (ну или прикупить какой-нибудь ШД/СИ).
ВЫ подождите тема только развивается. До банкротства 3S Software уже не долго. :DЦитата:
Однако, Вы уж извините, но среда разработки CoDeSys - это около 40-50 человеколет работы и не один десяток миллионов евро ещё по докризисным ценам. И один человек повторить и протестировать это не в состоянии просто физически.
Даже более простая по функционалу среда ОвенЛоджик - это 4 человеко-года минимум.
Лучше бы вот с этим что-нибудь сделали:Вложение 25198
Это из из "Руководство по применению в системах каскадного управления насосами", http://www.owen.ru/uploads/rpr_pchv_kaskad_008.pdf
Разве тут можно что-нибудь понять?
Если пописать входа\выхода ,то элементарно ...Сложно читать на китайском ,когда учил финский ...Хотя причесать схему не мешало бы ,особенно связи поверх элементов .
Внезапно оказывается, что есть те, кто качают и пробуют Hardella:
Вложение 26527
Обмен проверил -- работает. Выходы мигают, обмен данными между HOST и PRU идёт.
Входы как-нибудь потом, на свежую голову, проверю, ибо не хочется сдуру спалить ПЛК.
PRU берёт BOOL из основной программы и записывает его в другую переменную.
Вложение 27274
В КДС замыкаем через NOT и получаем цветомузыку.
Вложение 27275
Интервал мигания я сделал за счёт "0.25сек цикла PRU".
Вложение 27276
Результат:
Вложение 27277
PS. Как же блок питания пищит адски. Если его каким-нибудь клеем залить, то поможет?
Смотрю тут собрался клуб самоубийц-затейников. Прямой доступ из PRU в программу нельзя так делать.
БП можно просто нагрузить по линии 24В.
Я не использую подход "поменять у другого потока переменную на ходу".
Я использую подход "обмена сообщениями". Т.е. передаём в другой поток информацию, что "новые значения готовы" -- он читает/пишет когда у него есть время и когда у него ничего не сломается.
Слова "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". Т.е. под "нормальную" многопоточность оно не рассчитано, и я решил, что там модель памяти простая, без хитростей. Иначе как вообще можно какой-то код написать, если возможны произвольные перестановки обращений к памяти, а команд для упорядочивания нет?
Владимир Ситников объясните, пожалуйста, по простому из-за чего разгорелся очередной сыр-бор.
Возможно ли решение обозначенной проблемы в рамках вашей концепции PRU-программирования ?
Владислав пишет, что в коде КДС программы и в коде PRU программы не надо использовать указатели.
Если сейчас попытаться использовать указатели в Hardella в PRU программе, то возникнет ошибка на этапе компиляции.
В КДС программе же каждый знает, что указатели это мощный, но опасный инструмент.
При использовании Hardella, в прикладном коде указатели вообще не нужны. Обмен данными происходит через обычные "PROGRAM" КДС блоки.
Да, надо написать.
В большинстве случаев, 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.
Красота, товарищи.
Взялось и удалилось моё сообщение о том, как составлять PRU программы в Hardella.
При этом, ни в почте, ни в личных сообщениях ничего не образовалось.
Интересно, это просто временный глюк форума, или модераторы так скрытно действуют, что просто удаляют сообщения и даже не просят "не писать больше такого"?
Если что, то ко мне ни разу никто не обращался с просьбами/требованиями "не распространяться про Hardella, PRU и т.п."
Что ответят, если обратиться к администрации с вопросом "пропало сообщение"?
В целом, могу повторить. Все картинки у меня остались.
Хотя надёжнее будет на сайте Hardell'ы начать документацию выкладывать -- там надёжнее будет, и теряться записи не будут.
Напомню кратко последний статус: в Hardella 1.5.0 любой желающий может составить PRU программу и управлять быстрыми входами-выходами на частотах порядка 100кГц...1МГц. Всё абсолютно законно и не требует специальных прошивок.
Нормальный ход событий. ;)
Новации всегда трудно пробивают себе дорогу.
Надо все основные материалы размещать на сайте Hardella.
Уважаемые господа из фирмы "ОВЕН", у вас есть прекрасная возможность на деле доказать, что концепция В.Ситникова является порочной. Попробуйте при помощи Hardella IDE написать ФБ для 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/col..._debug&ea=open
Этот java класс можно тестировать обычными java средствами.
Вот пример тестов для блока ABZ энкодера: https://github.com/vlsi/pru-emulator...zTest.java#L19
В тесте нет никакой шелухи, а просто идут вызовы нашего блока и проверяются значения на выходах.
Точно так же можно тестировать и целиковую программу (с фильтрацией и всем таким).
Конечно, для тестирования "программы целиком" нужно побольше обвязочного кода, т.к. нужно в том числе эмулировать и "цикл ПЛК, который раз в 1мс опрашивает PRU".
Тем не менее, вот код, тестирующий программу "отмерки нужной длины с помощью энкодера": https://github.com/vlsi/pru-emulator...Test.java#L105. Там просто эмуляция опроса из ПЛК цикла и вывод значений на экран. Можно добавить assert'ов, чтобы тест падал, если поведение отличается от желаемого или просто проверять совпадает ли вся выводимая простыня "эталонной простыне значений".
Что мы только что увидели?
1) В Hardella в один щелчок мышкой можно увидеть все промежуточные стадии компиляции кода. Понятное дело, что для понимания "последних стадий" нужно понимание ассемблера PRU. Но первые фазы будут понятны и тому, кто не разбирается в деталях PRU архитектуры.
2) В Hardella можно легко делать автоматические тесты как для отдельных блоков, так и для программы в целом. "Тестирование схем ОЛ" тихо плачет в сторонке. Не исключаю, что в недрах ОВЕН и есть инструмент для автотестирования программ ОЛ, но обывателю он явно недоступен.
3) Всё вышеперечисленное может сделать рядовой программист. Детального понимания PRU архитектуры не требуется.
4) В "тестах ФБ" можно проверять не только правильность работы, но и длительность выполнения. Т.е. можно узнать сколько тактов требует блок на тех или иных входных значениях.
5) В тестах "программы в целом", можно проверять "как часто осуществляется опрос входов"
Вольд-то давно понял, что ни о какой "порочности" концепции речи не идёт.
Нормальная, рабочая концепция.
Если "вдруг" окажется, что "DWORD'ами передавать нельзя, а только байтами", то достаточно лишь будет поправить компилятор и перекомпилировать проект. Концепция "отмечаем флажком @Export те переменные, которые нужно передавать в host" остаётся. Концепция составлять программы на ST,а не на ASM тоже хорошая.
В общем, "порочность" это гнусное слово, которое используют без приведения каких-то разумных аргументов/доводов.
Слова Владислава/Дмитрия про "необходимость фиксированной длительности выполнения ФБ" для PRU не имеют никакого смысла. Да, звучит громко, но именно так это и есть.
Я уже говорил почему именно, но без проблем повторюсь: обмен данными между PRU и HOST является "непредсказуемым" с точки зрения PRU.
1) Поэтому, даже если весь остальной PRU код сделан супер-пупер по фиксированной длительности выполнения, то внезапно пришедший запрос на обмен данными сорвёт весь ритм.
Можно, конечно, "потратить" одно из PRU ядер на обмен с host'ом, но есть ли в этом смысл, если и без "траты ядра" (см №2) прекрасно работает?
2) С другой стороны, у PRU есть "счётчик выполненных тактов", поэтому совершенно без проблем делается "PRU цикл заданной длительности". Например, если цикл 1мкс, то сначала выполняем пользовательский код, а потом просто "ждём". Иными словами, выходы переключаются раз в цикл и там нет никаких плавающих задержек.