![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Пользователь
Регистрация: 03.03.2010
Сообщений: 89
|
![]()
Реализовал счетчик импульсов с ком-порта.
И проявился очень интересный баг. Если четное количество указано, прокрутить двигатель допустим на 20 импульсов геркона - то никаких ошибок, если 19 импульсов указать то прокручивает все равно на двадцать. 51 допустим - прокрутит на 52. Сразу думал, что инерционность виновата. Но оказалось все иначе. На всякий случай прикладываю код процедуры execute. Цитата:
Последний раз редактировалось z-wer; 03.07.2011 в 23:39. |
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 03.03.2010
Сообщений: 89
|
![]()
Неужели никто не подскажет решение проблемы ?
Попробовал повесить счетчик на OnCTSChange - теже грабли. Если в отработчике указать подсчет по положительным импульсам, то все ОК Ежели по положительным и отрицательным - повторяется таже ошибка. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
![]()
У тебя какое то оборудование по com порту стоит или ты сам какой то прибор сделал по считыванию импульсов? Если оборудование то в считывании оно должно выдавать какой нибудь символ в порт его ловишь из буфера и подставляешь свои значения, с задержками ты не угадаешь с какой скоростью он крутиться.
Попробуй задержку так реализовать. //Как событие появится в порту перейдет дальше. Код:
Последний раз редактировалось Aliens_wolfs; 05.07.2011 в 17:55. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 03.03.2010
Сообщений: 89
|
![]()
Ну в общем то да, что то типа своего прибора.
Мотор, датчик положения, концевые выключатели. Signaled := WaitForSingleObject(Ovr.hEvent, 200); Это для крайнего положения левого или правого. 0.2 сек для сброса напряжения с мотора при достижении пределов вращения. А все остальное по событиям EV_CTS (счет импульсов с датчика). Дребезга контактов точно нет, потому как из одного крайнего положения в другое переворачивается без проблем. Выставляю счетчик в ноль, доходит к примеру до 1200, назад опять строго на ноль становится как вкопанный. Хотя алго написан так, что если и появляются отрицательные значения и есть предел вращения - то мотор все равно будет вращать, пока не сработает концевик. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
У вы при счёте оборотов учитываете 0 оборот?
В программировании отсчёт с 0. указали 10. Считает 11. Указали 9. Считает 10. Я ток понял что это: Код:
Попробуйте так: Код:
Последний раз редактировалось Человек_Борща; 05.07.2011 в 18:49. Причина: ёётчик. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 03.03.2010
Сообщений: 89
|
![]()
Нет со счетчиком все нормально.
Count - это индикация. Pulse - это точка в которой должен остановится мотор. Есть кнопки Лимит - вращение до предела, т.е пока не сработает концевик. Есть кнопки Позиция - вращение на точку указанную в таблице. Загоняю мотор в крайнюю левую точку, жму калибровку, все переменные сбрасываются в нули. В таблице к примеру указаны 5 значений - 50, 100, 150, 200, 250. Пять раз жмакаю по кнопке Позиция, мотор останавливается в точке 250. Жму на Лимит (т.е. возврат в крайнюю точку), мотор вращает до сработки концевика - индикация на Count = 0. Повторяю тоже самое но со значениями 51, 102, 153, 204, 255 (все нечет). Жму на Лимит - индикация на Count = -5. Почему так, вьехать не могу ![]() Может у меня проблема с железом, Компорт на ftdi232rl ? Я уже грешным делом подумывал, может как счетчик реагирует на нажатие кнопки, оказалось нет - если снять питание с мотора, жмакай до посинения, показания не меняются. |
![]() |
![]() |
![]() |
#7 | ||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]() Цитата:
И вообще, с каких это пор в качестве датчика угла поворотов ставят герконы? Уже давно эксплуатируются датчики положения и энкодеры на датчиках холла и электронно-оптические. И сигналы там выдаются A/B со смещением фазы для определения направления вращения и возможности устранения дребезга. Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
||
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 03.03.2010
Сообщений: 89
|
![]()
Все спасибо ребята за помощь, проблема решена через диспетчер устройств.
Время ожидания по дефолту 16 мсек.Уменшил до 2 и импульс перестал теряться в дебрях драйвера. raxp, спасибо за теорию. Можно конечно и на контроллере через юсби все дело прикрутить, согласен. Почему геркон - да потому что поставить датчик холла или оптику не имеет смысла в моем случае, слишком много гемороя из-за конструктивных особенностей мотора. 1150 импульсов в минуту скорость срабатывания геркона. У самого двигателя конечно обороты гораздо выше, но стоит редуктор. И еще минимум месяц уйдет на изучение контроллеров, Си, или асемблера, вот потому такая реализация. |
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]() Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 03.03.2010
Сообщений: 89
|
![]()
Да не заполнял. У меня задействованы только cts, dsr, rts, dtr.
Два входа, два выхода. |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Счетчик импульсов через ком-порт | z-wer | Компоненты Delphi | 10 | 21.05.2011 11:01 |
Счетчик импульсов на LPT. Delphi | clone_ | Общие вопросы Delphi | 7 | 29.04.2011 01:29 |
Определенная последовательность импульсов на ком порт | antinup | C++ Builder | 3 | 27.05.2010 09:29 |
Счетчик импульсов | stanik123 | Общие вопросы Delphi | 11 | 09.10.2009 10:10 |
Как получить данные с COM-порта или другого любого порта? | DeLure | Общие вопросы C/C++ | 5 | 20.09.2007 00:50 |