# Native Code > برنامه نویسی در Delphi > کامپوننت های سایر شرکت ها، و توسعه کامپوننت >  دلفی و پورت rs232

## lena abbaszadeh

سلام دوستان
من یه پوروژه دارم که باید اطلاعات از پورت rs232 بگیره و اطلاعات به این پورت ارسال کنه
لطفا راهنماییم کنین که اصلا باید از کجا شروع کنم؟در چه زمینه ای باید مطالعه کنم؟
راستش واقعا گیج شدم :ناراحت:

----------


## nouri2015

ابتدا باید یه ابزار برای ارسال و دریافت اطلاعات از پورت سریال در دلفی باید انتخاب کنی.

----------


## babak_delphi

کامپوننت هایی برای اینکار وجود دارند که اگه Search کنی در سایت هست
با کد نویسی هم میشه که کدش رو با جستجو با گوگل میتونی پیدا کنی
از مجموعه کامپوننت apro هم میتونی استفاده کنی
KDTELE هم ابزاری برای این کار داره
موفق باشی

----------


## Valadi

> من یه پوروژه دارم که باید اطلاعات از پورت rs232 بگیره و اطلاعات به این پورت ارسال کنه


اطلاعات کاملی باید بدید که مشکل شما حل بشه 
1 - آیا سخت افزار شما پورت سریال را داره ؟ 
2 - اگر نداره شما  از یک تراشه MX232 استفاده کردید؟
3 - این اطلاعات در دلفی می خواهید بخونید یا دیگر زبانه ها؟
4 - اگر در دلفی می خواهید بخونید 2 تا ابزار هست 1 - کامپونت Cport و 2 - از اکتیو ایکس که می تونید در بیشتر زبانها استفاده کنید که خودم در سایت قرار دادم 
موفق وموید باشید

----------


## lena abbaszadeh

سلام valadi 
پروژه اینجوریه که گروه r&d شرکت یه بورد طراحی کردن که با یه پورت rs232 به کامپیوتر وصل میشه 
من باید یه برنامه با دلفی بنویسم که اطلاعات ارسالی رو بخونه ودر ضمن بتونه به این بورد اطلاعات بفرسته
در مورد cport مشه بگی دقیقا چیه یا انکه یه link مفید بهم بدی؟ :لبخند: 
mer3000000000000000000000000000000000

----------


## Valadi

خوب حالا تا حدودی جواب سوالاتم رسیدم 
این اطلاعات از جنس چیه ؟ 
کاراکتر ؟

----------


## lena abbaszadeh

اطلاعات از جنس عدده که وارد این نرم افزار میشه و روی اون تصمیم گیری میشه
باز هم مرسی

----------


## Valadi

اگر در دلفی می خواهید بخونید 2 تا ابزار هست 1 - کامپونت Cport و 2 - از اکتیو ایکس که می تونید در بیشتر زبانها استفاده کنید که خودم در سایت قرار دادم
موفق وموید باشید

----------


## nouri2015

دوست عزیز mscom32.ocxبا Baudrate بالا درست عمل نمی کند بدین مفهوم که چون ردو بدل اطلاعات خیلی سریع صورت می گیرد overflow رخ می دهد.

----------


## lena abbaszadeh

tanx valadi
تلاشم می کنم

----------


## lena abbaszadeh

پیشنهاد شما چیه؟

----------


## lena abbaszadeh

سلام
دوستان میشه بگین کامپوننت cport رو باید از کجا پیدا کنم؟
من هیچی راجع به این کامپوننت نمیدونم :گریه: 
plz راهنماییم کنین
tanx

----------


## lena abbaszadeh

یعنی واقعا کسی نیست که بخواد به من کمک کنه؟
من فقط 10 روز وقت دارم :گریه: 
لطفا کمک کنین :خیلی عصبانی:

----------


## nouri2015

از دلفی چه version استفاده می کنید؟

----------


## mossaferin

سلام 

توصیه من، همراه با یه مثال ، و اطمینان از اینکه کارشو درست انجام میده ، در سرعت های بالاهم استفاده کردم جواب میده هیچ مشکلی نداره


اگه باز هم مشکلی بود ، بگید

موفق باشی

----------


## lena abbaszadeh

mossaferin خیلی ممنون
ولی میشه یکم توتیح بدی؟
راستش بخوای من اصلا نفهمیدم :ناراحت:

----------


## mossaferin

سلام 
برای برنامه نویسی روی پورت RS-232 باید راجع به خود پورت اطلاعات کافی داشته باشی تا بتونی از ابزاری که در اختیارت قرار میگیره استفاده کنی 


اول یک کتاب به اسم PCInterface ( نشرعلوم ) تهیه کن و راجع به پورت سریال اطلاعا ت کافی کسب کن ، همراه این کتاب یه سی دی هست که حاوی یه کامپونت با روش استفاده بسیار ساده و تعدادی مثال سخت افزاری و نرم افزاری برای کامپایلرهای مختلف  هست ، که برای کارای ابتدایی و یادگیری چیز خوبیه و جواب میده ...
ولی اگر بخوای حرفه ای تر به پورت سریال بپردازی دیگه جواب گو نیست


کمی راجع  ابزاری که معرفی کردم ...

یکی از محصولات شرکت winsoft می باشد.


 Comport.dll,comport.pas
 فایلهای اصلی و مورد نیاز این ابزار می باشد 
 فایل comport.dll که معلومه ...
فایل comport.pas هم حاوی تعاریف و توابع قابل استفاده در dll است، می باشد.


procedure TFormComPort.ComboBoxDeviceNameChange(Sender: TObject);
begin
  SetDeviceName(ComPort, PChar(ComboBoxDeviceName.Text));
end;

procedure TFormComPort.ComboBoxBaudRateChange(Sender: TObject);
begin
  SetBaudRate(ComPort, TBaudRate(ComboBoxBaudRate.ItemIndex));
end;

procedure TFormComPort.ComboBoxDataBitsChange(Sender: TObject);
begin
  SetDataBits(ComPort, TDataBits(ComboBoxDataBits.ItemIndex));
end;

procedure TFormComPort.ComboBoxStopBitsChange(Sender: TObject);
begin
  SetStopBits(ComPort, TStopBits(ComboBoxStopBits.ItemIndex));
end;

procedure TFormComPort.ComboBoxParityChange(Sender: TObject);
begin
  SetParity(ComPort, TParity(ComboBoxParity.ItemIndex));
end;


 SetActive(ComPort, not GetActive(ComPort));
این قسمت از کد ، پورت سریال را با تنظیماتی مثل نام پورت ،  stopbit,databit,parity,baudrate  و باز میکند و با استفاده از توابعی که در اختیار شما قرار می دهد اجازه خواندن و نوشتن روی پورت را به شما میدهد


procedure ReadString(ComPort: PComPort; const Value: PChar; var Size: Integer); stdcall; external ComPortDLL;
procedure WriteString(ComPort: PComPort; const Value: PChar); stdcall; external ComPortDLL;
function ReadChar(ComPort: PComPort): Char; stdcall; external ComPortDLL;
procedure WriteChar(ComPort: PComPort; Value: Char); stdcall; external ComPortDLL;
function ReadByte(ComPort: PComPort): Byte; stdcall; external ComPortDLL;
procedure WriteByte(ComPort: PComPort; Value: Byte); stdcall; external ComPortDLL;
function ReadWord(ComPort: PComPort): Word; stdcall; external ComPortDLL;
procedure WriteWord(ComPort: PComPort; Value: Word); stdcall; external ComPortDLL;
function ReadDWord(ComPort: PComPort): DWord; stdcall; external ComPortDLL;
procedure WriteDWord(ComPort: PComPort; Value: DWord); stdcall; external ComPortDLL;

توابعی که در بالا اشاره شد جهت خواندن و نوشتن روی پورت می باشد که میتواند به صورت 
رشته (ascii) ،کاراکتری(ascii)،بایت(8bit) ، ورد(16bit)، دابل ورد(32bit) باشد که بسته به کاری که میخوای انجام بدی متفاوت خواهند بود

البته همانطور که گفتم شما باید به اندازه کافی از سخت افزاری که قراره به پورت سریال وصل بشه اطلاعات داشته باشی تا بتونی پورت را با تنظیمات صحیح بازکنی

 * البته این رو هم بگم که این مثال اطلاعاتی که به پورت ارسال و دریافت میکنه به صورت کاراکتری می باشد و شما بایستی براساس سخت افزار و نرم افزار اینترفیس خودتون نوع اطلاعات رو انتخاب کنید



procedure ComPortRxChar(ComPort: PComPort);
var Text: String;
begin
  Text := '';
  while InputCount(ComPort) > 0 do
    Text := Text + ReadChar(ComPort);
  FormComPort.Memo.SelText := Text;
  FormComPort.AddReadBytes(Length(Text));
end;

این قسمت برای خواندن اطلاعات روی پورت می باشد که تابع inputcount  به ما میگه که چه تعداد اطلاعات روی بافر پورت موجود می باشد (البته به بایت)



procedure TFormComPort.SpeedButtonSendClick(Sender: TObject);
begin
  WriteString(ComPort, PChar(Edit.Text + #13));
end;



 این قسمت هم برای نوشتن اطلاعات روی پورت میباشد




 

 

 یه توصیه دیگه
 

 برای شروع پین شماره 2 و3 پورت سریال کامپیوتر رو به هم وصل کن  ، برنامه رو اجرا کن و ببین ارسال و دریافت روی پورت چگونه صورت میگیره (هرچی بفرستی ، همونو میگیری)، انواع مختلف دیتا رو برای ارسال و دریافت استفاده کن 



 نکته : برای ارتباط موفق با سخت افزار باید یک پروتکل مناسب بین اینترفیس و کامپیوتر تعریف کرد 



 موفق باشی

 
البته صحبت راجع به این ابزار و پورت سریال رو نمیشه به این چند خط خلاصه کرد   :لبخند:

----------


## lena abbaszadeh

mersiiiiiiiiiiiiiiiiiiiiiiiiii
توضیحاتت خیلی کامل بود.قبل ازینکه تو راهنماییم کنی یکی از دوستام اکتیویکس ocx پیشنهاد کرد و من کارمو شروع کردم ولی ای توضیحات خیلی کامله
حالا می خوام این component رو امتحان کنم
بازم مرسی

----------


## lena abbaszadeh

سلام
من یه سوال دیگه هم داشتم
اینکه گفتین از یه اینترفیس خوب باید استفاده کنم یعنی چی؟
میشه یکم توضیح بدین؟
tnx :خجالت:

----------


## mossaferin

نگفتم



> اینکه گفتین از یه اینترفیس خوب باید استفاده کنم یعنی چی؟


گفتم 



> نکته : برای ارتباط موفق با سخت افزار باید یک پروتکل مناسب بین اینترفیس و کامپیوتر تعریف کرد


تعریف پروتکل مناسب یعنی حداقل ارسال و دریافت 

به این معنی هست که مثلا برای ارسال گروهی اطلاعات و اطمینان از اینکه این اطلاعات صحیح میباشد یا اینکه مطمئن شویم که اطلاعت فرستاده شده است ، بعد از هر بایت ارسال منتظر دریافت یک کد به معنی دریافت اطلاعات از سمت گیرنده باشیم ، به شدت زمان بر می باشد که بهتر است به تعداد اطلاعات  بسنده کرد(ویا از روش های CRC استفاده کرد)

ویا اینکه تعریف کنیم 
بایت اول کد فرمان است 
بایت دوم تعداد اطلاعات
بایت سوم الی اخر دیتا

ویا تعریف کردن timeout به این معنی که اگر بعد از X ms به تعدادی که در بایت تعداد اعلام شده بود ، دیتا نیامد ، باید دوباره درخواست دیتا کرد

و از همه مهمتر تعریف مستر و اسلیو برای PC و اینترفیس

البته همه این تعاریف قراردادی و توسط خود شما تعریف میشوند ،  مگر اینکه خواسته باشید از پروتکل های استاندارد برای ارتباط تان استفاده کنید

موفق باشید

----------


## lena abbaszadeh

سلام
تو نصب comport.dll مشکل دارم
error میده
میشه روند کلی نصب رو بهم بگی؟ :لبخند:

----------


## lena abbaszadeh

> سلام 
> 
> توصیه من، همراه با یه مثال ، و اطمینان از اینکه کارشو درست انجام میده ، در سرعت های بالاهم استفاده کردم جواب میده هیچ مشکلی نداره
> 
> 
> اگه باز هم مشکلی بود ، بگید
> 
> موفق باشی


واقعا ممنون از این sample
فقط من یه مشکل دارم اونم اینه که قسمت comportRxchar اصلا نمی فهمم !!! این procedure مربوط به خواندن از پورته ولی مربوط به کدوم button هست؟

----------


## mossaferin

> فقط من یه مشکل دارم اونم اینه که قسمت comportRxchar اصلا نمی فهمم !!! این procedure مربوط به خواندن از پورته ولی مربوط به کدوم button هست؟


این  تابع یک event هست که به محض دریافت اطلاعات روی پورت اجرا می شود.

----------


## seyed_farid

mossaferin گفته:
برای شروع پین شماره 2 و3 پورت سریال کامپیوتر رو به هم وصل کن  ، برنامه رو اجرا کن و ببین ارسال و دریافت روی پورت چگونه صورت میگیره (هرچی بفرستی ، همونو میگیری)، انواع مختلف دیتا رو برای ارسال و دریافت استفاده کن 


يه راه ديگه :
اگه بخواهي از پورت مودم استفاده كني يه پيام (ATE1) بفرست تا مودمت هرچي بهش ميفرستي رو براي خودت برگرداند و براي لغوش هم ATE0  بفرست. :لبخند:

----------


## skflower

با سلام خدمت دوستان عزیز.
من مدتیه که میخوام با استفاده از kdtel یا apro با پورت سریال ارتباط برقرار کنم. ولی هرجای این سایت یا سایت های دیگه که جستجو میکنم، فقط راجه به تلفن گویا و اینجور چیزا میبینم. درحالیکه پورت سریال هم در کنار تلفن و ... یکی از امکانات این دو کامپوننته. اگه میشه کمکم کنید.
با تشکر

----------


## pezhvakco

کسی می تونه فایل یا لینک دانلود کامپونت kdtele3.6 رو قرار دهید .
به همراه کرک .
لطفا و تشکر ...

----------


## ب- تات

با كامپوننت cport 3 تمام نيازهاي شما براي ارتباط و ارسال و دريافت با سربال برطرف خواهد شد. كاملا عملي. فقط در كار با پورت سريال بايد دقت كتيد هر 2 سمت بايد مشخصات تنظيمات سريالشان يكسان باشند. در ضمن مراقب ظول سيم در rs232 باشيد كه بيشتر از 200 متر نشه . حتما از پروتكلهاي كنترل صحت ديتاي دريافتي و ارسالي استفاده كنيد(توسط خودتان بايد ساخته شود). در سريال مخصوصا اگر طرف مقابل شما يك تراشه ميكرو كنترل هست دقت كنيد كه در شرائط مختلف بايد يا استفاده ار وقفه در برنامتون  (sleep = x)  به ميكرو اجاره بدين كارشو انجام بده.
cport مخصوصا در دريافت به خاطر trigger كردن سريال خطا و مرگ نداره. در ضمن حتما بر حسب نياز rts, dtr رو هم استفاده كنيد . اينها در كار با ميكرو كاربرد دارند.
كارخانه هاي زيادي هستند كه توسط همين كامپوننت و دلفي و ميكرو در حال حاظر در رقابت با PLC خيلي راحت دارن كنترل ميشن و من از اين ارتباط بين سريال و نرم افزار لذت ميبرم...

----------


## skflower

> کسی می تونه فایل یا لینک دانلود کامپونت kdtele3.6 رو قرار دهید .
> به همراه کرک .
> لطفا و تشکر ...


سلام دوست عزیز. قرار دادن لینکهای کرک شده خلاف قوانین سایت هستش.
موفق باشید.

----------


## skflower

> با كامپوننت cport 3 تمام نيازهاي شما براي ارتباط و ارسال و دريافت با سربال برطرف خواهد شد. كاملا عملي. فقط در كار با پورت سريال بايد دقت كتيد هر 2 سمت بايد مشخصات تنظيمات سريالشان يكسان باشند. در ضمن مراقب ظول سيم در rs232 باشيد كه بيشتر از 200 متر نشه . حتما از پروتكلهاي كنترل صحت ديتاي دريافتي و ارسالي استفاده كنيد(توسط خودتان بايد ساخته شود). در سريال مخصوصا اگر طرف مقابل شما يك تراشه ميكرو كنترل هست دقت كنيد كه در شرائط مختلف بايد يا استفاده ار وقفه در برنامتون  (sleep = x)  به ميكرو اجاره بدين كارشو انجام بده.
> cport مخصوصا در دريافت به خاطر trigger كردن سريال خطا و مرگ نداره. در ضمن حتما بر حسب نياز rts, dtr رو هم استفاده كنيد . اينها در كار با ميكرو كاربرد دارند.
> كارخانه هاي زيادي هستند كه توسط همين كامپوننت و دلفي و ميكرو در حال حاظر در رقابت با PLC خيلي راحت دارن كنترل ميشن و من از اين ارتباط بين سريال و نرم افزار لذت ميبرم...


سلام دوست عزیز.
Cport رایگانه یا تجاری؟ اگه رایگانه لینکشو میخواستم و اگه تجاریه نسخه ی Trial رو برای امتحان پیش از خریدش میخواستم.
با تشکر

----------


## ب- تات

> سلام دوست عزیز.
> Cport رایگانه یا تجاری؟ اگه رایگانه لینکشو میخواستم و اگه تجاریه نسخه ی Trial رو برای امتحان پیش از خریدش میخواستم.
> با تشکر


اينهم cport رايگان همراه كليه متعلقاتش در  delphi 3-7 از مثالهاش ميشه امكاناتش رو فهميد.

----------

