Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизПодскажите, как организовать аналог Timer a, чтобы определенная Найти похожие ветки
← →
IDONTKNOW (2005-02-15 14:58) [0]процедура выполнялась быстрее 1ms?
← →
Digitman © (2005-02-15 15:05) [1]
> IDONTKNOW
тебе оно нафих не надо
ибо не ведаешь что творишь
← →
Ega23 © (2005-02-15 15:12) [2]AFAIK, в user-mode - нельзя. Может быть можно в kernel-mode
← →
Ega23 © (2005-02-15 15:15) [3]AFAIK, в user-mode - нельзя. Может быть можно в kernel-mode
← →
IDONTKNOW (2005-02-15 16:27) [4]
> Digitman © (15.02.05 15:05) [1]
>
> > IDONTKNOW
>
>
> тебе оно нафих не надо
> ибо не ведаешь что творишь
Абыдно...надо, товарищи, очень надо.
Моя программа преобразует обычный принскрин из Rulay(программа для разработки печ.плат) в путь, понятный для прохождения фрезы. Эдакий спец. принтер, управляемый моей программулиной, с координатами x,y и z(положение фрезы) и т.д. и т.п. В общем, нахождение этого пути у меня висит на таймере и, сами понимаете, время сего процесса лихо увеличивается по квадрату в зависимости от размера схематулинки.
Например,картинка 25х25 пикселей обрабатывается ~10 сек.
А это не есть хорошо. Это ох как плохо.
← →
Digitman © (2005-02-15 16:37) [5]галиматья какая-то ...
← →
Arm79 © (2005-02-15 16:49) [6]1) А зачем привязка к таймеру?
2) используй qnx в качестве ОС. Там более реально достичь таких мелких интервалов
ЗЫ И, кстати, это как ты обрабатываешь картинку, если время обработки 625 точек равно 10 секундам? Вроде бы быстродействие компьютеров шагнуло далеко вперед...
← →
olookin © (2005-02-15 16:50) [7]Hyperkernel (NemaTron, NemaSoft) позволяет реализовать такты длительностью до 25 мкс. Встраивается в систему и работает как ее ядро (как я это понимаю). См. можно на www.nemasoft.com
← →
Eraser © (2005-02-15 17:47) [8]IDONTKNOW
Очень согласен с digitman"ом!!!
Что твоя фреза ПОЛНОСТЬЮ на программном обеспечени работает, и у неё внутри нету процессора???? Бред.
← →
IDONTKNOW (2005-02-15 17:54) [9]
> Eraser © (15.02.05 17:47) [8]
> IDONTKNOW
>
> Очень согласен с digitman"ом!!!
> Что твоя фреза ПОЛНОСТЬЮ на программном обеспечени работает,
> и у неё внутри нету процессора???? Бред.
Фреза управляется тремя шаговыми двигателями с lpt порта
← →
arhis (2005-02-15 17:56) [10]вообще это называется драйвер. Добро пожаловать в MSC
← →
IDONTKNOW (2005-02-15 17:59) [11]
> olookin © (15.02.05 16:50) [7]
Спасибо, посмотрю
> Arm79 © (15.02.05 16:49) [6]
Что-то мозги уже кипят, совсем ничего не понимаю, почему до появления сообщения "Alles" проходит 10 сек?(интервал таймера -1)
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if x<25 then
begin
Inc(x,1);
end else
begin
if y<25 then
begin
Inc(y,1);
x:=0;
end else
begin
ShowMessage("Alles!");
end;
end;
end;
← →
IDONTKNOW (2005-02-15 18:07) [12]
> arhis (15.02.05 17:56) [10]
> вообще это называется драйвер. Добро пожаловать в MSC
Если припаять к lpt порту светодиод и написать программу, которая подает на этот разряд 1, то это тоже драйвер?
← →
Алхимик © (2005-02-15 18:16) [13]Driver - Служебная программа, выполняющая функции посредника между операционной системой и внешним устройством.
Ссылок: Зубков С. В. Assembler для DOS, Windows и Unix. М., ДМК Пресс, 2004г.
← →
arhis (2005-02-15 18:22) [14]IDONTKNOW (15.02.05 18:07) [12]
Абсолютно верно. просто очень простой.
А вы пытаетесь в дельфях написать программу позиционирования сложного устройства в трех измерениях в реальном времени. Я не очень разбираюсь в драйверах, но драйвер, какой-нибудь, видюхи по сравнению с этим - полная фигня.
← →
IDONTKNOW (2005-02-15 18:36) [15]
> arhis (15.02.05 18:22) [14]
Это дипломная работа, большая точность позиционирования ненужна, там все гораздо проще
← →
Anatoly Podgoretsky © (2005-02-15 19:30) [16]Для того чтобы "процедура выполнялась быстрее 1ms?" таймер не требуется, таймера они вообще то для другого.
Кстати раз шаговый двигатель, то интервал паузы между шагами роли не играет.
← →
IDONTKNOW (2005-02-15 19:41) [17]
> Anatoly Podgoretsky © (15.02.05 19:30) [16]
ШД не управляется в таймере.
В таймере идут расчеты, т.е. обрабатывается картинка. Проблема в том, что я не могу придумать альтернативу таймеру. В for do расчет организовать также нельзля, потому что x и y не обязательно идут слева-направо, сверху-вниз, они изменяются в любую сторону, в зависимости от схемы
← →
Fay © (2005-02-15 19:46) [18]
var
x, y : Integer;
procedure TForm1.Button1Click(Sender : TObject);
function GetPerformanceCounter : Int64;
begin
QueryPerformanceCounter(Result);
end;
var
c, f : Int64;
i : Integer;
tc : DWORD;
label
Label_Jopa;
begin
if not QueryPerformanceFrequency(f) then
RaiseLastOSError;
tc := GetTickCount;
f := f div 1000;
x := 0;
y := 0;
i := 0;
c := GetPerformanceCounter;
while True do
begin
Inc(i);
while GetPerformanceCounter < (c + i * f) do
;
if x < 25 then
Inc(x)
else if y < 25 then
begin
Inc(y, 1);
x := 0;
end
else
begin
ShowMessage(Format("%d ms, i = %d", [GetTickCount - tc, i]));
Break;
end;
end;
end;
← →
Fay © (2005-02-15 19:55) [19]В случае "процедура выполнялась быстрее 1ms"
f := f div нечто_большее_тысячи;
← →
Verg © (2005-02-15 20:05) [20]
> [17] IDONTKNOW (15.02.05 19:41)
Не, непонятно абсолютно.
Какой "расчет" ты оргнизуешь в таймере? Почему в таймере? На кой ляд тут нужен таймер?
← →
GEN++ © (2005-02-15 20:31) [21]Сколько раз разработчики наступали на эти грабли:
Windows не предназначена для управления ШД.
ШД ОБЯЗАН управлять КОНТРОЛЛЕР !!!!
А вот управлять контроллером - сколько угодно.
← →
Vaitek © (2005-02-15 20:42) [22]Сейчас пишу нечто подобное. Только расчет там зафигистический, поскольку матмодель пересчета координат сам писал 8-). В общем металлообрабатывающий станок у которого платформа шинделя крепится на трех перемещаемых вертикально штангах. Для решения нелинейной системы из 11 уравнений использую метод Возмущений (линеаризация).
Но не смотря ни на что, на Р4 2.8ГГц+НТ расчет занимает меньше 1мс. Подсчет стандартным GetTickCount"ом возваращает обычно 0.
Точность расчета ~ 0.000001
Короче я сделал так:
Событие вызова перемещения режущего инструмента у меня вызывается по таймеру сделанному мною в отдельном потоке на основе вышеуказанного QueryPerformanceCounter. После перерасчета новые координаты сохраняются.
Еще один поток перересовывает изображение на экране, DirectX (я тут раздел по играм просто завлил тупыми вопросами 8-). Каоординаты берет выше сохраненные. Потоки работают асинхронно.
Еще хочу один поток сделать для пердварительного расчета будущих координат, поскольку считает комп быстрее чем выполняется программа.
На станках эта функция кажись LookAhead называется.
Не могу гарантировать, что это оптимальный вариант - но у меня работает 8-).
← →
Eraser © (2005-02-15 20:55) [23]IDONTKNOW
Не знаю, что там у вас за институт (и что за руководитель проекта), но ИМХО надо либо самому делать контроллер и писать к нему драйвер (согласен с GEN++), либо писать драйвер к какому-либо контроллеру. Но писать драйвер напрямую к двигателю это что-то не то. Конечно я не сомневаюсь, что вся эта схема у тебя заработает, но для производства это не годиться. PC - очень не надёжная штука для ПРЯМОЙ работы со станками.
ИМХО нужен контроллер (процессор+память+интерфейс).
← →
Vaitek © (2005-02-15 21:05) [24]Power Automation.
Промышленный комп + NT4/W2000 + Плата контроллера + шкаф с оборудованием, управляющий двигателями и т.п.
Так это делается у нас.
← →
Eraser © (2005-02-15 21:08) [25]Vaitek ©
Что и требовалось доказать...
Но как я понимаю от этого IDONTKNOW"у не легче, раз заставили- надо делать!
Попробуй совместить НЕприятоне с полезным, копай в сторону DDK.
← →
Defunct © (2005-02-16 00:33) [26]Eraser © (15.02.05 21:08) [25]
IMHO не надо тут даже DDK.
http://www.vbrussian.com/Article.asp?ID=81
смотреть в сторону TVicHW32
> ШД ОБЯЗАН управлять КОНТРОЛЛЕР !!!!
Это уж кто как хочет так и делает.
Контроллер тоже можно сделать на x86 под windows. :)
← →
MegaVolt © (2005-02-16 13:13) [27]>Контроллер тоже можно сделать на x86 под windows. :)
:):) Ага можно только потом и появляется вопрос как выдержать требуемую времянку.
Хотя чесно говоря я так и не понял проблемы. Если всё же решили управлять движком с винды значит времянка не очень критична т.е. если я не могу управлять быстрее 1 ms значит можно управлять и на 2 и на 3 и на 10 и вообще как угодно. Но при этом станок будет работать дольше и все. Если же времянка должна быть соблюдена очень точно то винда в этом не помощник. нужно ставить себе ядра операционок который могут работать в реальном времени. Они позволяют делать такие фичи. Но стоят денег.
Итак:
В первом случае опиши подробно что у тебя есть на входе и что нужно получить на выходе. Как ты это делаешь можешь написать но это не обязательно. Тебе подскажут как это лучше сделать нормально.
Во втором случае ставь операционку реального времени или делай некий небольшой контроллер который позволяет выдерживать времянку требуюмуб движкам но брать данные так как их может выдавать винда. Т.е. некая буферная память+ПЛИСина или микроконтроллер.
← →
Vaitek © (2005-02-16 13:18) [28]Обычно на плате микроконтроллера свой микропроцессор и таймер. А из какой ОС ты будешь им управлять - зависит лишь от твоих личных предпочтений и наличия драйверов.
Ну вообщем как в последнем абзаце мегавольта.
← →
idontknow (2005-02-16 16:07) [29]Всем спасибо за ответы, проблема решена, на данный момент вопросов не имею.
Отдельное спасибо
> Fay © (15.02.05 19:46) [18]
за код
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.031 c