Конференция "WinAPI" » DELPHI и мультимедиа таймер(ы) Windows [D7]
 
  • Я не программист, а электронщик-аппаратчик. Реализовал некий проект(с применением 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


    до наступления которых данные будут приниматься и накапливаться, но не передаваться на обработку,
    а после которых обработать весь пакет данных, и также целиком отправить ответный пакет.

  • > 2. Да, таких таймеров может быть достаточное количество.

    Спасибо за ответ. Разобрался. В тестовой программке запустил три ММ-таймера с разными интервалами. Все три работают в одном потоке. Проблем нет.
    Также помогли товарищи ученые(доценты с кандидатами). Прочитал методичку для студентов СЕВЕРО-КАВКАЗСКОГО ГОРНО-МЕТАЛЛУРГИЧЕСКОГО ИНСТИТУТА (ВЛАДИКАВКАЗ). Хорошо они студентов учат. Многое стало понятно:
    http://www.kafedra-aoi.ru/folder/950SRV_LB.pdf

    Насчет COM-порта особых проблем нет, поскольку протокол обмена примитивный (по системному таймеру с интервалом ~50мс пакетами по 20 байт) с подтверждением правильности содержимого принятого пакета и его номера. Если пакет теряется(или искажен) - ничего страшного, пакет будет вновь затребован и повторен. Программа работает даже только с одним (главным) потоком. Контроллер самодостаточен(помимо сторожевого таймера имеет аппаратную защиту от "зависания") и будет управлять станком даже если терминал будет отсутствовать. ММ-таймер был введен для "защиты от дурака" и других непредсказуемых явлений. Например, если нажать мышью (и продолжать удерживать) кнопку свернуть/развернуть форму, то выполнение главного потока прекращается (пока не отпустишь кнопку мыши). ММ-таймер опознает этот момент(точнее любую приостановку главного потока) и на это время обменивается с контроллером дежурными(незначащими) пакетами. Типа - подтверждаю, что терминал жив, а не сдох.
    P.S. исполнение любой API-функции в программе контролируется. Особенно это касается USB-COM адаптера, который имеет свой хэндл, но не является составной частью компа(ноута) и его нечаянно можно физически удалить (выдернуть его шнур из гнезда USB или плохой контакт в гнезде USB).
    Не получилось кратко. Наверное надо было действовать по принципу: "Лучше скажи мало, но хорошо".
  • KSergey © (10.05.16 10:23) [4]
    Ну почему столько любительщины на просторах страны??!

  • > Ну почему столько любительщины на просторах страны??!

    Увы. Сейчас к программированию приобщаются даже домохозяйки (не из кадетского корпуса), которые иногда неожиданно показывают неплохие результаты. И это - ОЧЕНЬ ХОРОШО. Искусство программирования - в массы, а не только для "жрецов". Раньше никто ничего не понимал в компах, а теперь каждый второй - "продвинутый юзер". А для гуру по программированию необходимо организовать отдельный сайт, чтобы они там общались и самоутверждались перед себе подобными.
    P.S. первый компьютер APPLE был создан в гараже любителями электроники. И  только после этого появились профессионалы ("жрецы") по его использованию.
 
Конференция "WinAPI" » DELPHI и мультимедиа таймер(ы) Windows [D7]
Есть новые Нет новых   [118625   +12][b:0][p:0.001]