1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
function CalcLRC(Buffer:Array of byte; StartVal:byte):byte;
var
x:integer;
begin
result := StartVal; // Usually zero, but some protocols start at a different value
for x := 0 to 8 -1 do
result := result XOR Buffer[x];
end;
Procedure TTabbedForm.DomoSend(port1: char; port2: char; port3: char;
port4: char; port5: char; port6: char; port7: char; port8: char);
var
Buf, Buf1: String;
data, data1, data2: String;
I: Integer;
Buffer: array of byte;
begin
SetLength(Buffer, 8);
Buffer[0]:= ord(Port1);//$FF;
Buffer[1]:= ord(Port2);//$FF;
Buffer[2]:= ord(Port3);
Buffer[3]:= ord(Port4);
Buffer[4]:= ord(Port5);
Buffer[5]:= ord(Port6);
Buffer[6]:= ord(Port7);
Buffer[7]:= ord(Port8);
Memo1.Lines.Insert(0,'CalcLRC: '+IntToStr(CalcLRC(Buffer,0)));
data := #$04#$01#$02#$23 + Exo + #$00#$0a#$01 + port1 + port2 + port3 + port4
+ port5 + port6 + port7 + port8 + char(CalcLRC(Buffer,0));
// sock.SendString(data + CRLF);
for I := 1 to High(data) do
begin
Buf := data.Substring(4, High(data));
data1 := Copy(Buf, 1, 1);
data2 := Copy(Buf, 5, 9);
// Buf1 := Buf1 + StringToHex(Buf[I]);
Buf1 := StringToHex(data1 + data2);
end;
Sock.SendString(data + CRLF);
if CheckBox1.IsChecked then // debug on
Memo1.Lines.Insert(0, 'DomoSend: ' + Buf1);
end; |
Partager