spcomm控件问题(数据发送不出)
程序概述:
1.先将统计数据库的记录数,每16条记录为一组数据,然后计算出有多少组数据;
2.用循环将每组数据写入单片机内
3.数据写入单片机时,要将记录如(1A2A3A4A)转换成字节(26,42,58,74),之后再用Comm1.WriteCommData方法写
数据进行第一次循环时能把数据顺利写进单片机内,但是进行第二次循环时,就不能写进了,该如何解决呢?急解决(QQ:373136091)
procedure TFrmMain.ButDownLoadTecClick(Sender: TObject);
var
i:integer;
begin
teacher:=true;
ADOQueryTecher.First;
totalteacher:=DBGridTeacher.DataSource.DataSet.RecordCount;
sectornumber:=(totalteacher div 16)+1;
if sectornumber>=217 then sectornumber:=216;
for i:=0 to sectornumber-1 do
begin
SLEEP(100);
writeTEic(i); //调入写函数
end;
end;
function TFrmMain.writeTEic(sector: integer): integer;
var
i,j:integer;
s:string;
begin
//向IC卡机写教师卡
//FOR I:=1 TO 73 DO CStr[I]:=0;
CStr[1]:=254;
CStr[2]:=$0f0; //0f0为透明传送指令;
CStr[3]:=73; //总指令长度;
CStr[4]:=0; //0为不等待应答,1=等500ms应答;
CStr[5]:=$0d; //address
CStr[6]:=$0b1; //写存储器指令
CStr[7]:=sector; //写存储器地址(0-216教师卡地址)
for i:=sector*16 to sector*16+15 do //取出数据库的值赋给数组变量
begin
if (totalteacher-1)>=i then
begin
icnumber[i-sector*16]:=ADOQueryTecher.FieldByName('icnumber').AsString; 如:1A2A3A4A
ADOQueryTecher.Next;
end
else icnumber[i-sector*16]:='00000000';
end;
for i:=0 to 15 do //将数组变量转换成字节
begin
CStr[7+i*4+1]:=(pos(icnumber[i][1],cScaleChar)-1)*16+(pos(icnumber[i][2],cScaleChar)-1);
CStr[7+i*4+2]:=(pos(icnumber[i][3],cScaleChar)-1)*16+(pos(icnumber[i][4],cScaleChar)-1);
CStr[7+i*4+3]:=(pos(icnumber[i][5],cScaleChar)-1)*16+(pos(icnumber[i][6],cScaleChar)-1);
CStr[7+i*4+4]:=(pos(icnumber[i][7],cScaleChar)-1)*16+(pos(icnumber[i][8],cScaleChar)-1);
end;
j:=0;
for i:=5 to 71 do j:=j+CStr[i];
CStr[72]:=j mod 256;
CStr[73]:=255;
try
s:='';
sleep(100);
for i:=1 to 73 do s:=s+chr(CStr[i]);
if not Comm1.SendDataEmpty then
begin
if Comm1.WriteCommData(Pchar(s),Length(s)) then SLEEP(100) else showmessage('fdf');
if Comm1.WriteCommData(Pchar(s),Length(s)) then SLEEP(100) else showmessage('fdf');
end;
except
exit;
end;
end;