Показано с 1 по 4 из 4

Тема: DSL для конфигурации компонентов автоматики.

  1. #1

    По умолчанию DSL для конфигурации компонентов автоматики.

    Intro
    Всё началось с топика на одном программерском форуме, мимо которого я, как киповец и фанат языков программирования, не смог пройти К сожалению мы с топик стартером разошлиcь во мнениях, но сама идея меня заинтересовала, я тогда подумал: такой инструмент был бы весьма полезен в моей работе!


    DSL
    Domain-specific language(предметно-ориентированный язык) это язык программирования(ЯП), как например Pascal(диалект которого используется в CoDeSys). Но в отличии от Pascal'я и других языков общего назначения, которые могут быть использованы для программирования чего угодно, DSL предназначен для некоторой, области применения. Эта область может быть как очень узкой, например ЯП для программирования кондиционеров, так и весьма широкой, например ЯП для любых компрессорных машин.

    Заточка ЯП под определённую область применения позволяет сделать его простым и "естественным"(в рамках этой области), а также защитить программиста от многих ошибок, благодаря тому что среда разработки(IDE, например такая как OWEN Logic) "знает" о том какие действия, в рамках предметной области являются недопустимыми.


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


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

    Реально программа представляет из себя простой текстовый файл, состоящий из пяти секций:

    1.Заглавие:
    Указывает базовый компонент, который адаптируется под конкретную задачу, это может быть например "регулятор температуры", "контроллер системы отопления" и т.п. Базовый компонент определяет какие возможности(входы-выходы, переменные, функции, параметры) будут доступны в рамках этой конкретной программы, а также указывает IDE алгоритм проверки программы.

    2.Параметры:
    Содержит набор параметров, конфигурирования базового компонента, заданных программистом. Например значения ПИД-регулятора, тип датчика(для л. регуляторов) и т.п.

    3.Входы-выходы:
    Здесь программист может назначить входам-выходам базового компонента более удобные имена, например "температура_бойлера" вместо просто "температура",
    а также добавить дополнительные входы-выходы(если это возможно).

    4.Определения:
    В этой секции специфические функции и переменные определённые программистом.

    5.Текст программы:
    Состоящий из выражений вида <действие> if <условие при котором выполняется действие>. При это последовательность записи выражений не имеет значения. Т.е. действие выполнятся когда его условие выполняется. Если условие выполняется одновременно для нескольких выражений - выполняется одновременно несколько действий, если не одно условие не выполняется и выполняются противоречивые(например, включить и выключить один и тот же выход) - ничего не происходит.

  2. #2

    По умолчанию

    Пример 1: ТРМ101 - управление бойлером(на основе универсального базового компонента)
    Задача: Реализовать систему авт. управления(САУ) накопительным электро-бойлером, с парой ТЕН(слабой и мощной).

    В качестве основы САУ можно было-бы использовать ТРМ101 имеющий один аналоговый(датчик температуры), один дискретный вход(датчик протока) и два дискретных выхода(ТЭНы).

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

    Параметры:
    sensor_type - тип датчика
    filter_passband - полоса пропускания фильтра
    additional_screen_mode - режим дополнительного индикатора
    ... и т.д.
    timeout - параметр таймера

    Входы-выходы:
    temperature - значение датчика температуры
    set_temperature - заданная пользователем температура
    switch closed/open - дискретный вход
    on/off Q1 - первый дискретный выход
    on/off Q2 - втрой дискретный выход

    Дополнительные функции:
    start/stop timer - управление таймером.
    time_is_up - событие: "время вышло"

    Программа выглядела бы примерно так:
    Код:
         simple_temperature_controller_with_timer                  //Заглавие 
         Parametrs:
           sensor_type = THK
           timeout = 60 min                                        //Задержка до перехода в режим ожыдания
         In-Out:
           temperature: boilerT
           set_temperature: setT
           switch: flow_sensor 
           Q1: powerfulHE
           Q2: faintHE
         Definitions:
           mode = stand-by/work                                    //Переменная
           off_all() = off faintHE and off powerfulHE              //Функция
         Program:
           //Управление режимом ожедание/работа
           mode := work and stop timer if flow_sensor has closed   //Прейти в режим "работа" и остановить таймер если датчик протока замкнулся.
           start timer if flow_sensor has open                     //Запустить таймер если датчик протока разомкнулся.
           mode := stand-by if time_is_up                          //Перейти в режим "ожидание" если время вышло.
           //Управление ТЕНами
           on  faintHE    if mode = work and boilerT < (setT - 1)  //Включить слабую ТЭНу если режим - работа и температура в бойлере меньше на градус чем заданная.
           off faintHE    if mode = work and boilerT > (setT + 2)  //Отключить слабую ТЭНу если режим - работа и температура в бойлере превысила на два градуса заданную.
           on  powerfulHE if mode = work and boilerT < (setT - 3)  //Включить сильную ТЭНу если режим - работа и температура в бойлере меньше на три градуса чем заданная.
           off powerfulHE if mode = work and boilerT > setT        //Отключить сильную ТЭНу если режим - работа и температура в бойлере больше заданной.
           off_all if mode has stand-by                            //Отключить обе ТЭНы если был выполнен переход в спящий режим.

    Пример 2: программируемое реле(ПР) - управление деаэратором(на основе специализированого базового компонента)
    (!)На ПР нету аналоговых входов, но здесь допустим что есть(лично я надеюсь когда ни будь появятся ).

    Задача: Реализовать САУ управления деаэратором с аварийной сигнализацией(деаэратор это такая бочка с водой хитрой конструкции, где нужно поддерживать температуру 102-107*С и уровень 80-90%). Д. подогревается паром и, обычно давление пара используют для регулирования температуры, т.к. эти параметры взаимозависимы, но стабильное давление поддерживать проще(ввиду малой инерции параметра).

    В качестве основы САУ можно было-бы использовать ПР имеющий три аналоговых входа(температура, давление пара и уровень), один дискретный(кнопка сброса аварии) и пять дискретных выходов(открыть-закрыть регулятор подачи воды, открыть-закрыть для пара и сигнал "авария").

    В качестве базового компонента - "контроллер деаэратора". Этот компонент уже содержит измеритель температуры и пару ПИД-регуляторов заточенных для управления деаэратором, остаётся только задать параметры и реализовать логику аварийной сигнализации:
    Код:
         deaerator_cottroller                                                             //Заглавие 
         Parametrs:
           level_sensor_type = 4_20                                                        
           pressure_sensor_type = 4_20                                                     
           tank_volume = 3                                                                
           level_valve_stroke_time = 60                                                    
           pressure_valve_stroke_time = 90                                                
           level_increase_speed = 0.03                                                    
           pressure_increase_speed = 0.2                                                  
         In-Out:
           reset closed/open                                                              //Добавление одного дискретного входа
           on/of alarm                                                                    //и одного д. вызода.
         Program:
           on alarm if temperature < 102 or temperature > 107 or level < 80 or level > 90 //Включить тревожный выход если какой-то параметр вне допустимого диапазона.
           off alarm if reset has closed                                                  //Выключить если был замкнут вход "сброс".
    Так как у ПР(в отличии от локальных регуляторов) входы-выходы не специализированы, дополнительно(в OWEN Logic) нужно будет связать их с входами-выходами готового компонента(программы).


    PS
    Идея очень сырая, но надеюсь, общий смысл будет понятен, если нет спрашивайте.
    Как вы(коллеги и разработчики ОВЕН) считаете, нужна ли подобная фича? Если нет/да почему?
    Спасибо.

  3. #3
    Пользователь
    Регистрация
    05.11.2011
    Адрес
    Томск
    Сообщений
    192

    По умолчанию

    Цитата Сообщение от CAB Посмотреть сообщение
    На ПР нету аналоговых входов, но здесь допустим что есть(лично я надеюсь когда ни будь появятся
    http://www.owen.ru/catalog/67597801

  4. #4

Похожие темы

  1. Библиотеки компонентов ОВЕН для sPLAN 7.0 и других программ
    от rovki в разделе Программируемые реле
    Ответов: 68
    Последнее сообщение: 16.05.2021, 15:08
  2. Автоматизация скважины на осушение, подбор компонентов
    от JekaS в разделе Подбор Оборудования
    Ответов: 10
    Последнее сообщение: 07.04.2017, 19:40
  3. Ящики автоматики из нержавейки
    от lunyov_i в разделе Трёп (Курилка)
    Ответов: 8
    Последнее сообщение: 06.02.2016, 21:36
  4. Ответов: 0
    Последнее сообщение: 14.01.2010, 12:01

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •