LDmicro: Лестничная логика для PIC и AVR

LDmicro: Лестничная логика для PIC и AVR

Краткое резюме:


LDmicro - компилятор, который программируется с помощью лестничной диаграммы и генерирует собственный код PIC16 или AVR.


Особенности включают:


  • цифровые входы и выходы
  • таймеры (TON, TOF, RTO)
  • счетчики (CTU, CTD, `count counters 'для использования как секвенсор)
  • аналоговые входы, аналоговые (PWM) выходы
  • целочисленные переменные и арифметические инструкции
  • простой в использовании последовательной связи, на ПК, ЖК-дисплее или другом устройстве
  • сдвиговые регистры, справочные таблицы

  • Переменные можно сохранить в EEPROM
  • симулятор, позволяет протестировать вашу программу, прежде чем генерировать код PIC / AVR

Эта программа является бесплатным программным обеспечением; исходный код и исполняемые файлы доступны для загрузки.



Введение



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


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


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




         || Xa Xb Yout || 
       1 || -------] [------ + -------] [------ + ------- () ------ - || 
         || | | || 
         || | Xc | || 
         || + -------] / [------ + ||




Это простой фрагмент комбинационной схемы. .


Есть три входа, Xa, Xb и Xc.


Существует один выход Yout.


Выражение Yout: = Ха И (Xb ИЛИ (НЕ Хс)).


Представьте что Xa и Xb нормально открытые контакты , Хс как нормально замкнутый контакт, и Yout как выходное реле (катушка выходного реле).


Более сложный пример:



         || || 
         || Asetpoint || 
       1 || ------------------------------------- {READ ADC} ---- || 
         || || 
         || Аттуперация || 
         || ------------------------------------- {READ ADC} ---- || 
         || || 
         || || 
         || || 
         || || 
         || {SUB min_temp: =} ||
       2 || ------------------------ {Asetpoint - 20} -------- || 
         || | ||
         || || 
         || {ADD max_temp: =} || 
         || ------------------------ {Asetpoint + 20} -------- || 
         || || 
         || || 
         || || 
         || || 
         || [Atemperature>] Yheater || 
       3 || [max_temp] + ------------------------ (R) ------- || 
         || Xenable | || 
         || -------] / [------ + ||
         || || 
         || [Atemperature <] Xenable Yheater || 
         || [min_temp] --------] [-------------- (S) ------- || 
         || || 
         || || 
         || || 
         || || 
         || {SUB check_temp: =} || 
       4 || ----------------------- {Asetpoint - 30} ------- || 
         || ||
         || || 
         || ||
         || || 
         || [Atemperature>] Yis_hot || 
       5 || [check_temp] ------------------------- () ------- || 
         || || 
         || || 
         || || 
         || ------ [END] --------------------------------------- - || 
         || || 
         || ||




Это простой термостат. . Есть два аналоговых входа , один из которых (Asetpoint прим. переводчика) предназначен для задания значения, он может, например, быть подсоединен к потенциометру, чтобы пользователь выбирал желаемую температуру. Другой вход (Atemperature прим. переводчика) обеспечивает измерение температуры, это может быть полупроводниковый датчик температуры или платиновая термопара с подходящей схемой сопряжения. Цифровой выход - Yheater. Он управляет нагревательным элементом, с помощью соответствующего исполнительного элемента(тиристора, реле, или твердотельного реле и тд.).



Мы контролируем цикл с простым гистерезисным (релейным) контроллером. Выбрано плюс/минус 20 единиц АЦП гистерезиса. Это означает, что, когда температура опускается ниже (уставки - 20), мы включаем обогреватель, и когда она поднимается выше (уставки + 20), мы выключаем нагреватель.



Я добавил несколько "фишек". Во-первых, вход разрешения: нагреватель принудительно выключен, когда Xenable закрыт. Я также добавил индикатор, Yis_hot (Нагрев), чтобы показывать, когда температура находится в пределах регулирования. Это сопоставимо с порогом немного холоднее, чем (уставка - 20), так, чтобы индикатор не моргал во время нормального цикла термостата.



Это тривиальный пример, но по нему должно быть ясно, что язык (Ladder Logic) довольно выразителен и понятен. Лестничная логика не язык программирования общего назначения, но это Тьюринг-образный, применяемый в промышленности, и для ограниченного класса (в основном, контрольно-ориентированных) проблем - очень удобный в применении инструмент (электрики как правило читают релейные схемы пром. установок, но упаси бог ему подсунуть реализацию алгоритма работы схемы на языке "C - они ничего не поймут в этом алгоритме.




Компилятор логической схемы для PIC16 и AVR




Современные 3-х долларовые микроконтроллеры, вероятно, обладают вычислительной мощностью сопоставимой с PLC примерно 1975-го года. Таким образом, они обеспечивают более чем достаточно MIPS для запуска достаточно сложной лестничной логики с временем цикла несколько миллисекунд. Я думаю, ПЛК, как правило, имеют какую-то, виртуальную машину или интерпретатор работающий в режиме реального времени,но если мы делаем логическую схему на микропроцессоре без достаточного обьема памяти, то компилятор является лучшей идеей.



Поэтому я написал компилятор. Вы начинаете с пустого цикла. Можно добавлять контакты (входы) и реле (выходы) и более сложные структуры для создания вашей программы. Таймеры (TON, TOF, RTO) поддерживаются. Макс / мин длительность зависит от времени цикла ПЛК, которая настраивается, таймеры могут считать от миллисекунд до десятков минут. Вы можете использовать счетчики и арифметические операции (плюс, минус, умножение, дел).



Схемные элементы могут быть добавлены последовательно или параллельно с существующими элементами. Список Ввода/Вывода строится из нарисованной лестничной логики. Вы можете использовать внутренние реле (Rfoo), для которых автоматически выделяется память, или входы (Xfoo) и выходы (Yfoo), к которым необходимо привязывать пины(выводы) микроконтроллера. Выбор пинов зависит от микроконтроллера. Я стараюсь поддерживать наиболее популярные PIC'и и AVR'ы (см. ниже).



Вы можете редактировать программы в графическом виде:






Затем вы можете протестировать программу, моделируя ее в режиме реального времени. Программа появляется на экране с подсвеченными ветвями (при значении true), что облегчает отладку. Состояние всех переменных отображается в нижней части экрана в списке Ввода/Вывода.







После того как программа отлажена в режиме симуляции, можно связать пины микроконтроллера с входами и выходами релейной схемы и генерировать PIC или AVR код.
Программа поддерживает АЦП, ШИМ-блок, и UART на тех, микроконтроллерах которые их имеют. Это означает, что вы можете написать релейную логику, которая считывает аналоговые входы, и отправляет и получает через последовательные порты символы (например, для PC, если Вы добавите соответствующий преобразователь, подобный MAX232, или символьный ЖК(LCD)). Можно отправить произвольные строки через последовательный порт, а также значения целочисленных переменных, в виде ASCII-текста. Наконец, программа теперь поддерживает "сохраненные переменные" (preserved variables) на микроконтроллерах с EEPROM, вы можете указать, что некоторая переменная должна быть автоматически сохранена в энергонезависимой памяти всякий раз, когда она меняется, так что это значение сохраняется даже после сброса питания (выключения).



Ограничения, и Правовая ответственность

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



До сих пор я получил очень мало сообщений об ошибках по сравнению с количеством людей, имеющих вопросы или пожелания. Существует еще большая возможность ошибок, особенно при использовании микроконтроллеров, которых я физически не имею (и, следовательно, не могу проверить). Поэтому, НЕ ИСПОЛЬЗУЙТЕ LDmicro В КРИТИЧЕСКИ ВАЖНЫХ ПРИЛОЖЕНИЯХ, И В ЧЕМ-ТО ЧТО МОЖЕТ РАЗРУШИТЬ ДОРОГОЕ УСТРОЙСТВО ПРИ СВОЕМ ОТКАЗЕ.



Как отмечалось выше, код, который генерирует LDmicro далек от оптимального. Кроме того, не все из ОЗУ данных в PIC16 устройств доступно для программы лестничной логики. Это потому, что я не реализовал полную поддержку страничной памяти PIC. Программа, однако, поддерживает страничную память памяти программ, которая необходима для доступа памяти программ в PIC16 за границей 2к.



Загрузка

Программное обеспечение разработано под Windows XP. Оно проверено во всех версиях Windows от 2000 до Windows 7, и по неподтвержденным сообщениям, она работает под WINE (Linux).Загрузите .exe-файл;. никаких других файлов не требуется, поэтому нет программы установки. Сохраните программу где-либо на вашем компьютере и просто запускайте ее от туда. Мануал включен в .exe-файл, но вы можете скачать его отдельно, если хотите.
Компилятор генерирует Intel IHEX файл. Большинство программаторов которые я видел поддерживают этот режим. Разумеется, вам нужен какой-то программатор, чтобы "залить" hex файл в чип. Для AVR, я рекомендую AVRISP MKII, который доступен у различных дистрибьюторов. Для PIC, я рекомендую PICkit 2 компании Microchip, который можно купить во многих веб-магазинах. Оба программатора официально поддерживаются, подключаются через USB, и стоят менее 40 долларов.
В целом возможно использовать код, сгенерированный LDmicro с загрузчиком. Большинство микроконтроллеров AVR имеют специальные фьюзы (BOOTRST, BOOTSZx), которые должны быть настроены под конкретный загрузчик, который вы используете.PIC16 не имеют какой-либо конкретной аппаратной поддержки загрузчика, но LDmicro генерирует код с корректным форматом, чтобы загрузчик мог переписать вектора сброса.


Я был бы признателен за любые сообщения об ошибках. Поддерживаются следующие чипы:


  • PIC16F628 (А)
  • PIC16F88
  • PIC16F819
  • PIC16F877 (А)
  • PIC16F876 (А)
  • PIC16F887
  • PIC16F886
  • ATmega128
  • ATmega64
  • ATmega162
  • ATmega32
  • ATmega16
  • ATmega8
Кроме того, можно генерировать C код из лестничных диаграмм. Это менее удобно, но вы можете использовать его на любом процессоре, для которого у вас есть компилятор C.

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

Программа доступна на нескольких языках:


Предварительно созданные исполняемые файлы доступны на нескольких языках:

Исходный код и другие файлы также доступны для загрузки. Эта программа может быть распространена и изменена в соответствии с условиями версии GPL 3.


Также доступны более старые версии:

(щелкните правой кнопкой мыши, чтобы сохранить любой из этих файлов)



Сообщите о любых дефектах.


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

У меня есть учебник, в котором я описываю, как ввести простую релейную диаграмму, симулировать ее, а затем генерировать IHEX файл и запрограммировать его в PIC. Это, наверное, самый простой способ начать работать с данной программой.

Если у вас есть вопросы о LDmicro, задавайте их на форуме.


Перевод оригинальной статьи автора

Jonathan Westhues


Написать:
00:27
4756
No comments yet. Be the first to add a comment!