Вопрос № 183010: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: написала программу в delphi 7 в ос windows xp( управление шаговым двигателем через lpt - порт). попыталась запустить программу в windows 98, выдала ошибку требует наличия нек...
Вопрос № 183010:
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: написала программу в delphi 7 в ос windows xp( управление шаговым двигателем через lpt - порт). попыталась запустить программу в windows 98, выдала ошибку требует наличия некоторых библиотек. как мне запустить программу? может нужна другая версия delphi?
Отвечает Евгений/Genia007/ (Профессионал) :
Здравствуйте, Невалёный Виталий Владимирович! Для решения Вашей задачи предлагаю для управления портом LPT использовать драйвер TDLPortIO, который работает как в win xp, так и в win 98-95, скачать драйвер можно здесь. А здесь его описание, правда на английском языке. Вот переделанный исходник под этот драйвер
var Form1: TForm1; z1,z2,z3,z4,z5,z6,z7:integer; x1,x2,x3,x4,x5,x6,x7:integer; DataPort: Word; // Порт для данных implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin // Запускаем драйвер порта из директории с программой DLPortIO1.DriverPath:=ExtractFileDir(ParamStr(0)); // Открываем DriverLINX driver DLPortIO1.OpenDr
iver(); if (not DLPortIO1.ActiveHW) then begin MessageDlg('Не могу открыть DriverLINX driver.', mtError, [mbO
K], 0); end; end;
procedure TForm1.N11Click(Sender: TObject); begin CheckBox1.Checked:=False; end;
procedure TForm1.N12Click(Sender: TObject); begin CheckBox1.Checked:=True; end;
procedure TForm1.N21Click(Sender: TObject); begin CheckBox2.Checked:=False; end;
procedure TForm1.N22Click(Sender: TObject); begin CheckBox2.Checked:=True; end;
procedure
TForm1.N31Click(Sender: TObject); begin CheckBox3.Checked:=False; end;
procedure TForm1.N32Click(Sender: TObject); begin CheckBox3.Checked:=True; end;
procedure TForm1.N41Click(Sender: TObject); begin CheckBox4.Checked:=False; end;
procedure
TForm1.N42Click(Sender: TObject); begin CheckBox4.Checked:=True; end;
procedure TForm1.N51Click(Sender: TObject); begin CheckBox5.Checked:=False; end;
procedure TForm1.N52Click(Sender: TObject); begin CheckBox5.Checked:=True; end;
procedure TForm1.N61Click(Sender: TObject); begin CheckBox6.Checked:=False; end;
procedure TForm1.N62Click(Sender: TObject); begin CheckBox6.Checked:=True; end;
procedure TForm1.N71Click(Sender: TObject); begin CheckBox7.Checked:=False; end;
procedure
TForm1.N72Click(Sender: TObject); begin CheckBox7.Checked:=True; end;
Procedure TForm1.c1_7; var i: integer; begin for i:= 1 to 7 do TShape(FindComponent('Shape'+ inttostr(i))).Brush.Color:= clWhite; // Получаем адрес порта данных try DataPort:= Word($378); except MessageDlg('Вы определили недействительный порт.'+
#13+ 'Действие не выполнено.', mtError, [mbOK], 0); Exit; end; for i := 1 to x1 do begin // Напишите данные DLPortIO1.Port[DataPort]:= $8; Sleep(z1); // Напишите данные DLPortIO1.Port[DataPort]:= $4; Sleep(z1); // Напишите данные DLPortIO1.Port[DataPort]:= $2; Sleep(z1); // Напишите данные DLPortIO1.Port[DataPort]:= $1; Sleep(z1);
case i of 1: Shape1.Brush.Color:= clRed; 1940: begin Shape1.Brush.Color:= clWhite; Shape2.Brush.Color:= clRed; end; 3880: begin Shape2.Brush.Color:= clWhite; Shape3.Brush.Color:= clRed; end; 5820: begin Shape3.Brush.Color:= clWhite; Shape4.Brush.Color:= clRed;
end; 7760: begin Shape4.Brush.Color:= clWhite; Shape5.Brush.Color:= clRed; end; 9700: begin Shape5.Brush.Color:= clWhite; Shape6.Brush.Color:= clRed; end; 11640: begin Shape6.Brush.Color:= clWhite; Shape7.Brush.Color:= clRed; end; end; Application.ProcessMessages; end; end;
Procedure
TForm1.c7_5; var i: integer; begin for i:= 1 to 7 do TShape(FindComponent('Shape'+ inttostr(i))).Brush.Color:= clWhite; // Получаем адрес порта данных try DataPort:= Word($378); except MessageDlg('Вы определили недействительный порт.'+#13+ 'Действие не выполнено.', mtError, [mbOK], 0); Exit; end; for i := 1 to x2 do begin // Напишите данные DLPortIO1.Port[DataPort]:= $1; Sleep(z2); // Напишите данные D
LPortIO1.Port[DataPort]:= $2; Sleep(z2); // Напишите данные DLPortIO1.Port[DataPort]:= $4; Sleep(z2); // Напишите данные DLPortIO1.Port[DataPort]:= $8; Sleep(z2); case i of 1: Shape7.Brush.Color:= clRed; 1940: begin Shape7.Brush.Color:= clWhite; Shape6.Brush.Color:= clRed; end; 3880: begin Shape6.Brush.Color:= clWhite;
Shape5.Brush.Color:= clRed; end; end; Application.ProcessMessages; end; end;
Procedure TForm1.c5_5; var i: integer; begin for i:= 1 to 7 do TShape(FindComponent('Shape'+ inttostr(i))).Brush.Color:= clWhite; // Получаем адрес порта данных try DataPort:= Word($378); except MessageDlg('Вы определили недействительный порт.'+#13+
'Действие не выполнено.', mtError, [mbOK], 0); Exit; end; // Напишите данные DLPortIO1.Port[DataPort]:= $0; Sleep(z3); Shape5.Brush.Color:= clRed; Application.ProcessMessages; end;
Procedure TForm1.c5_2; var i: integer; begin for i:= 1 to 7 do TShape(FindComponent('Shape'+ inttostr(i))).Brush.Color:= clWhite; // Получаем адрес порта данных try DataPort:= Word($378);
except MessageDlg('Вы определили недействительный порт.'+#13+ 'Действие не выполнено.', mtError, [mbOK], 0); Exit; end; for i := 1 to x4 do begin // Напишите данные DLPortIO1.Port[DataPort]:= $1; Sleep(z4); // Напишите данные DLPortIO1.Port[DataPort]:= $2; Sleep(z4); // Напишите данные DLPortIO1.Port[Data
Port]:= $4; Sleep(z4); // Напишите данные DLPortIO1.Port[DataPort]:= $8; Sleep(z4); case i of 1: Shape5.Brush.Color:= clRed; 1940: begin Shape5.Brush.Color:= clWhite; Shape4.Brush.Color:= clRed; end; 3880: begin Shape4.Brush.Color:= clWhite; Shape3.Brush.Color:= clRed; end; 5820: begin Shape3.Brush.Color:=
clWhite; Shape2.Brush.Color:= clRed; end; end; Application.ProcessMessages; end; end;
Procedure TForm1.c2_3; var i: integer; begin for i:= 1 to 7 do TShape(FindComponent('Shape'+ inttostr(i))).Brush.Color:= clWhite; // Получаем адрес порта данных try DataPort:= Word($378); except MessageDlg('Вы определили недействите
льный порт.'+#13+ 'Действие не выполнено.', mtError, [mbOK], 0); Exit; end; for i := 1 to x5 do begin // Напишите данные DLPortIO1.Port[DataPort]:= $8; Sleep(z5); // Напишите данные DLPortIO1.Port[DataPort]:= $4; Sleep(z5); // Напишите данные DLPortIO1.Port[DataPort]:= $2; Sleep(z5); // Напишите данные DLPortIO1.Port[DataPort]:= $1;
Sleep(z5); case i of 1: Shape2.Brush.Color:= clRed; 1940: begin Shape2.Brush.Color:= clWhite; Shape3.Brush.Color:= clRed; end; end; Application.ProcessMessages; end; end;
Procedure TForm1.c3_5; var i: integer; begin for i:= 1 to 7 do TShape(FindComponent('Shape'+ inttostr(i))).Brush.Color:= clWhite; // По
лучаем адрес порта данных try DataPort:= Word($378); except MessageDlg('Вы определили недействительный п
орт.'+#13+ 'Действие не выполнено.', mtError, [mbOK], 0); Exit; end; for i := 1 to x6 do begin // Напишите данные DLPortIO1.Port[DataPort]:= $8; Sleep(z6); // Напишите данные DLPortIO1.Port[DataPort]:= $4; Sleep(z6); // Напишите данные DLPortIO1.Port[DataPort]:= $2; Sleep(z6); // Напишите данные DLPortIO1.Port[DataPort]:= $1;
Sleep(z6); case i of 1: Shape3.Brush.Color:= clRed; 1940: begin Shape3.Brush.Color:= clWhite; Shape4.Brush.Color:= clRed; end; 3880: begin Shape4.Brush.Color:= clWhite; Shape5.Brush.Color:= clRed; end; end; Application.ProcessMessages; end; end;
Procedure TForm1.c5_1; var i: inte
ger; begin for i:= 1 to 7 do TShape(FindComponent('Shape'+ inttostr(i))).Brush.Color:= clWhite; // Получаем адрес порта данных try DataPort:= Word($378); except MessageDlg('Вы определили недействительный порт.'+#13+ 'Действие не выполнено.', mtError, [mbOK], 0); Exit; end; for i := 1 to x7 do begin // Напишите данные DLPortIO1.Port[DataPort]:= $1;
Sleep(z7); // Напишите данные DLPortIO1.Port[DataPort]:= $2; Sleep(z7); // Напишите данные DLPortIO1.Port[DataPort]:= $4; Sleep(z7); // Напишите данные DLPortIO1.Port[DataPort]:= $8; Sleep(z7); case i of 1: Shape5.Brush.Color:= clRed; 1940: begin Shape5.Brush.Color:= clWhite; Shape4.Brush.Color:= clRed;
end; 3880: begin Shape4.Brush.Color:= clWhite; Shape3.Brush.Color:= clRed; end; 5820: begin Shape3.Brush.Color:= clWhite; Shape2.Brush.Color:= clRed; end; 7760: begin Shape2.Brush.Color:= clWhite; Shape1.Brush.Color:= clRed; end; end; Application.ProcessMessages; end; end;
procedure
TForm1.Button1Click(Sender: TObject); begin z1:=StrToInt(Edit1.Text); x1:=StrToInt(Edit8.Text); z2:=StrToInt(Edit2.Text); x2:=StrToInt(Edit9.Text); z3:=StrToInt(Edit3.Text); x3:=StrToInt(Edit10.Text); z4:=StrToInt(Edit4.Text); x4:=StrToInt(Edit11.Text); z5:=StrToInt(Edit5.Text); x5:=StrToInt(Edit12.Text); z6:=StrToInt(Edit6.Text); x6:=StrToInt(Edit13.Text); z7:=StrToInt(Edit7.Text); x7:=StrToInt(Edit14.Text); if CheckBox1.Checked=True then c1_7; if CheckBox2.Checked=True then c7_5; if CheckBox3.Checked=True then c5_5; if CheckBox4.Checked=True then c5_2; if CheckBox5.Checked=True then c2_3; if CheckBox6.Checked=True then c3_5; if CheckBox7.Checked=True then c5_1; // Получаем адрес порта данных try DataPort:= Word($378); except MessageDlg('Вы определили недействительный порт.'+#13+ 'Действие не выполнено.',
mtError, [mbOK], 0); Exit; end; // Напишите данные DLPortIO1.Port[DataPort]:= $0; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin DLPortIO1.CloseDriver(); end;
end.
В программе не реализована проверка на окончание работы циклов движения шагового двигателя при закрытии программы, из-за чего во время работы двигателя программа выдаст ошибку. Весь проект в прикрепл
ённом файле.
Прикрепленный файл:загрузить »
----- Помогли тебе, помоги и ты.
Ответ отправил: Евгений/Genia007/ (Профессионал)
Ответ отправлен: 03.05.2011, 19:45
Номер ответа: 266934 Казахстан, Петропавловск Тел.: 87776918987 Адрес сайта:Выложены мои программы со статусом freeware ICQ # 573729535 Абонент Skype: jonixjon
Оценка ответа: 5 Комментарий к оценке: БОЛЬШОЕ СПАСИБО!!!
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 266934
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.