spcomm的简单使用
一、设置com口参数[code] procedure TForm1.FormCreate(Sender: TObject); begin//以下设置为默认设置 Comm1.CommName:='com2';//设置要操作的串口 Comm1.BaudRate :=9600;//设置端口速率 Comm1.ParityCheck:=false;//设置奇偶校验 Comm1.StopBits :=_1;//设置停目位 Comm1.ByteSize :=_8;//设置数据位 end;[/code] 二、打开串口 Comm1.StartComm;//使用串口前应先打开 三、编写发送数据代码[code] procedure TForm1.Button1Click(Sender: TObject); var SendStr:string; TEM:integer; begin SendStr:=edit1.text+#13+#10; //在每条命令加回车,换行,看具体设置而定 //TEM:=sizeof(SendStr); TEM:=length(SendStr);//要发送数据的长度 //TEM:=sizeof(SendStr); Comm1.WriteCommData(pchar(SendStr),TEM);//发送数据 end;[/code] 四、编写接收数据代码 注意:对接收到的字符串处理时最好加语句:Trim去掉控制字符串和空格。 方法一、[code] procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var // RecStr:String; // i :integer; // tmpArray:array[0..4096] of Byte; pStr:PChar; begin pStr:=Buffer; //RecStr:=string(pStr); if BufferLength<>0 then Memo1.Lines.add(pStr); end;[/code] 方法二、[code] procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word); var i:integer; begin viewstring:=‘’ ; move(buffer^,pchar(@rbuf^),bufferlength); for i:=1 to bufferlength do viewstring:=viewstring+ inttohex(rbuf[i],2)+‘’ ; viewstring:=‘接收’+ viewstring; memo1.lines.add(viewstring); memo1.lines.add(‘’ ); end;[/code] 五、关闭串口 Comm1.StopComm;//串口不再使用时,应关闭 六、以十六进制方式发送[code] procedure TForm1.Button3Click(Sender: TObject); var Sendbuffer:array[0..256] of byte; len,i,j:integer; ss,tempSS:String; begin ss:= Edit1.Text; if ss='' then exit; len:=length(ss); if checkbox2.Checked then begin i:=1; j:=0; repeat tempSS:='$'+copy(ss,i,2); try SendBuffer[j]:=byte(strtoint(tempSS)); except exit; end; i:=i+2; j:=j+1; until(i>len); Comm1.WriteCommData(pchar(@sendbuffer), j); end else Comm1.WriteCommData(pchar(ss), len); end;[/code] |
|