PDA

Просмотр полной версии : сохранение значения энкодера после отключения питания для ПР103



Evgeniy83
08.10.2024, 09:39
Доброго времени суток.
Прошу помощи в решении задачи сохранение значения энкодера после отключения питания для ПР103.

Описание процесса: Есть некий редуктор тянущий цепь, (на редукторе установлен энкодер) на цепи скребок. Длинна всего прохода по энкодеру от 0- до 37000 импульсов (энкодер 10 импульсов на оборот). Если во время движения машины отключают электричество то после включения переменная энкодера становится в 0. Можно ли каким то образом сохранять значение энкодера?

kondor3000
08.10.2024, 10:23
Доброго времени суток.
Прошу помощи в решении задачи сохранение значения энкодера после отключения питания для ПР103.

Описание процесса: Есть некий редуктор тянущий цепь, (на редукторе установлен энкодер) на цепи скребок. Длинна всего прохода по энкодеру от 0- до 37000 импульсов (энкодер 10 импульсов на оборот). Если во время движения машины отключают электричество то после включения переменная энкодера становится в 0. Можно ли каким то образом сохранять значение энкодера?

Это делается например так, сохранение Энкодера в энергонезависимой переменной, скрин 79193
R триггер инициализирует переменную при включении.

Evgeniy83
08.10.2024, 10:33
Это делается например так, сохранение Энкодера в энергонезависимой переменной, скрин 79193
R триггер инициализирует переменную при включении.

То есть каждое значение энкодера сохраняется в энергонезависимую память? Есть несколько вопросов. 37к импульсов в одну сторону 37к в другую и 100 раз в сутки сколько проживет флешка в данном устройстве ПР?
После перезапуска переменная энкодер все ровно станет 0?

kondor3000
08.10.2024, 10:57
То есть каждое значение энкодера сохраняется в энергонезависимую память? Есть несколько вопросов. 37к импульсов в одну сторону 37к в другую и 100 раз в сутки сколько проживет флешка в данном устройстве ПР?
После перезапуска переменная энкодер все ровно станет 0?

Запись в память происходит при отключении питания, в остальное время, всё работает в ОЗУ.

Evgeniy83
08.10.2024, 11:05
То есть правильно ли я понял, переменной в которую записывается значение энкодера просто поставить энергонезависимость?

Dimensy
08.10.2024, 12:06
То есть правильно ли я понял, переменной в которую записывается значение энкодера просто поставить энергонезависимость?

Нет, при старте ПРки она перезапишется нулем.
Как вариант, можно такой огород сделать
79207
Здесь, переменная Положение энергонезависимая. Нулевая точка - это для сброса переменной Сдвиг

Evgeniy83
08.10.2024, 12:48
Нет, при старте ПРки она перезапишется нулем.
Как вариант, можно такой огород сделать
79207
Здесь, переменная Положение энергонезависимая. Нулевая точка - это для сброса переменной Сдвиг

Попытался в эмуляции воспроизвести ваше предложение.
не пойму в какой момент сдвиг должен стать равным положению?
79208

EFrol
08.10.2024, 14:04
Если энкодер работает только на увеличение, то:
79220

Evgeniy83
08.10.2024, 14:22
Энкодер конечно же работает в обе стороны и в + и в -.
генератор blink был добавлен в качестве эмулятора энкодера так как нет под рукой энкодера

EFrol
08.10.2024, 14:42
Проверил. Работает в обе стороны:
79221

Evgeniy83
08.10.2024, 15:01
Проверил. Работает в обе стороны:
79221

можете по подробней объяснить для чего детектор переднего фронта?
в какой момент старая позиция примет значение новой?
79222

Dimensy
08.10.2024, 15:31
Попытался в эмуляции воспроизвести ваше предложение.
не пойму в какой момент сдвиг должен стать равным положению?


При включении ПРки. Попробуйте задать какое-нибудь начальное значение переменной Положение (она ведь энергонезависимая) и запустить эмуляцию

EFrol
08.10.2024, 15:40
можете по подробней объяснить для чего детектор переднего фронта?
в какой момент старая позиция примет значение новой?
79222

На выходе RTRIG будет 1 в течении 1-го цикла, а потом только 0.
В течении первого цикла и произойдет перезапись сохраненного значения в старое.
Задержу в цикл после RTRIG, вероятно, можно заменить на обычные связи.
Просто при симуляции энергонезависимые переменные значения не запоминают.
После включения симуляции энергонезависимая будет содержать значение по-умолчанию,
даже если её значение поменять на нужное (якобы сохраненное).
Получается 1-й цикл запишет значение по-умолчанию.
В ПР-ке же перед 1-м циклом должно быть восстановлено сохраненное значение.
Поэтому я добавил задержку. Перед записью в ПР-ку задержку меняю на обычные связи.

EFrol
08.10.2024, 16:00
В принципе можно использовать другую конструкцию:
79223
Но здесь наоборот 1-й цикл на SEL будет 0, все следующие 1.
Тогда входа надо поменять местами.

EFrol
08.10.2024, 16:03
Она в принципе и так работает:
79224

EFrol
08.10.2024, 16:05
И так тоже:
79225

Evgeniy83
08.10.2024, 16:22
На выходе RTRIG будет 1 в течении 1-го цикла, а потом только 0.
В течении первого цикла и произойдет перезапись сохраненного значения в старое.
Задержу в цикл после RTRIG, вероятно, можно заменить на обычные связи.
Просто при симуляции энергонезависимые переменные значения не запоминают.
После включения симуляции энергонезависимая будет содержать значение по-умолчанию,
даже если её значение поменять на нужное (якобы сохраненное).
Получается 1-й цикл запишет значение по-умолчанию.
В ПР-ке же перед 1-м циклом должно быть восстановлено сохраненное значение.
Поэтому я добавил задержку. Перед записью в ПР-ку задержку меняю на обычные связи.

Да спасибо на эмуляции работает ваша схема. Завтра проверю на ПР.
Остается открытым вопрос та переменная в которую пишет энкодер становится энергонезависимой а значит пишется на флешку что-бы сохранить значения в случаи отключения электричества, не приведет ли это со временем к ошибкам во флеш ПР

EFrol
08.10.2024, 17:04
Вроде как говорили, что запись идет при выключении. В эмуляции работает - в ПР-ке может не сработать. Поэтому задержку после RTRIG лучше убрать.
А вот после SEL - оставить.
Число циклов перезаписи зависит от температурных условий, но производители гарантируют до 100000.
Даже если будет до 10 выключений в день - это 10000 дней (> 27 лет до первой ошибки).
Думаю, не стоит заморачиваться на этот счёт.

Evgeniy83
10.10.2024, 15:21
Подскажите а какое число максимальное в регистре. При подключении энкодера. Можно ли использовать это число?79304

kondor3000
10.10.2024, 15:31
Подскажите а какое число максимальное в регистре. При подключении энкодера. Можно ли использовать это число?79304

В одном регистре максимум 65535 (16 битное целое), можно использовать.
А вообще в Лоджике максимум 4294967295, это 32 битное целое (2 регистра)

Evgeniy83
10.10.2024, 15:38
В одном регистре максимум 65535 (16 битное целое), можно использовать.
А вообще в Лоджике максимум 4294967295, это 32 битное целое (2 регистра)
можно ли использовать такое число для подсчета точки 0
79305

kondor3000
10.10.2024, 15:46
можно ли использовать такое число для подсчета точки 0
79305

Скрины можно выложить проще, добавить изображение.
Тогда уже вместо 4294967295, проще просто поставить 0.
4294967295+1=0
0-1=4294967295

Evgeniy83
10.10.2024, 16:23
Скрины можно выложить проще, добавить изображение.
Тогда уже вместо 4294967295, проще просто поставить 0.
4294967295+1=0
0-1=4294967295

Вопрос был в следующем.
Если энкодер крутнуть назад на 1 шаг то получится 4294967295. если продолжать его крутить назад то число будет уменьшатся. вопрос работают ли функции вычитания сравнения на большее значения с такими числами?

kondor3000
10.10.2024, 19:13
Вопрос был в следующем.
Если энкодер крутнуть назад на 1 шаг то получится 4294967295. если продолжать его крутить назад то число будет уменьшатся. вопрос работают ли функции вычитания сравнения на большее значения с такими числами?

Вычитание работает нормально (если правильно считать), а сравнение будет наоборот ( оно не нужно) 79312
Вот для понимания работы, один из примеров. Энкодер со счётчиком ЛИР (1024 импульса/оборот). В эмуляции включите Реверс и Пуск, счётчик (эмулятор энкодера) будет считать обратно. В прямом счёте начальное (меньшее) вычитается из конечного, в обратном счёте конечное (меньшее) вычитается из начального.

AlexandrGr
14.10.2024, 18:40
Зачем сохранять значение инкрементального энкодера?