📄 project1.~dpr
字号:
if (datastring = '6.1') then begin
if length(trim(copy(TempString, 13, 2))) = 1 then
JzpYear := '200' + trim(copy(TempString, 13, 2));
if length(trim(copy(TempString, 13, 2))) = 2 then
JzpYear := '20' + trim(copy(TempString, 13, 2));
receive.Lines.Add('集中器时间:' + JzpYear + ' 年' + copy(TempString, 15, 2) + ' 月'
+ copy(TempString, 17, 2) + ' 日' + copy(TempString, 19, 2) + ' 时'
+ copy(TempString, 21, 2) + ' 分' + copy(TempString, 23, 2) + ' 秒');
end;
//以下是解析设置时间
if (datastring = '6.2') then begin
if copy(TempString, 5, 2) = '85' then begin
NowTime := FormatDateTime('yyyy/mm/dd-hh:mm:ss', now);
receive.Lines.Add('集中器时间设置为: ' + NowTime);
end;
if copy(TempString, 5, 2) = 'C5' then begin
receive.Lines.Add('集中器时间设置失败');
end;
end;
//以上是解析设置时间
//以下是解析版本号6.3
if (datastring = '6.3') then begin
Str := '';
for i := 6 to 12 do
Str := Str + char(byte(inbuff[i]));
receive.Lines.Add('集中器版本:' + Str);
//把版本号加入数据库并加入日期
NowTime := FormatDateTime('yyyy/mm/dd hh:mm:ss', now);
ADOQuery2.Edit;
ADOQuery2.Fields[2].AsString := Str;
ADOQuery2.Fields[3].AsString := NowTime;
ADOQuery2.UpdateRecord;
//把版本号加入数据库并加入日期
end;
//以上是解析版本号6.3
//集中器清空6.11
if (datastring = '6.11') and (copy(TempString, 5, 2) = '87') then begin
receive.Lines.Add('集中器已经清空');
end;
//集中器复位6.14
if (datastring = '6.14') and (copy(TempString, 5, 2) = '90') then begin
receive.Lines.Add('集中器已经复位');
end;
if Break.Text = '1' then begin
Break.Text := '0';
receive.Lines.Add('通信被中断---通信结束');
goto proend;
end;
CloseHandle(hcom);
proend: comcolorRed();
PopupMenu1.AutoPopup := true;
exit;
except
ShowMessage('222');
end;
end;
//以下是延时
procedure TForm1.Delay(dwMilliseconds: Longint);
var
iStart, iStop: Dword;
begin
iStart := GetTickCount; //获得以毫秒为单位的windows运行时间
repeat
iStop := GetTickCount;
Application.ProcessMessages;
until (iStop - iStart) >= dwMilliseconds;
//showmessage(Format('%2d',[dwMilliseconds]));
end;
//以上是延时
//解析6.6 .67
// 6.1读时间
procedure TForm1.ReadTimeClick(Sender: TObject);
var
WriteNumber, numRead, lw: LongWord;
Write_Buffer, buf, AddBuffer, AddBuffer1: array[0..10] of byte;
TemWrite_Buffer, str2, S: string;
i, ff, DelaySecond: integer;
str1: Word; //byte;
NowDate: tdatetime;
dwEvtMask, dwError: Dword;
wait: Boolean;
cs: Tcomstat;
begin
if comminitialize() = '1' then exit;
Write_Buffer[0] := byte($EA);
Write_Buffer[1] := byte($EA);
Write_Buffer[2] := byte($02);
{S := ExtractFileName(filelistbox1.filename);
Write_Buffer[3]:=HexToDec(Copy(S,3,4)); // byte($FA);
Write_Buffer[4]:=HexToDec(Copy(S,1,2));//byte($01); }
DBGrid2.SelectedRows.Count; //当前行号
S := DBGrid2.Fields[0].AsString;
Write_Buffer[3] := HexToDec(copy(S, 3, 4));
Write_Buffer[4] := HexToDec(copy(S, 1, 2));
Write_Buffer[5] := byte($00);
Write_Buffer[6] := byte($00);
Write_Buffer[7] := byte($00); //$ 表示16进制
str1 := 0; //必须先赋值
for i := 0 to 7 do
str1 := str1 + Write_Buffer[i];
str2 := Format('%1x', [str1]);
Write_Buffer[8] := byte(str1 and $00FF); // byte($FA);
Write_Buffer[9] := byte((str1 shr 8) and $00FF); //byte($01);
Write_Buffer[10] := byte($DD);
//TemWrite_Buffer:=send.Text; // '12345';
if (hcom = 0) then exit;
writefile(hcom, Write_Buffer, length(Write_Buffer), WriteNumber, nil);
RadioGroup1.Enabled := false;
delete.Enabled := false;
Button1.Enabled := false;
ComboBox1.Enabled := false;
//PopupMenu1.AutoPopup := false;
Receivedata('6.1');
RadioGroup1.Enabled := true;
delete.Enabled := true;
Button1.Enabled := true;
ComboBox1.Enabled := true;
PopupMenu1.AutoPopup := true;
end;
procedure TForm1.dd21Click(Sender: TObject);
var
WriteNumber, numRead: LongWord;
Write_Buffer, buf, AddBuffer, AddBuffer1: array[0..16] of byte;
TemWrite_Buffer, str2, StrMonth, Strday, Strhour, Strminute, Strsecond, NowTime, S: string;
lw: LongWord;
i, ff, InteMonth, Inteday, Intehour, Inteminute, Intesecond, DelaySecond: integer;
str1: Word; //byte;
NowDate: tdatetime;
mytime: tdatetime;
YearWord, MonthWord, DayWord, HourWord, MinuteWord, SecondWord: Word;
SysTime: TsystemTime;
dwEvtMask, dwError: Dword;
wait: Boolean;
cs: Tcomstat;
begin
try
if comminitialize() = '1' then exit;
Write_Buffer[0] := byte($EA); //$ 表示16进制
Write_Buffer[1] := byte($EA);
Write_Buffer[2] := byte($05);
DBGrid2.SelectedRows.Count; //当前行号
S := DBGrid2.Fields[0].AsString;
Write_Buffer[3] := HexToDec(copy(S, 3, 4));
Write_Buffer[4] := HexToDec(copy(S, 1, 2));
Write_Buffer[5] := byte($06);
//以下是时间
NowTime := FormatDateTime('yyyy/mm/dd-hh:mm:ss', now);
Write_Buffer[6] := HexToDec(copy(NowTime, 3, 2)); //Year
Write_Buffer[7] := HexToDec(copy(NowTime, 6, 2)); //月份
Write_Buffer[8] := HexToDec(copy(NowTime, 9, 2)); //日期;
Write_Buffer[9] := HexToDec(copy(NowTime, 12, 2)); //小时
Write_Buffer[10] := HexToDec(copy(NowTime, 15, 2)); //分钟
Write_Buffer[11] := HexToDec(copy(NowTime, 18, 2)); //是秒数
//以上是时间
str1 := 0; //必须先赋值
for i := 0 to 11 do
str1 := str1 + Write_Buffer[i];
str2 := Format('%1x', [str1]);
Write_Buffer[12] := byte($00);
Write_Buffer[13] := byte($00);
Write_Buffer[14] := byte(str1 and $00FF); //低字节
Write_Buffer[15] := byte((str1 shr 8) and $00FF); //右移8位取高字节
Write_Buffer[16] := byte($DD);
if (hcom = 0) then exit;
writefile(hcom, Write_Buffer, length(Write_Buffer), WriteNumber, nil);
RadioGroup1.Enabled := false;
delete.Enabled := false;
Button1.Enabled := false;
ComboBox1.Enabled := false;
//PopupMenu1.AutoPopup := false;
Receivedata('6.2');
RadioGroup1.Enabled := true;
delete.Enabled := true;
Button1.Enabled := true;
ComboBox1.Enabled := true;
PopupMenu1.AutoPopup := true;
except
end;
end;
//6.3读版本
procedure TForm1.dd31Click(Sender: TObject);
var
WriteNumber, numRead: LongWord;
Write_Buffer, buf: array[0..10] of byte;
TemWrite_Buffer, S: string;
lw: LongWord;
str1: Word;
SysTime: TsystemTime;
dwEvtMask, dwError: Dword;
i, ff, InteMonth, Inteday, Intehour, Inteminute, Intesecond, DelaySecond: integer;
wait: Boolean;
cs: Tcomstat;
begin
if comminitialize() = '1' then exit;
Write_Buffer[0] := byte($EA);
Write_Buffer[1] := byte($EA);
Write_Buffer[2] := byte($09);
DBGrid2.SelectedRows.Count; //当前行号
S := DBGrid2.Fields[0].AsString;
Write_Buffer[3] := HexToDec(copy(S, 3, 4));
Write_Buffer[4] := HexToDec(copy(S, 1, 2));
Write_Buffer[5] := byte($00);
Write_Buffer[6] := byte($00);
Write_Buffer[7] := byte($00);
str1 := 0; //必须先赋值
for i := 0 to 7 do
str1 := str1 + Write_Buffer[i];
Write_Buffer[8] := byte(str1 and $00FF); //低字节
Write_Buffer[9] := byte((str1 shr 8) and $00FF); //右移8位取高字节
Write_Buffer[10] := byte($DD);
PurgeComm(hcom, (PURGE_RXABORT and PURGE_RXCLEAR)); //清空输入区
if (hcom = 0) then exit;
writefile(hcom, Write_Buffer, length(Write_Buffer), WriteNumber, nil);
RadioGroup1.Enabled := false;
//PopupMenu1.AutoPopup := false;
delete.Enabled := false;
Button1.Enabled := false;
ComboBox1.Enabled := false;
DBGrid2.DataSource.DataSet.DisableControls;
Receivedata('6.3');
RadioGroup1.Enabled := true;
delete.Enabled := true;
Button1.Enabled := true;
ComboBox1.Enabled := true;
PopupMenu1.AutoPopup := true;
DBGrid2.DataSource.DataSet.EnableControls;
FJDBGrid2CellClick();
end;
//下载电表局编号6.4
procedure TForm1.N1Click(Sender: TObject);
var
WriteNumber, numRead: LongWord;
Write_Buf, buf, Write_Buffer1: array[1..255 * 80 + 1] of byte;
Write_Buffer: array[0..265] of byte;
FromF, ToF, TempFromF: file of byte;
str1: Word;
NumWritten, i, j, page, ii, jj, LengthWrite_Buf, RepeatAgainNumber, delaytrue: integer;
dwEvtMask: Dword;
wait, OpenYesNo: Boolean;
S: string;
label RepeatAgain, proend;
begin
if comminitialize() = '1' then exit;
RadioGroup1.Enabled := false;
delete.Enabled := false;
Button1.Enabled := false;
ComboBox1.Enabled := false;
//PopupMenu1.AutoPopup := false;
// PopupMenu1false();
if ExistDBF.Text = '' then goto proend; //没有选择
if ExistDBF.Text = '1' then {//1代表有DBF} begin
jzqBHFromDBF();
//PopupMenu1true();
exit;
end;
OpenYesNo := OpenDialog1.Execute;
if not OpenYesNo then goto proend;
if OpenYesNo then { Display Open dialog box } begin
AssignFile(FromF, OpenDialog1.filename); //Assign 分配, 指派到FromF文件
if OpenDialog1.filename = '' then goto proend;
Reset(FromF); { Record size = 1 }
for i := 1 to FileSize(FromF) do
Write_Buf[i] := byte($FF); //给全部BUF赋初值
buf[i] := byte($FF);
BlockRead(FromF, buf, FileSize(FromF), numRead); //读数据赋值给BUF
//以下是将数据存入Temp.dat文件
i := 1;
ii := 1;
LengthWrite_Buf := 1;
while i <= FileSize(FromF) do begin
if (buf[i] >= byte($30)) and (buf[i] <= byte($39)) then begin
for j := 1 to 6 do begin
Write_Buffer1[(j - 1) * 2 + 1] := byte(buf[(j - 1) * 2 + 1 + i - 1] and $0F); //39
Write_Buffer1[(j - 1) * 2 + 2] := byte(buf[(j - 1) * 2 + 2 + i - 1] and $0F); //30
Write_Buf[j + ii - 1] := byte((Write_Buffer1[(j - 1) * 2 + 1] shl 4) + Write_Buffer1[(j - 1) * 2 + 2]); //90
LengthWrite_Buf := LengthWrite_Buf + 1;
end;
i := i + 12;
ii := ii + 6;
end
else
i := i + 1;
end;
// showmessage(inttostr(LengthWrite_Buf));
LengthWrite_Buf := LengthWrite_Buf - 1;
AssignFile(ToF, Filedir.Text + '\rd_dat\Temp.dat'); { Open output file }
Rewrite(ToF);
BlockWrite(ToF, Write_Buf, LengthWrite_Buf, LengthWrite_Buf);
CloseFile(FromF);
CloseFile(ToF);
//以上是将数据存入Temp.dat文件
AssignFile(FromF, Filedir.Text + '\rd_dat\Temp.dat'); //Assign 分配, 指派到FromF文件
Reset(FromF);
page := round(FileSize(FromF) / 255);
if round(FileSize(FromF) / 255) * 255 < FileSize(FromF) then
page := round(FileSize(FromF) / 255) + 1;
for i := 1 to page * 255 do
buf[i] := byte($FF);
BlockRead(FromF, buf, FileSize(FromF), numRead); //读数据赋值给BUF
Write_Buffer[0] := byte($EA); //$ 表示16进制
Write_Buffer[1] := byte($EA);
//以下是控制码
Write_Buffer[2] := byte($2C); //有后续报文时
DBGrid2.SelectedRows.Count; //当前行号
S := DBGrid2.Fields[0].AsString;
Write_Buffer[3] := HexToDec(copy(S, 3, 4)); // byte($FA);
Write_Buffer[4] := HexToDec(copy(S, 1, 2)); //byte($01);
Write_Buffer[5] := byte($FF);
receive.Lines.Add('正在与集中器通讯中...');
for i := page downto 1 do {//块号从大到小} begin
if i = 1 then
Write_Buffer[2] := byte($0C); //无后续报文时
for j := 1 to 255 do
Write_Buffer[j + 5] := buf[j + (page - i) * 255];
str1 := 0; //必须先赋值
//以下是帧编码
Write_Buffer[261] := byte(i); //前8位;
Write_Buffer[262] := byte($00); //后8位
for ii := 0 to 262 do
str1 := str1 + Write_Buffer[ii];
Write_Buffer[263] := byte(str1 and $00FF);
Write_Buffer[264] := byte((str1 shr 8) and $00FF);
Write_Buffer[265] := byte($DD);
if (hcom = 0) then goto proend; ;
RepeatAgainNumber := 0;
RepeatAgai
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -