0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 26
|
|||||||||||
1 | |||||||||||
Работа с COM портом13.01.2016, 20:42. Показов 3752. Ответов 5
Метки нет (Все метки)
Добрый день, уважаемые знатоки!
Помогите пожалуйста выработать логику работы программы. Имеется электродвигатель, с одним магнитом на валу. Имеется датчик Холла (магнитного поля) и имеется вот такой вот прибор (
Принцип работы: когда магнита нет рядом с датчиком, то на логический вход прибора подается логический 0, если магнит рядом - то 1 соответственно. Прибор не умеет автоматически транслировать состояние логического входа. Для этого на форме есть таймер (10 мс), который отправляет запрос на состояние логического входа в прибор. Загвоздка вот в чем, если обороты вала двигателя НЕ высокие, то магнит будет пролетать мимо датчика, например, 100 мс. За это время таймер 10 раз опросит вход и 10 раз получит единицу. Далее есть еще время наполнения буфера из COM порта (100 мс). Итого я могу счетчиком считать кол-во полученных единиц, но они не будут соответствовать реальному кол-ву оборотов двигателя. По логике, надо ловить переход с 1 на 0. Как только в такой последовательности пришли данные - в счетчик +1. Ну а потом суммировать данные счетчика в секунду, в минуту и т.д. Итак, как возможно организовать такой подсчет или как вообще реализовать данную программу? Имеется такой код:
Появилась вот такая идея: раз в секунду запускать поток и считывать данные из порта. В теле потока при помощи флагов определяем последовательность 1-0. Если такая последовательность была, то с счетчику добавляем 1. В конце потока (окончании чтения данных из буфера порта) - синхронизация с телом программы, передача показания счетчика, и вычисления оборотов и т.д. Допустимо ли такое решение?
0
|
13.01.2016, 20:42 | |
Ответы с готовыми решениями:
5
Работа с последовательным портом Работа с COM портом реальным и виртуальным работа с COM портом Работа с COM портом |
Пишу на Delphi...иногда
|
|
13.01.2016, 21:52 | 2 |
стоит начать с того, что Windows - НЕ СРВ и конкретные значения времени, как написано каждые 100 мс, тут особо не поймаешь, имхо если требуется точность, то стоит посмотреть в сторону микроконтроллеров
имхо, стоит поступить так: имеется поток, который с какой-либо периодичностью отправляет запросы и получает в ответ 0 или 1, хранит результат предыдущего запроса и как-то приблизительно подсчитывает требуемый временной интервал расчета. полученный ответ сравнивается с предыдущим, если это вожделенный переход с 1 на 0, то счетчик переходов +1, если время измерения закончилось, то отдаем основному потоку результат расчета скорости, сбрасываем счетчик времени и начинаем сначала
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
14.01.2016, 00:43 | 3 |
Имхо, самое нормальное решение - это дополнительная железяка, которая всё меряет. В данном случае считает обороты. А PC-программа уже в спокойном (нормальном для ОС Windows) режиме получает с этой железяки готовые данные.
0
|
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 26
|
|||||||||||
14.01.2016, 15:09 [ТС] | 4 | ||||||||||
А как можно реализовать запоминание предыдущей переменной в зацикленном потоке? Лыжи не едут...
Добавлено через 57 минут Пока придумал вот такое решение:
Добавлено через 2 часа 36 минут Вопрос, надеюсь, решен полностью)) По нажатию кнопки запускается поток и таймер, таймер настроен на 1 секунду. При срабатывании таймера из потока получаю кол-во последовательностей 1-0, обрабатываю его и останавливаю поток с обнулением переменных, и таймер запускается снова. Цикл таймера повторяется. В итоге получаю довольно точное кол-во оборотов двигателя в секунду и минуту.
0
|
1 / 1 / 0
Регистрация: 12.07.2012
Сообщений: 46
|
|
18.01.2016, 18:57 | 5 |
Сделал такую примерно такую программу три года назад, в Си Билдер, используя сторонние библиотеки работы с компортом и таймера точного времени, ибо средствами ВИНАПИ ахинея полнейшая в качестве результата получалась с моими познаниями, правда, весьма правдоподобная. Нынче, решил её модифицировать, не используя чужое явно Ерунда в Билдере получается, причём, со страшным скрипом - насчёт спецов посоветовать или сказать, тут что-либо толковое, тут нету - зависит от версии Ембаркадеро Ну, Дельфи кондовей, думаю получится. А насчёт
какие данные железяка ценой в полдоллара может дать, зачем тогда вычислительные возможности компьютера? Сегодня буквально установил Дельфи7, и только решил заняться, а тут... Почти готовые исходники Один вопрос - программа из под Дельфи7 будет на Виндовс7х64 работать?
0
|
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 26
|
|
18.01.2016, 19:18 [ТС] | 6 |
Не в курсе даже. Могу исходниками поделиться на мыло, но допиливать самостоятельно придется.
И у меня стороннее железо, а не прямая работа с портом.
0
|
18.01.2016, 19:18 | |
18.01.2016, 19:18 | |
Помогаю со студенческими работами здесь
6
Работа с COM Портом Работа с LPT портом Работа с LPT портом работа в delphi с СОМ-портом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |