美女求助!!! 快来帮忙呀````(100分)

  • 主题发起人 主题发起人 aimarli
  • 开始时间 开始时间
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;
 
我怎么看不出来谁是美女?
 
美女就抱大款或被官养吧,别写代码了。面对电脑对皮肤不好。
 
还容易衰老
 
是的,先回去做个面膜!!
 
看来大家都对美女不感冒或者不相信楼主"美女"的身份
 
strlen:=length('+b+')+length('+c+');
等同于
strlen:=6;
也就是说
sbuf[4]:=strlen;
数据包长度是一个固定常量等于6,这是你的本意吗?
 
是的,在长度这里是这个意思
 
看过你的代码,虽然不知道你的需求,但按照我的经验,我想可能存在下面一些错误的地方

procedure TForm1.Button1Click(Sender: TObject);
var
len:word;
sbuf:array[1..16] of byte;
bcc:array[0..1] of byte;
a,b,c: Byte; //////你原来的代码为string
strlen,checksum,i,d:integer;
begin
if edit3.Text='23信号机' then a:=$01 ;////////赋值语句相应修改。坦白说这段代码比较幼稚:)
if edit3.Text='24信号机' then a:=$02
else if edit3.Text='25信号机' then a:=$03
else if edit3.Text='26信号机' then a:=$04
else if edit3.Text='27信号机' then a:=$05
else if edit3.Text='28信号机' then a:=$06
else if edit3.Text='29信号机' then a:=$07
else edit3.Text='30信号机' then a:=$08 ;

if combobox3.Text='无断丝,亮灯' then b:='06'///////赋值语句也相应修改
else if combobox3.Text='主丝断' then b:='07'
else if combobox3.Text='副丝断' then b:='08'
else combobox3.Text='主副丝断' then b:='09';

if combobox1.Text='红灯' then c:='H'/////////同上
else if combobox1.Text='黄灯' then c:='U'
else combobox1.Text='绿灯' then c:='L'

strlen:=SizeOf(b) + SizeOf(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:=SizeOf(sbuf); ////////////这里也要取发给串口的内存的长度,不是字符串的长度
comm1.WriteCommData(@sbuf,len);
end;
end;

还有什么问题给我发邮件,顺便告诉我你在哪里工作是那个公司的好吗?我在你的代码中看到了$AA55,呵呵难道和我以前供职公司的一个同事出自同一老师:)
 
数组中的变量不知道是否正确引用的问题,还有在关系运算的时候 也是有问题。
-- delphi的跟踪调试功能很强大的。变量引用后、关系运算后打上断点,看一下内存变量的内容不行吗?
 
是大美女吗?
 
那美女来吸引我们做程序的,太小瞧咱们了吧!!!!
 
是美女,再怎么说也要留名一下~~~美女贴下走,代码也风流,阿。。。
 
楼上很幽默
 
谢谢了 我也是帮别人搞的
 

Similar threads

I
回复
0
查看
762
import
I
I
回复
0
查看
719
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部