Надо проверить. Не помню.
Вид для печати
Документ, в котором упоминается ПЛК Modicon М258 фирмы Schneider Electric. А вот ссылка на документ, в котором описаны все подробности: http://www.botekotomasyon.com/WEB/Ur...20Counting.pdf
Возможно В.Ситников и все заинтересованные лица смогут почерпнуть что-то интересное для пополнения и совершенствования ФБ для PRU.
SteppersConfig_Pru0Init(); - эту программу достаточно вызвать один раз ?
SteppersConfig_Pru0MemoryTransfer(
STEPPER_PRU0_dir := TRUE,
STEPPER_PRU0_stepper_accel_ramp := 5000,
STEPPER_PRU0_stepper_decel_ramp := 5000,
STEPPER_PRU0_stepper_max_speed := 2000,
STEPPER_PRU0_stepper_min_speed := 0,
STEPPER_PRU0_stepper_quantity := 1000,
(*STEPPER_PRU0_stepper_enable := SteppersConfig_Pru0MemoryTransfer.STEPPER_PRU0_ste pper_state <> STOP_STEPPER_RUN_STATE*)
);
Эту программу достаточно вызвать один раз чтобы ШД отработал задание ?
А можно вместо
STEPPER_PRU0_stepper_enable := SteppersConfig_Pru0MemoryTransfer.STEPPER_PRU0_ste pper_state <> STOP_STEPPER_RUN_STATE
написать
STEPPER_PRU0_stepper_enable := TRUE чтобы ШД работал без остановки ?
При первом вызове SteppersConfig_Pru0MemoryTransfer() enable будет переведен в TRUE и ШД запустится.
Если ШД должен работать постоянно, то контролировать ничего не надо. Когда придет пора надо просто вызвать однократно программу SteppersConfig_Pru0MemoryTransfer() и остановить ШД, т.е. перевести enable в FALSE.
Я правильно понимаю ?
Сделал проект для двух ШД и одного энкодера. Скомпилировал проект в Hardella, сделал импорт .exp файла в проект CoDeSys. Как управлять драйверами ШД понятно. Не понятно как опрашивать энкодер.
Компилятор CoDeSys выдает кучу ошибок.
А что именно непонятно?
STEPPER2_Enc_PRU0_encoder_position это и есть текущее положение энкодера.Код:PROGRAM SteppersConfig_Pru0MemoryTransfer
...
VAR_OUTPUT
running : BOOL;
writeFails : DWORD;
readFails : DWORD;
STEPPER2_Enc_PRU0_encoder_counter : WORD;
STEPPER2_Enc_PRU0_encoder_position : WORD;
STEPPER2_Enc_PRU0_encoder_zeroDetected : BOOL;
STEPPER2_Enc_PRU0_stepper_state : STEPPER_RUN_STATE;
STEPPER2_Enc_PRU0_stepper_step_count : DWORD;
END_VAR
...
Иными словами, нужно вызвать программу SteppersConfig_Pru0MemoryTransfer, и после этого смотреть на значениеКод:SteppersConfig_Pru0MemoryTransfer.STEPPER2_Enc_PRU0_encoder_position
Компилятор CoDeSys выдает ошибки.
Ищем в гугле PRU_FB_GET_PARAMETER, находим такое:
Вложение 28750
Отвечает на вопрос?
Правильно. Я создал новый проект CoDeSys, а библиотеку не добавил.
Докладываю. Удалось без проблем раскрутить мощный ШД до 1350 об/мин за 2,5 сек. при хорошем крутящем моменте на валу.
Hardella рулит. ;) Спасибо Владимиру Ситникову.
На сайте Hardella написано:
Характеристики ПЛК110 М02
Работа PRU программ проверялась на ОВЕН ПЛК110 М02.
Количество PRU: 2 шт. PRU0 и PRU1
Быстрые входы 1, 2, 3 и 4 заведены на PRU0
Но в РЭ написано, что у ПЛК110-X.30[М02] и ПЛК110-X.32[М02] только 2 быстрых входа 1 и 2.
Значит быстрые входы 3 и 4 доступны только в ПЛК110-X.60[М02] ? Учтено ли это в Hardella ?
Хороший вопрос. Вроде, раньше в теме кто-то говорил, что при загрузке PRUx.prg в ПЛК перестают работать "два не быстрых" входа.
Может оказаться, что PRU0 подключено к двум быстрым входам и двум простым.
Думаю, надо пробовать. Честно говоря, работу входов я не проверял (на моём ПЛК, кстати, тоже только 2 fast in).
Вот то сообщение:
Возможно, в этих ПЛК первые два простых входа тоже распаяны на PRU. Интересно, какая предельная частота оптронов там?
Если так, то может оказаться, что за счёт PRU можно превратить 2 обычных входа в быстрые (ну, частота наверняка будет пониже, но всё таки).
На всей линейке 110-хх первые 4 входа подключены к PRU. Но на некоторых моделях 2 оптрона не быстрые, а обычные.
Предел по частоте обычных оптронов не превышает 5-10 кГц.
To В.Ситников. Сделал из ваших стандартных ФБ проект для PRU (см.вложение). К первым двум быстрым дискретным входам ПЛК110-Х.30 подключен энкодер (фазы А и В), к четырем быстрым дискретным выходам подключены два драйвера ШД.
ШД нормально управляются, а с энкодером творится что-то непонятное. При медленном вращении вала энкодера считываемое значения принимает попеременно два состояния - 0 и 65535.
Через конфигуратор энкодер опрашивается нормально.
Владимир, смотрю код вашего ФБ для энкодера и не могу понять смысл некоторых конструкций.
Например, это что означает:
changedA := a <> prevA;
aSameAsB :=a = b;
Может, фазы перепутаны?
Т.е. A или B фаза подключена к "in3" и блок постоянно думает, что "достигнута Z метка и сбрасывает значение position".
Если сделать простые счётчики импульсов и считать in1, in2, in3, то оно ожидаемым образом работает?
Собственно, у Sulfur получилось и встроенный блок использовать, и свой сделать: http://www.owen.ru/forum/showthread....l=1#post233210
Владимир, а программы в CoDeSys у меня правильно написана ? Вы мои проекты смотрели ?
Кхм, точно.
Надо сделать проект со "счётчиками импульсов" на каждом из in1, in2, in3, in4 и посмотреть какие входы работают, а какие нет.
Сделаешь? (возможно, придётся убрать блок ШД, т.к. под всё это может не хватить памяти)
У меня в ближайшее время не будет доступа к железу (а там нужно физически подавать сигналы и смотреть что в программе).
Посмотрел код обработки входов (ну, которым Hardella входы опрашивает) -- выглядит верно.
Я сейчас сделал свой дубовый ФБ для энкодера. Посмотрите пожалуйста.