Прошу помоши!
Кратко излагаю задачу:
есть плоттер PIF01 работает он через COM2 порт (драйверов к нему
конечно же нет) необходимо посылать данные в порт, но вот незадача
порт нехочет работать. Привожу текст программы, может я сделал какие
нибудь ошибки. Использую Windows 2000/XP, а пишу на Delphi7, в DOS'е
все работает т.е. порт и плоттер исправны. Заранее спасибо.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
FORM1.Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
f: THandle;
i:cardinal;
p:pointer;
size:word;
buf:string;
ct: TCommTimeouts;
dcb: TDCB;
begin
f := Windows.CreateFile(PChar('COM2'), GENERIC_READ or
GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
dcb.BaudRate := 4800;
dcb.StopBits := 1;
dcb.Parity := NOPARITY;
dcb.ByteSize := 8;
if not Windows.SetCommState(f, dcb);
or not Windows.GetCommTimeouts(f, ct) then exit error;
ct.ReadTotalTimeoutConstant := 50;
ct.ReadIntervalTimeout := 50;
ct.ReadTotalTimeoutMultiplier := 1;
ct.WriteTotalTimeoutMultiplier := 0;
ct.WriteTotalTimeoutConstant := 10;
if not Windows.SetCommTimeouts(f, ct) or not
Windows.SetCommMask(f, EV_RING + EV_RXCHAR + EV_RXFLAG + EV_TXEMPTY);
then exit;
size:=8;
buf:='D';
p := @Buf;
for buf:=1 to 255 do
begin
while size > 0 do begin
if not WriteFile(f, p^, 1, i, nil) then exit;
inc(integer(p)); dec(size);
Application.ProcessMessages;
end;
end;
Windows.CloseHandle(f);
end;
end.
P.S. Может кто-то сталкивался с подобной задачей и остались исходники
или документация