PDA

View Full Version : پورت rs232ودلفی



lena abbaszadeh
شنبه 21 دی 1387, 15:33 عصر
سلام دوستان عزیز
من باید یه برنامه بنویسم که از پورت rs232 دیتا بگیره و بفزسته:ناراحت:
به دادم برسین:افسرده:

Valadi
شنبه 21 دی 1387, 15:44 عصر
شما می تونید از کامپونت cport استفاده کنید یا یک اکتیو ایکس خود ویندوز (درسایت خودم اکتیو ایکس بهمراه لایسنس قرار دادم )
پیشنهاد می کنم از کامپونت cport استفاده کنید

lena abbaszadeh
دوشنبه 23 دی 1387, 09:09 صبح
سلام
مرسی ولی میشه link سایت خودتون رو بدین؟
در ضمن من یک تازه کارم و این یه پروژه کاریه
plz بیشتر راهنماییم کنید

babak_delphi
دوشنبه 23 دی 1387, 12:49 عصر
احتمالا همون لینکهایی هستند که در امضا قرار داده

mohammadamin
سه شنبه 22 اردیبهشت 1388, 13:13 عصر
آقای Valadi همه منتظر اعلام لینک شما هستند؟ پس چی شد؟

Valadi
سه شنبه 22 اردیبهشت 1388, 14:29 عصر
این هم لینک دانلود (http://barnamenevis.org/forum/attachment.php?attachmentid=16802&d=1209197749)

mossaferin
سه شنبه 22 اردیبهشت 1388, 20:13 عصر
سلام دوستان عزیز
من باید یه برنامه بنویسم که از پورت rs232 دیتا بگیره و بفزسته:ناراحت:
به دادم برسین:افسرده:

با این تاپیک جدید فکر کنم هنوز مشکل شما با پورت سریال حل نشده ، چرا توی تاپیک قبلی ادامه ندادین ؟
این همون مشکل قدیمیه یا یه مشکل جدید ؟

Delphi Coder
چهارشنبه 23 اردیبهشت 1388, 09:50 صبح
function SetPortInfo(ComPort: PChar;
BaudRate: Cardinal): Boolean;
var
Dcb: _DCB;
TimeOut: _COMMTIMEOUTS;
begin
Result := True;
PortHandle := CreateFile(ComPort,GENERIC_WRITE or GENERIC_READ,0,nil,OPEN_EXISTING,0,0);
if PortHandle=INVALID_HANDLE_VALUE then
begin
Result := False;
Exit;
end;
if not GetCommState(PortHandle, dcb) then
begin
CloseHandle(PortHandle);
Result := False;
Exit;
end;
dcb.Flags := 0;
dcb.Flags := dcb.Flags or 1; //fBinary := 1
dcb.ByteSize := 8;
dcb.Parity := NOPARITY;
dcb.StopBits := ONESTOPBIT;
dcb.BaudRate := BaudRate;
if not SetCommState(PortHandle,dcb) then
begin
CloseHandle(PortHandle);
Result := False;
Exit;
end;
TimeOut.ReadIntervalTimeout := 0;
TimeOut.ReadTotalTimeoutMultiplier := 6;
TimeOut.ReadTotalTimeoutConstant := 13;
TimeOut.WriteTotalTimeoutMultiplier := 6;
TimeOut.WriteTotalTimeoutConstant := 13;
if not SetCommTimeouts(PortHandle,TimeOut) then
begin
CloseHandle(PortHandle);
Result := False;
Exit;
end;
end;
PortHandle در اینجا یک متغییر سراسری هست. ComPort هم که اسم پورت COM1 یا COM2 یا.... Baudrate سرعت. سایر تنظیمات TimeOut و CommState رو از MSDN اگه لازم شد یه مطالعه بکنید. بعد از فراخوانی این تابع می تونید با API های ReadFile و WriteFile با هندل PortHandle روی پورت بنویسید و بخونید درست مثل اینکه با فایل کار می کنید.

PS:
به اسم تابع زیاد دقت نکنید میدونم اسم خوبی انتخاب نکردم مهم اینکه کار رو راه میندازه.