//读数据
function ReadData(iIndex:Integer;var oBuffer
Char;var ioLength:Integer):Boolean;
stdcall; external DllFile name 'CH375ReadData';
function TPublicFun.GetData:Integer;
var
Buff_HAdd : Byte;//帧:头地址
Buff_Cmd : Byte;//帧:命令
Buff_Len : Byte;//帧:长度
Buff_DatLC : array[1..3] of Byte;//帧:LC数据
Buff_DatLS : array[1..3] of Byte;//帧:LS数据
Buff_DatT1 : array[1..2] of Byte;//帧:T1数据
Buff_DatT2 : array[1..2] of Byte;//帧:T2数据
Buff_DatP : array[1..2] of Byte;//帧:P数据
Buff_Send : array of Byte;//用于存放各个域合成的总的串
I,BuffLen,TempLen : Integer;//传输的实际数据长度
TempStr,CSort : string;//用于存放string类型的测试传输帧
Rtl : Boolean;
PChar_Send : PChar;
begin
Result := -1;
//测试用,假设Usb设备已打开
Usb_Opened := True;
if Usb_Opened then
begin
//设置头地址
Buff_HAdd := HeadCode;
//设置命令
Buff_Cmd := StatusCode;
//设置长度
Buff_Len := strtohex1(IntToHex(17,2),2);
TempLen := 17;
//初始化LC,LS
for I:=1 to 3 do
begin
Buff_DatLC
:= $00;
Buff_DatLS := $00;
end;
//初始化T,P
for I:=1 to 2 do
begin
Buff_DatT1 := $00;
Buff_DatT2 := $00;
Buff_DatP := $00;
end;
SetLength(Buff_Send,TempLen);
//设置总串
Buff_Send[1] := Buff_HAdd;
Buff_Send[2] := Buff_Cmd;
Buff_Send[3] := Buff_Len;
Buff_Send[4] := Buff_DatLC[1];
Buff_Send[5] := Buff_DatLC[2];
Buff_Send[6] := Buff_DatLC[3];
Buff_Send[7] := Buff_DatLS[1];
Buff_Send[8] := Buff_DatLS[2];
Buff_Send[9] := Buff_DatLS[3];
Buff_Send[10] := Buff_DatT1[1];
Buff_Send[11] := Buff_DatT1[2];
Buff_Send[12] := Buff_DatT2[1];
Buff_Send[13] := Buff_DatT2[2];
Buff_Send[14] := Buff_DatP[1];
Buff_Send[15] := Buff_DatP[2];
//CRC校验:即校验域前的几个域的集合
I := CRC(Buff_Send[1],15);
Buff_Send[16] := I div 256;
Buff_Send[17] := I mod 256;
//获得string类型的测试传输帧
TempStr := '';
for I:= 1 to TempLen do
TempStr := TempStr + inttohex(Buff_Send,2);
BuffLen := TempLen * 2;
PChar_Send := PChar(TempStr);
//发送命令
//测试屏蔽
Rtl := ReadData(Usb_Index,PChar_Send,BuffLen);
if Rtl then
begin
//读取返回串
for I:= 0 to TempLen-1 do
Buff_rev[I+1] := strtohex1(copy(PChar_Send,I*2+1,2),2);
//CRC校验
if CRC_Check=1 then
begin
TempStr := '';
//校验成功,读出数据
//TempStr := TempStr + inttohex(Buff_rev[i+4],2);
for I:= 0 to 2 do
begin
Buff_DatLC[I+1] := Buff_rev[I+4];
Buff_DatLS[I+1] := Buff_rev[I+7];
end;
for I:= 0 to 1 do
begin
Buff_DatT1[I+1] := Buff_rev[I+10];
Buff_DatT2[I+1] := Buff_rev[I+12];
Buff_DatP[I+1] := Buff_rev[I+14];
end;
//数据处理
Result := 1;
//初始化接受串
for I:=1 to Maxlen do Buff_rev:=0;
end;
end
else
begin
ShowMessage('数据传输出错,无法得到正确的值!','提示');
end;
end
else
begin
ShowMessage('没有发现可用的Usb设备!','提示');
end;
end;