Хайде, че замря...
ето го и моя въпрос.
Пускам тая ти ми програма. Започва да слуша на порта.
Обаче как да го... настроя обекта-comport, че да може да позволи и на други машинарии да се вклучат и да му изпратят данни.
В този си вид сорса си работа. Обаче какво да слуша, като нищо не пуска да се вържи за него. С Comport-обекта mu dawam Open(); за да слуша модема ми.
ама модема не може да се закачи и казва, че е заето от друго устройство порт COM 1.
Как става така, че да може аз да отворя порта и да слушам и всекя машинка да си се закача за нея?????
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, CPort, StdCtrls, SyncObjs;
type
TForm1 = class(TForm)
Memo1: TMemo;
ComPort1: TComPort;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure DoReading;
public
{ Public declarations }
end;
type
MyThread = class(TThread)
private
FComPort: TComPort;
FPort: string;
FEvents: TComEvents;
FStopEvent: THandle;
//FController: TWagaController;
FWaga: string;
FTimeOut: Integer;
FActive: Boolean;
public
constructor Create(AController: Boolean);
destructor Destroy; override;
procedure Execute; override;
property StopEvent: THandle read FStopEvent write FStopEvent;
end;
type
TComPortEx = class(TComPort)
private
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
{ MyThread }
constructor MyThread.Create(AController: Boolean);
begin
//AOwnerBoolean := True;
inherited
Create(True);
FStopEvent := CreateEvent(nil, True, False, nil);
//FController := AController;
FreeOnTerminate := False;
FTimeOut := 1000;
FComPort := TComPort.Create(nil);
FComPort.BaudRate := br4800;
FComPort.Events := [];
FComPort.Port := 'COM1'; //FPort;
FComPort.EventChar:=#13;
FComPort.FlowControl.FlowControl := fcHardware;
FComPort.FlowControl.ControlDTR := dtrHandshake;
FComPort.FlowControl.ControlRTS := rtsHandshake;
FEvents := [evRxChar]; // define events to wait for
//FComPort.OnRxChar := Form1.
end;
destructor MyThread.Destroy;
begin
CloseHandle(FStopEvent);
FreeAndNil(FComPort);
inherited;
end;
procedure MyThread.Execute;
var
RBuffer: string;
RCount, Res: Integer;
TimeOutCounter: Integer;
Event: TNotifyEvent;
cevents:TComEvent;
begin
inherited;
FEvents := [evRxChar];
try
with FComPort do
try
Close;
Open;
ClearBuffer(True, True);
if WriteStr('SI'#13#10) <> 4 then Exit;
WaitForEvent(FEvents, StopEvent ,100); // wait until at least one event happens
SetLength(RBuffer, 16);
RCount := 0;
FWaga := '';
TimeOutCounter := 0;
while RCount < 16 do
begin
Inc(TimeOutCounter);
Res := FComPort.Read(PChar(RBuffer)^, 16);
RCount := RCount + Res;
FWaga := FWaga + Copy(RBuffer, 1, Res);
if TimeOutCounter = 10 then Exit;
if RCount < 16 then
begin
FEvents := [evRxChar];
WaitForEvent(FEvents, StopEvent,100{WaitInfinite}); // wait until at least one event happens
if evRxChar in fEvents then Continue else Exit;
end;
end;
if RCount = 16 then
begin
//Synchronize(DoOngetWaga);
end;
except
end;
finally
end;
// ShowMessage('dd');
//DoReading;
end;
{ TForm1 }
procedure TForm1.DoReading;
var
thred: MyThread;
begin
thred := MyThread.Create(True);
thred.Priority := tpNormal;
thred.Resume;
//thred.Terminate;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DoReading;
end;
end.
|