Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 32

Тема: Прошу несколько советов. Переход с Arduino на ПР200

  1. #1

    По умолчанию Прошу несколько советов. Переход с Arduino на ПР200

    Приветствую!

    Имеем в цехе штамп для пробития отверстий у трубе.
    Управляется Arduino

    Видео работы:


    Прошу совета, после Ардуино, очень все непривычно.
    Как было на Ардуино - у кода, два блока - первый выполняется один раз, второй в цикле. Причем обращение к водам выводам в любой момент выполнения кода.

    Тут же, судя по описанию сначала опрос всех входов, потом выполнение программы, потом я так понял подаем на выводы сигналы.

    ВОПРОС 1 - как обратится ко входу, в середине выполнения программы? Писать макрос? Что то другого на ум не приходит.

    У нас на Ардуино простая программа. Идет постоянный опрос педали штампа (а именно один контакт нормально замкнут и один нормально разомкнутый). Когда нажата запускается цикл, а именно - посылаем питание на реле, которое управляет первым пневмо распределителем. Это приводит в движение правый пневмоцилидр и происходит расклинивание внутри трубы. Чтобы понять, что эта процедура завершилась - ожидаем (опрашиваем) положение цилиндра по геркону (у каждого цилиндра их два - те два положения крайних). Как только первый цилиндр в рабочем положении, сразу замыкаем второе реле, и посылаем сигнал управление на второй пневмораспределитель, что заставляет двигаться левый цилиндр. И пока он не станет в рабочее положение (дословно не замкнется соответствующий геркон) программа дальше не будет выполняться. Конечно это все доли секунды. Когда цилиндры (оба) стоят в рабочем положении, делаем финальную проверку (просто всех четырех герконов), и после этого - замыкаем третье реле, а именно подаем сигнал на пресс - происходит удар (вырубка). Потом ждем 400 мс, и после этого снимаем питание с двух реле пневмораспределителей что заставляет вернуться цилиндры назад, соотвественно клины уходят и освобождают трубу. Ну и в конце простая проверка, вдруг педаль все еще нажата (на дурака), и если это так - ждем пока ее не отпустят.

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

    #include <QuadDisplay.h>
    #define PIN 0

    int Small_Cylinder = 7; // определяем пин, для замыкания реле управления маленьки цилиндром
    int Big_Cylinder = 6; // определяем пин, для замыкания реле управления маленьки цилиндром
    int Start = 5; // определяем пин, для замыкания реле пуска еденичного хода штампа

    int Sensor_Small_Cylinder_ON = 13; // определяем пин проверяющий, что маленький цилиндр в рабочем положении
    int Sensor_Small_Cylinder_OFF = 12; // определяем пин проверяющий, что маленький цилиндр в положении поумолчанию, не рабочее

    int Sensor_Big_Cylinde_ON = 11; // определяем пин проверяющий, что большой цилиндр в рабочем положении
    int Sensor_Big_Cylinde_OFF = 10; // определяем пин проверяющий, что большой цилиндр в положении поумолчанию, не рабочее

    int Sensor_Pedal_N_Open = 9; // определяем пин проверяющий, нажата ли педаль (нормально разомкнутый)
    int Sensor_Pedal_N_Closed = 2; // определяем пин проверяющий, нажата ли педаль (нормально замкнутый)


    void setup()
    {
    pinMode(Small_Cylinder, OUTPUT); // установить пин как выход, будет замыкать реле
    pinMode(Big_Cylinder, OUTPUT); // установить пин как выход, будет замыкать реле
    pinMode(Start, OUTPUT); // установить пин как выход, будет замыкать реле

    pinMode (Sensor_Small_Cylinder_ON, INPUT); //установить пин как вход, будет опрашивать датчик, который крепится со стороны штока
    pinMode (Sensor_Small_Cylinder_OFF, INPUT); //установить пин как вход, будет опрашивать датчик, который крепится с краю цилиндра
    pinMode (Sensor_Big_Cylinde_ON , INPUT); //установить пин как вход, будет опрашивать датчик, который крепится со стороны штока
    pinMode (Sensor_Big_Cylinde_OFF, INPUT); //установить пин как вход, будет опрашивать датчик, который крепится с краю цилиндра
    pinMode(Sensor_Pedal_N_Open, INPUT); //установить пин как вход, будет опрашивать датчик педали нормально разомкнутый
    pinMode(Sensor_Pedal_N_Closed, INPUT); //установить пин как вход, будет опрашивать датчик педали нормально замкнутый

    digitalWrite(Small_Cylinder, HIGH); //хоть это и бред, но подавая напряжение мы размыкаем реле в режиме нормально разомкнутой работы
    digitalWrite(Big_Cylinder, HIGH); //хоть это и бред, но подавая напряжение мы размыкаем реле в режиме нормально разомкнутой работы
    digitalWrite(Start, HIGH); //хоть это и бред, но подавая напряжение мы размыкаем реле в режиме нормально разомкнутой работы

    }

    void loop()
    {
    displayInt(PIN, 0, true);
    if ( digitalRead(Sensor_Pedal_N_Open)== HIGH && digitalRead(Sensor_Pedal_N_Closed)== LOW) { //опрашиваем датчик педали, и если он нажат то
    digitalWrite(Big_Cylinder, LOW); //убрали напряжение, и реле замкнулось управления большим цилиндром, он должен срабатывать сначала
    while (!((!digitalRead (Sensor_Big_Cylinde_ON) == LOW) && (!digitalRead (Sensor_Big_Cylinde_OFF) == HIGH))){ //по сути ждем пока цилиндр не перейдет в рабочее положение и условие перестанет выполняться
    displayInt(PIN, 1, true);
    }

    digitalWrite(Small_Cylinder, LOW); //убрали напряжение, и реле замкнулось управления малым цилиндром, он должен вторым срабатывать
    while (!((!digitalRead (Sensor_Small_Cylinder_ON) == LOW) && (!digitalRead (Sensor_Small_Cylinder_OFF) == HIGH))){ //по сути ждем пока цилиндр не перейдет в рабочее положение и условие перестанет выполняться
    displayInt(PIN, 2, true);
    }

    if ( digitalRead(Sensor_Big_Cylinde_ON) == HIGH && digitalRead (Sensor_Small_Cylinder_ON) == HIGH && digitalRead(Sensor_Big_Cylinde_OFF) == LOW && digitalRead (Sensor_Small_Cylinder_OFF) == LOW) {
    // строчка выше еще раз проверяет положения всех четырех датчиков двух цилиндров, цилиндры должны быть в рабочем состоянии)
    displayInt(PIN, 3, true);
    digitalWrite(Start, LOW); //убрали напряжение, и реле замкнулось управления ходом пресса, он должен совершить один удар
    delay(200); //возможно нужно увеличить если не юудет успевать срабатывать
    digitalWrite(Start, HIGH); //подали напряжение на реле управления ходом пресса и реле разомкнулось
    delay(200); // ждем пока пресс не выполнит этот удар и ползун не вернется на место

    digitalWrite(Small_Cylinder, HIGH); //подали напряжение на реле управления малым цилиндром, реле разомкнулось, сначала убираем его клин
    digitalWrite(Big_Cylinder, HIGH); //подали напряжение на реле управления большим цилиндром, реле разомкнулось, убираем его клин вторым после малого

    while (!((!digitalRead (Sensor_Small_Cylinder_ON) == HIGH) && (!digitalRead (Sensor_Small_Cylinder_OFF) == LOW))){ //по сути ждем пока цилиндр вернется в НЕрабочее положение и условие перестанет выполняться
    displayInt(PIN, 4, true);
    }

    while (!((!digitalRead (Sensor_Big_Cylinde_ON) == HIGH) && (!digitalRead (Sensor_Big_Cylinde_OFF) == LOW))){ //по сути ждем пока цилиндр вернется в НЕрабочее положение и условие перестанет выполняться
    displayInt(PIN, 5, true);
    }

    while(digitalRead(Sensor_Pedal_N_Open)== HIGH && digitalRead(Sensor_Pedal_N_Closed)== LOW){ //проверка на дурака, вдруг кто нажал на педаль и до сих пор держит ее нажатой, ждем пока не отпустит в исходное положение
    displayInt(PIN, 6, true);
    }

    }



    }
    }

    Вопрос 2 - Сколько может стоить написание программы примерно для такой задачи?

    Вопрос 3 - Опрос педали верно сделал (нажатие - один контакт замыкается, другой размыкается) ?

    WhatsApp Image 2017-12-01 at 20.39.39.jpeg
    343.jpeg
    Последний раз редактировалось SuperRobot; 04.12.2017 в 21:57.

  2. #2

    По умолчанию

    Понимаю, что в коде Ардуино разбираться врятли кто будет, но на всякий случай выложил.
    Там было просто - digitalRead (переменная или номер пина), и мы получаем данные с входа (в настройках указали какой порт вход, а какой выход в начале). digitalWrite (переменная или номер пина , HIGH) - подали напряжение на порт выхода (тоже указали в настройках).

    В любой момент, в любом месте программы.

    OWEN Logic, судя по всему опрашивает все порты ввода сразу - как бы не беда, пусть опрашивает что мне пока не надо. Но потом идет выполнение когда, и если так будет цикл одижания события, как до завершения программы снова опросить порты ввхода.

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

    Мои варианты бред? В общем прошу совета.

  3. #3
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,121

    По умолчанию

    1.Дело не в Ардуино ,а в том что вы писали программу в текстовом языке ,хотя для Ардуино есть язык FBD (FLProg) ,как и в ПР200 .
    2.Ни сколько не стоит ,ребята помогут .
    3.Не могу сказать не видя схемы .
    электронщик до мозга костей и не только

  4. #4

    По умолчанию

    Спасибо, обновил =) Картинка в первом сообщении.
    Если можно прокомментируйте мое второе сообщение.

  5. #5
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,121

    По умолчанию

    Цитата Сообщение от SuperRobot Посмотреть сообщение
    Понимаю, что в коде Ардуино разбираться врятли кто будет, но на всякий случай выложил.
    Там было просто - digitalRead (переменная или номер пина), и мы получаем данные с входа (в настройках указали какой порт вход, а какой выход в начале). digitalWrite (переменная или номер пина , HIGH) - подали напряжение на порт выхода (тоже указали в настройках).

    В любой момент, в любом месте программы.

    OWEN Logic, судя по всему опрашивает все порты ввода сразу - как бы не беда, пусть опрашивает что мне пока не надо. Но потом идет выполнение когда, и если так будет цикл одижания события, как до завершения программы снова опросить порты ввхода.

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

    Мои варианты бред? В общем прошу совета.
    Вы приятно удивитесь когда увидите схему и сравните ее с вашим кодом
    электронщик до мозга костей и не только

  6. #6

    По умолчанию

    Цитата Сообщение от rovki Посмотреть сообщение
    Вы приятно удивитесь когда увидите схему и сравните ее с вашим кодом
    Потому и хотел заказать у опытного человека, чтобы понять как грамотно это сделать. Мне кажется так мое обучение (ну правильнее осовоение под простые задачи) быстрее прошло бы (мне так кажется).

    А пока я в полной растерянности.

  7. #7
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,121

    По умолчанию

    Вот на скорую руку.используются только нормально разомкнутые контакты у педали
    Изображения Изображения
    Последний раз редактировалось rovki; 04.12.2017 в 22:05.
    электронщик до мозга костей и не только

  8. #8
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,121

    По умолчанию

    А потом можно добавить подсчет деталей ,архивирование итд
    электронщик до мозга костей и не только

  9. #9

    По умолчанию

    Цитата Сообщение от rovki Посмотреть сообщение
    Вот на скорую руку
    Да уж. Это сильные впечателения. Думал будет сильно сложнее, правда мне конечно сложно так разобраться - нужно внести в программу и смотреть пошагово.
    RTGIG1 - до этого я дошел когда ковырять начал и разбираться.

    А вот опрос педали. там же два контактка, я верно сделал?
    343.jpeg так педаль в ожидании

    WhatsApp Image 2017-12-01 at 20.39.39.jpeg А так педаль нажата

  10. #10
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,121

    По умолчанию

    А зачем два контакта ?и одного хватит
    Вложения Вложения
    электронщик до мозга костей и не только

Страница 1 из 4 123 ... ПоследняяПоследняя

Похожие темы

  1. Опрос ДМ5002 по RS485/232 при помощи Arduino
    от -RA- в разделе Трёп (Курилка)
    Ответов: 2
    Последнее сообщение: 28.07.2017, 10:39
  2. ПР200 переход по изменению значения переменной
    от Orbes в разделе Среда программирования OWEN Logic
    Ответов: 2
    Последнее сообщение: 10.02.2017, 13:37
  3. Помогите советов!
    от Sijey в разделе Подбор Оборудования
    Ответов: 22
    Последнее сообщение: 19.09.2016, 09:07
  4. ПР200, "управляемые" запросы Modbus на несколько устройств.
    от chm в разделе Программируемые реле
    Ответов: 6
    Последнее сообщение: 24.12.2015, 09:51

Ваши права

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