АСУ элеватором

Автоматизация технологических процессов, системы управления, АСУ ТП, АСКУЭ, программирование ПЛК, человеко-машинный интерфейс, сетевое оборудование, протоколы
service
Специалист
Сообщения: 254
Зарегистрирован: 16 ноя 2012, 10:23

Re: АСУ элеватором

Сообщение service »

здравствуйте!давно не заходил. вот последний вариант схемы
Напомню, что система управления состоит из местного и дистанционного режимов. Выбор режима – переключателями, установленными на ШУ (для каждой группы механизмов отдельно).
Местный режим – управление каждым механизмом в отдельности с помощью кнопки, расположенной возле него. Является настроечным не должен применятся для постоянного управления. Используется только для отладки, ремонта оборудования и в случае отказа ПЛК. Может использоваться в случае проблем в работе какого-либо звена маршрута.
Разделил на группы для того чтобы при работе элеватора от ПЛК была возможность настройки или ремонта незадействованных в маршруте звеньев.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Alex_khv
Дилетант
Сообщения: 6
Зарегистрирован: 06 ноя 2014, 11:06

Re: АСУ элеватором

Сообщение Alex_khv »

Привет всем. Подниму тему. Занимаюсь написанием программной части зернохранилища. Проект пишу в SIMATIC PCS7 (лицензия была уже у заказчика, т.к. оборудование поставлял другой подрядчик и они же собирались писать программу но благополучно слились) Написал блоки управления и визуализацию для различных типов устройств (конвейеры, нории, тележки, распределители). Теперь предстоит задача автоматизировать управления маршрутами. Может у кого есть наработки в этом направлении? Есть вариант с фиксированными маршрутами, но различных вариантов построения маршрутов более ста штук. В идеале оператор должен задавать приемник, источник и выбирать из списка доступных на данный момент маршрутов, либо система должна сама выдавать оптимальный и готовый к работе маршрут, а далее уже запускать его в необхоимой последовательности. В общем, пока у меня не имеется никакого представления, как написать такую логику на ПЛК. Может кто-нибудь поможет?

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: АСУ элеватором

Сообщение Автоматизатор »

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

Аватара пользователя
CHANt
Профессионал
Сообщения: 565
Зарегистрирован: 13 окт 2012, 15:24

Re: АСУ элеватором

Сообщение CHANt »

С фиксированными у Вас не должно быть проблем. Это же просто сортировка массива данных! На мой взгляд введите состояния оборудования (исправен, не исправен, в работе, нет и т.д.) после чего признак "свободного маршрута" или части маршрута. А вот насчет оптимального,..Не кажется, что это классическая задача коммивояжёра?

Alex_khv
Дилетант
Сообщения: 6
Зарегистрирован: 06 ноя 2014, 11:06

Re: АСУ элеватором

Сообщение Alex_khv »

Автоматизатор писал(а):Перечень маршрутов может храниться в панели оператора в виде "рецептов". Выбор оптимального маршрута автоматически из рецептов? Не знаю.
Панели нет. Будет операторская станция WinCC. Для использования системы рецептов нужна дополнителная лицензия, которой нет. Денег на лицензию тоже нет.

Alex_khv
Дилетант
Сообщения: 6
Зарегистрирован: 06 ноя 2014, 11:06

Re: АСУ элеватором

Сообщение Alex_khv »

CHANt писал(а):С фиксированными у Вас не должно быть проблем. Это же просто сортировка массива данных! На мой взгляд введите состояния оборудования (исправен, не исправен, в работе, нет и т.д.) после чего признак "свободного маршрута" или части маршрута. А вот насчет оптимального,..Не кажется, что это классическая задача коммивояжёра?
А вот тут можно поподробнее? То есть для начала составляем матрицу смежности М[i,j], где каждая строка - это номер механизма, а в столбцах ставим 0 либо 1, в зависимости от того, стыкуется ли данный i-ый механизм c j-ым механизмом? А дальше? Как сортировать массив? Извините за возможно глупые вопросы, ранее с такими задачами не сталкивался.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: АСУ элеватором

Сообщение Михайло »

Alex_khv писал(а):Как сортировать массив? Извините за возможно глупые вопросы, ранее с такими задачами не сталкивался.
Я себе понимаю так:
Сортировка массива производится по одной из переменных массива. Сортируется по возрастанию или убыванию. В нашем случае как минимум нужно отсортировать по переменной "маршрут свободен", чтобы отсеять нерабочие маршруты.
Чтобы получить оптимальный маршрут, надо отсортировать по некоторой переменной (которой еще нет), которую называют критерием оптимальности. Ну, например, "длина маршрута" или "длительность маршрута" или более сложные критерии.

Аватара пользователя
CHANt
Профессионал
Сообщения: 565
Зарегистрирован: 13 окт 2012, 15:24

Re: АСУ элеватором

Сообщение CHANt »

1) Стоит отметить следующие особенности среды разработки Step7, если речь идет о симатиках. Для языка STL оператор LOOP работает только с положительным числом и только в сторону уменьшения счетчика цикла. Для языка SCL доступны FOR, WHILE, REPEAT в полном объеме.
2) Критерием оптимальности может быть и длина участка между вершинами графа (узлами маршрута) по всем вариантам маршрута, и какие-то параметры пропускной способности, технического состояния приводов, наработки по времени и т.п. Т.е. можно не раз перебирать в цикле, а последовательно в нескольких циклах. Т.е. сначала "свободен", затем "длина", затем "пропускная способность" и т.д. Да и стоит выводить наверное не один результат расчета для оператора, а несколько вариантов. Все равно на объекте конечное число маршрутов, и измеряется даже не сотнями)))
Для решения задачи коммивояжера есть масса алгоритмов (да и с кодом реализации, к примеру на С++), почитайте что будет оптимальней. И не обязательно эту задачу вешать на контроллер, можно и в самой WinCC выполнять в скрипте, так как ресурсов компьютера гораздо больше чем контроллера.

Alex_khv
Дилетант
Сообщения: 6
Зарегистрирован: 06 ноя 2014, 11:06

Re: АСУ элеватором

Сообщение Alex_khv »

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

zholeg
Дилетант
Сообщения: 19
Зарегистрирован: 18 янв 2013, 13:33

Re: АСУ элеватором

Сообщение zholeg »

Я сейчас тоже подобной системой занимаюсь, но уже на этапе завершения. В общем как описали выше так у меня и сделано-матрица смежности строится каждый раз при построении маршрута, т.к. надо учитывать уже работающие механизмы. Я брал алгоритм Дейкстеры, даже если честно тупо нашел код и заточил под свои нужды.
У меня система управления-это отдельная программа написана на С++ и завязана с БД. Может на Винсс это тоже можно реализовать, но у меня Омрон и его скада весьма ограничена.

Alex_khv
Дилетант
Сообщения: 6
Зарегистрирован: 06 ноя 2014, 11:06

Re: АСУ элеватором

Сообщение Alex_khv »

zholeg писал(а):Я брал алгоритм Дейкстеры, даже если честно тупо нашел код и заточил под свои нужды.
Можете поделиться ссылками, где нашли код?

zholeg
Дилетант
Сообщения: 19
Зарегистрирован: 18 янв 2013, 13:33

Re: АСУ элеватором

Сообщение zholeg »

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

Код: Выделить всё

//---------------------------------------------------------------------------
//Алгоритм Дейкстры.поиска кратчайшего пути
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#pragma hdrstop
#pragma argsused

#define VERTEXES 6  //Число вершин в графе

int v;
int main(int argc, char* argv[])
{
   clrscr();
   int infinity=1000;                     // Бесконечность
   int p= VERTEXES;             // Количество вершин в графе
   int a[VERTEXES][VERTEXES]={ 0,1,0,0,1,3,  // Матрица смежности графа
                               1,0,5,0,0,1,
                               0,5,0,5,20,1,
                                 0,0,5,0,3,2,
                               1,0,20,3,0,10,
                               3,1,1,2,10,0  };
 
   // Будем искать путь из вершины s в вершину g
   int s;                   // Номер исходной вершины
   int g;                   // Номер конечной вершины
   cout<<"Vvedite s: ";     // Номер может изменяться от 0 до p-1
   cin>>s;
   cout<<"Vvedite g: ";
   cin>>g;
   int x[VERTEXES]; //Массив, содержащий единицы и нули для каждой вершины,
                  // x[i]=0 - еще не найден кратчайший путь в i-ю вершину,
                  // x[i]=1 - кратчайший путь в i-ю вершину уже найден
   int t[VERTEXES];  //t[i] - длина кратчайшего пути от вершины s в i
   int h[VERTEXES];  //h[i] - вершина, предшествующая i-й вершине
                 // на кратчайшем пути
 
   // Инициализируем начальные значения массивов
   int u;           // Счетчик вершин
   for (u=0;u<p;u++)
   {
      t[u]=infinity; //Сначала все кратчайшие пути из s в i 
    //равны бесконечности
      x[u]=0;        // и нет кратчайшего пути ни для одной вершины
   }
   h[s]=0; // s - начало пути, поэтому этой вершине ничего не предшествует
   t[s]=0; // Кратчайший путь из s в s равен 0
   x[s]=1; // Для вершины s найден кратчайший путь
   v=s;    // Делаем s текущей вершиной
   
   while(1)
   {
      // Перебираем все вершины, смежные v, и ищем для них кратчайший путь
      for(u=0;u<p;u++)
      {
         if(a[v][u]==0)continue; // Вершины u и v несмежные
         if(x[u]==0 && t[u]>t[v]+a[v][u]) //Если для вершины u еще не 
    //найден кратчайший путь
                // и новый путь в u короче чем 
    //старый, то
         {
            t[u]=t[v]+a[v][u];  //запоминаем более короткую длину пути в
    //массив t и
            h[u]=v; //запоминаем, что v->u часть кратчайшего 
    //пути из s->u
         }
      }
 
      // Ищем из всех длин некратчайших путей самый короткий
      int w=infinity;  // Для поиска самого короткого пути
      v=-1;            // В конце поиска v - вершина, в которую будет 
                       // найден новый кратчайший путь. Она станет 
                       // текущей вершиной
      for(u=0;u<p;u++) // Перебираем все вершины.
      {
         if(x[u]==0 && t[u]<w) // Если для вершины не найден кратчайший 
                               // путь и если длина пути в вершину u меньше
                               // уже найденной, то
         {
            v=u; // текущей вершиной становится u-я вершина
            w=t[u];
         }
      }
      if(v==-1)
      {
         cout<<"Net puti iz vershini "<<s<<" v vershinu "<<g<<"."<<endl;
         break;
      }
      if(v==g) // Найден кратчайший путь,
      {        // выводим его
         cout<<"Kratchaishiy put iz vershini "<<s<<" v vershinu "<<g<<":";
       u=g;
       while(u!=s)
         {
            cout<<" "<<u;
            u=h[u];
         }
         cout<<" "<<s<<". Dlina puti - "<<t[g];
       break;
      }
      x[v]=1;
   }
   getch();
}
/*Программа запрашивает вершины s и q и выводит кратчайший путь. Например, после ввода s = 3, q = 6, программа выводит 
 
Нет пути из вершины 3 в вершину 6. 
 
После ввода s = 0, q = 2 программа выводит

Кратчайший путь из вершины 0 в вершину 2: 2 5 1 0. Длина пути = 3.*/

//---------------------------------------------------------------------------

Alex_khv
Дилетант
Сообщения: 6
Зарегистрирован: 06 ноя 2014, 11:06

Re: АСУ элеватором

Сообщение Alex_khv »

zholeg писал(а):Ссылку уже не найду, было почти год назад.
Файл выложить не получается, выложу код который я брал за исходный.
Благодарю за помощь :clap:

service
Специалист
Сообщения: 254
Зарегистрирован: 16 ноя 2012, 10:23

Re: АСУ элеватором

Сообщение service »

в маршруте используется как минимум 7-8 транспортных механизмов и 3-5 задвижек и клапанов. весь транспорт должен включаться и выключаться в последовательности. значит для каждого механизма дожны быть таймеры на включение и отключение. значение времени также будет разным, так как протяженность маршрутов разная. значит маркер каждого маршрута должен записывать свои значения таймеров и давать команду на включение транспортного и открытие/закрытие задвижек. я с 15-ю маршрутами морочился, а тут больше сотни. мое мнение - при таком количестве просто делать подсветку для каждого маршрута, а запускает оператор вручную. либо включать подсекциями (загрузка, очистка, сушка, выгрузка...)

ward
Специалист
Сообщения: 415
Зарегистрирован: 12 ноя 2012, 08:44

Re: АСУ элеватором

Сообщение ward »

Попробуй связку JL JU, сильно облегчает такие вещи

zholeg
Дилетант
Сообщения: 19
Зарегистрирован: 18 янв 2013, 13:33

Re: АСУ элеватором

Сообщение zholeg »

service писал(а): делать подсветку для каждого маршрута, а запускает оператор вручную
Смысл тогда с такой автоматизации если оператор будет сам все делать. После определенного времени работы операторы в голове строят любой маршрут быстрее чем система.
Не совсем понял про таймеры на включение и отключение.
например у Вас построена маршрутная линия, и с конца запускаете(открываете, переключаете) поэлементно, проверяя обратную связь: если запустился - перешли к следующему элементу т.д.
Таймера нужны для выключения (тоже последовательного), но для каждого элемента оно постоянно-это время для опустошения (например для задвижки=0, для конвейера=30с) Эту задачу у меня решает PLC, а система только смотрит если время опустошения=0, то можно останавливать.

service
Специалист
Сообщения: 254
Зарегистрирован: 16 ноя 2012, 10:23

Re: АСУ элеватором

Сообщение service »

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

zholeg
Дилетант
Сообщения: 19
Зарегистрирован: 18 янв 2013, 13:33

Re: АСУ элеватором

Сообщение zholeg »

service писал(а): не дать возможность отключить/включить то, что не нужно.
это задача нижнего уровня АСУ-защита механизмов. независимо от того какой маршрут работает, нельзя включить транспортер, если за ним транспортер не запущен (задвижка закрыта, покрыт датчик верхнего уровня и т.п.) иначе будет авария.
И контролировать это должен PLC для каждого механизма по отдельности.

service
Специалист
Сообщения: 254
Зарегистрирован: 16 ноя 2012, 10:23

Re: АСУ элеватором

Сообщение service »

ward писал(а):Попробуй связку JL JU, сильно облегчает такие вещи
расскажите подробней, что это такое

ward
Специалист
Сообщения: 415
Зарегистрирован: 12 ноя 2012, 08:44

Re: АСУ элеватором

Сообщение ward »

L MBxxx
JL m010
JU m000
JU m001
JU m002
....
MBxxx содержит номер перехода
См. описание инструкции в HELP Step7.

Ответить