我原来一直用vb的mscomm做串口通讯。最近改用delphi的spcomm。
发现有一点的程序流程在delphi中不知道怎么办才好。
vb中我接受数据一般用这样的代码:
mscN1.InputMode = comInputModeBinary
Do While mscN1.InBufferCount < n2 'n2是要求接受的数据长度
DoEvents
Loop
mscN1.InputLen = n2
s1 = mscN1.Input
b1() = s1
因为程序流程就是当串口传回符合长度要求的数据后才继续进行的,否则要一直等待。
在delphi中怎么实现呢?spcomm能这样取数据么?或者有更好的方法也行。
发现有一点的程序流程在delphi中不知道怎么办才好。
vb中我接受数据一般用这样的代码:
mscN1.InputMode = comInputModeBinary
Do While mscN1.InBufferCount < n2 'n2是要求接受的数据长度
DoEvents
Loop
mscN1.InputLen = n2
s1 = mscN1.Input
b1() = s1
因为程序流程就是当串口传回符合长度要求的数据后才继续进行的,否则要一直等待。
在delphi中怎么实现呢?spcomm能这样取数据么?或者有更好的方法也行。
procedure TForm3.ComPort1RxChar(Sender: TObject; Count: Integer);
var
str:String;
begin
if Count<12 then exit; //Count代表缓冲区的字符个数
//Do something in here
Comport1.ReadStr(Str,12); //接收12个字符
end;
Comport1.OutputCount
BufferLength: Word);
var
rbuf:array of byte;
i:integer;
t:ttime;
begin
if BufferLength<>设定的长度 then exit; setLength(rbuf, BufferLength);
move(Buffer^, PChar(rbuf)^, BufferLength);
.....
end;
我弄了一个全部变量在ReceiveData中把取接收到的数据长度,然后在流程控制中发完命令后循环读这个变量,直到变量值达到规定的长度(这个长度要根据发送命令的不同可能不同,即返回的数据长度不同)。
初步调试,还可以吧。
可能有点麻烦,也是在想不出更好的办法了。
结贴了!