首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Delphi SPCOMM串口以CDT规约发送数据的有关问题,对方收不到源码或只是乱码

2012-03-12 
Delphi SPCOMM串口以CDT规约发送数据的问题,对方收不到源码或只是乱码。最近自己做一个小程序,用SPCOMM 的

Delphi SPCOMM串口以CDT规约发送数据的问题,对方收不到源码或只是乱码。
最近自己做一个小程序,用SPCOMM 的串口调试助手做基础,用COM3 接收数据(USB转COM的,已转为整数型),再用本机的COM1 以CDT规约发送数据出去,用了2个SPCOMM的控件,发现发送数据,对方收到源码或只收到乱码。
COM3 波特率9600 ,数据位8 停止位1 无校验,COM1 波特率600 ,数据位8 停止位1 无校验。相关代码如下:
是否发送格式不对或者发送数据间隔不匹配。
请指正。

Delphi(Pascal) code
procedure TFrmMain.btnSendClick(Sender: TObject);{beginsbuf[1]:=byte($eb); //帧头 sbuf[2]:=byte($90); //命令号 sbuf[3]:=byte($eb);sbuf[4]:=byte($90);sbuf[5]:=byte($eb);sbuf[6]:=byte($90); //帧尾 sbuf[7]:=byte($71);sbuf[8]:=byte($61);sbuf[9]:=byte($01);sbuf[10]:=byte($00);sbuf[11]:=byte($00);sbuf[12]:=byte($2b); //帧尾 sbuf[13]:=byte($00);sbuf[14]:=byte($0a);sbuf[15]:=byte($00);sbuf[16]:=byte($14);sbuf[17]:=byte($00);sbuf[18]:=byte($60); //帧尾 senddata;//调用发送函数end;}var ss:string;const tongbu='EB 90 EB 90 EB 90 71 61 04 01 01 1A ';begin  if cbsendHex.Checked then    SendString(HexStrToStr(Memo3.Text))  else  begin   Memo2.Text:=tongbu+'00 0'+copy(inttohex(wds,2),0,1)+' '+   copy(inttohex(wds,2),1,2)+' 0'+copy(inttohex(sds,2),0,1)+' '+   copy(inttohex(sds,2),1,2)+' EF 01 00 00 00 00 12';   if Memo2.Text<>'' then   SendString(Memo2.Text);  end;end;procedure TFrmMain.SendString(const Str: string);begin   if Comm2.WriteCommData(PChar(Str), Length(Str)) then  begin     FTXNum := FTXNum + Cardinal(Length(Str));    ShowTX;  end;end;  procedure TFrmMain.senddata;vari:integer;commflg:boolean;beginviewstring:='';commflg:=true;for i:=1 to 18 dobeginif not FrmMain.Comm2.writecommdata(@sbuf[i],1) thenbegincommflg:=false;break;end;sleep(10); {发送时字节间的延时}viewstring:=viewstring+inttohex(sbuf[i],2)+' ';end; FrmMain.memo1.lines.add(viewstring); FTXNum := FTXNum + 18; ShowTX;if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);end;


[解决办法]
writecommdata 可以直接发多字节
FrmMain.Comm2.writecommdata(@sbuf[i],18) then

热点排行