![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
зациклился на циклах(начинающий) [D7, XP]
LAZudhic © (2011-09-08 17:56:00)В цикле надо вставить цикл. теперь по порядку первый цикл чтоб избежать команды goto label(вроде такая команда) дельфи не любит такую команду и не рекамендуется ее применять .второй цикл для паузы от 0,1 до 0,5сек
как бы вы сделали на моем месте какие команды применили
Сергей М. (2011-09-13 21:37:00) [21]
> надеюсь что ответ будет мне понятен
зря надеешься.
спроси почему.
а может самдогадаешься, перечитав свою же ахинею ?
LAZudhic (2011-09-13 21:27:00) [22]ну а теперь нужна помощь в другом как сделать чтоб 1-картинка JPEG сразу появлялась на форме после запуска программы и 2-можно ли без такого типа С:\1\1\1.jpg а проще если рисунок находится в том же каталоге с программой типа 1.jpg(рисунок будет отображать электронную схему при которой правильно будет работать программа ) код программы изложен выше что и куда дописать при использование image на форме?(надеюсь что ответ будет мне понятен будьте пожалуйста подробней ) заранее СПС =)
LAZudhic (2011-09-13 20:07:00) [23]А движки от принтера не надорвутся деревяшки таскать?-всё зависит от типа редуктора конечно страдает производительность повышается точность и к тому же я не деревяшки таскать буду а двигатель с фрезой над деревяшками
теперь второе наконец избавился от цикла for в программе. Кроме палок в колёса и насмешок всё таки были дельные советы спасибо
теперь программа приобрела вот такой вид:
unit Unit15;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;// кнопка Пуск
Button2: TButton;// кнопка СТОП
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Stop: Boolean = False;
implementation
{$R *.dfm}
function Inp32(PortAdr: word): byte; stdcall; external 'inpout32.dll';
function Out32(PortAdr: word; Data: byte): byte; stdcall; external 'inpout32.dll';
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; // переменые
begin
Button2.Enabled:=True;
Button1.Enabled:=False;
Stop:=False;
while not(Stop) do // длительность цикла
begin
//for i := 1 to 10 do
out32(888,17);// вывод на лпт pin 2,упр pin6
out32(888,19);//вывод на лпт pin 2,3,упр pin6
sleep(20);// пауза в милисекундах
out32(888,18);//вывод на лпт pin 3,упр pin6
out32(888,22);//вывод на лпт pin 3,4,упр pin6
sleep(20);// пауза в милисекундах
out32(888,20);//вывод на лпт pin 4,упр pin6
out32(888,28);//вывод на лпт pin 4,5,упр pin6
sleep(20);// пауза в милисекундах
out32(888,24);//вывод на лпт pin 5,упр pin6
out32(888,25);//вывод на лпт pin 5,1,упр pin6
sleep(20);// пауза в милисекундах
Application.ProcessMessages
end
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Stop:=True;
Button2.Enabled:=False;
Button1.Enabled:=True;
end;
end.
Inovet (2011-09-13 18:43:00) [24]> [50] aleko © (13.09.11 18:22)
> Что такое венгерская нотация? Первый раз слышу...
Забанили в поиске?
http://ru.wikipedia.org/wiki/%D0%92%D0%B5%D0%BD%D0%B3%D0%B5%D1%80%D1%81%D0%BA%D0%B0%D1%8F_%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F
aleko (2011-09-13 18:22:00) [25]
> Для компонентов можно использовать венгерскую нотацию, типа
> btnStart или dlgOpenFile или lblTime.
Что такое венгерская нотация? Первый раз слышу...
Достаточно мало-мальски знать англоязычный язык. Хотя и у меня с ним не совсем ладно, однако слова типа алярм, ворнинг, сэйв и импорт вполне понимаю. А для других случаев в сети есть транслейтер. Переведет хоть с языка суахили.
Inovet (2011-09-13 10:55:00) [26]> [48] Германн © (13.09.11 10:37)
> Ну там, где "Поехали".
> LAZudhic (12.09.11 17:25) [42]
ДОСовская по управлению шаговым двигателем? По распайке разъёма разве что пожно идентифицировать.
Идентифицировал
http://subscribe.ru/archive/comp.hard.38445/200704/15064647.html
Германн (2011-09-13 10:37:00) [27]
> По какой ссылке?
Ну там, где "Поехали".
LAZudhic (12.09.11 17:25) [42]
Inovet (2011-09-13 09:21:00) [28]> [46] Германн © (13.09.11 00:24)
> что код по ссылк
По какой ссылке?
Германн (2011-09-13 00:24:00) [29]
> LAZudhic (12.09.11 17:25) [42]
>
> НУ ЧТО поехали
Мне одному кажется, что код по ссылке - "перевод на Дельфи" старой Паскалевской проги, написанной для MSDOS?
Inovet (2011-09-12 21:31:00) [30]А движки от принтера не надорвутся деревяшки таскать?
Сергей М. (2011-09-12 21:20:00) [31]Дрова из-под такого станка выползут, вестимо, классные)
Чуть драчевым напильником шлифануть - и готова итальянская мебель)
Inovet (2011-09-12 18:06:00) [32]> [42] LAZudhic (12.09.11 17:25)
> при нажатии кнопки пуск запускается цикл а при нажатии кнопки
> стоп и команды break выход из цикла
type
TForm1 = class(TForm)
btStart: TButton;
btStop: TButton;
procedure btStartClick(Sender: TObject);
procedure btStopClick(Sender: TObject);
private
{ Private declarations }
FlagStop: bool;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btStartClick(Sender: TObject);
begin
FlagStop := false;
while not FlagStop do
begin
Application.ProcessMessages;
end;
ShowMessage('Stop');
end;
procedure TForm1.btStopClick(Sender: TObject);
begin
FlagStop := true;
end;
end.
LAZudhic (2011-09-12 17:25:00) [33]НУ ЧТО поехали нужна маленькая помощь к примеру при нажатии кнопки пуск запускается цикл а при нажатии кнопки стоп и команды break выход из цикла(посоветуйте как это сделать и если не сложно объяснить )
вот код программы после создания второй кнопки:
unit Unit155;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Inp32(PortAdr: word): byte; stdcall; external 'inpout32.dll';
function Out32(PortAdr: word; Data: byte): byte; stdcall; external 'inpout32.dll';
procedure TForm1.Button1Click(Sender: TObject);
var i,j,a,b: Integer;
begin
for i := 1 to 400 do
begin
out32(888,17);
out32(888,19);
sleep(20);
out32(888,18);
out32(888,22);
sleep(20);
out32(888,20);
out32(888,28);
sleep(20);
out32(888,24);
out32(888,25);
sleep(20);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
end;
end.
LAZudhic (2011-09-12 16:58:00) [34]вот можешь воодушевить =)
Сергей М. (2011-09-12 16:54:00) [35]
> Станок надеюсь будет работать по дереву
Ну по дереву еще ладно - дерево и не такое стерпит)..
Там плюс-минус туда-сюда пол-сантимметра потом допиливается, шпаклюется-шлифуется и лажа "станкопрограммиста" в результате практически не заметна)
LAZudhic (2011-09-12 16:45:00) [36]Простите меня, что не мог раньше ответить. В реальности движок работает 33 секунды этой установкой for 400. Станок надеюсь будет работать по дереву (но до это ещё долго) ну а теперь начинаю изучать команды break и go to .Всем спасибо!!!
han_malign (2011-09-09 09:45:00) [37]Другое дело, что сам
out32может быть слишком длительным(тракт: приложение -(прослойки вроде inpout32.dll)-> драйвер -> устройство) и один фиг необходимые тайминги не будут соблюдаться...
Это уже решается только независимым(внешним) контроллером на который в потоковом режиме загружается циклограмма с метками времени... Соответственно, если нужно непрерывное 7*24 управление, глубина "предсказания" циклограммы(и соответственно буфера контроллера) рассчитывается из латентности тракта приемо-передачи.
(собственно так и выглядит "мягкое реальное время")
han_malign (2011-09-09 09:26:00) [38]- более-менее честный подход, с незначительным дребезгом...
total:= loopCount * stageCount;
timeBeginPeriod(1);
loop_stage:= 0;
start:= timeGetTime;
while(loop_stage < total)do begin
_time:= timeGetTime - start;
if( _time >= loop_stage * delayMS)then begin
case(loop_stage mod stageCount)of
0: begin
out32(888,17);
out32(888,19);
end;
...
3: begin
out32(888,24);
out32(888,25);
end;
...
end;
inc(loop_stage);
end else
sleep((loop_stage * delayMS - _time) div 2{запас на дребезг кванта});
end;
timeEndPeriod(1);
han_malign (2011-09-09 08:57:00) [39]
> В мирное время - точно в миллисекундах.
> В военное - есть нюансы, там и значение синуса pi/2 может четырёх достигать.
вот так может и будет похоже на 1мс:
uses MMSystem;
...
timeBeginPeriod(1);
for ... sleep(1); ...
timeEndPeriod(1);
- вроде Русинович писал, что мультимедийный таймер глобально квант изменяет...
хотя лучше конечно REALTIME_PRIORITY_CLASS/THREAD_PRIORITY_TIME_CRITICAL
и спин вокруг QueryPerformanceCounter,
главное убедиться что CPU ядер хотя бы два...
Inovet (2011-09-08 23:51:00) [40]А что за станок, печатные платы изготавливать поди?