A
aimarli
Unregistered / Unconfirmed
GUEST, unregistred user!
在下面代码中有些错误的地方 想得到高人们的指教
数组中的变量不知道是否正确引用`````(例如sbuf[3]:=byte($a); sbuf[4]:=strlen; sbuf[5]:=byte($b); sbuf[6]:=byte($c); )
还有在关系运算的时候 也是有问题
procedure TForm1.Button1Click(Sender: TObject);
var
len:word;
sbuf:array[1..16] of byte;
bcc:array[0..1] of byte;
a,b,c:string;
strlen,checksum,i,d:integer;
begin
if edit3.Text='23信号机' then a:='01' ;
if edit3.Text='24信号机' then a:='02' ;
if edit3.Text='25信号机' then a:='03' ;
if edit3.Text='26信号机' then a:='04' ;
if edit3.Text='27信号机' then a:='05' ;
if edit3.Text='28信号机' then a:='06' ;
if edit3.Text='29信号机' then a:='07' ;
if edit3.Text='30信号机' then a:='08' ;
if combobox3.Text='无断丝,亮灯' then b:='06';
if combobox3.Text='主丝断' then b:='07';
if combobox3.Text='副丝断' then b:='08';
if combobox3.Text='主副丝断' then b:='09';
if combobox1.Text='红灯' then c:='H';
if combobox1.Text='黄灯' then c:='U';
if combobox1.Text='绿灯' then c:='L';
strlen:=length('+b+')+length('+c+');
if (Edit3.Text='') or (Combobox1.Text='') or(Combobox3.Text='')
then
begin
showmessage('选择输入不能为空') ;
end
else
begin
sbuf[1]:=byte($55); //起始码
sbuf[2]:=byte($AA); //起始码
sbuf[3]:=byte($a); //地址码
sbuf[4]:=strlen; //数据包长度
sbuf[5]:=byte($b); // 功能码
sbuf[6]:=byte($c); //数据
checksum:= sbuf[4] xor sbuf[5] xor sbuf[6];
bcc[0]:=checksum shr 4;
bcc[1]:=checksum and 0x0f;
if bcc[0]>9
then
begin
bcc[0]:=bcc[0]+0x37
end
else bcc[0]:=bcc[0]+0x30;
end;
if bcc[1]>9
then
begin
bcc[1]:=bcc[1]+0x37
end
else bcc[1]:=bcc[1]+0x30;
end;
sbuf[7]:=bcc[0]; //BCC校验码
sbuf[8]:=bcc[1]; //BCC校验码
sbuf[9]:=byte($0D); //结束码
sbuf[10]:=byte($0A); //结束码
len:=length(sbuf);
comm1.WriteCommData(@sbuf,len);
end;
end;
数组中的变量不知道是否正确引用`````(例如sbuf[3]:=byte($a); sbuf[4]:=strlen; sbuf[5]:=byte($b); sbuf[6]:=byte($c); )
还有在关系运算的时候 也是有问题
procedure TForm1.Button1Click(Sender: TObject);
var
len:word;
sbuf:array[1..16] of byte;
bcc:array[0..1] of byte;
a,b,c:string;
strlen,checksum,i,d:integer;
begin
if edit3.Text='23信号机' then a:='01' ;
if edit3.Text='24信号机' then a:='02' ;
if edit3.Text='25信号机' then a:='03' ;
if edit3.Text='26信号机' then a:='04' ;
if edit3.Text='27信号机' then a:='05' ;
if edit3.Text='28信号机' then a:='06' ;
if edit3.Text='29信号机' then a:='07' ;
if edit3.Text='30信号机' then a:='08' ;
if combobox3.Text='无断丝,亮灯' then b:='06';
if combobox3.Text='主丝断' then b:='07';
if combobox3.Text='副丝断' then b:='08';
if combobox3.Text='主副丝断' then b:='09';
if combobox1.Text='红灯' then c:='H';
if combobox1.Text='黄灯' then c:='U';
if combobox1.Text='绿灯' then c:='L';
strlen:=length('+b+')+length('+c+');
if (Edit3.Text='') or (Combobox1.Text='') or(Combobox3.Text='')
then
begin
showmessage('选择输入不能为空') ;
end
else
begin
sbuf[1]:=byte($55); //起始码
sbuf[2]:=byte($AA); //起始码
sbuf[3]:=byte($a); //地址码
sbuf[4]:=strlen; //数据包长度
sbuf[5]:=byte($b); // 功能码
sbuf[6]:=byte($c); //数据
checksum:= sbuf[4] xor sbuf[5] xor sbuf[6];
bcc[0]:=checksum shr 4;
bcc[1]:=checksum and 0x0f;
if bcc[0]>9
then
begin
bcc[0]:=bcc[0]+0x37
end
else bcc[0]:=bcc[0]+0x30;
end;
if bcc[1]>9
then
begin
bcc[1]:=bcc[1]+0x37
end
else bcc[1]:=bcc[1]+0x30;
end;
sbuf[7]:=bcc[0]; //BCC校验码
sbuf[8]:=bcc[1]; //BCC校验码
sbuf[9]:=byte($0D); //结束码
sbuf[10]:=byte($0A); //结束码
len:=length(sbuf);
comm1.WriteCommData(@sbuf,len);
end;
end;