Введение


Наверняка у каждого, кто когда — то начинал или только начинает изучать микроконтроллеры STM32, осталась в запасе вот такая отладочная плата китайского производства, метко прозванная интуристами Blue Pill (синяя таблетка).

Такая плата построена на основе чипа STM32F103C8T6, который представляет из себя 32 битный процессор на базе ядра Cortex — M3. Ниже на картинке показана классическая плата и назначение выводов.

Внешний вид классической платы
My Image

Назначение выводов
My Image

Как за 5 минут сделать ПЛК из подручных средств?


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

Если вы читаете эту статью — то пришло время достать плату с полки и сдуть с неё пыль, ведь сейчас на её основе мы будем делать программируемый логический контроллер, который будет соответствовать международному стандарту IEC61131-3.

После того, как микропроцессор будет прошит прилагаемой прошивкой (увы, пока публикации исходников в планах не имеется), он сможет работать уже как ПЛК. И самое интересное, что плату можно будет программировать при помощи стандартного программного обеспечения GX Developer FX, предназначенного для программирования контроллеров Mitsubishi FX2N. Данное программное обеспечение (причём русифицированное) я свободно скачал с официального сайта Mitsubishi после регистрации.

Итак- какие же новые функции после прошивки приобрела наша небольшая синяя плата?

Первое — теперь можно её подключить к компьютеру, используя разъём micro-USB. Для того, чтобы обеспечить обмен данными между средой программирования и контроллером, вы должны установить драйвера виртуального СОМ-порта. Их можно скачать по ссылке из документа bluepill_update.pdf во вложении. После установки драйвера и подключения платы к USB у вас в устройствах персонального компьютера появится новое устройство — так, как показано на картинке.

Вид аппаратной конфигурации контроллера после установки драйверов
My Image


Теперь можно запускать установленный нами GX Developer FX. После запуска программы у вас будет такое окно:

Первый запуск программы GX Developer FX
My Image

Следующий шаг — создание нового проекта. В меню Проект — Новый проект. У вас откроется вот такое окно:

Новый проект в GX Developer FX
image

Здесь можно ничего не менять, и нажать кнопку ОК. Итак — у нас пустой проект, и теперь нам надо настроить онлайн-подключение к плате.

Для этого выбираем в меню Онлайн — Настройка передачи. У вас откроется вот такое окно:

Настройка подключения в GX Developer FX
image

Здесь можно ничего не менять, и нажать кнопку ОК. Итак — у нас пустой проект, и теперь нам надо настроить онлайн-подключение к плате.

Для этого выбираем в меню Онлайн — Настройка передачи. У вас откроется вот такое окно:

Настройка подключения в GX Developer FX
image

В ряде Интерфейс ПК выбираем Порядковый (тут некорректно переведено — должно быть

Последовательный) и у вас откроется вот такое окно:

Настройка последовательного порта
image

Тут выбираем номер СОМ- порта, соответствующий тому, который у нас виден в устройствах персонального компьютера. Называется он STMicroelectronics Virtual COM Port (COM2) в нашем случае. Теперь мы можем проверить, есть ли подключение на самом деле. Для этого нажмём кнопку Проверка связи в предыдущем диалоге. Если всё в порядке, то у вас будет сообщение как на рисунке ниже:

Проверка подключения
My Image

И вот теперь мы можем спокойно приступить к самому интересному — программированию контроллера. В данной версии реализована поддержка трёх языков:IL — язык инструкций, строковый тип отображения. LAD — язык лестничной логики, визуальный тип отображения. SFC — язык последовательных блоков, визуальный тип отображения. Причём можно всегда переключиться между отображением языков IL и LAD и наоборот. Ниже показана типичная программа на языке LAD:

Программа управления - язык LAD
My Image

А вот так выглядит эта же программа, но на языке IL:

Программа управления - язык IL
My Image

Конечно, это всё хорошо, но хочется ведь заглянуть и в логику программы — понять, что же там происходит. Для этого надо нажать кнопку F3 — и если программа записана в контроллер, то будет переключено отображение в режим онлайн -мониторинга. Для записи программы вам надо выбрать в меню Онлайн — Записать в контроллер.

Будет показано вот такое окно:

Выбор элементов проекта для записи в контроллер
My Image

В окне выбираем опции для записи (тут выбрана вся программа и параметры контроллера), и нажимаем кнопку Выполнить. Программа вас оповестит, что для записи контроллер будет переведён в режим СТОП (вы это увидите по потуханию светодиода, подключенного к выводу PC13), произведёт запись и переведёт контроллер в режим RUN.

А вот так будет показан в онлайне исходник программы на языке LAD:

Вид части программы на языке LAD в режиме онлайн - мониторинга
My Image

И тот же самый кусок программы на языке IL в режиме онлайн:

Вид части программы на языке IL в режиме онлайн - мониторинга
My Image

А вот так выглядит исходник на языке SFC:

SFC - внешний вид программы
My Image

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

Отладочная плата - промежуточная версия контроллера
My Image

Эта плата обеспечивает гальваническую изоляцию для UART1, UART2 и для шины 1-wire. Также гальванически изолированы дискретные входа и выхода. Для программы приняты следующая мнемоника:X1 — это вход с адресом 1, Y2 — выход с адресом 2, M104 — битовый операнд с адресом 104, D1000 — регистр общего назначения с адресом 1000. Версия прошивки, которая находится во вложении, имеет следующие ограничения: Количество шагов программы — 1000 (максимально возможное — 8000).
Количество регистров — 2000 (диапазон D0000-D1999).Количество битовых переменных — 3072 (диапазон М0-М3071).UART1 — поддержка Modbus RTU master/slave, количество слейвов в режиме мастера -2 (максимально возможное — 128 ).UART2 — поддержка Modbus RTU master/slave, количество слейвов в режиме мастера -2 (максимально возможное — 128).

По умолчанию параметры обмена по последовательному порту 57600, 8N1. UART1 — в режиме слейв с адресом 1, UART2 — тоже в режиме слейва с адресом 2.

Для шины 1-wire на данный момент поддержка только датчиков типа DS18B20, количество слейвов -2 (максимально возможное — 128 ).

Также поддерживается выгрузка программы из контроллера и преобразование её в удобный для чтения человеком вид (я предпочитаю LAD).

Программа построена с использованием операционной системы реального времени ChibiOS RT.

Настройка обмена данными по шинам modbus RTU и 1- wire производится при помощи программы, которую вы можете найти во вложении. Для примера сейчас рассмотрим настройку и поиск датчиков с неизвестными нам адресами. После запуска программы у вас будет вот такое окно:

Внешний вид программы конфигуратора после запуска
My Image

Переходим на закладку 1-wire и выбираем 1-wire master, и обязательно нажимаем кнопку Write to PLC для записи в контроллер:

Настройка мастера 1-wire
My Image

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

Окно поиска слейвов шины 1-wire
My Image

А ниже показано окно после успешного поиска всех датчиков, подключенных к шине обмена данными.

Окно поиска слейвов - найдено 3 подключенных датчика температуры
My Image


Тут мы можем добавить найденные датчики к текущей конфигурации или полностью заменить текущую на новую. В нашем случае данные температуры будут передаваться в область регистров контроллера по адресами D1500, D1502 и D1504 в виде числа с плавающей запятой. Остаётся только нажать кнопку Write to PLC и перезапустить плату для активации новой аппаратной конфигурации.

Загрузка новой конфигурации в контроллер
My Image

Что ещё примечательного можно добавить про программу конфигурации? Есть один момент — это представление чисел с плавающей запятой в контроллере FX2N. Для упрощения ввода констант в этом формате пришлось использовать запись константы с модификатором H. Как только интерпретатор контроллера встретит такой модификатор, он понимает, что с ним будет передано число в формате с плавающей запятой, но в форме записи IEE754 с одинарной точностью. Ниже показано окно программы на закладке Converter.

Преобразование форматов чисел с плавающей запятой
My Image

Заключение — что же мы получили:


Пришло время для вопроса — а собственно, каково же быстродействие такого вот контроллера? Тут всё просто — при опросе обоих портов обмена данными по modbus RTU (контроллер в режиме слейва — оба порта) на скорости 500 kbps и длине запроса 122 регистра, опросе 17 датчиков температуры и выполнении самой «тяжёлой» (состоящей из бинарных операндов) программы из 7745 шагов цикл исполнения был равен 21 мсек. И конечно же есть и минусы в таком вот контроллере. Первый — это то, что синие платы отличаются невысоким качеством комплектующих, и поэтому я рекомендую подавать внешнее питание на плату до подключения mini-USB. Второй — это конечно же, что тут нет энергонезависимой памяти (точнее, она есть — но всего лишь 9 регистров в области, поддерживаемой батарейкой). И вы сами понимаете, что такое вот устройство лучше не применять для ответственных применений или на производстве. А вот для дома или для обучения — это самое то, дешево, доступно и понятно.

Я постарался сделать обзор обширным — и если у вас будут какие-то проблемы, пишите. Особенно буду рад, если вы найдете ошибки в реализации программы. Надеюсь, статья будет познавательной и вы не зря потратили время на её прочтение.

Загрузки для данной статьи — ниже.

Комментарии (73)


  1. alexhott
    28.09.2018 14:44
    +1

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


    1. Greeds74 Автор
      28.09.2018 15:03

      Только знаете, хотелось бы добавить вот что — если вы напишете программу на С, то у вас отладка такой программы будет возможна только через отладчик типа STLink или JLink, и вам придётся перезапускать процессор для подключения. Тут же онлайн — отладка как раз и рассчитана на то, чтобы не прерывая процесса управления, можно было и смотреть, что происходит, и изменять значения онлайн. При этом время цикла управления практически не изменяется. Это один из очень больших плюсов программируемых логических контроллеров.


      1. NordicEnergy
        28.09.2018 17:44
        -2

        Кто вам такую глупость то сказал? Через SWO вы можете в реал-тайме смотреть все что происходит с МК. Да и привязку к программатору тоже выдумали. Что мешает написать загрузчик для DFU и просто через USB кидать прошивку в МК как файлик? Можно вообще обойтись одним uart-ом и через него же шить (бутлоадер уже встроен) и через него же printf-ом получать данные о работе МК и дебажить, а так же влиять на работу системы.


        1. Greeds74 Автор
          28.09.2018 18:25
          -1

          Вы перед тем, как употреблять слово «глупость» подумайте. Если вы читали статью, то там описано — я прямо в среде программирования написал нужную мне логику, скомпилировал, загрузил либо частично, либо полностью, и тут же смотрю работу программы и значения переменных. И мне для этого не надо вообще ничего делать — никаких лишних телодвижений!
          А вот что надо в вашем случае, чтобы точно также посмотреть онлайн программу через SWO? Это вообще не одно и то же, вообще!!!
          А про привязку к программатору я и не писал — это вы выдумали вообще. А printf в наши дни — это откровенная ардуинщина и костыли.


          1. NordicEnergy
            28.09.2018 18:33
            -5

            Дядя Петя, ты дурак?)) Ну не понимаешь как разрабатывают по МК — не пиши, не позорься же… Достаточно прокинуть один доп. вывод на разъем отладки и тебе доступные все регистры, переменные и прочее. И как там… «все в одной среде разработки и никаких лишних телодвижений».

            Printf нужно уметь правильно приготовить, на аппаратных возможностях Cortex-ов он идеально вписывается или таки есть реальные аргументы почему это костыль?)

            P.S. Минусанул от безисходности что ли?))


            1. Greeds74 Автор
              28.09.2018 18:40
              +1

              Меня совсем не дядя Петя зовут — не надо тут хамить. Отладку перепробовал на STM32 почти всю — так что не надо мне писать, что делать. Я рассказываю про то, что такое промышленная система и как она работает -и даю вам возможность её опробовать. Не интересно — не читайте, я ведь никого не заставляю. Совсем никого. А минусанул за то, что надо читать то, о чём пишут.


              1. NordicEnergy
                28.09.2018 18:45
                -2

                1) Вам никто не хамил, просто надо знать классику
                2) Даже не буду спрашивать что именно вы перепробовали. Просто скажу, что SWO trace поддерживает любой ARM-овский отладчик.
                3) В каком месте тут что-то промышленное то? Или вы костыли в виде скриншотиков из какой-то программы с дизайном из 80-х? Открою тайну — что на них написано вообще не видно, могли бы таки сделать картинки кликабельными, вставив ссылки. Учитывая, что про это никто не написал, то видимо у вас действительно «очень интересно промышленное (!) решение»


                1. Greeds74 Автор
                  28.09.2018 20:31

                  Мы читаем наверное разную классику просто!
                  SWO в своё время оказалось единственным средством отладки стека TCP/IP в режиме исполнения — это о чём-то говорит.
                  Тут промышленное программное обеспечение, которое взаимодействует с платой. А то, что оно без рюшечек — уж извините, вам шашечки или ехать всё таки.
                  А вот насчёт картинок — да, надо исправить, чтобы было видно полностью. Если уж очень горит — то ПКМ-Открыть в новом окне. И будет вам счастье полноценного просмотра. Но статью буду переделывать…


                  1. NordicEnergy
                    28.09.2018 23:02
                    -2

                    Вам выше писали: «решение» промышленным делает его реализация, а не голая китайская отладка. Вы не показали ни элегантного аппаратно решения, обладающего высокой надежностью, ни элегантного встроенного ПО, которое так же способно повлиять на надежность. Вы показали скрины с программки… Прекрасно, не правда ли?))

                    P.S. картинки слишком интересные, чтобы тратить на них пару лишних секунд…


                  1. Jef239
                    29.09.2018 00:25

                    Ну уж без рюшечек… Даже SFC поддержали…


                1. Jef239
                  29.09.2018 00:23
                  +1

                  Промышленный софт, промышленные языки, промышленнные технологии…

                  Отлично, что все это удалось сделать на дешевой платке.

                  У меня такое впечатление, что вы просто ни разу с промышленными ПЛК не работали.

                  ну хотя бы вики почитайте, про IEC 61131-3, про ladder, про SFC.

                  ПЛК — это совсем иной мир, идущий от релейно-контактных схем. И да, только в промышленности используются такие языки, что электрику прочесть код проще, чем программисту.


                  1. 8street
                    01.10.2018 13:38

                    Вот кстати, про читаемость кода ПЛК. Бывает, его и электрики пишут, совсем не знакомые с понятием ООП. Это такая боль и вермишель...


                    1. Greeds74 Автор
                      01.10.2018 14:02

                      Вот приведу пример отладки выкачанной программы из ПЛК. Как раз сейчас будет видно преимущество визуального языка программирования — в строке, которая выделена маркером, виден выключенный меркер М2. Если его включить, то соберётся вся логика и будет активирован М8. Для того, чтобы определить, что же не даёт включиться меркеру М8, ушло меньше нескольких секунд.
                      Вы, наверное, имели в виду текстовое отображение всё-таки и стиль написания «лишь бы скомпилилось»

                      Внешний вид программы в режиме отладки
                      My Image


                      1. 8street
                        01.10.2018 16:36

                        Нет, в графическом тоже бывает такого понаворотят… У нас программы очень сложные, их разбивают на подпрограммные блоки — функции. Например, входные параметры функции могут изменяться из сотни других функций. Иногда даже инструмент cross reference (мощный аналог find) не спасает, поскольку изменяются параметры с помощью указателей (у Siemens такое можно).


                        1. Jef239
                          01.10.2018 16:41

                          И вы считаете это хорошим и надежным кодом?


                          1. 8street
                            01.10.2018 16:49

                            Конечно же нет, это был пример плохого кода.


                        1. Greeds74 Автор
                          01.10.2018 16:46

                          Мне такой проект попадался… Заставили подрядчика переписывать.


                      1. Jef239
                        01.10.2018 16:39

                        У меня проще — в программе просто раскрашивал ladder симим (0) и красным (1) цветом. Соответственно, для определения требовалось меньше секунды.

                        Кроме того, был написан модуль автоматической диагностики, которы по переключениям находил причину с шансом 99.9% (мы не писали часто переключаемые временные переменные, поэтому 0.1%).

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

                        Так что можно и 0 секунд — ladder вполне позволяет автоопределение.


                    1. Jef239
                      01.10.2018 16:31

                      Ещё хуже, когда программисты лезут в электрику. А уж если автоматику делают люди с ООП головного мозга

                      Дело в том, что требования качества вавтоматике, совсем иные, чем принципы ООП.

                      Во-первых, любой отказ датчика должен диагностироваться и не мешать работе (возможно с некторой деградацией), двойной отказ — обязан диагностироваться, по возможности с продолжением работы с деградацией. Тройной отказ — диагностировать по возможности.

                      Это означает, что для контроля используются дачтики из совсем других блоков. Например, самолет запрещает реверс при отсутствии раскрутки колес набегающим воздухом после старта. Где двигатели и где колеса?? :-) У вышупомянутом криз-контроле отказ дачтика оборотов колеса легко диагностируется по подаче топлива в двигатель и включению сцепления. Но… это не влезло в ООП, отсюда — и многочисленные трагедии.

                      Второй момент. Для надежности любой выход должен устанавливаться только в одном месте. Для той же надежности (и модифицируемости) лучше не использовать промежуточные переменные. В итоге формирование аварии — это такая большая простыня со смесью сигналов из разных подсистемю

                      Третий момент — хороший код автоматички способен выполняться параллельно. То есть не должен зависеть от порядка выполнения нетворков.

                      Автоматчику — удобнее и надежней и читаемей именно такой код. А для тех, кто с автоматикой не знаком — такой код, конечно, будет слабо читаем.

                      Кстати, у меян в системе был модуль упрощения нетворков. То, что выдал этот модуль — не прошло. Читаемость меньше, модитцируемость хуже. Хотя выполнялось чуть быстрее.


                      1. Greeds74 Автор
                        01.10.2018 16:39

                        Хочу добавить — если в GX Developer-е написать запись в нескольких местах в один и тот же выход, то компилятор не будет ругаться на это. Но если вы запустите поиск ошибок ( меню Сервис — Поиск ошибок), то он вам покажет, что это ошибка. Хотя программа будет спокойно выполняться контроллером. Как-то так.
                        Так что множественная запись не запрещена, но нежелательна, ибо делает код трудночитаемым. А это время — а обычно в полях его как раз и нет. Но ещё хуже, когда двоичную логику реализуют на языке типа STL( SIEMENS) — вот тут по времени уже намного хуже, чем в визуальных вариантах.


                      1. 8street
                        01.10.2018 16:45

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


        1. Jef239
          29.09.2018 00:15
          +1

          Гм, вы работали с ПЛК? У меня такое впечатление, что нет.

          Дело несколько не в отладке. Вы что думаете, отладил и забыл?

          Представьте себе стан. Остановка стана — 40 тысяч долларов (рулон стали), улетевший в брак. А на стане — куча датчиков, которые иногда отказывают.

          При аварии или предаварии оперативно или меняется программа для обхода отказвшего датчика или ставится блокировка (показания датчика принудительно приводятся к 0 или 1). А уж потом, раз в месяц, стан встает на ремонт и все отказавшее — меняется.

          Времена отказа считаются в минутах(!!!) в год. Например у автоматчиков несколько лет подряд было 0 минут простоя в год по их вине. Это при 8 тысячах входов и 2 тысячах выходов, контролируемых дюжиной ПЛК

          А теперь попробуйте воспроизвести это на Си с любым отладчиком. Отладчик с возможностью загрузки отдельной измененной процедуры (нетворка в терминологии Ladder) найдете?

          P.S. Это АНГА, цех ПХЛ, Северсталь.
          P.P.S А время на реальную отладку нового кода на живом стане — 2 часа в месяц. Это когда стан выходит из ремонта, но ещё не вошел в режим.


          1. NordicEnergy
            29.09.2018 00:26
            -1

            А вы точно умеете разрабатывать ПО для МК?

            1) Что мешает вам создать архитектуру кода так, чтобы вы могли без перепрошивки «обойти» любой датчик? Вроде как RS-485 всегда имеется на таких вещах, значит можно без проблем заглушить любую ошибку из вне или внести какие-то изменения без затрат времени на остановку.

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

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

            P.S. побуду кэпом, но при должном умение в код на С/С++ можно вносить изменения прям на ходу не останавливая программу в принципе.


            1. Jef239
              29.09.2018 02:21
              -1

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

              Вообще-то любой процессор — это релейно-контактная схема. Так что верно иное — любой автоматчик способен составить схему процессора.

              На вашем уровне — считайте, что ПЛК — это такая ПЛИС. А программирование ПЛИС и ПЛК имеет много общего.

              Для понимания — можете попробовать на РКС написать… ну скажем делитель частоты на 7. На голой логике, то есть И, ИЛИ, НЕ.

              Вроде как RS-485 всегда имеется на таких вещах,
              Считать не умеете. Скан 20 мс. Сколько датчиков вы за это время сумеете опросить по RS-485? Поэтому используются высокоскоростные шины.

              при должном умение в код на С/С++ можно вносить изменения прям на ходу
              Продемонстрируйте. :-)

              А вы точно умеете разрабатывать ПО для МК?
              Умею, а что? Ничего хитрого в МК нет. Моему софту вообще все равно, он работает и под windows и под *nix и под FreeRTOS. Скорее уж хитрее всего с linux, когда приходится править ядро или драйвера. На FreeRTOS как-то баги в драйверах проще ищутся.

              мешает вам создать архитектуру кода так, чтобы вы могли без перепрошивки «обойти» любой датчик?
              Создайте, а мы посмотрим. :-)

              P.S. Ну в общем считайте, что ПЛК это такая ПЛИС — и вам сразу все понятней будет. Для ПЛИС-то хоть хоть как раз писали?


              1. NordicEnergy
                29.09.2018 17:21

                Судя по вашей поэме — ПЛИС вы сами видели максимум в виде графического редактора в Quartus)) Иначе бы понимали, что дискретная логика к современным ПЛИС мало отношения имеет, разве что CPLD хоть как-то близки.

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


                1. Jef239
                  29.09.2018 17:37
                  +1

                  «Современное» — это ругательство. Это так, для бытовухи. Для надежных применений используется то, что реально работает 10-20 лет. С реальными цифрами наработки на отказ. А ПЛИС у нас коммутирует сигналы ком-портов, так что надежная, мелкая (CPLD XC2C64A), зато — при нужде заменяется российской ПЛИС с 5ой приемкой.

                  Понятно, написать не смогли. А учебники «для электриков» читайте сами, мои интересы в другой области, лет 35 уже как от радиогубительства отошел.

                  P.S. ну а то, что ваши вымыслы про С++ не смогли подтвердить реализацией — это типично.


                  1. NordicEnergy
                    29.09.2018 17:42
                    -1

                    Боже… приемка «5»… отечественные аналоги… суровая отечественная разработка… Все ясно — очередной дед на хабре. Пожалуй больше интересностей в сим диалоге не найду, приятно было пообщаться


                    1. Jef239
                      29.09.2018 18:11

                      … хуже, сейчас ещё и 9ой приемкой проект делается.

                      Это высокоточная спутниковая навигация. С точностью 5 миллиметров СКО. Так что с одной стороны — GPS, ГЛОНАСС, GALILEO, а с другой — атомные ледоколы, автовождение тракторов и грузовиков, шлюзы, военные беспилотники, перевозимые на двух грузовиках…

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

                      Для обычных применений мы тоже на STM32H7 делаем. Но мы умеем выживать и там, где реально нужно 20 лет работы без сбоев.


                      1. NordicEnergy
                        29.09.2018 18:25
                        -1

                        С 9-й приемкой не сталкивался никогда (это вроде атом и прочие шайтан-объекты), но к сожалению пришлось пару лет поработать и с 5-й приемкой (завод «Ахтуба»), кроме ужаса и боли ничего не особенного в ней нет. Сам процесс приемки это больше бюрократия, чем инженерия. Особенно если учесть, что компоненты «5» даже если и скопированы с буржуев, то как всегда через одно место. Доводилось работать с клоном альтеры из Воронежа, тихий ужас…
                        Правда потом поумнели и стали ставить TMS320C66+CPLD альтеровские нормальные, видимо смогли обосновать))

                        Сейчас занимаюсь индастриал решениями (силовые преобразователи с гарантией 15+ лет) и прекрасно живется без этого позорища отечественного. Сталкивался с теми же транзисторами типа 2П704 и подобные — они ужасные и надежность у них примерно как у комерческой линейки инфинеона/TI/ST. Да и все микросхемки в индастриал исполнение к нам привезти можно, даже часть в милитари, зачем мучиться. Ценник компонентов и простота доступа у буржуев все таки лучше.

                        По поводу долгоиграющих решений… имел дело с C166 от Infineon, это как раз поделка живущая лет 20 уже, если не больше. Сам инфинеон данное ядро пытается убить лет 5-6 точно, но нет. Дело в том, что большинство «старых опытных» разработчиков просто не хотят переучиваться и с нуля обучаться «готовить» какой нибудь XMC4800, который на смену пришел. Лично меня это угнетает.

                        Stm я и не предлагал ставить, все таки это МК для всякой мелочи с низким циклом жизни типа смарт-часов))


                        1. Jef239
                          29.09.2018 19:58

                          Такое впечатление, что вы не сталкивались с западными промышленными решениями. Вы думаете они новее нашей 5ой приемки?

                          Аирбасы, боинги… Знаете какой там GPS-приемник? 12 каналов, характеристики такие, что любая бытовуха за пояс заткнет. Элементная база — ну где-то года 1990ого, если не раньше. Это вот то, что летает. Пару лет назад начали поставлять новые. С характеристиками примерно 2000 года. Зато — не ломается. Промышленное решение. Судя по корпусу — оно и крушение самолета переживет, если пожар недолгим будет.

                          Ещё пример. 2002 год, та самая Северсталь.закупаем для ПЛК сетевую плату. Бытовые 100мегабитные — стоят 10 долларов, а эта — тысячу. протокол — Ethernet II, то есть 2 мегабита. Зато — не ломается.

                          Сейчас занимаюсь индастриал решениями (силовые преобразователи с гарантией 15+ лет
                          Сколько проживут ваши преобразователи в цехе, если даже в бытовке за месяц прямо из воздуха выпадает миллиметр металлической окалины?

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

                          Доводилось работать с клоном альтеры из Воронежа, тихий ужас…
                          "Ну, да! Ну, ужас! Но не «ужас-ужас-ужас»!" Заработала она. Палкой и веревочной петлей, но работает. Ком-порты у нас на ней в одном изделие (но это уже не я писал).

                          Просто для инженера — интересней делать высоконадежное решение. А погоня за современностью — это для бытовухи. Легко можно нарваться на что-то типа "таймера смерти" у intel Atom C200.

                          Мне, как программисту, почти все равно на каком железе оно пахать будет. Лишь бы производительности хватило. Ну почти все равно — есть свои секреты, все-таки 1.6 ГГЦ в ВЧ части…


          1. Greeds74 Автор
            29.09.2018 03:23

            Северсталь -Балаково? Мне сразу вспомнился проект водоподготовки, который написан был на SCL- PASCAL-е подобном языке.
            Бывал в тех краях, правда давно.


            1. Jef239
              29.09.2018 09:48

              Нет, Череповец. Вот краткое описание проекта.


              1. Greeds74 Автор
                29.09.2018 10:06

                Жаль, не довелось побывать у вас.


                1. Jef239
                  29.09.2018 10:14

                  Так мы в Питере. Череповец — это заказчики.


                  1. Greeds74 Автор
                    29.09.2018 10:28

                    Приятно пообщаться! Я вот только не прокатчик, больше по электрометаллургии.


                    1. Jef239
                      29.09.2018 13:34

                      Так я вообще программист. Сейчас даже не АСУТП, а спутниковая навигация.


  1. Greeds74 Автор
    28.09.2018 14:47

    Совершенно верно! Именно поэтому я и показал плату, которую использую в качестве отладочной. На самом деле этот пост для тех, кому лень или нет желания писать такую реализацию на С — берёшь готовое и вуаля.


    1. Misaka10032
      28.09.2018 15:42

      Делать свой ПЛК на МК, используя чью-то прошивку без открытых исходников — извините, такое себе.

      Всё работает, атвичаю
      тут не катит.


      1. Greeds74 Автор
        28.09.2018 15:58

        Я ведь только предлагаю готовую прошивку — у вас есть свобода выбора, всегда можете выбрать любой другой вариант. Мне кажется, что важно, чтобы были хотя бы какие-то варианты — хотя бы такие. А так конечно — для серьёзной системы вообще хорошим тоном будет все своё иметь, и операционку тоже.
        И именно поэтому я и пишу — это всё для ленивых, кто готов применять готовое. Тем более что на самом деле — 5 минут и готово.
        А кстати, где-то на гитхабе мне попадались исходники ПЛК — если найду ссылку, кину.


      1. NordicEnergy
        28.09.2018 17:46
        -2

        Тут продакшен на ардуине и mbed многие пилят, так что не удивляйтесь «закрытому» коду с непонятной стабильностью


        1. Misaka10032
          28.09.2018 17:48
          +1

          Ох, вспомнил лифт на ардуине и снова стало плохо :(
          У меня аж тогда проскочила мысль, что ну его нафиг, эти лифты, я и по лестнице могу.


          1. NordicEnergy
            28.09.2018 17:50
            -1

            О дааааа!)) В подъезде, когда начинает тупить лифт при закрытии дверей, тоже подумываю «а не на ардуине ли он?»


            1. Greeds74 Автор
              28.09.2018 18:33
              -1

              Я тоже отношусь к ардуино не просто с предубеждением — имею опыт демонтажа поделок на оных платках. И люди реально имели проблемы из-за таких автоматизаторов. А менял на контроллеры, которые делает контора — и весьма успешно, ни одного отказа за больше чем 2 года. Дело в том, что этот бинарник — это отладочная версия, на ней откатываем функции на старом железе. Но рабочее железо уже давно другое -для малых версий STM32F3, серии постарше уже F4 или H7 с поддержкой Ethernet и прочими плюшками. Всякую рассыпуху датчиковую — на STM32F0. Непонятна реакция только ваша — вроде я ничего не продаю, просто даю возможность попробовать интересное решение. Что не так?


            1. Greeds74 Автор
              28.09.2018 18:35
              +1

              А если серьёзно — лифты до сих пор клепают на КР1816ВЕ35 или КР1816ВЕ39. Так что не удивляйтесь, что работает немного не так, как бы хотелось. Завод изготовитель называть не буду из этических соображений.


            1. Gryphon88
              28.09.2018 18:41

              А в чём там основные проблемы были, в схемотехнике или программировании? Логика лифта на иерархический (с учётом сигнала пожар) конечный автомат хорошо ложится, тут сложно напортить. Или там keep-alive сигналов не было?


              1. Misaka10032
                28.09.2018 18:47
                +2

                Если интересно — вот, можете почитать.


                1. Gryphon88
                  28.09.2018 18:57

                  Как страшно жить…


      1. Greeds74 Автор
        29.09.2018 09:59
        +1

        Ссылка на исходник -https://github.com/KeyMove/STM32-PLC-FX1N


  1. gopotyr
    28.09.2018 16:27
    +2

    1. Greeds74 Автор
      28.09.2018 16:36

      Beremiz неплох, когда речь идёт о получении грантов) А вот хотя бы один реально работающий проект с онлайн отладкой, загрузкой и выгрузкой мне что-то не попадался, который работает хотя бы 10 минут без отваливаний. Если у вас есть ссылка — поделитесь, посмотреть будет интересно. Или я напишу под него интерпретатор даже, если проект будет стоящий.
      Кстати вот по вашей ссылке цитата-«Таким образом Beremiz преобразует LD, FBD, SFC или IL в код на ST, а MatIEC конвертирует ST в C. Код С компилируется на конечную платформу.» То есть выгрузить программу из контроллера без вариантов. Грустно это…


  1. Wilk
    28.09.2018 19:08

    Здравствуйте!

    Насколько я понимаю, из Bluepill получится очень примитивный игрушечный ПЛК.

    Во-первых, я не уверен, что он сможет работать в диапазоне температур от -60 до +120.

    Во-вторых, ПЛК — это не только контроллер, как заметили выше, но и модули расширения. Без них говорить даже об отладке смысла нет, т.к. как минимум временные характеристики выполнения программы будут отличаться (если подставлять желаемые значения вместо получаемых с устройства, то время, затрачиваемое на опрос устройства будет равно нулю, либо потребуется дополнительно создавать ПО для моделирования всего этого и т.п.). Отлаживать же непосредственно обмен информацией с модулями расширений будет точно так же не удобно, т.к. потребуется какой-то переходник, который на практике будет иметь крайне неприятную наружность и работать будет так себе, ведь он будет изготовлен в единственном экземпляре.

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


    1. Greeds74 Автор
      28.09.2018 20:37
      +1

      Основная идея публикации была в том, чтобы дать людям возможность использовать завалявшиеся платы с пользой. Но меня жутко удивляет реакция — почему столько негатива, что не так? Тем более что я старался раскрыть большую и интересную тему — плюс была бы возможность попробовать свои силы и набраться опыта на копеечных платах, которые тем более что уже есть. Конечно, такие платы не для использования на объектах — это я всё описал в статье.
      Когда речь идёт о конторе, которая занимается разработкой — да, тут применять самодельные модули себе дороже. А вот для кружка самое то — пора прощаться с ардуинами и им подобными клонами, пусть дети изучают хотя бы промышленные языки и осваивают азы отладки. Это моё мнение.


      1. Wilk
        28.09.2018 21:17

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

        Для совсем базового обучения (особенно в случае открытия исходников описываемой в публикации прошивки) может подойти. Хотя в этом случае потребуется ограничиться периферией самого контроллера, т.к. делать систему с модулями расширений дорого. Благо, что сам контроллер имеет достаточно много различных устройств, которые можно представить в виде «виртуальных» модулей расширений.


    1. NordicEnergy
      28.09.2018 23:07
      +2

      -60...+120? Серьезно? Что у нас там нынче популярно в промышленности… ОВЕН, Delta, Siemens Logo — они могут в -60 или +120? Увы, нет. В каждом из них стоят электролиты, а это значит даже +100 для них не пережить, про -60 так не шутите. ОВНО и сименс в -10..-15 уже с ума сходят, а любая электроника в принципе, способна реально пережить -60 стоит как самолет. Хотя если в шкаф направить 20 кВт тепловую пушку, то при -60 за бортом в шкафу ПЛК сможет работать :D


      1. Wilk
        28.09.2018 23:17

        Здравствуйте!

        По поводу +120 могу несколько ошибаться — точную верхнюю границу я не знаю, но на прежнем месте работы контроллеры в печке грели. И, насколько мне известно, заявляли, что ПЛК способен работать при -60. Уж с дополнительным подогревом или без — не знаю, я не по железу работал.

        Между тем тот же MSP430 вполне себе переживает -60. Только один раз видел, чтобы после заморозки он вышел из строя.

        Справедливости ради, отмечу, что конкретные механизмы обеспечения работоспособности при низких температурах мне не известны.


        1. NordicEnergy
          28.09.2018 23:26
          +1

          1) Тогда может не стоит писать того, чего не знаете? Я конечно понимаю, что на хабре 80% менеджеры и ардуинщики, но 20% оставшимся читать такое больно.

          2) Про -60 тоже тогда не стоит говорить. Я могу заявить, что взглядом разрываю танк на пополам, вы же наверняка это не будете распространять? Вот и тут глупости маркетологов не стоит повторять. Если у устройства есть открытые разъемы, то в лучшем случае это -20...+85, а по вашей ссылке именно такое. Весь этот миллион RJ-45х просто инеем покроется и «весь мир в труху».

          3) Не путайте, «заморозить МК» и «работать при -60» — это разные вещи. С MSP430 работал очень много в приборах учета и там при -15 уже большие проблемы, особенно с системой тактирования. Поэтому там обычно -10 минимум или -20..-30 в шкафу с подогревом.

          4) Без обид, вы не то что этих механизмов не знаете, вы даже логику не включили, когда отвечали мне. Скинули ПЛК с кучей открытых разъемов и в корпусе с перфорацией как пример -60, а ведь конденсат, иней и прочие климатические явления не требует ничего кроме 7-8 класса географии, ну или физики школьной.


          1. Wilk
            28.09.2018 23:28
            +1

            Спасибо за Ваш ответ и опускание меня до менеджеров и ардуинщиков. Большое спасибо. Вы — про, я — ничтожество. Признаю свою ошибку.


            1. NordicEnergy
              28.09.2018 23:31
              -2

              Еще и читаете между строк… Вроде вас конкретно я ардуинщиком или менеджером не называл, да и в этих двух категориях плохого ничего нет. Просто им простительно писать про -60...+120, а инженеру (любому) — нет.


              1. Wilk
                28.09.2018 23:51

                К сожалению, не могу уже изменить комментарий и исправить на +60, что соответствует номинальному диапазону рабочих температур. Если же просмотреть руководство по эксплуатации, то можно увидеть, что имеется два возможных диапазона рабочих температур: -40..+60 и расширенный -61..+60. Всё это, разумеется, исключительно маркетинговый ход. Может быть я дурак, раз верю, что в документах пишут то, что есть.

                Относительно MSP430: я сам своими глазами видел, как устройство с данным контроллером работало в морозильной камере.

                P.S. Очевидно же, вроде, что я не инженер, а ардуинщик.


                1. NordicEnergy
                  28.09.2018 23:58

                  1) Ох уж этот маркетинг… На индастриал микросхемках тоже пишут -40...+105, только уже на -20 через пару часов на улице они сходят с ума, ибо это данные с испытаний. Самое интересно — как проводятся испытания чтобы можно было -40 написать в даташит? Есть прекрасные стандарты IPC, только даже среди схемотехников 90+% таковых никогда не открывали их, а ведь есть интересная привязка ко времени и скорости охлаждения)) Интригу сохраню — кому интересно пойдет гуглить.

                  2) Морозильная камера на -60? Даже промышленных холодильник обычно не ниже -35. Готов поверить, что опять опечатка и камера все таки климатическая.


  1. lopatoid
    29.09.2018 00:36

    А какой смысл затирать маркировку микросхем? Даже самого STM32 и кварца? Вы же в статьё всё равно написали, что это за микросхемы.


    1. Greeds74 Автор
      29.09.2018 03:29

      Синим помечен кварц, потому что плата дефектная была. Феном прогрели — вроде начала заводиться. Вот такое грустное качество.


  1. Nick_Shl
    29.09.2018 02:29

    Что на счёт IO-Link?


    1. Greeds74 Автор
      01.10.2018 15:22

      IO-Link на данный момент не поддерживается, хотя можно и добавить. Я так понимаю, физика немного специфична. По данным википедии, длина линии составляет максимум 20 метров — но я совсем не уверен, что эта информация корректна. Была идея насчёт AS-i интерфейса — но его физика дорогая и периферия совсем не дешёвая. Для дома такую не купить — поэтому отложили реализацию.


      1. Nick_Shl
        01.10.2018 16:09

        Физики никакой специфичной нет — обычный UART по одному проводу, нужно только немного обвязки для согласования уровней(а можно взять готовое решение у того же ST), а вот сам протокол… почитайте как-нибудь на досуге спецификации: www.io-link.com


  1. andersong
    29.09.2018 10:13

    Приветствую, коллеги!
    Приятно видеть тему про промышленное программирование — довольно редкую на Хабре.
    Сам работаю АСУшником, сегодня, в субботу, дали время, заливал новую редакцию программ в ПЛК, сижу, контролирую, вроде всё работает)))
    В GX Developer тоже работаю изредка, есть с десяток подопечных ПЛК Митсу FX.
    Вышла версия ПО посвежее — GX Works, (у вендоров можно попросить бесплатно).
    Автор, с ней будет работать ваша Blue pill?
    Если есть желание попробовать себя в программировании ПЛК, у Митсу есть хороший тренажер на русском. Программа несколько старовата и капризна, но интересна и полезна.


  1. Greeds74 Автор
    29.09.2018 10:26

    Да, я тестировал работу с версией GX Works 2. Единственно что — в данной версии реализация функций PWM, EXTR и DEZCP немного отличается от канонической. Да- кстати, в этой версии есть поддержка Profibus DP slave, совсем забыл. Надо будет немного переписать утилиту конфигурации, чтобы можно было активировать этот режим. Мне кажется, будет любопытно попробовать работу в таком режиме.


  1. gopotyr
    29.09.2018 12:16
    +1

    Ну, насчет «хилости» «голубой таблетки» вы это зря. Камень (STM32F103C8T6) — пром исполнения, и спокойно переживает -40 +85 С (проверялось лично). Кварцы там — да, послабее, -20 +70 С. Слабый стабилизатор, всего 100 мА. Но исправляя это, я для себя «нарисовал» аналог "голубой таблетки". Кварцы такого же типоразмера, но -40 +85 С, Стабилизатор 800 мА. Проект с открытыми исходниками, можете повторять.
    Если мало 103-го камня, то вместо него можно впаять 303-й, 373-й. (вообще список совместимых по ногам достаточно большой). Например STM32F373CCT6, Flash=256K, RAM=32K.


  1. Greeds74 Автор
    29.09.2018 15:56

    Как раз 303 и использую. Причина банальна — не хватило каналов DMA под все хотелки.


    1. gopotyr
      29.09.2018 17:10

      Чем еще интересен 303-й? Это «на борту» есть операционники с возможностью программно устанавливать к-т усиления, есть DAC и таймеров поболее будет. Можно одновременно использовать CAN и USB.
      В 373-м в добавок к операционникам есть сигма-дельта.


  1. gopotyr
    29.09.2018 17:41

    И ещё, по насчет энергонезависимой памяти: Если это уставки, и не часто меняются, то никто не запрещает использовать ПЗУ микроконтроллера для хранения чего-либо. Например для этого отводим верхний килобайт-два.


  1. Greeds74 Автор
    29.09.2018 18:42

    Да — насчёт применения флеш памяти для хранения… В данном проекте можно сохранять комментарии к элементам программы в контроллере — то есть при выгрузке из памяти вы получите такой точно проект, каким его написал программист до вас. Русский поддерживается. Ещё поддерживается так называемая память регистров — выделяются блоки по 500 регистров, где вы можете хранить свои константы. Увы — пришлось эту особенность реализовать так, что сохранение происходит только при записи константы из GX Developer FX. И конечно же, расходуется память программ — из 8000 шагов откусываем куски или для комментариев, или для файловых регистров. Зато если программа небольшая — то получается очень даже удобно.


  1. Greeds74 Автор
    29.09.2018 19:08

    Да — вот на какой плате используется 303 проц. Тут уже и сохранение всех переменных в батарейной памяти(чип 23к256 по SPI), до 20 mbps последовательный изолированный порт( второй — до 500 kpbs), блок питания уже получше качеством. На основе этого дизайна недавно тестировали мост Profibus DP slave — Modbus RTU master. Конечно, это всё партизанщина — но что поделать, даже такой проект позволяет оставаться в тонусе.

    Фото платы другого образца
    My Image