View Full Version : سوال: کامپوننت های مرتبط با پورت سریال ( com )
hamedjafari
جمعه 10 اردیبهشت 1389, 19:18 عصر
نزدیک نیم ساعت تو سایت چرخیدم و هر بار روشی برای ارتباط با پورت کام پیدا کردم .
خیلی به دلفی تسلط ندارم و بنا براین نمی تونم تشخیص بدم کدوم بهتره .
از دوستانی که با پورت کام کار کردن می خوام که لطف کنن و بهترین کامپوننتی که باهاش کردنو اینجا قرار بدن .
خواهش می کنم نگین سرچ کنم که هر بار یه چیزی پیدا شد .
در همین حد که لینک دانلود بدین و دستور ارسال و دستور دریافت رو بگین کافیه .
می خوام با میکرو ارتباط برقرار کنم . من هنوز خیلی قدیمی هستم و با دلفی7 کار میکنم .
مرسی.
vcldeveloper
جمعه 10 اردیبهشت 1389, 20:11 عصر
http://sourceforge.net/projects/comport/
http://sourceforge.net/projects/tpapro/
nice boy
شنبه 11 اردیبهشت 1389, 14:54 عصر
من از کامپوننت Cport که آقای کشاورز معرفی کردن استفاده کردم. کار کردن باهاش خیلی ساده است. جهت ارتباط با پورت سریال و USB هم کاملاً جواب می ده در ضمن روی دلفی 2010 هم کار می کنه. وقتی دانلود کنی خودش یه Sample داره که خیلی راحت می تونی روش کارش رو یاد بگیری.
hamid-nic
دوشنبه 13 اردیبهشت 1389, 00:04 صبح
http://sourceforge.net/projects/comport/
کامپوننت comport خیلی عالیه و حتما می تونه کارتون را راه بندازه .
موفق باشید .
khazaie01
پنج شنبه 23 اردیبهشت 1389, 21:14 عصر
من از کامپوننت Cport که آقای کشاورز معرفی کردن استفاده کردم. کار کردن باهاش خیلی ساده است. جهت ارتباط با پورت سریال و USB هم کاملاً جواب می ده در ضمن روی دلفی 2010 هم کار می کنه. وقتی دانلود کنی خودش یه Sample داره که خیلی راحت می تونی روش کارش رو یاد بگیری.
سلام دوست عزیز
در مورد کار با پورت USB میشه بیشتر توضیح بدین ؟!
دوستان من یک سخت افزار خاص دارم که USB هست ، میخوام بدونم به چه شکل میشه با این سخت افزار ارتباط برقرار کرد ؟
ممنوووووووون
nice boy
یک شنبه 26 اردیبهشت 1389, 10:03 صبح
سلام دوست عزیز
در مورد کار با پورت USB میشه بیشتر توضیح بدین ؟!
دوستان من یک سخت افزار خاص دارم که USB هست ، میخوام بدونم به چه شکل میشه با این سخت افزار ارتباط برقرار کرد ؟
ممنوووووووون
وقتی شما یک دستگاه رو با پورت usb به سیستم وصل می کنید (در اغلب مواقع) اگر به device manager ویندوز و قسمت port برید می بینید که یک پورت با نام com x اضافه شده که x همون شماره پورت جدید هست. در واقع یک پورت سریال به سیستم شما اضافه شده چون usb نسخه جدید همون پورت سریال هست. حالا می تونید از داخل دلفی و با استفاده از cport به این پورت جدید وصل بشید. البته بعضی از سخت افزارها تا زمانی که driver مربوطه رو نصب کنید این پورت رو اضافه نمی کنند که طبیعی هم هست.
khazaie01
سه شنبه 28 اردیبهشت 1389, 18:50 عصر
ممنوووون دوست عزیز اما همه یو ای بی ها به این شکل عمل نمیکنن
چجوری میشه داده را به صورت HEX برای پورت ارسال کرد ؟
nice boy
چهارشنبه 29 اردیبهشت 1389, 10:04 صبح
چجوری میشه داده را به صورت HEX برای پورت ارسال کرد ؟
گه از cport استفاده کنی مشکلی نداره من داده ها رو تبدیل به hex می کنم بعد توی یک string قرار می دم و با دستور comport1.writestr ارسال می کنم
khazaie01
چهارشنبه 29 اردیبهشت 1389, 11:24 صبح
ممنووووون دوست عزیز
من هم همین ComPort را نصب کردم و میخوام یک عدد بزرگ در مبنای 16 را با همون قالب بفرستم.
به چه شکل داده ها تبدیل به HEX کنم ؟و توی استرینگ قرار بدم ؟! به عنوان مثال عدد C0010000000000010003 در مبنای 16 را میخوام ارسال کنم ، همین را داخل یک متغیر استرینگ قرار بدم ؟!
من به این شکل عمل کردم :
b := StrToInt('$C0') ;
s := s + char(b);
b از نوع بایت است و s از نوع استرینگ ، برای هر بایت این کار را انجام دادم و در آخر S را برای پورت ارسال کردم و به درستی هم کار کرد اما راه دیگه ای نیست ؟
nice boy
پنج شنبه 30 اردیبهشت 1389, 16:27 عصر
به چه شکل داده ها تبدیل به HEX کنم ؟و توی استرینگ قرار بدم ؟!
var
DataHex:string;
.
.
.
DataHex := IntToHex(152, 2);
DataHex := IntToHex(ord('A'), 2);
khazaie01
پنج شنبه 30 اردیبهشت 1389, 18:02 عصر
دوست عزیز این که عدد مبنای ده را تبدیل به هگز می کنه !!
ببینید من میخوام HEX ارسال کنم یعنی این عدد در مبنای 16 را دارم C0010000000000010003 و میخوام همین را ارسال کنم نه اینکه عدد مبنای 10 را به 16 تبدیل کنم !
درواقع من باید اون رشته HEX را به مجموعه کدهای اسکی تبدیل کنم بعد ارسال کنم....
khazaie01
شنبه 01 خرداد 1389, 08:18 صبح
این دیوایس که باهاش کار میکنم اطلاعات را با مبنای 16 دریافت می کنه و میفرسته ، در واقع دستورات با مبنای 16 است و بعد این کد هگز را به اسکی تبدیل می کنم و ارسال می کنم ، هنگام دریافت اطلاعات هم کدهای اسکی را به مبنای 16 تبدیل می کنم ...
مشکل اول تبدیل هگز به اسکی بود که به شکلی رفع شد ، من با دلفی 7 و با استفاده از ComPort که لینک داده بودید برنامه را نوشتم و خوب کار می کنه و دستورات را ارسال و دریافت می کنم ، اما همین سورس را با دلفی 2010 اجرا کردم کار نکرد ...
ممنوووووووون میشم اگر راهنمایی کنید.
ممنووووووووووووووون
function HexToAsc(strData:string): String;
var
sresult:string;
sfinal:string;
hexc:cardinal;
i:integer;
begin
i:=1;
strData:='C0'+strData+'C0';
while i<=length(strData) do
begin
hexc := strtoint('$' + copy(strData,i,2));
sresult := inttostr(hexc);
sresult := chr(strtoint(sresult));
sfinal := sfinal + sresult;
i:=i+2;
end;
result :=sfinal;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ComPort1.WriteStr(HexToAsc(Edit1.Text));
Memo1.Lines.Add('');
end;
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
j:Integer;
c:String;
begin
c:='';
ComPort1.Readstr(c,count);
for j:=1 to length(c) do
Memo1.Text:=Memo1.Text+' '+IntToHex(Ord(c[j]),2);
end;
nice boy
شنبه 01 خرداد 1389, 08:58 صبح
شما نفرمودید که اشکال چیه. آیا پیغام خطا میده یا اصلا داده ها ارسال نیمشه؟
من از cport در دلفی 2010 استفاده میکنم و هیچ مشکلی باهاش ندارم. البته نکته ای که شما باید دقت کنید در مورد string است همونطور که می دونید از دلفی 2009 به بعد ساختارهای string تغییر کرد و ممکن مشکل کار شما در همین زمینه باشه.
من کد شمارو در 2010 اجرا کردم از خط زیر ایراد می گیره ظاهرا پارامتر c باید از نوع ansistring تعریف بشه.
ComPort1.Readstr(c,count);
khazaie01
شنبه 01 خرداد 1389, 09:10 صبح
ممنوووون دوست عزیز
بله این خطا را هم می داد که C را از نوع AnsiString تعریف کردم و رفع شد ...
مشکل موقع ارسال اطلاعات هست ، تابع تبدیل هگز به اسکی را ببینید ، خروجی استرینگ است ولی برای ارسال اطلاعات باید به AnsiString تبدیل بشه ، قکر کنم مشکل سر همین موضوع باشه !
برنامه اجرا میشه اما اطلاعات را به درستی ارسال نمیکنه و دیوایس نمیتونه اطلاعات را تشخیص بده !!
جالب اینجاست که همین برنامه تو دلفی 7 بدون مشکل کار می کنه و دیوایس هم اطلاعات را به درستی دریافت میکنه و پاسخ می ده !
فکر کنم مشکل سر همین AnisString است (تو ارسال ...) خروجی تابع هگز به اسکی را به یک متغیر String دادم و بعد اون متغیر را به این شکل به AnsiString تبدیل کردم :
c=AnstiString(S);
بعد دیدم برخی از کاراکترهای رشته درهنگام تبدیل عوض شده !!
khazaie01
دوشنبه 03 خرداد 1389, 07:56 صبح
مشکل در تبدیل String به AnsiString است ، بحث را در این تاپیک دنبال می کنم... (http://barnamenevis.org/forum/showthread.php?p=990071#post990071)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.