ورود

View Full Version : دریافت داده هایی متفاوت در پورت سریال



omidan321
سه شنبه 15 اسفند 1391, 09:54 صبح
من خیلی گشتم و در مورد پورت سریال همیشه یه منطق حاکم هست و اون همونیه که باید انتظارشو داشته باشی ولی من الان یه دو سه روزی هست که دارم باهاش سرو کله میزنم که داده های درست رو دریافت کنم ولی نمیشه شرح مشکل من اینه :
من یه برنامه دارم به اسم SerialCom.exe که داده های ورودیمو توش تست میکنم داده ها به درستی دریافت میشه اما وقتی با comport دلفی داده ها رو دریافت میکنم در ورودی اول (طبق کدی که در پایین گذاشتم ) 1/3 داده ها دریافت میشه اما ، بذارید کد رو بذارم اول :
procedure Tbasir.BitBtn1Click(Sender: TObject);
procedure sendstring(Str: widestring);
begin
if (send_recive_kind='recive') then
begin
send_recive_kind:='send';
end else send_recive_kind:='send';
COMPORT.WriteStr(STR);
end;
var
str:string;

begin
str:='HGFGDDCJGFDTHJHFCGFEUUUUUUUUUUU040013200051U '+#13#10;
sendstring(str);

end;

این کدی هست با زدن دکمه ارسال رشته رو ارسال میکنه
حالا کد دریافت در rxcha پورت سریال

procedure Tbasir.ComPortRxChar(Sender: TObject; Count: Integer);

procedure sendstring(Str: widestring);
begin
if (send_recive_kind='recive') then
begin
send_recive_kind:='send';
end else send_recive_kind:='send';
comport.WriteUnicodeString(str);
end;
var
str_recive,str,msg: wideString;
comand: string;
sr_pos1: integer;
begin
send_recive_kind:='recive';
comport.ReadUnicodeString (Str_recive, Count);
str_om:=str_om+str_recive;
memo2.Text :=str_om;
edit4.Text := memo2.Text ;
40:
str_om:=str_om+edit4.Text;
sr_pos1:=pos('112',str_om) ;

if sr_pos1>10 then
begin
str:=str_om;
comport.ReadUnicodeString(str_recive,count);
str:=str+ str_om+str_recive;
dcstr(str,comand,msg,err,ip_con);
if (comand='set') then
begin
if msg='set3' then
application.MessageBox('salam ','');
end;

end;
end;


حالا مشکل من اینجاست که نمیتونم عین داده ای که وارد کردم رو دریافت کنم مشکل از کجاست نمیدونم
متغیرهایی که بعد از read اول تعریف کردم حکم یه واسط رو دارن که همه داده های ورودی درش ذخیره بشن تا بتونم انتهای بسته رو پیدا کنم (برای اطمینان از صحت ورود کامل رشته ورودی)
حالا از همه اساتید و دوستان تقاضای راهنمایی دارم که بتونم ای یه بخش باقیمانده رو درست کنم

اینم عکسیه که تو ورودی شی memo2 وارد میشه در صورتی که فرم اصلی که تو برنامه serial com دریافت میشه عینا اون چیزی هست که از طرف فرستنده ارسال میشه

http://upload.tehran98.com/img1/j8kdlmcowf6rf5w8p3x.jpg

BORHAN TEC
سه شنبه 15 اسفند 1391, 21:17 عصر
سلام
از برنامه نمونه ای که در تاپیک زیر ضمیمه کرده ام استفاده کنید:
http://barnamenevis.org/showthread.php?368108
موفق باشید...

omidan321
چهارشنبه 16 اسفند 1391, 07:57 صبح
این کامپوننت مربوط به پورت کام که تو پستی که معرفی کردی رو نصب کردم ولی نسخه تریال هستش.
من توی memo تونستم داده های ورودی رو ببینم همون طوری که در برنامه serialcom میدیدم
اما یه مشکلی هست اینکه هرچند تایی داده ورودی در یک خط قرار میگیره که کلا داده ها به 8 یا 9 خط که درش 5 یا 6 تا داده هست میرسه تو سرچی که در مورد عنصر memo داشتم اینو گفتن که میشه با خاصیت memo.text هر چی داده در memo هست رو در اختیار داشته باشه (مهم نیست چند خط باشه) اما با استفاده ا این خاصیتش هم نتونستم هر چی داده تو memo هست رو در اختیار بگیرم