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
من یه برنامه دارم به اسم 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