نحوه برقراری ارتباط دلفی با پورتهای com و lpt رو کسی بلده؟
لطفا کمک کنید.
نحوه برقراری ارتباط دلفی با پورتهای com و lpt رو کسی بلده؟
لطفا کمک کنید.
با کامپوننت های Comport مشکلتون حله.
فقط لطف کنید قبل از پرسیدن سئوال در سایت جستجو کنید.
میتونید اونا رو مثل یک فایل باز کنید و توشون بنویسید یا ازشون بخونیدنحوه برقراری ارتباط دلفی با پورتهای com و lpt رو کسی بلده؟
لطفا کمک کنید.
این کد باز کردن پورت
procedure TMainForm.OpenPort(i:Integer);
{}
Procedure InitSerial;
Var
DCB: TDCB;
Config : String;
CommTimeouts : TCommTimeouts;
begin
if not SetupComm(hCom, RxBufferSize, TxBufferSize) then
showMessage('CanNot Setup Com Port');
if not GetCommState(hCom, DCB) then
showmessage('can not read com state')
Else
Begin
Config :=Pchar('baud=19200 parity=n data=8 stop=1'+#0);
if not BuildCommDCB(@Config[1], DCB) then
ShowMessage('Can Not build com dcb')
else
if not SetCommState(hCom, DCB) then
ShowMessage('Can Not set com state');
End;
with CommTimeouts do
begin
ReadIntervalTimeout := 0;
ReadTotalTimeoutMultiplier := 0;
ReadTotalTimeoutConstant := 1000;
WriteTotalTimeoutMultiplier := 0;
WriteTotalTimeoutConstant := 1000;
end;
if not SetCommTimeouts(hCom, CommTimeouts) then
showMessage('Can not set com timeout');
End;
begin
CPN:=i; //initialize serial Port to Boud=9600 Parity=none startbit=1
hCom := CreateFile(PChar(ComPort),
Generic_Read,// Or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if hCom = INVALID_HANDLE_VALUE then
showMessage('Error Opening File')
else
Begin
InitSerial;
End;
end;
اینهم کد خواندن
function TMainForm.read1byteFromPort:byte;
Var
d: array[1..1] of byte;
s: String;
BytesRead, i: cardinal;
Begin
if not ReadFile (hCom, d, sizeof(d), BytesRead, Nil) then
read1byteFromPort:=0
Else
read1byteFromPort:=d[1];
end;
البته کد خواندن رو بر اساس نیاز خودت باید تغییرش بدی
کد نوشتن هم خودت مثل این کد بنویس
You never know what you can do until you try
برای ارتباط با پورت ها ساده ترین را استفاده از porttalk هستش. دقیقا همین کلمه رو تو گوگل بنویس و اونو سرچ کن .
بعدش طبق راهنمای آن عمل کن .جزئیات بیشتر رو خودش داره .
در آخر می تونی مثل ویندوز 98 با پورتها توی xp کار کنی.
asm
MOV DX,0378H
MOV AL,n
OUT DX,AL
end
البته این برای نوشتن تو پورت بود بهتره مثالهای خودش رو بخونی
سلام
دوست عزیز تکه برنامه شما را اجرا کردم پیغام زیر را میدهد
Undeclared identifier: 'hCom'
اگر منظورتون تکه برنامه منهنوشته شده توسط شفیعی
Hcom رو به عنوان یک THandle تعریف کن
You never know what you can do until you try
procedure TMainForm.OpenPort(i:Integer);
{}
Procedure InitSerial;
Var
DCB: TDCB;
Config : String;
CommTimeouts : TCommTimeouts;
begin
if not SetupComm(hCom, RxBufferSize, TxBufferSize) then
showMessage('CanNot Setup Com Port');
if not GetCommState(hCom, DCB) then
showmessage('can not read com state')
Else
Begin
Config :=Pchar('baud=19200 parity=n data=8 stop=1'+#0);
if not BuildCommDCB(@Config[1], DCB) then
ShowMessage('Can Not build com dcb')
else
if not SetCommState(hCom, DCB) then
ShowMessage('Can Not set com state');
End;
with CommTimeouts do
begin
ReadIntervalTimeout := 0;
ReadTotalTimeoutMultiplier := 0;
ReadTotalTimeoutConstant := 1000;
WriteTotalTimeoutMultiplier := 0;
WriteTotalTimeoutConstant := 1000;
end;
if not SetCommTimeouts(hCom, CommTimeouts) then
showMessage('Can not set com timeout');
End;
begin
CPN:=i; //initialize serial Port to Boud=9600 Parity=none startbit=1
hCom := CreateFile(PChar(ComPort),
Generic_Read,// Or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if hCom = INVALID_HANDLE_VALUE then
showMessage('Error Opening File')
else
Begin
InitSerial;
End;
end;
اقای mzjahromi
من از کد شما استفاده کردم اما اینها رو نمیشناسه
SetupComm(hCom, RxBufferSize, TxBufferSize)
آخرین ویرایش به وسیله mzjahromi : پنج شنبه 20 مهر 1385 در 08:20 صبح
از SetUpComm نیست اون توی یونیت Windows هست من فکر میکنم مشکل شما هم از همون HCom باشه خط زیر رو تو قسمت Public فرمتون تعریف کنید
hcom:Thandle;
You never know what you can do until you try