📄 commclass.~pas
字号:
Sbuf[5]:=Sbuf[2]+Sbuf[3]+Sbuf[4]; //取得校验和
SendByte(5);
end;
//写智能终端地址的命令
procedure TSPComm.WriteTerminalAddr(TerminalNo:integer);
begin
Sbuf[0]:=$7e; //表示ox7e7e中的第一个7e
Sbuf[1]:=$7e; //表示ox7e7e中的第二个7e
Sbuf[2]:=$B1; //表示读单元集中器状态
Sbuf[3]:=$2; //表示三个字长
Sbuf[4]:=Lo(TerminalNo);
Sbuf[5]:=Sbuf[2]+Sbuf[3]+Sbuf[4]; //取得校验和
SendByte(5);
end;
//写智能终端配置的命令
procedure TSPComm.WriteTerminalSet(ControllerAddr:integer;TerminalNo:integer;TerminalSet:integer);
begin
Sbuf[0]:=$7e; //表示ox7e7e中的第一个7e
Sbuf[1]:=$7e; //表示ox7e7e中的第二个7e
Sbuf[2]:=$B3; //表示读单元集中器状态
Sbuf[3]:=$5; //表示三个字长
Sbuf[4]:=HI(ControllerAddr); //被查询集中器号的高8位 调用HI函数
Sbuf[5]:=Lo(ControllerAddr); //被查询集中器号的低8位 调用Lo函数
Sbuf[6]:=Lo(TerminalNo); //被查询智能终端号的低8位 调用Lo函数
Sbuf[7]:=Lo(TerminalSet);
Sbuf[8]:=Sbuf[2]+Sbuf[3]+Sbuf[4]+Sbuf[5]+Sbuf[6]+Sbuf[7]; //取得校验和
SendByte(8);
end;
//*************************端口端命令*****************************************//
//读端口配置的命令
procedure TSPComm.ReadUportSet(ControllerAddr:integer;TerminalNo:integer;PortNo:integer);
begin
Sbuf[0]:=$7e; //表示ox7e7e中的第一个7e
Sbuf[1]:=$7e; //表示ox7e7e中的第二个7e
Sbuf[2]:=$C4; //表示读单元集中器状态
Sbuf[3]:=$5; //表示三个字长
Sbuf[4]:=HI(ControllerAddr); //被查询集中器号的高8位 调用HI函数
Sbuf[5]:=Lo(ControllerAddr); //被查询集中器号的低8位 调用Lo函数
Sbuf[6]:=Lo(TerminalNo); //被查询智能终端号的低8位 调用Lo函数
Sbuf[7]:=LO(PortNo);
Sbuf[8]:=Sbuf[2]+Sbuf[3]+Sbuf[4]+Sbuf[5]+Sbuf[6]+Sbuf[7]; //取得校验和
SendByte(8);
end;
//读端口数值的命令
procedure TSPComm.ReadUportReader(ControllerAddr:integer;TerminalNo:integer;PortNo:integer);
begin
Sbuf[0]:=$7e; //表示ox7e7e中的第一个7e
Sbuf[1]:=$7e; //表示ox7e7e中的第二个7e
Sbuf[2]:=$C6; //表示读单元集中器状态
Sbuf[3]:=$5; //表示三个字长
Sbuf[4]:=HI(ControllerAddr); //被查询集中器号的高8位 调用HI函数
Sbuf[5]:=Lo(ControllerAddr); //被查询集中器号的低8位 调用Lo函数
Sbuf[6]:=Lo(TerminalNo); //被查询智能终端号的低8位 调用Lo函数
Sbuf[7]:=LO(PortNo);
Sbuf[8]:=Sbuf[2]+Sbuf[3]+Sbuf[4]+Sbuf[5]+Sbuf[6]+Sbuf[7]; //取得校验和
SendByte(8);
end;
//写端口数值的命令
procedure TSPComm.WriteUportReader(ControllerAddr:integer;TerminalNo:integer;PortNo:integer;UportReader:integer);
begin
Sbuf[0]:=$7e; //表示ox7e7e中的第一个7e
Sbuf[1]:=$7e; //表示ox7e7e中的第二个7e
Sbuf[2]:=$C5; //表示读单元集中器状态
Sbuf[3]:=$9; //表示三个字长
Sbuf[4]:=HI(ControllerAddr); //被查询集中器号的高8位 调用HI函数
Sbuf[5]:=Lo(ControllerAddr); //被查询集中器号的低8位 调用Lo函数
Sbuf[6]:=Lo(TerminalNo); //被查询智能终端号的低8位 调用Lo函数
Sbuf[7]:=LO(PortNo);
Sbuf[8]:=Lo(UportReader);
Sbuf[9]:=Hi(UportReader);
Sbuf[10]:=Lo(UportReader div 65536);//Sbuf[10]:=Lo(UportReader div $10000);
Sbuf[11]:=Hi(UportReader div 65536);//Sbuf[11]:=Hi(UportReader div $10000);
Sbuf[12]:=Sbuf[2]+Sbuf[3]+Sbuf[4]+Sbuf[5]+Sbuf[6]+Sbuf[7]+Sbuf[8]+Sbuf[9]+Sbuf[10]+Sbuf[11]; //取得校验和
SendByte(12);
end;
//写端口配置的命令
procedure TSPComm.WriteUportSet(ControllerAddr:integer;TerminalNo:integer;PortNo:integer;UportSet:integer);
begin
Sbuf[0]:=$7e; //表示ox7e7e中的第一个7e
Sbuf[1]:=$7e; //表示ox7e7e中的第二个7e
Sbuf[2]:=$C3; //表示读单元集中器状态
Sbuf[3]:=$6; //表示三个字长
Sbuf[4]:=HI(ControllerAddr); //被查询集中器号的高8位 调用HI函数
Sbuf[5]:=Lo(ControllerAddr); //被查询集中器号的低8位 调用Lo函数
Sbuf[6]:=Lo(TerminalNo); //被查询智能终端号的低8位 调用Lo函数
Sbuf[7]:=LO(PortNo);
Sbuf[8]:=Lo(UportSet);
Sbuf[9]:=Sbuf[2]+Sbuf[3]+Sbuf[4]+Sbuf[5]+Sbuf[6]+Sbuf[7]+Sbuf[8]; //取得校验和
SendByte(9);
end;
//端口开关开的命令
procedure TSPComm.WriteUportOpenClose(ControllerAddr:integer;TerminalNo:integer;PortNo:integer;UportOpen:integer);
begin
Sbuf[0]:=$7e; //表示ox7e7e中的第一个7e
Sbuf[1]:=$7e; //表示ox7e7e中的第二个7e
Sbuf[2]:=$C7; //表示读单元集中器状态
Sbuf[3]:=$6; //表示三个字长
Sbuf[4]:=HI(ControllerAddr); //被查询集中器号的高8位 调用HI函数
Sbuf[5]:=Lo(ControllerAddr); //被查询集中器号的低8位 调用Lo函数
Sbuf[6]:=Lo(TerminalNo); //被查询智能终端号的低8位 调用Lo函数
Sbuf[7]:=LO(PortNo);
Sbuf[8]:=Lo(UportOpen);
Sbuf[9]:=Sbuf[2]+Sbuf[3]+Sbuf[4]+Sbuf[5]+Sbuf[6]+Sbuf[7]+Sbuf[8]; //取得校验和
SendByte(9);
//EditSpcomStates(UportOpen,ControllerAddr,TerminalNo,PortNo);
end;
//读端口开关开状态的命令
procedure TSPComm.ReadUportOpenClose(ControllerAddr:integer;TerminalNo:integer;PortNo:integer);
begin
Sbuf[0]:=$7e; //表示ox7e7e中的第一个7e
Sbuf[1]:=$7e; //表示ox7e7e中的第二个7e
Sbuf[2]:=$C8; //表示读单元集中器状态
Sbuf[3]:=$5; //表示三个字长
Sbuf[4]:=HI(ControllerAddr); //被查询集中器号的高8位 调用HI函数
Sbuf[5]:=Lo(ControllerAddr); //被查询集中器号的低8位 调用Lo函数
Sbuf[6]:=Lo(TerminalNo); //被查询智能终端号的低8位 调用Lo函数
Sbuf[7]:=LO(PortNo);
Sbuf[8]:=Sbuf[2]+Sbuf[3]+Sbuf[4]+Sbuf[5]+Sbuf[6]+Sbuf[7]; //取得校验和
SendByte(8);
end;
{
//^^^^^^^^^^^^^^^^^^^^^^^^^单片机计算机向发送指令^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
}
//回传集中器状态
function TSPComm.ToPCContStatus(ControllerAddr:Integer;ContStatus:Integer):String;
var
IniContStatesData:TIniFile;
f:TIniFile;
begin
IniContStatesData:=TIniFile.Create(ExtractFileDir(application.Exename)+'\SystemSet.ini');
Result:=IniContStatesData.ReadString('ContStatesData',intToStr(ContStatus),'');
IniContStatesData.Free;
MSGString:=IntToStr(ControllerAddr)+'号集中器'+Result;
SendMSG;
end;
//回传集中器地址
function TSPComm.ToPCContAddress(ContAddr:Byte):Integer;
begin
Result:=ContAddr;
MSGString:='集中器地址是:'+IntToStr(Result);
SendMSG;
end;
//回传集中器用户终端数
function TSPComm.ToPCTerminalCount(ContAddr:Byte;TerminalCount:Byte):Integer;
begin
Result:=TerminalCount;
MSGString:=IntToStr(ContAddr)+'号集中器的用户终端数:'+IntToStr(Result);
SendMSG;
end;
//回传集中器网络测试状态
function TSPComm.ToPCReadIPStates(ContAddr:Byte;TerminalCount:Byte):Integer;
var
tempstr:String;
i:integer;
begin
Result:=TerminalCount;
MSGString:=IntToStr(ContAddr)+'号集中器未应答的用户终端数:'+IntToStr(Result)+'个。';
if Result>0 then
begin
for i:=7 to 7+TerminalCount-1 do
begin
tempstr:='未应答终端号'+IntTostr(Rbuf[i]);
MSGString:=MSGString+''+tempstr+',';
end;
end;
SendMSG;
end;
//回传用户终端状态
function TSPComm.ToPCTerminalStatus(ControllerAddr:Integer;TerminalNo:Integer;Warninfo:Integer;TerminalStatus:Integer):String;
var
IniTerminalStatesData:TIniFile;
f:TIniFile;
Warnif:String;
begin
IniTerminalStatesData:=TIniFile.Create(ExtractFileDir(application.Exename)+'\SystemSet.ini');
Result:=IniTerminalStatesData.ReadString('TerminalStatesData',intToStr(TerminalStatus),'');
IniTerminalStatesData.Free;
if Warninfo=0 then
begin
Warnif:='';
Warnif:='已关告警';
end;
if Warninfo=1 then
begin
Warnif:='';
Warnif:='已开告警';
end;
MSGString:=IntToStr(ControllerAddr)+'号集中器下的'+IntToStr(TerminalNo)+'号智能终端的状态为:'+Warnif+Result;
SendMSG;
end;
//回传用户终端的地址
function TSPComm.ToPCTerminalAddr(TerminalNoAddr:Integer):Integer;
begin
Result:=TerminalNoAddr;
MSGString:='智能终端地址为:'+IntToStr(Result)+'号';
SendMSG;
end;
//回传用户端口的读数
function TSPComm.ToPCUportRead(ControllerAddr:Integer;TerminalNoAddr:Integer;Uport:Integer;ReadData:Integer):Int64;
begin
Result:=ReadData;
if ReadData>1 then
begin
MSGString:=IntToStr(ControllerAddr)+'号集中器下的'+IntTostr(TerminalNoAddr)+'号智能终端下的'+IntToStr(Uport)+'号端口报警';
SendMSG;
if ValuesStr='1' then //系统允许连动报警
begin
WriteUportOpenClose(ControllerAddr,TerminalNoAddr,Uport+4,ResultVlues);
end;
OpenMusic(ControllerAddr,TerminalNoAddr,Uport);
end;
end;
//回传用户端口的配置
function TSPComm.ToPCUportSet(ControllerAddr:Integer;TerminalNoAddr:Integer;Uport:Integer;UportSet:Integer):String;
Var
MyIni:TiniFile;
Equipment:String;
i:Integer;
begin
Result:=IntToStr(UportSet);
MyIni:=TIniFile.Create(ExtractFileDir(application.Exename)+'\SystemSet.ini');
Equipment:=MyIni.ReadString('UportSetData','0x'+Pchar(Result),'');
MyIni.Free;
MSGString:=IntToStr(ControllerAddr)+'号集中器下的'+IntTostr(TerminalNoAddr)+'号智能终端下的'+IntToStr(Uport)+'号端口的设备配置为:'+Equipment;
SendMSG;
end;
//接收处理事件
procedure TSPComm.ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:Integer;
icount:Integer;
UportData:int64;
begin
Receviewstring:='' ;
move(buffer^,Rbuf,BufferLength);
if ((inttohex(Rbuf[0],2) <>'7E') and (inttohex(Rbuf[1],2) <>'7E')) then exit; //
for i:=0 to BufferLength-1 do
Receviewstring:=Receviewstring + IntToHex(Rbuf[i],2)+' ' ;
Receviewstring:=Receviewstring;
//SHOWMESSAGE(Receviewstring);
if ((Rbuf[0]=byte($7E)) and (Rbuf[1]=byte($7E))) then
begin
//***************集中器类*********************************************//
//回传集中器状态
if ((Rbuf[2]=byte($A0)) and (Rbuf[3]=byte($04)) and (Rbuf[7]=LO((Rbuf[2]+Rbuf[3]+Rbuf[4]+Rbuf[5]+Rbuf[6])))) then
begin
ToPCContStatus(Rbuf[4]*16+Rbuf[5],Rbuf[6]);
end;
//回传集中器地址
if ((Rbuf[2]=byte($A2)) and (Rbuf[3]=byte($03)) and (Rbuf[6]=LO((Rbuf[2]+Rbuf[3]+Rbuf[4]+Rbuf[5])))) then
begin
//ContAddr:=Rbuf[4]*16+Rbuf[5];
ToPCContAddress(Rbuf[4]*16+Rbuf[5]);
end;
//回传集中器用户终端数
if ((Rbuf[2]=byte($A6)) and (Rbuf[3]=byte($04)) and (Rbuf[7]=LO((Rbuf[2]+Rbuf[3]+Rbuf[4]+Rbuf[5]+Rbuf[6])))) then
begin
ToPCTerminalCount(Rbuf[4]*16+Rbuf[5],Rbuf[6]);
end;
//回传集中器网络测试状态
if Rbuf[2]=byte($A7)then// and (Rbuf[3]>=byte($04))) then
begin
ToPCReadIPStates(Rbuf[4]*16+Rbuf[5],Rbuf[3]-4);
end;
//***************用户终端类*******************************************//
//回传集中器用下的户终端的状态
if ((Rbuf[2]=byte($B0)) and (Rbuf[3]=byte($06)) and (Rbuf[9]=LO((Rbuf[2]+Rbuf[3]+Rbuf[4]+Rbuf[5]+Rbuf[6]+Rbuf[7]+Rbuf[8])))) then
begin
ToPCTerminalStatus(Rbuf[4]*16+Rbuf[5],Rbuf[6],Rbuf[7],Rbuf[8]);
end;
//回传户终端的地址
if ((Rbuf[2]=byte($B2)) and (Rbuf[3]=byte($02)) and (Rbuf[5]=LO((Rbuf[2]+Rbuf[3]+Rbuf[4])))) then
begin
ToPCTerminalAddr(Rbuf[4]);
end;
//***************用户终端口类*****************************************//
//回传户终端口的读数
if ((Rbuf[2]=byte($C6)) and (Rbuf[3]=byte($09)) and (Rbuf[12]=LO(Rbuf[2]+Rbuf[3]+Rbuf[4]+Rbuf[5]+Rbuf[6]+Rbuf[7]+Rbuf[8]+Rbuf[9]+Rbuf[10]+Rbuf[11]))) then
begin
UportData:=(Rbuf[8])+(Rbuf[9])*256+(Rbuf[10])*256*256+(Rbuf[11])*256*256*256;
ToPCUportRead(Rbuf[4]*16+Rbuf[5],Rbuf[6],Rbuf[7],UportData);
end;
//回传户终端口的配置
if ((Rbuf[2]=byte($C4)) and (Rbuf[3]=byte($06)) and (Rbuf[9]=LO(Rbuf[2]+Rbuf[3]+Rbuf[4]+Rbuf[5]+Rbuf[6]+Rbuf[7]+Rbuf[8]))) then
begin
ToPCUportSet(Rbuf[4]*16+Rbuf[5],Rbuf[6],Rbuf[7],Rbuf[8]);
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -