Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2008, 23:02   #21
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

1. Вроде как есть виртуальная машитна ДОСа... или нет ?!?
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...

Последний раз редактировалось Карась; 05.01.2008 в 23:12.
Карась вне форума Ответить с цитированием
Старый 05.01.2008, 23:09   #22
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Карась Посмотреть сообщение
2. К чему вы это сказали?
1000 импульсов в секунду это 1000 Гц... Не так уж и много...
Ктомуже станком управляет отдельный процессор.
Никакого отдельного процессора, все старое железо от станка давно выкинули, управление происходит непосредственно с компа.
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 05.01.2008, 23:10   #23
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

Цитата:
1) Почему же тогда ДОСовская прога нормально работает под виндой из консоли? Правда не пробовал что будет если паралельно запустить другую задачу.
1. Не знаю, я не видел код той программы.
2. Запускать ничего параллельно и не нужно, и так в системе есть другие задачи.
3. А правильно ли будет работать устройство, если при передаче импульсов будут "пробелы"?
4. Вот такая идея, может натолкнет на мысль... Моему знакомому однажды нужно было посылать прямоугольные импульсы по RS-232 высокой частоты. Вместо того, чтобы заводить таймер и посылать при каждом тике то 0 то 1 на линиях синхронизации, он запрограммировал RS-232 на примерно нужную ему частоту и послал целый пакет из чередующихся единичек и нулей. Таким образом получил нужную последовательность примерно нужной частоты на линии TxD.
Ins вне форума Ответить с цитированием
Старый 05.01.2008, 23:17   #24
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Ins Посмотреть сообщение
3. А правильно ли будет работать устройство, если при передаче импульсов будут "пробелы"?
Работать будет правильно, просто во время "пробела " двигатель будет стоять пока не придет новый импульс. Только скорость перемещения не будет соответствовать заданной.
Уже Чему-то научился Но этого мало

Последний раз редактировалось chingiz; 05.01.2008 в 23:20.
chingiz вне форума Ответить с цитированием
Старый 05.01.2008, 23:26   #25
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

Цитата:
Работать будет правильно, просто во время "пробела " двигатель будет стоять пока не придет новый импульс.
Вот он у вас и простаивает десяток-другой миллисекунд (хотя простаивает ли, неужели у двигателя нет инерции?) при запуске DOS-программы из Windows. А если такие простои некритичны, можно закрыть на них глаза и крутить цикл на каком-нибудь QueryPerfomanceCounter в отдельном потоке. Только учтите, что при этом загрузка процессора будет всегда 100%. Можно этому потоку поставить приоритет пониже, тогда это не сильно будет мешать другим потокам, или наоборот - повыше, тогда будет меньше "пробелов" в передаче сигнала, но система станет менее отзывчива.

Думаю, на такой компромисс можно пойти: скорость двигателя не будет точно соответствовать заданной и погрешность будет определяться загрузкой процессора другими задачами, но для механического устройства, такого как двигатель, несколько десятков миллисекунд несколько раз в секунду - ИМХО мелочь. Скорость не успеет упасть заметно.

PS: Ну и для вывода в порт я бы использовал драйвер GiveIO для прямого доступа к порту, так как через API - может за такой малый промежуток времени не успеть отправить, API требуют переход в режим ядра и обратно, да и сам запрос проходит через несколько слоев драйверов.

Последний раз редактировалось Ins; 05.01.2008 в 23:39.
Ins вне форума Ответить с цитированием
Старый 06.01.2008, 00:39   #26
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию



Надумывается только один выход из сложившейся ситуации.
Спаять простенькую приставку на цифре. Использую кварцы можно быть уверенным в высокой точности. Блок очень простой, содержит пару микросхем. Диапазон выходной частоты высок и в зависимости от микросхем может составить пару сотен МГц.

Суть проста: запускающий импульс подаётся на одновибратор, одновибратор включается на заданное время (1 сек) и тем самым включает генератор 10 кГц на 1 сек. В итоге у нас на двигатель за секунду приходит 10 000 импульсов.

Меняя длительность сигнала первого генератора (тот что 1 Гц) мы меняем колво импульсов на движок.

И вот когда надо переместить быстро и далеко мы пользуем эту схему...
А там где медленно и близко мы передаём герцы с компа.
Изображения
Тип файла: jpg 23.jpg (12.8 Кб, 247 просмотров)
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 06.01.2008, 19:40   #27
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Спасибо всем что не отказали в помощи. Мной получено столько информации что все это необходимо переварить и осмыслить. Попробую всетаки что нибудь сотворить с системным таймером, хотябы ради спортивного интереса. До встречи в новой теме.
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 06.01.2008, 20:29   #28
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Кстати буквально несколько минут назад нашел в делфи функцию Sleep, аналог Delay в паскале, так вот при задании задержки выполнения в 1 милисекунду на моем компе получается задержка в 2 милисекунды. А в таймере при задании 1 милисекунды получается примерно 19 милисекунд. А это уже кое - что. Поэтому я все больше склоняюсь к тому что если поработать с системным таймером может что и выйдет? Как можно из Делфи поиздеваться над системным таймером? Может кто знает?
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 06.01.2008, 21:03   #29
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Я ведь давал ссылку на мультимедийный таймер, тестируйте, работает намного корректнее дельфийского

Здесь подробнее http://decoding.narod.ru/api/mmtimer/mmtimer.html

Обратите внимание на разницу:
Системный таймер: Если обработчик таймера не успевает закончить все действия в установленный интервал, то последующие вызовы этого обработчика становятся в очередь. Это приводит к тому, что на разных компьютерах приложение работает с разной скоростью. Сама же CallBack функция вызывается в контексте основного потока.
Мультимедийный таймер: Если обработчик таймера не успевает закончить все действия в установленный интервал, то последующие вызовы накапливаться не будут. Сама же CallBack функция вызывается в контексте отдельного потока.
Вложения
Тип файла: zip ProbaTime.zip (8.2 Кб, 224 просмотров)

Последний раз редактировалось _Dmitry; 07.01.2008 в 10:45.
_Dmitry вне форума Ответить с цитированием
Старый 07.01.2008, 21:46   #30
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
Я ведь давал ссылку на мультимедийный таймер, тестируйте, работает намного корректнее дельфийского
Впечатляет!!! Круто!!! Задавал 1 милисекунду так mmtimer выдает именно 1 милисекунду. (Засекал примерный отсчет на обыкновенных часах за минуту).
Кстати откуда этот ММтаймер взялся в стандартной установке Делфи?
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение функции nikleb JavaScript, Ajax 7 10.08.2008 01:49
указатель мыши автоматически должен совершать клик по заданному месту на экране, через промежуток времени Deefrost Qt и кроссплатформенное программирование С/С++ 5 16.05.2008 20:25
Как зделать авто выполнение Editor Общие вопросы Delphi 5 27.04.2008 21:01
Выполнение действия с компонентами в цикле Ermiss Общие вопросы Delphi 4 01.11.2007 23:54
Выполнение действия в заданное время WOWan234 Помощь студентам 6 02.05.2007 01:52