IPB

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

3 страниц V  < 1 2 3  
Ответить в эту темуОткрыть новую тему
> Вопросы новичка
Sergei Troizky
сообщение 14.09.2021 - 21:47
Сообщение #31


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

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



Цитата(kaii @ 14.09.2021 - 18:51) *
Тут надо начать с того, что у вас оригинальный FX1N (который очень сложно найти уже) или китайская подделка с алиэкспреса?
По мануалу, все делаете правильно, только пробелов не ставят.

А что, в китайском другая прошивка?


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


Читатель
*

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



Цитата(kaii @ 14.09.2021 - 19:51) *
Тут надо начать с того, что у вас оригинальный FX1N (который очень сложно найти уже) или китайская подделка с алиэкспреса?
все делаете правильно, только пробелов не ставят.


Покупал на Али для организации управления одним шаговым двигателем.
Из описания было указано, что на выходе Y0 можно получить стабильную частоту до 100 кГц.
Так оно и есть.
С подтяжкой к +24В получил вполне приемлемый сигнал на выходе.
До 100 кГц форма почти не меняется. При частотах до 20 кГц почти прямоугольник
Мне же достаточно 20 кГц.
Прикрепленный файл  2021_09_11_22_31_21.jpg ( 54.16 килобайт ) Кол-во скачиваний: 2


Про пробелы не понял...

Сообщение отредактировал Smith2007 - 14.09.2021 - 22:42
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Smith2007
сообщение 14.09.2021 - 22:41
Сообщение #33


Читатель
*

Группа: Пользователи
Сообщений: 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;
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Smith2007
сообщение 15.09.2021 - 00:28
Сообщение #34


Читатель
*

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



Создал вторую задачу на FB
И в ней отдельно отрабатываю вычисления по сигналу M4, подаваемому с панели.
Операции выполняются с 4мя регистрами общими
D132 = D144 - D128 - D176

Костыль конечно получается. Но он работает
Прикрепленный файл  2021_09_15_01_14_15.jpg ( 49.48 килобайт ) Кол-во скачиваний: 4
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 15.09.2021 - 01:39
Сообщение #35


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

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



А почему у Вас: IF M1 OR M2 THEN ..., IF M3 THEN ..., IF M8029 THEN ...,
а в начале IF M8002 = 1 THEN ...?
Почему не IF M8002 THEN ...?

Сообщение отредактировал Sergei Troizky - 15.09.2021 - 01:40


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


Читатель
*

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



Цитата(Sergei Troizky @ 15.09.2021 - 02:39) *
А почему у Вас: IF M1 OR M2 THEN ..., IF M3 THEN ..., IF M8029 THEN ...,
а в начале IF M8002 = 1 THEN ...?
Почему не IF M8002 THEN ...?


Делал проверки на другое условие кроме true. Поэтому осталось.
Думаю это не принципиально.

Это может быть причиной ошибок?

Сообщение отредактировал Smith2007 - 15.09.2021 - 12:51
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 15.09.2021 - 14:59
Сообщение #37


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

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



Цитата(Smith2007 @ 15.09.2021 - 12:50) *
Цитата(Sergei Troizky @ 15.09.2021 - 02:39) *
А почему у Вас: IF M1 OR M2 THEN ..., IF M3 THEN ..., IF M8029 THEN ...,
а в начале IF M8002 = 1 THEN ...?
Почему не IF M8002 THEN ...?


Делал проверки на другое условие кроме true. Поэтому осталось.
Думаю это не принципиально.

Это может быть причиной ошибок?

Пробуйте!
Но, во всей этой истории есть что-то непонятное.
А именно: биты с такими номерами не нужно сбрасывать в первом скане, они несохраняемые и поэтому уже сброшены.
Остается предположить, что либо их включает что-либо ранее в программе, либо вывод что они не сброшены в первом скане- ошибочен.


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kaii
сообщение 15.09.2021 - 17:01
Сообщение #38


Фанат
***

Группа: Пользователи
Сообщений: 106
Регистрация: 17.03.2020
Из: Екатеринбург
Пользователь №: 11250



Цитата(Sergei Troizky @ 14.09.2021 - 22:47) *
А что, в китайском другая прошивка?

Т.е. вы ни разу не натыкались на статьи что китайские подделки урезаны в функциональности? То команды не работают некоторые, то ST вообще не поддерживается, и прочее прочее.
Может быть уже лучше с этим стало, но...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Smith2007
сообщение 15.09.2021 - 17:55
Сообщение #39


Читатель
*

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



Цитата(Sergei Troizky @ 15.09.2021 - 15:59) *
...
Но, во всей этой истории есть что-то непонятное.
А именно: биты с такими номерами не нужно сбрасывать в первом скане, они несохраняемые и поэтому уже сброшены.
Остается предположить, что либо их включает что-либо ранее в программе, либо вывод что они не сброшены в первом скане- ошибочен.


В верху я явно инициализировал их после неудач с условием ибо уже не понимал кто их может взводить.
Как уже написал выше, я создал вторую задачу в рамках одной программы и создал ее на FBD
Вынес в нее только одну эту операцию. И все заработало нормально. Т.е. в действительности компилятор с ST чудит как-то.

зы. Заказал FX3U-14MT. Быть может с ним будет другая ситуация.
Кстати у меня есть еще один похожий ПЛК FX1N-14MR, несколько отличается плата и наличие дополнительного разъема. Он так же не верно исполняет в начале код с условием IF

Сообщение отредактировал Smith2007 - 15.09.2021 - 19:16
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 15.09.2021 - 23:07
Сообщение #40


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

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



Цитата(kaii @ 15.09.2021 - 17:01) *
Т.е. вы ни разу не натыкались на статьи что китайские подделки урезаны в функциональности?

Встречалось иногда. Самому не было случая проверить.
Но, вызывает определенные сомнения, так как:

Цитата(kaii @ 15.09.2021 - 17:01) *
То команды не работают некоторые ...

Это странно. Неужто китайцы писали свой софт, а не содрали с оригинала.

Цитата(kaii @ 15.09.2021 - 17:01) *
... то ST вообще не поддерживается...

А это к контроллеру вообще отношения не имеет.
ST- он в офлайн проекте ST, а контроллер выполняет код уже откомпилированный в IL.

Сообщение отредактировал Sergei Troizky - 21.09.2021 - 20:23


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

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

 



- Текстовая версия Сейчас: 28.03.2024 - 23:19