Вход

Просмотр полной версии : Интересная задачка с утра.



Иванище
10.07.2024, 08:34
Стоит тетрадная линия. Есть энкодер enc-1-2-t-24, ПР103, СП307. Необходимо вывести на панель оператора (СП307) линейную скорость линии.
Колесо энкодера будет крутиться за счет вращения вала, с которым он соприкасается.
Интересно почитать у кого какие варианты решения на уме.

Валенок
10.07.2024, 08:49
Спымать того, кому энти тетрадки, и пораспрошать его про число пи, попросить у него линейку и померять диаметр колеса/вала. А если он хотя бы не троечник то подкинуть ему енту задачу. Мороженку не забыть купить.
В общем, автор, не унывай. Не перевелись еще на земле Русской умеющие перевести частоту вращения в линейную скорость. Бог даст, встретишь такого

EFrol
10.07.2024, 10:33
Самый простой вариант:
77174
где fValue и fKoef сетевые с плавающей запятой (доступные для СП3xx).
FI1 настроить как энкодер
подключить согласно инструкции:
77176

а EncoderSpeed:


function_block EncoderSpeed

var_input
Enc : udint; // Текущее значение счетчика
end_var

var_output
Speed : udint; // Скорость в имп/сек
end_var

var
EncOld : udint; // Предыдущее значение счетчика
t : SYS.TON; // Секундный таймер
end_var

t(I:=TRUE, T:=T#1s);
if t.Q then // Каждую секунду
if Enc >= EncOld then
Speed := Enc - EncOld; // Определяем кол-во накопленных импульсов за последнюю сек.
else
Speed := 4294967295 - EncOld + Enc + 1; // Учтем возможность переполнения счетчика
end_if
EncOld := Enc; t(I:=FALSE); // Запомним текущее значение счетчика и перезапустим таймер
end_if


end_function_block

Валенок
10.07.2024, 12:03
Уважаемый EFrol
4294967295 - EncOld + Enc + 1
=>
(4294967295 + 1) - EncOld + Enc
=>
(0) - EncOld + Enc
=>
- EncOld + Enc
=>
Enc - EncOld

=>


if Enc >= EncOld then
Speed := Enc - EncOld; // Определяем кол-во накопленных импульсов за последнюю сек.
else
Speed := 4294967295 - EncOld + Enc + 1; // Учтем возможность переполнения счетчика
end_if
=>

if Enc >= EncOld then
Speed := Enc - EncOld; // Определяем кол-во накопленных импульсов за последнюю сек.
else
Speed := Enc - EncOld; // Учтем возможность переполнения счетчика
end_if
=>



Speed := Enc - EncOld; // Не надо ничего учитывать

EFrol
10.07.2024, 12:40
Спасибо. Не привык к беззнаковой арифметике.
Для наглядности просто:
4294967295 - EncOld => сколько осталось до переполнения
+ Enc => сколько накопилось от 0-я
+ 1 => сам 0

Для новичков факт 4294967295 + 1 = 0 не очевиден.

Иванище
10.07.2024, 14:40
Объясните непутевому студенту смысл переменной fKoef (что, откуда и куда), пожалуйста

Валенок
10.07.2024, 15:45
Для новичков факт 4294967295 + 1 = 0 не очевиден.
Само 4294967295 помнить - нужно быть 7-ми пядей.
16#FFFF_FFFF - значительно понятней.
А если вспомнить только то, что -1 это все единицы в двоичке, то заместо безликого 4294967295 написать DINT_TO_DWORD(-1) значительно выразительней
Да даже просто:
(0 - 1) //для лоджика
Ну и
(0 - 1) - EncOld + Enc + 1
или
DINT_TO_DWORD(-1) - EncOld + Enc + 1
или
-1 - EncOld + Enc + 1
Очевидность приходит майором.

Поэтому
4294967295 + 1
и ненужно помнить

МихаилГл
10.07.2024, 15:59
Объясните непутевому студенту смысл переменной fKoef (что, откуда и куда), пожалуйста

Ну speed это импульсы в секунду, импульсы на оборот знаете? Длину окружности поделите на количество импульсов на оборот, и получите м/импульс. Перемножаем, в итоге м/с... Скорость. Ну это на первый взгляд...

BETEP
10.07.2024, 22:15
Плохая идея измерять скорость таким энкодером в интервале 1, 2, и.т.п. сек.

ENC-1-2-T-24 DC12-24V Инкрементальный энкодер, 1cм/имп., выход Totem pole
Если станок выплёвывает тетрадку в секунду это сколько импульсов? 10-20 на тетрадку? А если разгоняем станок с минимальной скорости?
Время цикла и таймер, как это отразится на счёте? сколько импульсов будут гулять туда-сюда (между циклами ПР) при срабатывании таймера?
--------------
Задачка интересна тем, что выбранным оборудованием стабильный и точный результат не получить.
Кстати, что предпочтительнее, усреднять скорость за 30 сек, т.к. скачет каждую секунду 5-15% или посчитать время на 10 тетрадок и перевести в скорость?

Сергей0308
10.07.2024, 23:23
Так там надо не измерять, а подсчитать и записать на бумажке, в смысле, в Т.З. нет условия, что скорость меняется, скажете что двигатель асинхронный, в смысле, скольжение зависит от нагрузки, тоже не верно, это не указано, и скорость будет меняться незначительно, так может там синхронный двигатель стоит, короче, это равносильно что число Пи постоянно подсчитывать, в смысле, тогда логично и Пи(3,1415926535897932384626433832795) на панель вывести, короче, надеюсь смысл понятен, в смысле, он здесь отсутствует!
А Пи пусть вычисляет, в смысле, ему пригодится чтобы скорость вращения(об/сек, об/мин) перевести в линейную скорость! Вдруг все ошибаются и число Пи постоянно меняется!
Короче, задача не интересная, а даже совсем наоборот, в смысле, непонятная, вот здесь интересная была:
https://owen.ru/forum/showthread.php?t=39764

EFrol
11.07.2024, 00:20
Объясните непутевому студенту смысл переменной fKoef (что, откуда и куда), пожалуйста

Если Вас устроит в имп/сек поставьте fKoef = 1.0.
Но можно в любой единице измерения (даже в попугаях/сек), если Вы точно знаете сколько Ваших единиц (попугаев) приходится на 1 импульс.

Иванище
11.07.2024, 09:21
Справедливо. Спасибо

Иванище
11.07.2024, 09:23
Предложу начальнику новую систему измерения. До меня у нас в попугаях точно никто ничего не измерял. Спасибо)