📄 project1.~dpr
字号:
str1 := str1 + Write_Buffer[i];
Write_Buffer[8] := byte(str1 and $00FF);
Write_Buffer[9] := byte((str1 shr 8) and $00FF);
writefile(hcom, Write_Buffer, length(Write_Buffer), WriteNumber, nil);
//加入处理数据
end;
end;
ClearCommError(hcom, dwError, @cs);
DelaySecond := 0; //有数据
end;
Delay(25);
ClearCommError(hcom, dwError, @cs);
DelaySecond := DelaySecond + 1; //25毫秒后无数据
//receive.Lines.Add('DelaySecond' + inttostr(DelaySecond));
if Break.Text = '1' then begin
Break.Text := '0';
receive.Lines.Add('通信被中断---通信结束');
comcolorRed();
RadioGroup1.Enabled := true;
delete.Enabled := true;
Button1.Enabled := true;
ComboBox1.Enabled := true;
exit;
end;
end;
exit;
RDdata: receive.Lines.Add('与集中器通信结束');
//生成RD数据
// AssignFile(ToF, 'c:\RD_' + S + '.dat'); //当日或指定日数据
AssignFile(ToF, Filedir.Text + '\rd_dat\RD_' + S + '.dat'); //当日或指定日数据
if datastring = '8E' then
// AssignFile(ToF, 'c:\RR_' + S + '.dat'); //当月数据
AssignFile(ToF, Filedir.Text + '\rd_dat\RR_' + S + '.dat'); //当月数据
Rewrite(ToF);
LengthWrite_Buf := 266 * (page);
for i := 0 to LengthWrite_Buf - 1 do
Temp_buff[i] := Temp_buff[i + 1];
//去头断尾
for j := 1 to page do begin
for i := 0 to 254 do
RealTemp_buff[i + (j - 1) * 255] := Temp_buff[(j - 1) * 266 + 6 + i];
end;
//去头断尾
LengthWrite_Buf := 255 * (page); //重新定义长度
BlockWrite(ToF, RealTemp_buff, LengthWrite_Buf, LengthWrite_Buf);
if datastring = '8F' then
receive.Lines.Add('RD数据已经生成:' + Filedir.Text + '\rd_dat\RD_' + S + '.dat');
if datastring = '8E' then
receive.Lines.Add('RD数据已经生成:' + Filedir.Text + '\rd_dat\RR_' + S + '.dat');
CloseFile(ToF);
//生成RD数据
jieshu: CloseHandle(hcom);
comcolorRed();
RadioGroup1.Enabled := true;
delete.Enabled := true;
Button1.Enabled := true;
ComboBox1.Enabled := true;
DBGrid1EnControl();
DBGrid1EnControl();
exit;
except
end;
end;
//6.8上装当月 6.9 上装当日6.13上装指定日 parse
function TForm1.Parse6869TempString(datastring: string): string;
var
BiaoHao, Zong, Feng, Gu, ConStr, s, NowTime, Updatezong, Updatefeng, Updategu: string;
i, updatenumber: integer;
F1: TextFile;
begin
//showmessage(copy(datastring,33,12));
//DBGrid1EnControl();
DBGrid2.SelectedRows.Count; //当前行号
s := rightstr(DBGrid2.Fields[0].AsString, 4);
datastring := copy(datastring, 21, length(datastring) - 20);
AssignFile(F1, Filedir.Text + '\rd_txt\rd_' + s + '.txt');
Rewrite(F1);
for i := 1 to round(length(datastring) / 36) do begin
BiaoHao := '';
Zong := '';
Feng := '';
Gu := '';
BiaoHao := copy(datastring, 1 + 36 * (i - 1), 12);
BiaoHao := rightstr(BiaoHao, 9);
Zong := Zong + copy(datastring, 13 + 36 * (i - 1), 6) + '.' + copy(datastring, 19 + 36 * (i - 1), 2);
Feng := Feng + copy(datastring, 21 + 36 * (i - 1), 6) + '.' + copy(datastring, 27 + 36 * (i - 1), 2);
Gu := Gu + copy(datastring, 29 + 36 * (i - 1), 6) + '.' + copy(datastring, 35 + 36 * (i - 1), 2);
Zong := trim(Zong);
//Zong :='111';// Zong + copy(datastring, 13 + 36 * (i - 1), 6) + '.' + copy(datastring, 19 + 36 * (i - 1), 2);
//Feng :='22';// Feng + copy(datastring, 21 + 36 * (i - 1), 6) + '.' + copy(datastring, 27 + 36 * (i - 1), 2);
//Gu := '3';//
if BiaoHao <> 'FFFFFFFFF' then
receive.Lines.Add(' 电表局编号:' + BiaoHao + ' 总: ' + Zong + ' 峰: ' + Feng + ' 谷: ' + Gu);
//************************************
DBGrid3.SetFocus;
if DBGrid1.Columns.Count = 30 then
ADOQuery3.Locate('bh', BiaoHao, []);
if DBGrid1.Columns.Count = 23 then
ADOQuery3.Locate('UP_BH', BiaoHao, []);
//************************************
Writeln(F1, ' 电表局编号:' + BiaoHao + ' 总: ' + Zong + ' 峰: ' + Feng + ' 谷: ' + Gu);
if ExistDBF.Text = '1' then begin //存在
if (Zong <> 'FFFFFF.FF') and (BiaoHao <> 'FFFFFFFFF') then //不是空值或错误
{//填加到数据库中} begin
NowTime := FormatDateTime('yyyy/mm/dd hh:mm:ss', now);
updatenumber := updatenumber + 1;
ADOQuery1.First;
Delay(1);
while not ADOQuery1.Eof do begin
//********苏源系统*********
if DBGrid1.Columns.Count = 30 then begin
if (ADOQuery1.Fields[14].AsString = '4') and (ADOQuery1.Fields[1].AsString = BiaoHao) then begin
ADOQuery1.Edit;
ADOQuery1.Fields[3].AsString := Zong;
ADOQuery1.Fields[7].AsString := NowTime;
ADOQuery1.UpdateRecord;
end;
if (ADOQuery1.Fields[14].AsString = '1') and (ADOQuery1.Fields[1].AsString = BiaoHao) then begin
ADOQuery1.Edit;
ADOQuery1.Fields[3].AsString := Feng;
ADOQuery1.Fields[7].AsString := NowTime;
ADOQuery1.UpdateRecord;
end;
if (ADOQuery1.Fields[14].AsString = '3') and (ADOQuery1.Fields[1].AsString = BiaoHao) then begin
ADOQuery1.Edit;
ADOQuery1.Fields[3].AsString := Gu;
ADOQuery1.Fields[7].AsString := NowTime;
ADOQuery1.UpdateRecord;
end;
end;
//********苏源系统*********
//********寰宇系统*********
if DBGrid1.Columns.Count = 23 then begin
if (ADOQuery1.Fields[12].AsString = '2') and (ADOQuery1.Fields[0].AsString = rightstr(BiaoHao,7)) then begin
ADOQuery1.Edit;
ADOQuery1.Fields[1].AsString := Zong;
ADOQuery1.Fields[5].AsString := NowTime;
ADOQuery1.UpdateRecord;
end;
if (ADOQuery1.Fields[12].AsString = '4') and (ADOQuery1.Fields[0].AsString = rightstr(BiaoHao,7)) then begin
ADOQuery1.Edit;
ADOQuery1.Fields[1].AsString := Feng;
ADOQuery1.Fields[5].AsString := NowTime;
ADOQuery1.UpdateRecord;
end;
if (ADOQuery1.Fields[12].AsString = '5') and (ADOQuery1.Fields[0].AsString = rightstr(BiaoHao,7)) then begin
ADOQuery1.Edit;
ADOQuery1.Fields[1].AsString := Gu;
ADOQuery1.Fields[5].AsString := NowTime;
ADOQuery1.UpdateRecord;
end;
end;
//********寰宇系统*********
ADOQuery1.Next;
end; //wwhile
end; //exist
end; //not FFFFF
end; //for reclcy
CloseFile(F1);
end;
//处理一块数据 下载抄表日 下载主流程 下载局编号
function TForm1.ParseDataOnlyOne(DataLen: integer): integer; //DataLen是传过来的收到每帧报文长度
var
i, ff, ReceiveLen, j, page, ii, Temp_len, DelayNum, DelaySecond: integer;
inbuff, Temp_buff: array[0..255 * 8] of byte;
dwError: Dword;
wait: Boolean;
cs: Tcomstat;
Bytesread: LongWord;
TempString, ConStr, updatejzq: string;
label changejzq;
begin
if (hcom = 0) then exit;
ClearCommError(hcom, dwError, @cs);
ReceiveLen := 0;
j := 1;
page := 0;
DelaySecond := 1;
for i := 1 to 255 * 8 do begin
inbuff[i] := byte($00);
Temp_buff[i] := byte($00);
end;
while DelaySecond < 64 * 5 do begin
while cs.cbInQue > 0 do begin
if ReadFile(hcom, inbuff, cs.cbInQue, Bytesread, nil) then begin
{将inbuff加入Temp_buff}
for Temp_len := 1 to cs.cbInQue do
Temp_buff[ReceiveLen + Temp_len] := inbuff[Temp_len - 1];
ReceiveLen := ReceiveLen + cs.cbInQue;
{将inbuff加入Temp_buff}
if ReceiveLen - (page + 1) * DataLen >= 0 then {//字节数够一个帧的长度} begin
TempString := '';
for ii := 1 to DataLen do // SizeOf(TComStat)
TempString := TempString + Format('%2x', [Temp_buff[ii + page * DataLen]]);
page := page + 1;
//receive.Lines.Add(TempString);
if trim(copy(TempString, 5, 2)) = trim(' 0') then begin
receive.Lines.Add('设置成功' + Edit2.Text + '块');
Result := 0;
exit; //跳出此函数
end;
if (copy(TempString, 5, 2) = '8C') or (copy(TempString, 5, 2) = '8A') or (copy(TempString, 5, 2) = '86') then begin
receive.Lines.Add('操作已顺利完成');
Result := 0;
if (copy(TempString, 5, 2) = '86') and (changejzqhao.Text = '1') then goto changejzq;
exit; //跳出此函数
end;
//改集中器并刷新
changejzq: if (copy(TempString, 5, 2) = '86') and (changejzqhao.Text = '1') then begin
//receive.Lines.Add('操作已顺利完成');
changejzqhao.Text := '0';
updatejzq := 'Update jzq set Jzqhao=''' + Form4.MaskEdit1.Text + '''' + ' where Jzqhao=''' + dbgrid2select.Text + '''';
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(updatejzq);
ADOQuery2.ExecSQL;
//showmessage('下面开始执行select*');
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select * from jzq');
ADOQuery2.Open;
DBGrid2.DataSource.DataSet := ADOQuery2;
DbgridTitle('DBGrid2','');
DBGrid2.Refresh;
exit; //跳出此函数
//把版本号加入数据库并加入日期
end;
//改集中器并刷新
if (copy(TempString, 5, 2) = 'CC') or (copy(TempString, 5, 2) = 'C6') or (copy(TempString, 5, 2) = 'CA') then begin
receive.Lines.Add('设置失败' + TempString);
Result := 1;
exit; //跳出此函数
end
end;
end;
ClearCommError(hcom, dwError, @cs);
DelaySecond := 0; //有数据
end;
Delay(25);
ClearCommError(hcom, dwError, @cs);
DelaySecond := DelaySecond + 1; //25毫秒后无数据
// receive.Lines.Add('DelaySecond--->' + IntToStr(DelaySecond));
end; {end if while DelaySecond<8}
end;
//DBgrid Title
procedure TForm1.DbgridTitle(DbgridNumber: string; BiaoMing: string);
var
FieldStringSuYUan, FieldStringHuangYu: string;
begin
FieldStringSuYUan := 'ZHH,BH,DZ,BYSS,DH,DXH,HM,CBSJ,CL,DJ,SYSS,YYH,JJDL,YCM,SSLBXM,NEWBH,CBZT,SCDL,SCYCM,TSXX,ZCWS,LD,YWBZ,CBFS,CBCS,QFXX,TDBZ,YHXYBZ,WH,CWSZ';
FieldStringHuangYu := 'UP_BH,UP_SDB,UP_ZZ,DZ,DXH,CBSJ,HM,UP_ZBBZ,CL,DL,SDS,DJ,LX,DH,JJDL,YH,CBFS,CBCS,QFXX,TDBZ,YHXYBZ,WH,CWSZ';
if DbgridNumber = 'DBGrid2' then begin
DBGrid2.Columns[0].Title.caption := '集中器号';
DBGrid2.Columns[1].Title.caption := '安装地址';
DBGrid2.Columns[2].Title.caption := '版本号';
DBGrid2.Columns[3].Title.caption := '版本时间';
end;
if (DbgridNumber = 'DBGrid1') and (DBGrid1.Columns.Count = 30) then begin
//改变表显示顺序
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select ' + FieldStringSuYUan + ' from ' + BiaoMing +' order by DH,DXH,SSLBXM');
ADOQuery1.Active := true;
ADOQuery1.Open;
DBGrid1.DataSource.DataSet := ADOQuery1;
//改变表显示顺序
DBGrid1.Columns[0].Title.caption := '总户号';
DBGrid1.Columns[1].Title.caption := '表号';
DBGrid1.Columns[2].Title.caption := '地址';
DBGrid1.Columns[2].Width :=120;
DBGrid1.Columns[3].Title.caption := '本月示数';
DBGrid1.Columns[3].Width :=60;
DBGrid1.Columns[4].Title.caption := '段号';
DBGrid1.Columns[5].Title.caption := '段序号';
DBGrid1.Columns[5].Width :=40;
DBGrid1.Columns[6].Title.caption := '户名';
DBGrid1.Columns[6].Width :=40;
DBGrid1.Columns[7].Title.caption := '抄表时间';
DBGrid1.Columns[8].Title.caption := '乘率';
DBGrid1.Columns[9].Title.caption := '电价值';
DBGrid1.Columns[10].Title.caption := '上月示数';
DBGrid1.Columns[11].Title.caption := '营业号';
DBGrid1.Columns[12].Title.caption := '加减电量';
DBGrid1.Columns[13].Title.caption := '异常码';
DBGrid1.Columns[14].Title.caption := '示数类别项目';
DBGrid1.Columns[15].Title.caption := '新表号';
DBGrid1.Columns[16].Title.caption := '抄表状态';
DBGrid1.Columns[17].Title.caption := '上次电量';
DBGrid1.Columns[18].Title.caption := '上次异常码';
DBGrid1.Columns[19].Title.caption := '提示信息';
DBGrid1.Columns[20].Title.caption := '字车位数';
DBGrid1.Columns[21].Title.caption := '零度';
DBGrid1.Columns[22].Title.caption := '疑问标志';
DBGrid1.Columns[23].Title.caption := '抄表方式';
DBGrid1.Columns[24].Title.caption := '抄表次数';
DBGrid1.Columns[25].Title.caption := '欠费信息';
DBGrid1.Columns[26].Title.caption := '停电标志';
DBGrid1.Columns[27].Title.caption := '用户信用标志';
DBGrid1.Columns[28].Title.caption := '维护记录';
DBGrid1.Columns[29].Title.caption := '电表错误时钟';
// DBGrid1.Refresh;
end;
//以下是寰宇系统
if (DbgridNumber = 'DBGrid1') and (DBGrid1.Columns.Count = 23) then begin
//改变表显示顺序
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select ' + FieldStringHuangYu + ' from ' + BiaoMing +' order by DH,dxh,lx');
ADOQuery1.Active := true;
ADOQuery1.Open;
DBGrid1.DataSource.DataSet := ADOQuery1;
//改变表显示顺序
DBGrid1.Columns[0].Title.caption := '表号';
DBGrid1.Columns[1].Title.caption := '本月示度';
DBGrid1.Columns[2].Title.caption := '总户号';
DBGrid1.Columns[3].Title.caption := '用电地址';
DBGrid1.Columns[3].Width :=120;
DBGrid1.Columns[4].Title.caption := '抄表本顺序号';
DBGrid1.Columns[5].Title.caption := '抄表时间';
DBGrid1.Columns[6].Title.caption := '用电户名';
DBGrid1.Columns[7].Title.caption := '异常码';
DBGrid1.Columns[8].Title.caption := '乘率';
DBGrid1.Columns[9].Title.caption := '上次电量';
DBGrid1.Columns[10].Title.caption := '上次示度';
DBGrid1.Columns[11].Title.caption := '电价码';
DBGrid1.Columns[12].Title.caption := '类型';
DBGrid1.Columns[13].Title.caption := '抄表本段号';
DBGrid1.Columns[14].Title.caption := '加减电量';
DBGrid1.Columns[15].Title.caption := '营业号';
DBGrid1.Columns[16].Title.caption := '抄表方式';
DBGrid1.Columns[17].Title.caption := '抄表次数';
DBGrid1.Columns[18].Title.caption := '欠费信息';
DBGrid1.Columns[19].Title.caption := '停电标志';
DBGrid1.Columns[20].Title.caption := '用户信用标志';
DBGrid1.Columns[21].Title.caption := '维护记录';
DBGrid1.Columns[22].Title.caption := '电表错误时钟';
// DBGrid1.Refresh;
end;
end;
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -