IPB

Здравствуйте, гость ( Вход | Регистрация )

> Вопросы новичка
Waldislaw
сообщение 7.10.2020 - 15:12
Сообщение #1


Читатель
*

Группа: Пользователи
Сообщений: 11
Регистрация: 6.10.2020
Пользователь №: 11316



Только начал изучать ПЛК, у меня FX3G GXwork2 полностью в ST тк раньше сидел только в урезанном СИ микроконтроллеров. Вопросы которые я не смог понять/найти за эту неделю:
- как вызвать программный блок из основной программы, например на рисунке из POU_01 вызвать inte и вернуться;
- как перемещаться в одной программе по меткам (Goto);
- задать время повторения программы (цикл контроллера);
- управлять быстрыми выходами (выдать пачку импульсов за время меньшее чем цикл контроллера).
Задача минимум управлять 5-ю осями с серваками step/dir, линейная интерполяция по 2-м из них с точностью 0.1мм, без доп модулей это вполне возможно.

Сообщение отредактировал Waldislaw - 7.10.2020 - 16:11
Прикрепленные файлы
Прикрепленный файл  2020_10_07_16_05_51.png ( 10.1 килобайт ) Кол-во скачиваний: 22
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов
Smith2007
сообщение 14.09.2021 - 09:04
Сообщение #2


Читатель
*

Группа: Пользователи
Сообщений: 7
Регистрация: 14.09.2021
Пользователь №: 11444



Впервые встретился с ПЛК FX1N.
К ПЛК подключена панель оператора OP320
Делаю первые шаги в освоении этого чуда.

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

Код
IF M8002=1 THEN
    M0 := 0;
    M3 := 0;
END_IF;

IF M0 THEN
    D132 := 1;
END_IF;

IF M3 THEN
    D168 := 100;
END_IF;


Подскажите пожалуйста, в какую сторону копать?


зы. На панели оператора 2 кнопки связаны с маркерами M0, M3. Тип "Revers".
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 14.09.2021 - 21:45
Сообщение #3


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



Цитата(Smith2007 @ 14.09.2021 - 09:04) *
После перепрошивки, при включении ПЛК регистрам сразу назначаются указанные в условиях значения.
Такое ощущение, что на первом цикле условия не проверяются и выполняются все инструкции.
Думал что это связано с панелью оператора.
Нет. Отключаю ее и получаю тот же результат.
При этом в дальнейшем, код работает верно. Т.е. если в процессе работы регистры обнулить то условия работают верно.

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

Сообщение отредактировал Sergei Troizky - 14.09.2021 - 21:53


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Smith2007
сообщение 14.09.2021 - 22:41
Сообщение #4


Читатель
*

Группа: Пользователи
Сообщений: 7
Регистрация: 14.09.2021
Пользователь №: 11444



Цитата(Sergei Troizky @ 14.09.2021 - 22:45) *
Похоже, Вы просто не учитываете, что программа непрерывно выполняется циклически,
а наблюдаете Вы результат не первого прохода, а последнего законченного.
В первом проходе (скане) все указанное происходит, но результат мониторится лишь один скан (миллисекунды).
Его не увидеть глазом, но при желании можно зафиксировать в конце первого скана во вспомогательных регистрах.


Сергей, я имею некоторый опыт программирования МК в среде RTOS и совсем немного в программировании ПЛК в среде Codesys (ST).
Эти моменты я прекрасно понимаю.
Следующий код работает верно. В том числе все IF, CASE ...
Больше времени ушло на исследование работы функций DDRVA/DDRVI (управление ШД)
Управление с панели оператора OP320 (тоже китайской сборки)

Захотел добавить еще одну функцию, которая должна сделать некоторый перерасчет значений, но вызывать ее по требованию т.е. в ручную. Для этого на кнопку панели поключил M0.

Код простейший
IF M0 THEN
.... пересчет;
END_IF;

Но пересчет выполняется при каждом старте, не зависимо от того какое условие.
Даже если
M0 := 0;
перед условием поставить.
Подозреваю, что при старте что-то может нужно еще инициализировать.
Пробовал задержку по таймеру выставить перед выполнением кода - не помогло.
Просто какая-то магия.


Код
(****************************************************************************
***************
Входы/Выходы
X0 - Сигнал датчику нуля оси Z
Y0 - STEP. Выход на драйвер ШД
Y4 - DIR. Выход на драйвер ШД

Регистры
M0            Bit                Запускает/останавливает движение по заданным координатам
M1            Bit                Ручное движение вверх
M2            Bit                Ручное движение вниз
M3            Bit                Режим скорости ручного перемещения (0 - медленно S1, 1 - быстро S)
M5            Bit                Поимк нулевой точки

D9            DWORD        Уставка Z в импульсах
D128        INT                Высота стола (0.1 мм)
D132        INT                Высота заготовки (0.1 мм)
D136        INT                Количество импульсов на 1 мм перемещения по оси Z
D140        INT                Скорость движения по оси Z (мм/сек). Автоматический режим
D142        INT                Скорость движения по оси Z (мм/сек). Ручное управление
D144        INT                Текущая координата Axis Z (0.1 мм)
D148        INT                Текущая высота от заготовки до линзы Work Z (0.1 мм)
D152        INT                Текущий номер линзы Lens (1..4)
D156        INT                Фокусное расстояние линзы F1 (0.1 мм)
D160        INT                Фокусное расстояние линзы F2 (0.1 мм)
D164        INT                Фокусное расстояние линзы F3 (0.1 мм)
D168        INT                Фокусное расстояние линзы F4 (0.1 мм)
D172        INT                MaxZ. Максимальное значение Z
D176        INT                Фокусное расстояние выбранной линзы

D8140    DWORD        Текущее значение координаты Z в импульсах

M8029    Bit                Сигнал завершения позиционирования (в одном цикле)
M8147    Bit                1 - происходит перемещение (Занято), 0 - ожидание команды
********************************************************************************
************)

IF M8002 = 1 THEN  (* Выполняется однократно при старте программы *)
    M0 := FALSE;
    M1 := FALSE;
    M2 := FALSE;
    M4 := FALSE;
END_IF;

(* Вычисляем чатсоту импульсов *)
dK := INT_TO_DINT(D136);     (* K *)
HiSpeed :=  INT_TO_DINT(D140);     (* Hi Speed *)
HiFreq := (dK * HiSpeed) / 10;
LoSpeed :=  INT_TO_DINT(D142);     (* Lo Speed *)
LoFreq := (dK * LoSpeed) / 10;

CASE D152 OF
    1: (* Линза 1 *)
        D176 := D156;
        FLeanse := INT_TO_DINT(D156);
    2: (* Линза 2 *)
        D176 := D160;
        FLeanse := INT_TO_DINT(D160);
    3: (* Линза 3 *)
        D176 := D164;
        FLeanse := INT_TO_DINT(D164);
    4: (* Линза 4 *)
        D176 := D168;
        FLeanse := INT_TO_DINT(D168);
    ELSE
        D176 := 0;
        FLeanse := 0;
END_CASE;

(* Вычисляем заданную координату Z в импульсах *)
TableH := INT_TO_DINT(D128); (* Высота стола *)
Mesure := INT_TO_DINT(D132); (* Высота заготовки *)
MaxZ := INT_TO_DINT(D172 ); (* MaxZ смещение*)
DestZ :=  MaxZ -  (TableH + Mesure + FLeanse); (* Значение Z в 0,1 мм с учетом смещения MaxZ*)
DestPulsZ := DestZ * (dK/10);  (* Вычисляем количество импульсов для смещения *)
DMOV( TRUE, DestPulsZ , D9);

(* Вычисляем текущую координату Z в 0,1 мм*)
DMOV( TRUE, D8140 , HardZ);
AxisZ :=  MaxZ - (HardZ * 10) / dK;
D144 := DINT_TO_INT(AxisZ);

(* Вычисляем текущее расстояние от заготовки до линзы Z1 в 0,1 мм*)
WorkZ := AxisZ - (TableH + Mesure);
D148 := DINT_TO_INT(WorkZ);

(* Soft Limit max *)
IF AxisZ > MaxZ THEN
    M0 :=FALSE;
    M1 := FALSE;
END_IF;
(* Soft Limit min *)
IF (AxisZ <= (TableH + Mesure)) THEN
    M0 := FALSE;
    M2 := FALSE;
END_IF;

(* По сигналам ручного управления отключить автоматическое M0 *)
IF M1 OR M2 THEN
    M0 := FALSE;
    M5 := FALSE;
END_IF;
DDRVA( M0 ,  DestPulsZ, HiFreq, Y0 , Y4);

(* Переключение скорости перемещения в ручном режиме *)
IF M3 THEN
    HandSpeed := HiFreq;
ELSE
    HandSpeed := LoFreq;
END_IF;

DDRVI( M1 , -80000 , HandSpeed , Y0 , Y4 );
DDRVI( M2 , 80000 , HandSpeed , Y0 , Y4 );

Y7 := M8147;

(* Поиск референтной точки/ мащинный 0 по датчику *)
DZRN( M5 , HiFreq, MaxZ * dK,  X0 , Y0 );

(* Сброс M0 по оканчании позиционирования *)
IF M8029 THEN
    M0 := FALSE;
    M5 := FALSE;
END_IF;
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Сообщений в этой теме
Waldislaw   Вопросы новичка   7.10.2020 - 15:12
Sergei Troizky   Если только начал изучать ПЛК, настоятельно рекоме...   8.10.2020 - 03:13
Waldislaw   Если только начал изучать ПЛК, настоятельно рекоме...   8.10.2020 - 10:55
kaii   - как перемещаться в одной программе по меткам (Go...   8.10.2020 - 16:12
Waldislaw   - как перемещаться в одной программе по меткам (Go...   9.10.2020 - 12:36
Sergei Troizky   ST команды CJ и CJP не распознаёт. Ну вот вам и пе...   9.10.2020 - 16:20
Waldislaw   ST команды CJ и CJP не распознаёт. Ну вот вам и пе...   10.10.2020 - 14:27
ivgtrk   Я скачал 6 мануалов по запросу GX Works2 manual и ...   19.11.2020 - 14:07
Sergei Troizky   https://www.consys.ru/documentation/GX_Work...e_20...   8.10.2020 - 17:42
ivgtrk   - как вызвать программный блок из основной програм...   19.11.2020 - 13:50
Waldislaw   Добрый день! Вопрос. Делаю позиционирование на...   11.02.2021 - 12:52
kaii   Сперва откуда надыбали FX3GA? Я чет мануал не могу...   12.02.2021 - 19:43
Waldislaw110   Сперва откуда надыбали FX3GA? Я чет мануал не могу...   2.03.2021 - 23:44
Sergei Troizky   https://we.tl/t-XWFj5Hw73l Читайте раздел 7.9 Для ...   17.02.2021 - 18:52
kaii   https://we.tl/t-XWFj5Hw73l Читайте раздел 7.9 Для ...   17.02.2021 - 19:53
Sergei Troizky   Cмущает. Вот для FX3 на английском, если кому нуж...   17.02.2021 - 21:55
Waldislaw110   https://we.tl/t-XWFj5Hw73l Читайте раздел 7.9 Для ...   2.03.2021 - 23:50
Sergei Troizky   [quote name='Sergei Troizky' post='12070' date='17...   3.03.2021 - 04:19
Waldislaw110   Вообще странноватый этот ST. Например нельзя к Wor...   3.03.2021 - 00:13
Sergei Troizky   Пока искал нашел DBON. Что это такое? Ни в одном м...   3.03.2021 - 04:28
Waldislaw110   Пока искал нашел DBON. Что это такое? Ни в одном м...   3.03.2021 - 14:22
masvel12   Вообще странноватый этот ST. Например нельзя к Wor...   3.03.2021 - 21:24
Waldislaw110   И ещё я пытался восстановить свой пароль на форуме...   3.03.2021 - 00:17
masvel12   И ещё я пытался восстановить свой пароль на форуме...   3.03.2021 - 21:08
Waldislaw110   И ещё я пытался восстановить свой пароль на форуме...   6.03.2021 - 23:43
Smith2007   Впервые встретился с ПЛК FX1N. К ПЛК подключена па...   14.09.2021 - 09:04
Sergei Troizky   После перепрошивки, при включении ПЛК регистрам ср...   14.09.2021 - 21:45
Smith2007   Похоже, Вы просто не учитываете, что программа неп...   14.09.2021 - 22:41
Sergei Troizky   Копайте в сторону Ladder-а. И поверьте, это благой...   14.09.2021 - 15:27
Smith2007   Копайте в сторону Ladder-а. И поверьте, это благой...   14.09.2021 - 17:28
kaii   Тут надо начать с того, что у вас оригинальный FX1...   14.09.2021 - 18:51
Sergei Troizky   Тут надо начать с того, что у вас оригинальный FX1...   14.09.2021 - 21:47
kaii   А что, в китайском другая прошивка? Т.е. вы ни раз...   15.09.2021 - 17:01
Sergei Troizky   Т.е. вы ни разу не натыкались на статьи что китайс...   15.09.2021 - 23:07
Smith2007   Тут надо начать с того, что у вас оригинальный FX1...   14.09.2021 - 22:26
Smith2007   Создал вторую задачу на FB И в ней отдельно отраба...   15.09.2021 - 00:28
Sergei Troizky   А почему у Вас: IF M1 OR M2 THEN ..., IF M3 THE...   15.09.2021 - 01:39
Smith2007   А почему у Вас: IF M1 OR M2 THEN ..., IF M3 THE...   15.09.2021 - 12:50
Sergei Troizky   А почему у Вас: IF M1 OR M2 THEN ..., IF M3 THE...   15.09.2021 - 14:59
Smith2007   ... Но, во всей этой истории есть что-то непонятно...   15.09.2021 - 17:55


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 29.04.2024 - 00:33