一个发送数的问题,是循环时出错了吗,还是MSCOMM的问题呢。请朋友们帮我看看。(50分)

笨波

Unregistered / Unconfirmed
GUEST, unregistred user!
听说过用MSCOMM发送数据的过程中,数据会丢失,可下面这个问题是出在了循环语句上了呢,
还是MSCOMM发过程中丢失的呢,请朋友们帮我看看。
我发送的数据是这样的:FEFE3344F32C6522;已经是十六进制的了,为了写到COM1上时也让
它认为我发的是十六进制的数而不是字符,我用了循环语句:如下
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
s,datastr:string;
begin
s:=memo1.text;
for i:=0 to (length(s) div 2)-1do
begin
datastr:=datastr+chr(strtoint('$'+ copy(s,i*2+1,2)));
end;
可发现发送后,其它的数据都对,但F3后面的2C不见了,发送的数据变成了FEFE3344(3F)6522
我试了试好象是这样的,如果发送:F3C2,发送过程就是好的,但如果是F32C,就变成了:3F;
即:发送此种型式是好的:F3F4F5C2C4C6,但发送:F34F5FC26C时就不对,会改3F;
即第一个和第2*I+1个字符必须对应,要么都是数字,要么都是字符,不然就出错,改成了3F。
是不在循环的时候就出错了呢。
 
一个一个传吧
datastr:=datastr+chr(strtoint('$'+ copy(s,i+1,1)));
 
不行呀,传送要求的数据格式是这样的,一个一个传它会在每个字符前面自动补零的。所以
传送的数据也就错了。
 
将MSCOMM.IputModel:=comInputModeText
改成MSCOMM.IputModel:=comInputModeBinary
 
zhanggm老兄,看来你对此是很懂的,不过我的用法和你想的不一样,我贴出来你帮我看看吧,行吗。
 
多人接受答案了。
 
顶部