Консультация № 183010
01.05.2011, 17:35
91.08 руб.
0 31 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: написала программу в delphi 7 в ос windows xp( управление шаговым двигателем через lpt - порт). попыталась запустить программу в windows 98, выдала ошибку требует наличия некоторых библиотек. как мне запустить программу? может нужна другая версия delphi?

Приложение:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;

function Inp32(PortAdr: word): byte; stdcall; external 'inpout32.dll';
function Out32(PortAdr: word; Data: byte): byte; stdcall; external 'inpout32.dll';

type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
CheckBox7: TCheckBox;
MainMenu1: TMainMenu;
N1: TMenuItem;
N11: TMenuItem;
N21: TMenuItem;
N31: TMenuItem;
N41: TMenuItem;
N51: TMenuItem;
N61: TMenuItem;
N71: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N12: TMenuItem;
N22: TMenuItem;
N32: TMenuItem;
N42: TMenuItem;
N52: TMenuItem;
N62: TMenuItem;
N72: TMenuItem;
Label8: TLabel;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Edit13: TEdit;
Edit14: TEdit;
procedure N72Click(Sender: TObject);
procedure N62Click(Sender: TObject);
procedure N52Click(Sender: TObject);
procedure N42Click(Sender: TObject);
procedure N32Click(Sender: TObject);
procedure N22Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N71Click(Sender: TObject);
procedure N61Click(Sender: TObject);
procedure N51Click(Sender: TObject);
procedure N41Click(Sender: TObject);
procedure N31Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
z1,z2,z3,z4,z5,z6,z7:integer;
x1,x2,x3,x4,x5,x6,x7:integer;
i:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Out32($378, 0);
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.N2Click(Sender: TObject);
begin
CheckBox1.Checked:=True;
CheckBox2.Checked:=True;
CheckBox3.Checked:=True;
CheckBox4.Checked:=True;
CheckBox5.Checked:=True;
CheckBox6.Checked:=True;
CheckBox7.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 c1_7;
begin
for i := 1 to x1 do
begin
Out32($378, 8);
Sleep(z1);
Out32($378, 4);
Sleep(z1);
Out32($378, 2);
Sleep(z1);
Out32($378, 1);
Sleep(z1);
end;
end;

Procedure c7_5;
begin
for i := 1 to x2 do
begin
Out32($378, 1);
Sleep(z2);
Out32($378, 2);
Sleep(z2);
Out32($378, 4);
Sleep(z2);
Out32($378, 8);
Sleep(z2);
end;
end;

Procedure c5_5;
begin
Out32($378, 0);
Sleep(z3);
end;

Procedure c5_2;
begin
for i := 1 to x4 do
begin
Out32($378, 1);
Sleep(z4);
Out32($378, 2);
Sleep(z4);
Out32($378, 4);
Sleep(z4);
Out32($378, 8);
Sleep(z4);
end;
end;

Procedure c2_3;
begin
for i := 1 to x5 do
begin
Out32($378, 8);
Sleep(z5);
Out32($378, 4);
Sleep(z5);
Out32($378, 2);
Sleep(z5);
Out32($378, 1);
Sleep(z5);
end;
end;


Procedure c3_5;
begin
for i := 1 to x6 do
begin
Out32($378, 8);
Sleep(z6);
Out32($378, 4);
Sleep(z6);
Out32($378, 2);
Sleep(z6);
Out32($378, 1);
Sleep(z6);
end;
end;

Procedure c5_1;
begin
for i := 1 to x7 do
begin
Out32($378, 1);
Sleep(z7);
Out32($378, 2);
Sleep(z7);
Out32($378, 4);
Sleep(z7);
Out32($378, 8);
Sleep(z7);
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;
Out32($378, 0);
end;

end.

Обсуждение

Неизвестный
01.05.2011, 18:04
общий
в системе win xp не тестировала... нет переходника usb-lpt ...а двигатель у универе подключен через lpt к древнейшей машине с win98 и данные можно кидать только с дискеты
программа сразу выдает ошибку -не хватает mscrt.dll . подключила эту библиотеку, потом еще какой-то не хватает..
Неизвестный
01.05.2011, 18:06
общий
мне сказали что в меню delphi нужно исправить на статическую компоновку, но я так и не нашла
Неизвестный
01.05.2011, 20:45
общий
программа сразу выдает ошибку -не хватает mscrt.dll . подключила эту библиотеку, потом еще какой-то не хватает..

Думаю, что пока Вы не подключите все библиотеки, программа не запустится.
По поводу статической компоновки может эта статья чем-то поможет:
Компоновка Delphi
давно
Профессионал
153662
1070
01.05.2011, 21:11
общий
Попробуйте использовать для этого драйвер TDLPortIO, скачать можно здесь. Он управляет портом LPT, практически минуя систему, я на его основе делал программу управления светом над бильярдными столами, и небольшую бегушку на светодиодах. Работать с ним так же очень просто.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
01.05.2011, 21:25
общий
А вот готовая программа для тестирования LPT порта, ести нажать кнопку старт, а потом кнопку автоматически, то программа будет последовательно подавать сигнал со второй по седьмую ножку порта, так я её сделал для своих нужд, необходимая dll уже есть в папке с прогаммой, она должна пойти и у Вас.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
01.05.2011, 23:33
общий
Может в win98 проще управлять портом прямым доступом? Примерно такой код:
procedure Out32(PortAddress:smallint;Value:smallint);
var
ByteValue:Byte;
begin
ByteValue:=Byte(Value);
asm
push dx
mov dx,PortAddress
mov al, ByteValue
out dx,al
pop dx
end;
end;
давно
Мастер-Эксперт
425
4118
02.05.2011, 05:54
общий
А Вы уверены, что 98 не зарубит прямое обращение к порту? Мне кажется, более предпочтительно использовать стандартные функции - что-то типа handle:=OpenFile('LPT') и Write\ReadFile(handle, Value).
Кстати, эти же функции подойдут и для работы с переходником USB-LPT, только в OpenFile() надо будет подставить правильное название порта.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
02.05.2011, 08:49
общий
уважаемые эксперты! помогите переписать программу дл win 98.
Шаговый двигатель через редуктор управляет вертикальным перемещением подъемной платформы («лифта») в модели 7-этажного здания. Требуется программно реализовать следующий закон управления перемещение «лифта»:
№ п/п Исходный этаж Конечный этаж Время перемещения, с
1 1 7 20
2 7 5 10
3 5 5 12
4 5 2 14
5 2 3 17
6 3 5 19
7 5 1 10
Количество полных шагов двигателя на один этаж-1760, на межэтажное расстояние-180.
Минимальное время одного полного шага: 3 мс.
в программе посылаю импульсы 1248(лифт едет вверх) или 8421(вниз) с задержками между каждым импульсом, так чтобы лифт переместился за определенное время указанное в пункте задания.
может, как советует старший модератор использовать OpenFile('LPT') и Write\ReadFile, но тогда как реализовать задержки между импульсами? в моей программе используется фунция sleep библиотеки input32 - но ПРОГРАММА НЕ РАБОТАЕТ В WIN 98.

Прикрепленные файлы:
daac153dd0309d8543e115811bec9c73.7z
Неизвестный
02.05.2011, 15:00
общий
Адресаты:
Лет 10-15 назад я именно так и программировал порты, но конечно Вы правы лучше использовать API. Проблема в том, что родной драйвер LPT предназначен для передачи данных по протоколу Centronics и не очень понятно как управлять отдельными выводами. Для этих целей в XP я пользовался драйверами GiveIO и LPTWDMIO. Но опять-таки не знаю как будут эти драйвера работать под Windows98.
давно
Профессионал
153662
1070
02.05.2011, 19:49
общий
Могу предложить свой вариант программы. Я тут подсчитал необходимое время для движения лифта при заданном времени полного шага в 3 мс и оно не совпадает с временем перемещения лифта в задании, получается медленней. Индикация движения по этажам рассчитана на внесённые в программу обороты двигателя. По идее драйвер должен работать и в Windows98, не могу проверить, нет такой системы под рукой, но разработчик обещает. Драйвер и библиотека должны лежать в одной папке с программой.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
02.05.2011, 21:13
общий
евгений,при запуске программы в win xp выдает class tdlportio не найден, драйвер и библиотека в папке с программой.
Неизвестный
02.05.2011, 21:14
общий
я в отчаянии
давно
Профессионал
153662
1070
03.05.2011, 10:40
общий
Несколько постами выше я Вам выкладывал драйвер, распаковываете архив, открываете папку DriverLINX, затем папку drivers и жмёте Install.exe, драйвер установится в систему, хотя должно было работать и так. Уточните что именно Вы запускаете саму программу или проект делфи?
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
03.05.2011, 13:15
общий
Сейчас проверил программу на машине, где не установлен этот драйвер, программа работает.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
03.05.2011, 18:19
общий
Евгений,установила драйвер в систему, все равно при запуске программы в win xp выдает ,что class tdlportio не найден и программа не запускается. а когда запускаю исполняемый exe файл , вроде все работает, только при закрытии выдает что доступ к адресу10001164 закрыт.
давно
Профессионал
153662
1070
03.05.2011, 18:36
общий
Ну всё правильно для запуска проекта в делфи надо ещё установить в делфи DLPortIO.dpk, так как это сторонняя разработка, он находится в папке delphi \ delphi.4 того же архива с драйвером. Ошибка при закрытии программы возникает если Вы пытаетесь её закрыть во время работы движения лифта, я не стал делать проверку на это.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
03.05.2011, 18:46
общий
евгений, вставила DLPortIO.dpk, только все равно выдает undeclared indifiniter DLPortIO1 и class tdlportio не найден.
Неизвестный
03.05.2011, 18:54
общий
посмотрите пожалуйста. все ли файлы я добавила
Прикрепленные файлы:
ed0b209be86e9ea8d3234bb325da9369.7z
давно
Профессионал
153662
1070
03.05.2011, 18:58
общий
03.05.2011, 19:02
Добавлять другие файлы в папку с программой не надо было, пакет DLPortIO.dpk устанавливается в делфи, что бы сам компонент появился в палитре компонентов и делфи знала, что это.
Действия следующие:
1. Запускаете делфи;
2. file \ open;
3. Выбираем папку с пакетом DLPortIO.dpk и выбираем сам пакет;
4. В появившемся окне давим compile и затем install.

Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
03.05.2011, 19:04
общий
теперь осталась только ошибка при запуске undeclared indifiniter DLPortIO1
Неизвестный
03.05.2011, 19:08
общий
с пакетом DLPortIO.dpk разобралась
давно
Профессионал
153662
1070
03.05.2011, 19:11
общий
03.05.2011, 19:12
Цитата: 327099
теперь осталась только ошибка при запуске undeclared indifiniter DLPortIO1
когда именно она выходит? Попробуйте перезапустить делфи.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
03.05.2011, 19:16
общий
03.05.2011, 19:18
Посмотрите появилась ли вкладка c компонентами DiskDude? На ней два компонента DLPortIO и DLPrinterPortIO. Если Вы правильно установили пакет DLPortIO.dpk, то вкладка должна появиться.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
03.05.2011, 19:18
общий
спасибо евгений, все работает теперь. хотелось бы теперь проверить программу с двигателем. ели завтра преподавателя не будет, то тогда только на следующей неделе.
Неизвестный
03.05.2011, 19:21
общий
вкладка появилась. евгений, можно вам будет если что написать на следующей неделе
давно
Профессионал
153662
1070
03.05.2011, 19:22
общий
03.05.2011, 19:24
Вот ещё Вам описание этого драйвера и принципа его работы, правдо на английском. Мне оформлять программу как ответ? Можете конечно написать.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
03.05.2011, 19:23
общий
? я не представилась даже, Анна .
Неизвестный
03.05.2011, 19:24
общий
да. оформляйте!!!
давно
Профессионал
153662
1070
03.05.2011, 19:27
общий
Да я уже понял, что это не Ваш ник.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
03.05.2011, 19:45
общий
это ответ
Здравствуйте, Невалёный Виталий Владимирович!
Для решения Вашей задачи предлагаю для управления портом LPT использовать драйвер TDLPortIO, который работает как в win xp, так и в win 98-95, скачать драйвер можно здесь. А здесь его описание, правда на английском языке. Вот переделанный исходник под этот драйвер
Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, PortIO, ExtCtrls, ComCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
CheckBox7: TCheckBox;
MainMenu1: TMainMenu;
N1: TMenuItem;
N11: TMenuItem;
N21: TMenuItem;
N31: TMenuItem;
N41: TMenuItem;
N51: TMenuItem;
N61: TMenuItem;
N71: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N12: TMenuItem;
N22: TMenuItem;
N32: TMenuItem;
N42: TMenuItem;
N52: TMenuItem;
N62: TMenuItem;
N72: TMenuItem;
Label8: TLabel;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Edit13: TEdit;
Edit14: TEdit;
Panel1: TPanel;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Shape5: TShape;
Shape6: TShape;
Shape7: TShape;
DLPortIO1: TDLPortIO;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
procedure N72Click(Sender: TObject);
procedure N62Click(Sender: TObject);
procedure N52Click(Sender: TObject);
procedure N42Click(Sender: TObject);
procedure N32Click(Sender: TObject);
procedure N22Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N71Click(Sender: TObject);
procedure N61Click(Sender: TObject);
procedure N51Click(Sender: TObject);
procedure N41Click(Sender: TObject);
procedure N31Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
Procedure c1_7;
Procedure c7_5;
Procedure c5_5;
Procedure c5_2;
Procedure c2_3;
Procedure c3_5;
Procedure c5_1;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

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.OpenDriver();
if (not DLPortIO1.ActiveHW) then
begin
MessageDlg('Не могу открыть DriverLINX driver.', mtError, [mbOK], 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.N2Click(Sender: TObject);
begin
CheckBox1.Checked:=True;
CheckBox2.Checked:=True;
CheckBox3.Checked:=True;
CheckBox4.Checked:=True;
CheckBox5.Checked:=True;
CheckBox6.Checked:=True;
CheckBox7.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);
// Напишите данные
DLPortIO1.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[DataPort]:= $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: 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 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.
В программе не реализована проверка на окончание работы циклов движения шагового двигателя при закрытии программы, из-за чего во время работы двигателя программа выдаст ошибку. Весь проект в прикреплённом файле.
Прикрепленные файлы:
5
БОЛЬШОЕ СПАСИБО!!!
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Форма ответа