📄 unit1.~pas
字号:
progressbar1.position:=progressbar1.Min ;
bflagsuccess:=true;
ADDR:=0;
ByteArray[0]:=$53;
ByteArray[1]:=$03;
ByteArray[2]:=ADDR;
ByteArray[3]:=$08;
ByteArray[4]:=$00;
ByteArray[5]:=$00;
ByteArray[6]:=$00;
ByteArray[7]:=$00;
ByteArray[8]:=$00;
ByteArray[9]:=$00;
ByteArray[10]:=$00;
ByteArray[11]:=$00;
ByteArray[12]:=$00;
ByteArray[13]:=$45;
for j:=0 to 31 do
begin
ByteArray[2]:=ADDR;
ByteArray[12]:=$00;
ByteArray[12]:=(ByteArray[12]+ByteArray[1]);
ByteArray[12]:=(ByteArray[12]+ByteArray[2]);
ByteArray[12]:=(ByteArray[12]+ByteArray[3]);
ByteArray[12]:=(ByteArray[12]+ByteArray[4]);
ByteArray[12]:=(ByteArray[12]+ByteArray[5]);
ByteArray[12]:=(ByteArray[12]+ByteArray[6]);
ByteArray[12]:=(ByteArray[12]+ByteArray[7]);
ByteArray[12]:=(ByteArray[12]+ByteArray[8]);
ByteArray[12]:=(ByteArray[12]+ByteArray[9]);
ByteArray[12]:=(ByteArray[12]+ByteArray[10]);
ByteArray[12]:=(ByteArray[12]+ByteArray[11]);
ByteArray[12]:=$FF-ByteArray[12];
ByteArray[12]:=ByteArray[12]+1;
vTmp:=VarArrayCreate([0,13],VarByte);
for i:=0 to 13 do
begin
vTmp[i]:=ByteArray[i];
end;
ovTmp:=vTmp;
MSCOMM1.InputMode:=1;
MSCOMM1.InBufferCount :=0;
mscomm1.Output :=ovTmp;
SLEEP(50);
if(mscomm1.InBufferCount >=14)then
BEGIN
MSCOMM1.InputMode :=comInputModeBinary;
iReceived:=MSCOMM1.InBufferCount;
ovTmp:=MSCOMM1.Input ;
vTmp:=VarArrayCreate([0,13],varByte);
vTmp:=ovTmp;
for i:=0 to 13 do
begin
bTmp:=vTmp[i];
ByteArray[I]:=bTmp;
end;
ByteArray[12]:=ByteArray[12]+ByteArray[1];
ByteArray[12]:=ByteArray[12]+ByteArray[2];
ByteArray[12]:=ByteArray[12]+ByteArray[3];
ByteArray[12]:=ByteArray[12]+ByteArray[4];
ByteArray[12]:=ByteArray[12]+ByteArray[5];
ByteArray[12]:=ByteArray[12]+ByteArray[6];
ByteArray[12]:=ByteArray[12]+ByteArray[7];
ByteArray[12]:=ByteArray[12]+ByteArray[8];
ByteArray[12]:=ByteArray[12]+ByteArray[9];
ByteArray[12]:=ByteArray[12]+ByteArray[10];
ByteArray[12]:=ByteArray[12]+ByteArray[11];
IF(ByteArray[12]=0 )AND (ByteArray[1]=$3)THEN
BEGIN
for i:=0 to 7 do
begin
buf_rec[j][i]:= ByteArray[4+i];
end;
END
ELSE
BEGIN
IF ByteArray[12]<>0 THEN showmessage('接收数据校验错误! 请重试。');
IF ByteArray[1]<>$3 THEN showmessage('接收数据命令错误! 请重试。');
bflagsuccess:=false;
END;
END
ELSE
begin
bflagsuccess:=false;
showmessage('无返回数据,请检查线路和端口设置后重试。');
exit;
end;
ADDR:=ADDR+8;
if(progressbar1.position<>progressbar1.Max )then
progressbar1.StepIt ;
end;
if bflagsuccess=true then
BufferToMemo
else
showmessage('操作失败! 请重试。');
progressbar1.Position :=0;
end;
procedure TForm1.FF1Click(Sender: TObject);
begin
SetBuffer($FF);
BufferToMemo();
end;
procedure TForm1.N5Click(Sender: TObject);
var
ss:string;
ii:integer;
begin
ss:='$'+edit1.Text;
if TryStrToInt(ss, ii) then
begin
SetBuffer(ii);
BufferToMemo();
end
else
showmessage('数据中有非数字字符(0~9,A~F,a~f),请修改后重试。');
// SetBuffer(strtoint('$'+edit1.Text));
end;
procedure TForm1.N4Click(Sender: TObject);
var
i,j:integer;
strmemo:string;
begin
for j:=0 to 31 do
begin
for i:=0 to 7 do
begin
buf_rec[j][i]:=8*j+i;
end;
end;
BufferToMemo;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
instr,tmp:string;
ival,i,j:integer;
ByteArray:array[0..13] of byte;
ovTmp:OleVariant;
vTmp:Variant;
ADDR:BYTE;
bTmp:byte;
bflagsuccess:boolean;
begin
SetBuffer(0);
for j:=0 to 15 do
begin
instr:=memo1.Lines.ValueFromIndex[1+j];
tmp:=RightStr(instr,48);
for i:=0 to 15 do
begin
ival:=strtoint('$'+trim(LeftStr(tmp,3)));
buf_rec[2*j+(i div 8)][i mod 8]:=ival;
tmp:=RightStr(instr,48-3*(i+1));
end;
end;
progressbar1.position:=progressbar1.Min ;
bflagsuccess:=true;
ADDR:=0;
for j:=0 to 31 do
begin
ByteArray[0]:=$53;
ByteArray[1]:=$04;
ByteArray[2]:=ADDR;
ByteArray[3]:=$08;
ByteArray[4]:=buf_rec[j][0];
ByteArray[5]:=buf_rec[j][1];
ByteArray[6]:=buf_rec[j][2];
ByteArray[7]:=buf_rec[j][3];
ByteArray[8]:=buf_rec[j][4];
ByteArray[9]:=buf_rec[j][5];
ByteArray[10]:=buf_rec[j][6];
ByteArray[11]:=buf_rec[j][7];
ByteArray[12]:=$00;
ByteArray[12]:=(ByteArray[12]+ByteArray[1]);
ByteArray[12]:=(ByteArray[12]+ByteArray[2]);
ByteArray[12]:=(ByteArray[12]+ByteArray[3]);
ByteArray[12]:=(ByteArray[12]+ByteArray[4]);
ByteArray[12]:=(ByteArray[12]+ByteArray[5]);
ByteArray[12]:=(ByteArray[12]+ByteArray[6]);
ByteArray[12]:=(ByteArray[12]+ByteArray[7]);
ByteArray[12]:=(ByteArray[12]+ByteArray[8]);
ByteArray[12]:=(ByteArray[12]+ByteArray[9]);
ByteArray[12]:=(ByteArray[12]+ByteArray[10]);
ByteArray[12]:=(ByteArray[12]+ByteArray[11]);
ByteArray[12]:=$FF-ByteArray[12];
ByteArray[12]:=ByteArray[12]+1;
ByteArray[13]:=$45;
vTmp:=VarArrayCreate([0,13],VarByte);
for i:=0 to 13 do
begin
vTmp[i]:=ByteArray[i];
end;
ovTmp:=vTmp;
MSCOMM1.InputMode:=1;
MSCOMM1.InBufferCount :=0;
mscomm1.Output :=ovTmp;
SLEEP(50);
if(mscomm1.InBufferCount >=14)then
BEGIN
MSCOMM1.InputMode :=comInputModeBinary;
ovTmp:=MSCOMM1.Input ;
vTmp:=VarArrayCreate([0,13],varByte);
vTmp:=ovTmp;
for i:=0 to 13 do
begin
bTmp:=vTmp[i];
ByteArray[I]:=bTmp;
end;
ByteArray[12]:=ByteArray[12]+ByteArray[1];
ByteArray[12]:=ByteArray[12]+ByteArray[2];
ByteArray[12]:=ByteArray[12]+ByteArray[3];
ByteArray[12]:=ByteArray[12]+ByteArray[4];
ByteArray[12]:=ByteArray[12]+ByteArray[5];
ByteArray[12]:=ByteArray[12]+ByteArray[6];
ByteArray[12]:=ByteArray[12]+ByteArray[7];
ByteArray[12]:=ByteArray[12]+ByteArray[8];
ByteArray[12]:=ByteArray[12]+ByteArray[9];
ByteArray[12]:=ByteArray[12]+ByteArray[10];
ByteArray[12]:=ByteArray[12]+ByteArray[11];
IF(ByteArray[12]=0 )AND (ByteArray[1]=$1)THEN
BEGIN
bflagsuccess:=true;
END
ELSE
BEGIN
IF ByteArray[12]<>0 THEN showmessage('接收数据校验错误! 请重试。');
IF ByteArray[1]<>$1 THEN showmessage('接收数据命令错误! 请重试。');
bflagsuccess:=false;
END;
END
ELSE
begin
bflagsuccess:=false;
end;
ADDR:=ADDR+8;
if(progressbar1.position<>progressbar1.Max )then
progressbar1.StepIt ;
end;
if bflagsuccess=true then
showmessage('写操作成功!')
else
showmessage('操作失败! 请重试。');
progressbar1.Position :=0;
end;
procedure TForm1.N9Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.N6Click(Sender: TObject);
var
j,i,ival:integer;
instr,tmp:string;
begin
if openDialog1.Execute then
begin
memo1.Lines.LoadFromFile(opendialog1.Files.CommaText );
end;
for j:=0 to 15 do
begin
instr:=memo1.Lines.ValueFromIndex[1+j];
tmp:=RightStr(instr,48);
for i:=0 to 15 do
begin
ival:=strtoint('$'+trim(LeftStr(tmp,3)));
buf_rec[2*j+(i div 8)][i mod 8]:=ival;
tmp:=RightStr(instr,48-3*(i+1));
end;
end;
BufferToMemo();
end;
procedure TForm1.N7Click(Sender: TObject);
begin
if savedialog1.Execute then
begin
memo1.Lines.SaveToFile(savedialog1.Files.CommaText );
end;
end;
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
N6.Click ;
end;
procedure TForm1.ToolButton2Click(Sender: TObject);
begin
N7.Click ;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -