-
Владимир Борисович (07.05.16 21:55) [0]Я не программист, а электронщик-аппаратчик. Реализовал некий проект(с применением Delphi7), где станком с ЧПУ управляет самопальный контроллер(плата) на базе ATmega324P(RISC процессор) в режиме реального времени. Внешнюю связь с контроллером поддерживает комп с 32-разрядной ОС(WinXP или Win7) выполняющий роль терминала для связи оператора с контроллером через USB-COM адаптер. В программе на Delphi пришлось применить мультимедийный таймер (функция: timeSetEvent), который автоматически создает свой поток. Это понадобилось для связи компа с контроллером, дабы не возникал TimeOut (потеря связи с контроллером в течение некоего времени(доли секунды)).{Прошу прощения - это не единственный вариант решения "этого дела", но я выбрал этот вариант дабы не создавать свой уникальный поток}.
Все реализовано и все работает. Но сейчас, по прошествии некоторого времени у меня возникло 2 вопроса:
1. Что делал мультимедийный таймер Windows до того, как я его переинициировал в своей программе?
2. Возможно ли в своей программе запустить сразу несколько мультимедийных таймеров с разными задержками? Т.е. несколько раз применить функцию timeSetEvent для разных по времени таймеров одновременно работающих? (В MSDN об этом ничего не говорится). -
Германн © (08.05.16 03:23) [1]Удалено модератором
-
NoUser © (08.05.16 17:42) [2]1. timeSetEvent создаёт и настраивает программный (не аппаратный) таймер
и отдаёт (возвращаемый функцией результат) вам в пользование.
2. Да, таких таймеров может быть достаточное количество.
зы.
Закладываться на таймеры которые должны срабатывать чаще ~50 раз в секунду в программах под XP, W7 не нужно.
Как вариант, можно настроить TimeOut-ыSetCommTimeouts
до наступления которых данные будут приниматься и накапливаться, но не передаваться на обработку,
а после которых обработать весь пакет данных, и также целиком отправить ответный пакет. -
Владимир Борисович (09.05.16 17:00) [3]
> 2. Да, таких таймеров может быть достаточное количество.
Спасибо за ответ. Разобрался. В тестовой программке запустил три ММ-таймера с разными интервалами. Все три работают в одном потоке. Проблем нет.
Также помогли товарищи ученые(доценты с кандидатами). Прочитал методичку для студентов СЕВЕРО-КАВКАЗСКОГО ГОРНО-МЕТАЛЛУРГИЧЕСКОГО ИНСТИТУТА (ВЛАДИКАВКАЗ). Хорошо они студентов учат. Многое стало понятно:
http://www.kafedra-aoi.ru/folder/950SRV_LB.pdf
Насчет COM-порта особых проблем нет, поскольку протокол обмена примитивный (по системному таймеру с интервалом ~50мс пакетами по 20 байт) с подтверждением правильности содержимого принятого пакета и его номера. Если пакет теряется(или искажен) - ничего страшного, пакет будет вновь затребован и повторен. Программа работает даже только с одним (главным) потоком. Контроллер самодостаточен(помимо сторожевого таймера имеет аппаратную защиту от "зависания") и будет управлять станком даже если терминал будет отсутствовать. ММ-таймер был введен для "защиты от дурака" и других непредсказуемых явлений. Например, если нажать мышью (и продолжать удерживать) кнопку свернуть/развернуть форму, то выполнение главного потока прекращается (пока не отпустишь кнопку мыши). ММ-таймер опознает этот момент(точнее любую приостановку главного потока) и на это время обменивается с контроллером дежурными(незначащими) пакетами. Типа - подтверждаю, что терминал жив, а не сдох.
P.S. исполнение любой API-функции в программе контролируется. Особенно это касается USB-COM адаптера, который имеет свой хэндл, но не является составной частью компа(ноута) и его нечаянно можно физически удалить (выдернуть его шнур из гнезда USB или плохой контакт в гнезде USB).
Не получилось кратко. Наверное надо было действовать по принципу: "Лучше скажи мало, но хорошо". -
Ну почему столько любительщины на просторах страны??!
-
Владимир Борисович (10.05.16 20:01) [5]
> Ну почему столько любительщины на просторах страны??!
Увы. Сейчас к программированию приобщаются даже домохозяйки (не из кадетского корпуса), которые иногда неожиданно показывают неплохие результаты. И это - ОЧЕНЬ ХОРОШО. Искусство программирования - в массы, а не только для "жрецов". Раньше никто ничего не понимал в компах, а теперь каждый второй - "продвинутый юзер". А для гуру по программированию необходимо организовать отдельный сайт, чтобы они там общались и самоутверждались перед себе подобными.
P.S. первый компьютер APPLE был создан в гараже любителями электроники. И только после этого появились профессионалы ("жрецы") по его использованию.