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