📄 hrunit1.~pas
字号:
ch:char;
begin
try
assignfile(FromF,extractfilepath(application.ExeName) + 'Data\cIM_DA.dbf');
reset(FromF,1);
if (FileSize(FromF) mod 52 <>0) then
begin
messagedlg('上传抄表数据文件大小有误,操作被终止!',mterror,[mbok],0);
closefile(fromf);
exit;
end;
if (FileSize(FromF)=0) then
begin
messagedlg('上传抄表数据文件是空文件,操作被终止!',mterror,[mbok],0);
closefile(fromf);
exit;
end;
//while not eof(fnum1) do
//begin
j:=0;
repeat
application.ProcessMessages;
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
inc(j);
application.ProcessMessages;
screen.Cursors[crMyCursor]:=LoadCursorFromFile('bgwork.ani');
screen.Cursor :=crMyCursor;
i:=0;
temp:='';
repeat
temp:=temp+buf[i];
inc(i);
until i=sizeof(buf);
if midbstr(temp,1,1)='I' then
tempstr[1]:='ICTU' //设备类型
else if midbstr(temp,1,1)='M' then
tempstr[1]:='MCTU'
else if midbstr(temp,1,1)='W' then
tempstr[1]:='WCTU'
else if midbstr(temp,1,1)='A' then
tempstr[1]:='ARF';
{if midbstr(temp,1,1)='M' then
tempstr[2]:=leftbstr(trim(midbstr(temp,2,16)),length(trim(midbstr(temp,2,16)))-1)+rightbstr(trim(midbstr(temp,2,16)),1)
else
tempstr[2]:=midbstr(temp,2,16);//注册号}
tempstr[2]:=trim(leftbstr(trim(midbstr(temp,2,16)),length(trim(midbstr(temp,2,16)))-1))+rightbstr(trim(midbstr(temp,2,16)),1);
tempstr[3]:=extract(midbstr(temp,18,8));//设备ID号
//tempstr[3]:=midbstr(temp,18,8);
tempfj:=midbstr(temp,26,1);
if tempfj='D' then
dangl:=0.01
else if tempfj='E' then
dangl:=0.1
else if tempfj='F' then
dangl:=1.0
else if tempfj='0' then
dangl:=10
else if tempfj='1' then
dangl:=100
else
dangl:=0;
tempstr[4]:=floattostr(dangl * 0.1); //计数轮
tempfj:=midbstr(temp,27,1);
if tempfj='Y' then tempstr[5]:='000';
if tempfj='N' then tempstr[5]:='999';
if tempfj='Z' then tempstr[5]:='100';
if tempfj='X' then tempstr[5]:='111';
if tempfj='A' then tempstr[5]:='109';
if tempfj='B' then tempstr[5]:='110';
if tempfj='C' then tempstr[5]:='108';
if tempfj='D' then tempstr[5]:='107';
if tempfj='E' then tempstr[5]:='888';
if tempfj='F' then tempstr[5]:='114';
if tempfj='G' then tempstr[5]:='106';
if tempfj='H' then tempstr[5]:='103';
tempstr[6]:=formatdatetime('yyyy-mm-dd hh:nn:ss',strtodatetime(midbstr(temp,28,2)+'-'+midbstr(temp,30,2)+'-'+midbstr(temp,32,2)+StringOfChar(chr(32),1)+midbstr(temp,34,2)+':00:01')); //设备上传时间
if tempstr[5]='999' then
begin
tempstr[7]:='未知';
tempstr[8]:='未知';
tempstr[9]:='未知';
tempstr[10]:='未知';
tempstr[11]:='未知';
tempstr[12]:='未知';
tempstr[13]:='未知';
continue;
end;
//*********
//简明信息(无线表)&电池电压(红外表)
if (midbstr(temp,1,1)='I') or (midbstr(temp,1,1)='M') then
begin
if (midbstr(temp,27,1)='Z') or (midbstr(temp,27,1)='X') or (midbstr(temp,27,1)='A') or (midbstr(temp,27,1)='B') or (midbstr(temp,27,1)='C') or (midbstr(temp,27,1)='D') or (midbstr(temp,27,1)='F') or (midbstr(temp,27,1)='G') or (midbstr(temp,27,1)='H') then
tempstr[7]:='未知'
else
begin
if inttostr((ord(Midbstr(temp, 37, 1)[1]) mod 2) div 1)='0' then
tempstr[7]:='正常'
else if inttostr((ord(Midbstr(temp, 37, 1)[1]) mod 2) div 1)='1' then
tempstr[7]:='低压';
end;
end
else if (midbstr(temp,1,1)='A') or (midbstr(temp,1,1)='W') then
begin
if (midbstr(temp,27,1)='Z') or (midbstr(temp,27,1)='X') or (midbstr(temp,27,1)='A') or (midbstr(temp,27,1)='B') or (midbstr(temp,27,1)='C') or (midbstr(temp,27,1)='D') or (midbstr(temp,27,1)='F') or (midbstr(temp,27,1)='G') or (midbstr(temp,27,1)='H') then
tempstr[7]:='未知'
else
begin
if inttostr(ord(Midbstr(temp, 37, 1)[1]) div 128)='0' then
tempstr[7]:='正常'
else if inttostr(ord(Midbstr(temp, 22, 1)[1]) div 128)='1' then
tempstr[7]:='低压';
end;
end;
//*********
{showmessage(inttostr(length(temp)));
showmessage(inttostr(ord(Midbstr(temp, 37, 1)[1])*256*256*256));
showmessage(inttostr(ord(Midbstr(temp, 38, 1)[1])*256*256));
showmessage(inttostr(ord(Midbstr(temp, 39, 1)[1])*256));
showmessage(inttostr(ord(Midbstr(temp, 40, 1)[1])));}
tempfj:=round((ord(Midbstr(temp, 37, 1)[1])*256*256*256+ord(Midbstr(temp, 38, 1)[1])*256*256+ord(Midbstr(temp, 39, 1)[1])*256+ord(Midbstr(temp, 40, 1)[1]))*dangl/2);
if dangl < 10 then
tempstr[8]:=tempfj
else
tempstr[8]:=(tempfj div 10)* 10; //本期指数
if (midbstr(temp,27,1)='Z') or (midbstr(temp,27,1)='X') or (midbstr(temp,27,1)='A') or (midbstr(temp,27,1)='B') or (midbstr(temp,27,1)='C') or (midbstr(temp,27,1)='D') or (midbstr(temp,27,1)='F') or (midbstr(temp,27,1)='G') or (midbstr(temp,27,1)='H') then
begin
tempfj:=round((ord(Midbstr(temp, 41, 1)[1])*256*256+ord(Midbstr(temp, 42, 1)[1])*256+ord(Midbstr(temp, 43, 1)[1])));
if dangl < 10 then
begin
if (midbstr(temp,27,1)='Z') or (midbstr(temp,27,1)='X') or (midbstr(temp,27,1)='F') or (midbstr(temp,27,1)='G') or (midbstr(temp,27,1)='H') then
begin
tempstr[9]:=tempfj; //人工读数
tempstr[10]:='0'; //估收水量
end
else if (midbstr(temp,27,1)='A') or (midbstr(temp,27,1)='B') or (midbstr(temp,27,1)='C') or (midbstr(temp,27,1)='D') then
begin
tempstr[9]:='0'; //人工读数
tempstr[10]:=tempfj; //估收水量
end;
end
else
begin
if (midbstr(temp,27,1)='Z') or (midbstr(temp,27,1)='X') or (midbstr(temp,27,1)='F') or (midbstr(temp,27,1)='G') or (midbstr(temp,27,1)='H') then
begin
tempstr[9]:=(tempfj div 10)* 10; //人工读数
tempstr[10]:='0'; //估收水量
end
else if (midbstr(temp,27,1)='A') or (midbstr(temp,27,1)='B') or (midbstr(temp,27,1)='C') or (midbstr(temp,27,1)='D') then
begin
tempstr[9]:='0'; //人工读数
tempstr[10]:=(tempfj div 10)* 10; //估收水量
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -