物聯網控制元件
# PinToo控制元件使用(物聯網控制)
物聯網控制控制元件中包含了常用了物聯網通訊控制的控制元件。
# 1. TfxModBusTCP
- 引用單元 uModBusTCP
一個ModbusTCP客戶端元件。
您可以用TfxModbusTCP元件實現支援ModbusTCP協議的設備的控制和數據採集。
# 1.1. 屬性(Properties)
- TfxModbusTCP元件主要屬性
屬性 | 功能說明 |
---|---|
Host | 指定一個Modbus設備的IP地址 |
Port | 指定一個Modbus設備的埠號 |
# 1.1.1. Host屬性
property Host: string;
Host是指ModbusTCP設備的IP地址。如:192.168.1.100。
fxModbusTCP1.Host := '192.168.1.100';
# 1.1.2. Port屬性
property Port: Word;
Port是指ModbusTCP設備的埠號。預設502。
fxModbusTCP1.Port := 502;
# 1.2. 11.4.2.事件(Events)
- TfxModbusTCP元件主要事件
事件 | 何時觸發 |
---|---|
OnConnected | 當設備連線成功時觸發 |
OnDisconnected | 當設備斷開時觸發 |
# 1.2.1. OnConnected事件
當ModbusTCP設備連線成功時,觸發該事件。
fxMemo1.Lines.Add('Connect 連線成功!')
# 1.2.2. OnDisconnected事件
當ModbusTCP設備斷開時,觸發該事件。
fxMemo1.Lines.Add('Disconnect 斷開成功!')
# 1.3. 方法(Methods)
- TfxModbusTCP元件主要方法
方法 | 功能說明 |
---|---|
Connect | 連線設備 |
ReadCoil | 讀取單個DO數位訊號輸出 |
ReadCoils | 讀取多個DO數位訊號輸出 |
ReadHoldingRegister | 讀取單個AO類比訊號輸出 |
ReadHoldingRegisters | 讀取多個AO類比訊號輸出 |
ReadInputRegister | 讀取單個AI類比訊號輸入 |
WriteCoil | 寫入單個AO數位訊號輸出 |
WriteCoils | 寫入多個AO數位訊號輸出 |
WriteRegister | 寫入單個DO類比訊號輸出 |
WriteRegisters | 寫入多個DO類比訊號輸出 |
# 1.3.1. Connect方法
procedure Connect;
連線設備。
fxModbusTCP1.Connect;
# 1.3.2. ReadCoil方法
function ReadCoil(const RegNo: Word; out Value: Boolean): Boolean;
讀取單個數位訊號輸出。
//讀取DO數位訊號輸出
Procedure btnReadCoilOnClick(Sender: TObject);
var
v:boolean;
Begin
if fxModbusTCP1.ReadCoil(1,v) then
begin
if v Then
fxMemo1.Lines.Add('ReadCoil Value->>> 1')
else
fxMemo1.Lines.Add('ReadCoil Value->>> 0');
End
else
fxMemo1.Lines.Add('ReadCoil->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1.3.3. ReadCoils方法
function ReadCoils(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
讀取多個DO數位訊號輸出。
var
v:string;
begin
fxModbusTCP1.ReadCoils(1,2,v);
end;
2
3
4
5
# 1.3.4. ReadHoldingRegister方法
function ReadHoldingRegister(const RegNo: Word; out Value: Word): Boolean;
讀取單個AO類比訊號輸出。
//讀取AO類比訊號輸出
Procedure btnReadHoldingRegisterOnClick(Sender: TObject);
var
v:word;
Begin
if fxModbusTCP1.ReadHoldingRegister(1,v) then
begin
if v Then
fxMemo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v))
else
fxMemo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v));
End
else
fxMemo1.Lines.Add('ReadHoldingRegister->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1.3.5. ReadHoldingRegisters方法
function ReadHoldingRegisters(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
讀取多個AO類比訊號輸出。
說明: 讀取多個AO數位訊號輸出。
**返回值:**Boolean字元型。
- ReadHoldingRegisters函式語法中各部分說明
部分 | 說明 |
---|---|
RegNo | 開始位址 |
Blocks | 資料長度 |
- 示例
var
v:String;
Begin
fxModbusTCP1.ReadHoldingRegisters(1,4,v);
End;
2
3
4
5
# 1.3.6. ReadInputRegister方法
function ReadInputRegister(const RegNo: Word; out Value: Word): Boolean;
讀取單個AI類比訊號輸入。
//讀取AI數位訊號輸入
Procedure btnReadInputRegisterOnClick(Sender: TObject);
var
v:word;
Begin
if fxModbusTCP1.ReadInputRegister(1,v) then
begin
if v Then
fxMemo1.Lines.Add('ReadInputRegister Value->>> '+floattostr(v))
else
fxMemo1.Lines.Add('ReadInputRegister Value->>> '+floattostr(v));
End
else
fxMemo1.Lines.Add('ReadInputRegister->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1.3.7. WriteCoil方法
function WriteCoil(const RegNo: Word; const Value: Boolean): Boolean;
控制單個DO數位訊號輸出。
//控制DO數位訊號輸出
Procedure btnWriteCoilOnClick(Sender: TObject);
var
v:boolean;
Begin
v := false;
if fxModbusTCP1.WriteCoil(1,v) then
begin
if v Then
fxMemo1.Lines.Add('WriteCoil Value->>> 1')
else
fxMemo1.Lines.Add('WriteCoil Value->>> 0');
End
else
fxMemo1.Lines.Add('WriteCoil->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1.3.8. WriteCoils方法
function WriteCoils(const RegNo: Word; const Blocks: Word; const RegisterData: string): Boolean;
控制多個DO數位訊號輸出。
var
v:boolean;
RegisterData:string;
begin
RegisterData := '1,0';1代表True,0代表False
v := fxModbusTCP1.WriteCoils(1,2,'1,0');
end;
2
3
4
5
6
7
# 1.3.9. WriteRegister方法
function WriteRegister(const RegNo: Word; const Value: Word): Boolean;
寫入單個DO類比訊號輸出
var
v:word;
Begin
v := 123;
if fxModbusTCP1.WriteRegister(1,v) then
begin
if v Then
fxMemo1.Lines.Add('WriteRegister Value->>> '+floattostr(v))
else
fxMemo1.Lines.Add('WriteRegister Value->>> '+floattostr(v));
End
else
fxMemo1.Lines.Add('WriteRegister->>> error!');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1.3.10. WriteRegisters方法
function WriteRegisters(const RegNo: Word; const RegisterData: string; Modbus: TfxModbusTCP): Boolean;
寫入多個DO類比訊號輸出。
var
v:boolean;
RegisterData:string;
begin
RegisterData := '1,0'
v := fxModbusTCP1.WriteRegisters(1,2,'1,0');
end;
2
3
4
5
6
7
# 2. TfxModbusRead
- 引用單元 ufxModbusRead
ModbusTCP多功能數據讀取元件。
你可以簡單設定TfxModbusRead元件屬性即可完成ModbusTCP設備的數據採集功能,無需使用指令碼。當然配合指令碼使用可以豐富系統業務功能。
# 2.1. 屬性(Properties)
- TfxModbusRead元件主要屬性
屬性 | 功能說明 |
---|---|
DataControl | 指定數據控制元件 |
DataField | 指定數據欄位 |
DataLower | 指定數據下限 |
DataType | 指定數據型別 |
DataUpper | 指定數據上限 |
DataValue | 指定數據值 |
Enabled | 指定是否啟用 |
FuntionCode | 指定Modbus功能碼 |
Host | 指定ModbusTCP設備IP地址 |
Interval | 指定數據採集間隔時間 |
LowerWarning | 指定數據下限報警等級 |
Offset | 指定偏移量 |
Port | 指定ModbusTCP設備埠號 |
RegCount | 指定數據長度 |
Script | 指定指令碼 |
Site | 指定站點名稱 |
StartReg | 指定起始地址 |
UpperWarning | 指定數據上限報警等級 |
# 2.1.1. DataControl屬性
property DataControl: string read FDataControl write SetDataControl;
DataControl屬性是指需要將採集之數據顯示在某個元件上時,這個元件的名稱。
# 2.1.2. DataField屬性
property DataField: string read FDataField write SetDataField;
DataField屬性是指需要將採集之數據顯示在某個元件上時,這個元件的屬性名稱。
# 2.1.3. DataLower屬性
property DataLower: Double read FDataLower write SetDataLower;
DataLower屬性是指數據下限值,當採集之數據低於下限值時,啟動報警或異常。
# 2.1.4. DataType屬性
property DataType: TDataType read FDataType write SetDataType;
DataType屬性是指採集之數據的數據型別。例如:* dtBoolean -- 布爾型別, dtInt --整數型別。
# 2.1.5. DataUpper屬性
property DataUpper: Double read FDataUpper write SetDataUpper;
DataLower屬性是指數據上限值,當採集之數據超過上限值時,啟動報警或異常。
# 2.1.6. DataValue屬性
property DataValue: Double read FDataValue write FDataValue;
DataValue屬性指採集之數據存放處。
# 2.1.7. Enabled屬性
property Enabled: boolean read FEnabled write SetEnabled;
當Enabled設定為True時,表示啟動定時採集執行緒,可設定Interval屬性值改變採集頻率。
# 2.1.8. FuntionCode屬性
property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
FuntionCode屬性是指Modbus功能碼,根據不同的功能碼讀取Modbus設備不同區之地址的數據。
TfxModbusRead支援的讀取功能碼:
- fc01 讀取輸出數位訊號 Coils(code $01)
- fc02 讀取輸入數位訊號 Discrete Inputs (code $02)
- fc03 讀取輸出類比訊號 Holding Registers (code $03)
- fc04讀取輸入類比訊號 Input Registers (code $04)
# 2.1.9. Host屬性
property Host: string read FHost write SetHost;
Host屬性是指ModbusTCP設備的地址,如:192.168.1.100。
# 2.1.10. Interval屬性
property Interval: Integer read FInterval write SetInterval;
Interval屬性是指採集執行緒的頻率,預設1000毫秒。
# 2.1.11. LowerWarning屬性
property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
UpperWarning屬性是指數據下限異常型別,目前有:lw1,lw2,lw3,lw4,lwNote。
# 2.1.12. Offset屬性
property Offset: Double read FOffset write SetOffset;
UpperWarning屬性是指數據偏移量。
# 2.1.13. Port屬性
property Port: Integer read FPort write SetPort;
Host屬性是指ModbusTCP設備的埠號,預設502。
# 2.1.14. RegCount屬性
property RegCount: Integer read FRegCount write SetRegCount;
RegCount屬性是指讀取ModbusTCP數據地址的數據長度。
# 2.1.15. Script屬性
property Script: TStrings read FScript write SetScript;
Script屬性是指可通過指令碼對採集之數據進行業務處理,經過業務處理后的值還是儲存于DataValue中。
例如:
begin
self.DataValue := self.GetRegValues(0) * 0.1;
end.
2
3
# 2.1.16. Site屬性
property Site: string read FSite write FSite;
Site屬性是指ModbusTCP設備的站點名稱,可以作為ModbusTCP數據地址的說明之用。
# 2.1.17. StartReg屬性
property StartReg: Integer read FStartReg write SetStartReg;
RegCount屬性是指讀取ModbusTCP數據起始地址。
# 2.1.18. UpperWarning屬性
property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
UpperWarning屬性是指數據上限異常型別,目前有:uw1,uw2,uw3,uw4,uwNote。
# 2.2. 方法(Methods)
- TfxModbusRead元件主要方法
方法 | 功能說明 |
---|---|
GetRegValues | 根據索引號返回陣列中的數值 |
GetBitValues | 根據索引號返回陣列中的數值 |
SetPropValue | 設定元件屬性值 |
GetPropValue | 讀取元件屬性值 |
# 2.2.1. GetRegValues方法
//儲存類比訊號數據
function GetRegValues(QIndex: Integer): Word;
2
通過GetRegValues方法可獲取ModbusTCP設備返回的陣列中的數據。通過索引號獲取對應的數據。
var
i:Word;
begin
//獲取陣列中的第0個數據
i := fxModbusRead1.GetRegValues(0);
fxEdit2.Text := IntToStr(i);
end;
2
3
4
5
6
7
# 2.2.2. GetBitValues方法
//讀取數位訊號數據
function GetBitValues(QIndex: Integer): boolean;
2
通過GetRegValues方法可獲取ModbusTCP設備返回的陣列中的數據。通過索引號獲取對應的數據。
var
i:boolean;
begin
//獲取陣列中的第0個數據
i := fxModbusRead1.GetBitValues(0);
end;
2
3
4
5
6
# 2.2.3. SetPropValue方法
procedure SetPropValue(QControl, QControlProp: string; QValue: Variant);
設定控制元件屬性值,通過SetPropValue方法可以將DataValue賦值給指定控制元件的屬性。
fxModbusRead1.SetPropValue(fxEdit1,Text);
# 2.2.4. GetPropValue方法
function GetPropValue(QControl, QControlProp: string): Variant;
設定控制元件屬性值,通過GetPropValue方法可以獲取指定控制元件屬性的值,並返回。
var
v:String;
Begin
v := fxModbusRead1.GetPropValue(fxEdit1,Text);
End;
2
3
4
5
6
# 3. TfxModbusWrite
- 引用單元 ufxModbusWrite
ModbusTCP多功能數據寫入元件。
你可以簡單設定TfxModbusWrite元件屬性即可完成ModbusTCP設備的數據寫入功能,無需使用指令碼。當然配合指令碼使用可以豐富系統業務功能。
# 3.1. 屬性(Properties)
- TfxModbusWrite元件主要屬性
屬性 | 功能說明 |
---|---|
DataControl | 指定數據控制元件 |
DataField | 指定數據欄位 |
DataLower | 指定數據下限 |
DataType | 指定數據型別 |
DataUpper | 指定數據上限 |
DataValue | 指定數據值 |
FuntionCode | 指定Modbus功能碼 |
Host | 指定ModbusTCP設備IP地址 |
LowerWarning | 指定數據下限報警等級 |
Port | 指定ModbusTCP設備埠號 |
RegCount | 指定數據長度 |
Site | 指定站點名稱 |
StartReg | 指定起始地址 |
UpperWarning | 指定數據上限報警等級 |
# 3.1.1. DataControl屬性
property DataControl: string read FDataControl write SetDataControl;
DataControl屬性是指需要將寫入之數據顯示在某個元件上時,這個元件的名稱。
# 3.1.2. DataField屬性
property DataField: string read FDataField write SetDataField;
DataField屬性是指需要將寫入之數據顯示在某個元件上時,這個元件的屬性名稱。
# 3.1.3. DataLower屬性
property DataLower: Double read FDataLower write SetDataLower;
DataLower屬性是指數據下限值,當寫入之數據低於下限值時,啟動報警或異常。
# 3.1.4. DataType屬性
property DataType: TDataType read FDataType write SetDataType;
DataType屬性是指寫入之數據的數據型別。例如:* dtBoolean -- 布爾型別, dtInt --整數型別。
# 3.1.5. DataUpper屬性
property DataUpper: Double read FDataUpper write SetDataUpper;
DataLower屬性是指數據上限值,當寫入之數據超過上限值時,啟動報警或異常。
# 3.1.6. DataValue屬性
property DataValue: Double read FDataValue write FDataValue;
DataValue屬性指採寫入數據存放處。
# 3.1.7. FuntionCode屬性
property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
FuntionCode屬性是指Modbus功能碼,根據不同的功能碼寫入Modbus設備不同區之地址的數據。
TfxModbusRead支援的讀取功能碼:
- fc05 寫入單筆輸出數位訊號 Single Coil(code $05)
- fc06 寫入單筆輸出類比訊號 Single Register (code $06)
- fc15 寫入多筆輸出數位訊號 Multiple Coils(code $0F)
- fc16 寫入多筆輸出類比訊號 Multiple Registers (code $10)
# 3.1.8. Host屬性
property Host: string read FHost write SetHost;
Host屬性是指ModbusTCP設備的地址,如:192.168.1.100。
# 3.1.9. LowerWarning屬性
property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
UpperWarning屬性是指數據下限異常型別,目前有:lw1,lw2,lw3,lw4,lwNote。
# 3.1.10. Port屬性
property Port: Integer read FPort write SetPort;
Host屬性是指ModbusTCP設備的埠號,預設502。
# 3.1.11. RegCount屬性
property RegCount: Integer read FRegCount write SetRegCount;
RegCount屬性是指寫入ModbusTCP數據地址的數據長度。
# 3.1.12. Site屬性
property Site: string read FSite write FSite;
Host屬性是指ModbusTCP設備的站點名稱,可以作為ModbusTCP數據地址的說明之用。
# 3.1.13. StartReg屬性
property StartReg: Integer read FStartReg write SetStartReg;
RegCount屬性是指寫入ModbusTCP數據起始地址。
# 3.1.14. UpperWarning屬性
property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
UpperWarning屬性是指數據上限異常型別,目前有:uw1,uw2,uw3,uw4,uwNote。
# 3.2. 方法(Methods)
- TfxModbusWrite元件主要方法
方法 | 功能說明 |
---|---|
execute | 執行Modbus寫入操作 |
# 3.2.1. execute方法
procedure execute;
執行TfxModbusWrite的寫入事件。
# 4. TfxModBusRTU
- 引用單元 uModBusRTU
ModbusRTU多功能數據採集與控制組件。
你可以簡單設定TfxModBusRTU元件屬性,然後配合指令碼可實現豐富的ModbusRTU設備的採集與控制功能。
# 4.1. 屬性(Properties)
- TfxModBusRTU元件主要屬性
屬性 | 功能說明 |
---|---|
Address | 指定Modbus設備地址 |
Comport | 指定TfxComport通訊埠元件 |
Info | 是否顯示反饋資訊 |
RegCount | 數據長度 |
StartReg | 數據起始位址 |
# 4.2. 方法(Methods)
- TfxModBusRTU元件主要方法
方法 | 功能說明 |
---|---|
ReadCoils | 讀取多個DO數位訊號輸出 |
ReadHoldingRegisters | 讀取多個AO類比訊號輸出 |
ReadInputRegister | 讀取單個AI類比訊號輸入 |
WriteSingleCoil | 寫入單個AO數位訊號輸出 |
WriteCoils | 寫入多個AO數位訊號輸出 |
WriteSingleRegister | 寫入單個DO類比訊號輸出 |
WriteMultipleRegisters | 寫入多個DO類比訊號輸出 |
# 4.2.1. ReadCoils方法
//說明: 讀取多個線圈狀態(01)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// RegCount:數據長度
procedure ReadCoils(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 4.2.2. ReadDiscreteInputs方法
//說明: 讀取離散輸入狀態(02)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// RegCount:數據長度
procedure ReadDiscreteInputs(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 4.2.3. ReadHoldingRegisters方法
//說明: 讀取多個保持型暫存器(03)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// RegCount:數據長度
procedure ReadHoldingRegisters(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 4.2.4. ReadInputRegisters方法
//說明: 讀取多個輸入暫存器(04)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// RegCount:數據長度
procedure ReadInputRegisters(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 4.2.5. WriteSingleCoil方法
//說明: 寫入單個線圈狀態(05)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// UserData:數據值
procedure WriteSingleCoil(Address, StartReg: Word;UserData: Integer);
2
3
4
5
6
7
# 4.2.6. WriteMultipleCoils方法
//說明: 寫入多個線圈狀態(15)
//返回值: Integer
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// UserData:數據值
procedure WriteMultipleCoils(Address, StartReg, RegCount: Word; UserData: String);
2
3
4
5
6
7
8
# 4.2.7. WritSingleRegister方法
//說明: 寫入單個保持型暫存器(06)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// UserData:數據值
procedure WritSingleRegister(Address, StartReg: Word; UserData: Word);
2
3
4
5
6
7
# 4.2.8. WriteMultipleRegisters方法
//說明: 寫入多個保持型暫存器(16)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// UserData:數據值
procedure WriteMultipleRegisters(Address, StartReg, RegCount: Word; UserData:String);
2
3
4
5
6
7
# 4.3. 事件
- TModbusRTUl主要事件
事件 | 何時觸發 |
---|---|
OnReadCoils | 在執行ReadCoils方法時觸發該事件 |
OnReadDiscreteInputs | 在執行ReadDiscreteInputs方法時觸發該事件 |
OnReadHoldingRegisters | 在執行ReadHoldingRegisters方法時觸發該事件 |
OnReadHoldingRegisters | 在執行ReadHoldingRegisters方法時觸發該事件 |
# 4.3.1. OnReadCoils事件
Procedure OnReadCoils(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 4.3.2. OnReadDiscreteInputs事件
Procedure OnReadDiscreteInputs(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 4.3.3. OnReadHoldingRegisters事件
Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 4.3.4. OnReadHoldingRegisters事件
Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 5. TfxMQTTClient
- 引用單元 TMSMQTTClient
TfxMQTTClient是一個廣泛用於物聯網、訊息推送等場景的元件。
MQTT是一個基於客戶端-伺服器的訊息發佈/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M)通訊和物聯網(IoT)。其在,通過衛星鏈路通訊感測器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。
# 5.1. 屬性(Properties)
- TfxMQTTClient元件主要屬性
屬性 | 功能說明 |
---|---|
BrokerHostName | 指定MQTT Broker 地址 |
BrokerProt | 指定MQTT Broker 埠 |
ClientID | 指定客戶端ID(標識) |
Credentials | 指定驗證憑證(使用者名稱、密碼) |
IPVersion | 指定IP版本型別 |
KeepAliveSettings | 指定保持活著動的設定 |
LastWillSettings | |
UseSSL | 指定是否使用使SSL |
TfxMQTTClient元件主要屬性說明:
KeepAliveSettings :保持活動的設定
- AutoReconnect:自動重新連線
- AutoReconnectInterval:自動重新連線間隔,單位毫秒
- KeepAliveInterval:存活間隔,單位毫秒
- KeepConnectionAlive:保持連線活著
LastWillSettings:MQTT遺囑設定
- QoS:服務質量
- qosAtLeastOnce:至少一次
- qosAtMostOnce:最多一次
- qosExactlyOnce:確保只有一次
- qosRESERVED:保留
- Retain:保留
- Topic:主題
- WillMessage:遺囑訊息
- QoS:服務質量
屬性賦值示例
//MQTTClient屬性賦值
fxMQTTClientLED.BrokerHostName := edtBrokerHostName.Text;
fxMQTTClientLED.BrokerPort := StrToInt(edtBrokerProt.Text);
fxMQTTClientLED.Credentials.Password := edtPassword.Text;
fxMQTTClientLED.Credentials.Username := edtUsername.Text;
2
3
4
5
# 5.2. 事件(Events)
- TfxMQTTClient元件主要事件
事件 | 何時觸發 |
---|---|
OnConnectedStatusChanged | 當連線狀態發生改變時觸發 |
OnPublishReceivedANSI | 當發佈后返回訊息時觸發 |
OnPublishReceivedUTF8 | 當發佈后返回訊息時觸發 |
# 5.2.1. OnConnectedStatusChanged事件
當TfxMQTTClient連線狀態發生改變時觸發OnConnectedStatusChanged事件。
//fxMQTTClientLED 控制元件 OnConnectedStatusChanged事件
Procedure fxMQTTClientLEDOnConnectedStatusChanged(ASender: TObject; AConnected: Boolean; AStatus: TTMSMQTTConnectionStatus);
Begin
if AConnected then
begin
MemoMsg.Lines.Add('MQTT Broker 連線成功!');
fxMQTTClientLED.Subscribe('LED',qosAtMostOnce);
end
else
MemoMsg.Lines.Add('MQTT Broker 連線超時!');
End;
2
3
4
5
6
7
8
9
10
11
# 5.2.2. OnPublishReceivedANSI事件
Procedure OnPublishReceivedANSI(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
當TfxMQTTClient發佈后返回訊息時觸發OnPublishReceivedANSI事件。(使用愛招飛產品的 MQTT伺服器時可使用此方法獲取帶有中文字元的訂閱訊息)
//fxMQTTClientLED 控制元件 OnPublishReceivedANSI事件(發佈收到的內容)
Procedure fxMQTTClientLEDOnPublishReceivedANSI(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
Begin
if APayload='1' Then
MemoMsg.Lines.Add(ATopic+'->開')
else
MemoMsg.Lines.Add(ATopic+'->關');
End;
2
3
4
5
6
7
8
# 5.2.3. OnPublishReceivedUTF8事件
Procedure OnPublishReceivedUTF8(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
當TfxMQTTClient發佈后返回訊息時觸發OnPublishReceivedUTF8事件。(使用其他第三方MQTT 服務端時可使用)
//fxMQTTClientLED 控制元件 OnPublishReceivedUTF8事件(發佈收到的內容)
Procedure fxMQTTClientLEDOnPublishReceivedUTF8(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
Begin
if APayload='1' Then
MemoMsg.Lines.Add(ATopic+'->開')
else
MemoMsg.Lines.Add(ATopic+'->關');
End;
2
3
4
5
6
7
8
--
# 5.3. 方法(Methods)
- TfxMQTTClient元件主要方法
方法 | 功能說明 |
---|---|
Connect | 連線MQTT Broker |
Disconnect | 斷開MQTT Broker |
IsConnected | 判斷連線狀態 |
Subscribe | 訂閱MQTT主題 |
Publish | 發佈MQTT資訊 |
Unsubscribe | 退訂MQTT主題 |
# 5.3.1. Connect方法
//說明: 連線MQTT Broker
//返回值: 無
//參數:ACleanSession 是否清除 Session
procedure Connect(ACleanSession: Boolean);
2
3
4
# 5.3.2. Disconnect方法
//說明: 斷開MQTT Broker
//返回值: 無
//參數:無
procedure Disconnect;
2
3
4
示例:
fxMQTTClient1.Disconnect;
# 5.3.3. IsConnected方法
//說明: 判斷連線狀態
//返回值: Boolean
//參數:無
function IsConnected: Boolean;
2
3
4
示例:
if fxMQTTClient1.IsConnected then
begin
//程式碼片段
end;
2
3
4
# 5.3.4. Subscribe方法
//說明: 訂閱主題
//返回值: 無
//參數:
// ATopic 主題名稱
// ATopicQosLevel主題的服務質量級別,預設qosAtMostOnce
// TTMSMQTTQoS包含:
// qosAtMostOnce 最多一次交貨
// qosAtLeastOnce 至少一次交貨
// qosExactlyOnce 一次交貨
// qosRESERVED 禁止保留
function Subscribe(ATopic: string; ATopicQosLevel: TTMSMQTTQoS): Word;
2
3
4
5
6
7
8
9
10
11
示例:
fxMQTTClientLED.Subscribe('LED',qosAtMostOnce);
# 5.3.5. Publish方法
//說明: 發佈主題內容
//返回值: Word
//參數:
// ATopic 主題名稱
// APayload 主題內容
// AQos主題的服務質量級別,預設qosAtMostOnce
// TTMSMQTTQoS包含:
// qosAtMostOnce 最多一次交貨
// qosAtLeastOnce 至少一次交貨
// qosExactlyOnce 一次交貨
// qosRESERVED 禁止保留
// ARetain 是否保留
function Publish(ATopic: string; APayload: string; AQos: TTMSMQTTQoS; ARetain: Boolean): Word;
2
3
4
5
6
7
8
9
10
11
12
13
示例:
fxMQTTClientLED.Publish('LED','1',qosAtMostOnce,false);
# 5.3.6. Unsubscribe方法
//說明: 主題退訂
//返回值: Word
//參數:ATopic 主題名稱
function Unsubscribe(ATopic: string): Word;
2
3
4
示例:
fxMQTTClientLED.Unsubscribe('LED');
# 6. TfxOPCUAClient
- 引用單元 UAClient
OPC UA 客戶端。
滑鼠雙擊TfxOPCUAClient元件,可以彈出的對話方塊中進行OPCServer的選擇。
# 7. TfxOPCDAClient
- 引用單元 OPC
OPC DA 客戶端。
滑鼠雙擊TfxOPCDAClient元件,可以彈出的對話方塊中進行OPCServer的指定以及OPC Groups、OPC Items的定義。
- OPC Server 選擇
- OPC Groups、OPC Items 選擇
# 8. TfxComPort
- 引用單元 ComPort TfxComPort 是一個通訊埠通訊元件。
# 8.1. 屬性
- TfxComPort元件主要屬性
屬性 | 功能說明 |
---|---|
Active | 是否啟用該元件 |
BaudRate | 獲取或設定序列波特率 |
BlockMode | 指定阻塞模式 |
DataBits | 獲取或設定每個位元組的標準數據位長度 |
DeviceName | 元件對應的連線埠名稱 |
Parity | 指定ComPort對象的奇偶校驗位 |
StopBits | 指定在ComPort對像上使用的停止位的數目 |
# 8.1.1. DataBits 屬性
獲取或設定每個位元組的標準數據位長度。預設為dbDefault,其餘選項包括db4~db8。
# 8.1.2. Parity 屬性
指定fxComPort對象的奇偶校驗位。包含如下選項。
- paDefault:預設選項。
- paEven:設定奇偶校驗位,使位數等於偶數。
- paNone:不發生奇偶校驗檢查。
- paOdd:設定奇偶校驗位,使位數等於奇數。
# 8.1.3. StopBits 屬性
指定在fxComPort對像上使用的停止位的數目。有如下選項。
- sbDefault:預設選項。
- sb1:使用一個停止位。
- sb2:使用兩個停止位。
# 8.2. 事件
- TfxComPort主要事件
事件 | 何時觸發 |
---|---|
AfterClose | 在埠關閉后觸發該事件 |
AfterOpen | 在埠打開后觸發該事件 |
BeforeClose | 在埠關閉前觸發該事件 |
BeforeOpen | 在埠打開前觸發該事件 |
# 9. TfxUsbSerial
- 引用單元 ufxUsbSerial TfxComPort 是一個通訊埠通訊元件。
# 9.1. 屬性
- TfxUsbSerial元件主要屬性
屬性 | 功能說明 |
---|---|
BaudRate | 設定通訊埠的通訊速率 |
DataBits | 通訊埠單次通訊的數據位數 |
Devices | Usb設備列表 |
FlowControl | 流控制的方式 |
Info | 是否顯示反饋資訊 |
Parity | 通訊埠通訊的數據校驗方式 |
StopBits | 通訊埠通訊的數據停止位的數量 |
Synchronous | 是否設定通訊同步 |
UsbDevice | Usb設備名稱 |
UsbSerialType | Usb設備型別(RS232、RS485) |
# 9.1.1. Devices 屬性
指駁接到設備USB介面上的所有USB設備名稱集合。
# 9.1.2. Info 屬性
指定是否顯示執行資訊,通過執行資訊的反饋可以檢視操作的資訊以確定通訊是否正常。
# 9.1.3. UsbDevice 屬性
指定當時操作的USB設備名稱,該設備名稱必需是在Devices集合中。
# 9.1.4. UsbSerialType 屬性
指定USB設備的通訊協議型別。
# 9.2. 方法(Methods)
- TfxUsbSerial元件主要方法
方法 | 功能說明 |
---|---|
RefreshDevices | 重新整理設備列表 |
Open | 打開設備連線 |
Close | 關閉設備連線 |
WriteByte | 寫入Byte |
WriteStrToBytes | 寫入Bytes |
ReadCoils | 讀取多個線圈狀態(01) |
ReadDiscreteInputs | 讀取離散輸入狀態(02) |
ReadHoldingRegisters | 讀取多個保持型暫存器(03) |
ReadInputRegisters | 讀取多個輸入暫存器(04) |
WriteSingleCoil | 寫入單個線圈狀態(05) |
WriteMultipleCoils | 寫入多個線圈狀態(15) |
WritSingleRegister | 寫入單個保持型暫存器(06) |
WriteMultipleRegisters | 寫入多個保持型暫存器(16) |
# 9.2.1. RefreshDevices方法
//說明: 重新整理USB設備列表
//返回值: 無
//參數:無
procedure RefreshDevices;
2
3
4
示例:
fxUsbSerial.RefreshDevices;
# 9.2.2. Open方法
//說明: 打開USB設備連線
//返回值: 無
//參數:無
procedure Open(ASynchronous: Boolean);
2
3
4
示例:
fxUsbSerial.Open(True);
# 9.2.3. Close方法
//說明: 關閉USB設備連線
//返回值: 無
//參數:無
procedure Close;
2
3
4
示例:
fxUsbSerial.Clost;
# 9.2.4. Close方法
//說明: 關閉USB設備連線
//返回值: 無
//參數:無
procedure Close;
2
3
4
示例:
fxUsbSerial.Close;
# 9.2.5. WriteByte方法
//說明: 向設備寫入Byte
//返回值: Integer
//參數:
// Data:寫入的Byte值
// Timeout:寫入超時時間(毫秒)
function WriteByte(Data: Byte; Timeout: Integer = 0): Integer;
2
3
4
5
6
示例:
//向電子秤發送R命令,讀取電子秤數值
fxUsbSerial.WriteByte(Ord('R'));
2
# 9.2.6. WriteStrToBytes方法
//說明: 向設備寫入Byte
//返回值: Integer
//參數:
// AStr:寫入的文字內容
// AEncoding:編碼型別 (Ansi\UTF8\UTF7|UniCode)
function WriteStrToBytes(AStr: string; AEncoding:string = 'Ansi'): Integer;
2
3
4
5
6
示例:
var
Str:string;
begin
//通訊埠列印
Str :=
' SIZE 40 mm,30 mm'+
' CLS'+
' TEXT 50,30,"TSS24.BF2",0,1,1,"商品清單"'+
' TEXT 50,45,"4",0,1,1,"--------------------"'+
' TEXT 50,60,"TSS24.BF2",0,1,1,"紅塔山 1 15 15 "'+
' TEXT 50,90,"TSS24.BF2",0,1,1,"娃哈哈 1 15 15 "'+
' TEXT 50,120,"TSS24.BF2",0,1,1,"牛肉乾 1 15 15 "'+
' TEXT 50,150,"TSS24.BF2",0,1,1,"紅牛 1 15 15 "'+
' TEXT 50,170,"4",0,1,1,"--------------------"'+
' TEXT 50,190,"TSS24.BF2",0,1,1,"合計 1 15 15 "'+
' QRCODE 50,20,L,4,A,0,"isoface.net"'+
' PRINT 1'+
' EOP';
fxUsbSerial.WriteStrToBytes(Str,'Ansi');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 9.2.7. ReadCoils方法
//說明: 讀取多個線圈狀態(01)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// RegCount:數據長度
procedure ReadCoils(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 9.2.8. ReadDiscreteInputs方法
//說明: 讀取離散輸入狀態(02)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// RegCount:數據長度
procedure ReadDiscreteInputs(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 9.2.9. ReadHoldingRegisters方法
//說明: 讀取多個保持型暫存器(03)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// RegCount:數據長度
procedure ReadHoldingRegisters(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 9.2.10. ReadInputRegisters方法
//說明: 讀取多個輸入暫存器(04)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// RegCount:數據長度
procedure ReadInputRegisters(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 9.2.11. WriteSingleCoil方法
//說明: 寫入單個線圈狀態(05)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// UserData:數據值
procedure WriteSingleCoil(Address, StartReg: Word;UserData: Integer);
2
3
4
5
6
7
# 9.2.12. WriteMultipleCoils方法
//說明: 寫入多個線圈狀態(15)
//返回值: Integer
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// UserData:數據值
procedure WriteMultipleCoils(Address, StartReg, RegCount: Word; UserData: String);
2
3
4
5
6
7
8
# 9.2.13. WritSingleRegister方法
//說明: 寫入單個保持型暫存器(06)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// UserData:數據值
procedure WritSingleRegister(Address, StartReg: Word; UserData: Word);
2
3
4
5
6
7
# 9.2.14. WriteMultipleRegisters方法
//說明: 寫入多個保持型暫存器(16)
//返回值: 無
//參數:
// Address:設備地址(1~247)
// StartReg:起始地址
// UserData:數據值
procedure WriteMultipleRegisters(Address, StartReg, RegCount: Word; UserData:String);
2
3
4
5
6
7
# 9.3. 事件
- TfxUsbSerial主要事件
事件 | 何時觸發 |
---|---|
OnReceiveData | 在RS232通訊寫入時觸發該事件 |
OnReadCoils | 在執行ReadCoils方法時觸發該事件 |
OnReadDiscreteInputs | 在執行ReadDiscreteInputs方法時觸發該事件 |
OnReadHoldingRegisters | 在執行ReadHoldingRegisters方法時觸發該事件 |
OnReadHoldingRegisters | 在執行ReadHoldingRegisters方法時觸發該事件 |
# 9.3.1. OnReceiveData事件
Procedure OnReceiveData(Sender: TObject;ReceiveData: string);
# 9.3.2. OnReadCoils事件
Procedure OnReadCoils(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 9.3.3. OnReadDiscreteInputs事件
Procedure OnReadDiscreteInputs(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 9.3.4. OnReadHoldingRegisters事件
Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 9.3.5. OnReadHoldingRegisters事件
Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 10. TfxMeter
此元件為儀表的數據採集元件,可針對大量的數據進行佇列採集。提供了程式內元件的COM連線介面,具有TComPort所有功能的同時還實現儀表數據採集之功能。
# 10.1. 屬性
- TMeter元件主要屬性
屬性 | 功能說明 |
---|---|
Active | 是否啟用該元件 |
BaudRate | 獲取或設定序列波特率 |
BufferSizes | 快取區設定 |
Characters | 設定控制字元 |
CustBaudRate | 獲取或設定自定義序列波特率 |
DataBits | 獲取或設定每個位元組的標準數據位長度 |
DeviceName | 元件對應的連線埠名稱 |
Parity | 指定Meter對象的奇偶校驗位 |
StopBits | 指定在Meter對像上使用的停止位的數目 |
ThreadPriority | 指定執行緒的優先順序別 |
MeterList | 儀表列表 |
Interval | 採集間隔時間 |
Enabled | 是否啟動採集 |
# 10.1.1. DataBits 屬性
獲取或設定每個位元組的標準數據位長度。預設為dbDefault,其餘選項包括db4~db8。
# 10.1.2. Parity 屬性
指定Meter對象的奇偶校驗位。包含如下選項。
- paDefault:預設選項。
- paEven:設定奇偶校驗位,使位數等於偶數。
- paMark:將奇偶校驗位保留為 1。
- paNone:不發生奇偶校驗檢查。
- paOdd:設定奇偶校驗位,使位數等於奇數。
- paSpace:將奇偶校驗位保留為 0。
# 10.1.3. StopBits 屬性
指定在Meter對像上使用的停止位的數目。有如下選項。
- sbDefault:預設選項。
- sb1:使用一個停止位。
- sb1_5:使用1.5個停止位。
- sb2:使用兩個停止位。
# 10.1.4. MeterList 屬性
Meter數據採集列表,有如下選項。
# 10.1.4.1. 屬性
- TMeter元件主要屬性
屬性 | 功能說明 |
---|---|
Address | 儀表地址 |
Caption | 儀表名稱 |
Code | 儀表編號 |
Data | 發送命令(電錶使用) |
Error | 錯誤資訊 |
Interval | 休眠時間(毫秒) |
ItemIndex | 儀表索引 |
LastSaveTime | 採集數據最後儲存時間 |
LastTime | 最近採集時間 |
Log | 日誌(發送和返回的原始數據) |
MeterType | 指定儀表型別 |
Rate | 儀表係數 |
Value1 | 採集數據1 |
Value2 | 採集數據2 |
Value3 | 採集數據3 |
Value4 | 採集數據4 |
Value5 | 採集數據5 |
# 10.1.4.2. Data屬性
指定儀表採集時的一些特殊命令,目前只有電錶會用到,如指定採集尖峰谷平的數據。
- 正向總功:00010000
- 組合尖峰谷平:0000FF00
# 10.1.4.3. MeterType屬性
指定儀表型別,目前支援如下幾種型別。
- LDZ_5J:金田水錶
- LDYB_3000:英博水錶
- LDM:恢宏水錶
- DLT645_2007:電錶 DLT645_2007
- FCM_Single:天信FCM體積修正儀 浮點單精度協議
- FCM_V1_3:天信FCM體積修正儀 天信V1.3協議
- EVC300:蒼南儀表 EVC3000體積修正儀
- PROH_6000L:杭州普恒蒸汽表
- HS96:杭州成套節流裝置蒸汽表
針對不同儀表型別肯協議,Value1,Value2,Value3,Value4,Value5 值都有不同的含義。
LDZ_5J:金田水錶 Value1=累積流量,Value2=瞬時流量,Value3=未使用,Value4=未使用,Value5=未使用
LDYB_3000:英博水錶 Value1=累積流量,Value2=瞬時流量,Value3=壓力,Value4=流速,Value5=未使用
LDM:恢宏水錶 Value1=累積流量,Value2=瞬時流量,Value3=未使用,Value4=未使用,Value5=未使用
DLT645_2007:電錶 DLT645_2007 Value1=總功,Value2=尖電,Value3=峰電,Value4=平電,Value5=谷電
FCM_Single:天信FCM體積修正儀 浮點單精度協議 Value1=標準總量,Value2=標況體積流量,Value3=工況體積流量,Value4=溫度,Value5=壓力
FCM_V1_3:天信FCM體積修正儀 天信V1.3協議 Value1=標準總量,Value2=標況體積流量,Value3=工況體積流量,Value4=溫度,Value5=壓力
EVC300:蒼南儀表 EVC3000體積修正儀 Value1=標準總量,Value2=標況體積流量,Value3=工況體積流量,Value4=溫度,Value5=壓力
PROH_6000L:杭州普恒蒸汽表 Value1=累積流量,Value2=瞬時流量,Value3=壓力,Value4=壓差,Value5=溫度
HS96:杭州成套節流裝置蒸汽表 Value1=累積流量,Value2=瞬時流量,Value3=壓力,Value4=壓差,Value5=溫度
# 10.1.5. Interval 屬性
指定在Meter數據採集時輪詢的頻率,單位毫秒(ms)。
//1秒輪詢
FThis.Meter1.Interval := 1000;
2
# 10.1.6. Enabled 屬性
指定是否啟動Meter的數據採集。
//啟動數據採集
FThis.Meter1.Enabled := true;
2
# 10.2. 事件
- TMeter主要事件
事件 | 何時觸發 |
---|---|
AfterClose | 在埠關閉后觸發該事件 |
AfterOpen | 在埠打開后觸發該事件 |
BeforeClose | 在埠關閉前觸發該事件 |
BeforeOpen | 在埠打開前觸發該事件 |
ReceiveData | 數據採集后觸觸發該事件 |
# 10.2.1. ReceiveData 事件
TReceiveItemDataEvent = procedure(AItem: TMeterItem) of object;
指示儀表數據採集時,將採集到的數據通過該事件上回調數據。
- 示例
procedure TMyHandler.Meter1ReceiveData;
var
lvitem:Tlistitem; //此處一定要預定義臨時記錄儲存變數.
begin
if lvLog.Items.Count > 27 then
lvLog.Items.Clear;
lvitem := lvLog.Items.add;
lvitem.Caption:=AItem.Code;
lvitem.SubItems.Add(AItem.Caption);
lvitem.SubItems.Add(AItem.Address);
lvitem.SubItems.Add(AItem.Value1);
lvitem.SubItems.Add(FormatDateTime('c',now));
end;
2
3
4
5
6
7
8
9
10
11
12
13
# 11. TfxRestAPI
該元件是RestAPI客戶端,用於向第三方的Rest伺服器發送請求,並獲取反饋的資訊。關於REST的表述可參考 REST (opens new window)。
在控制元件上使用滑鼠雙擊,可使用嚮導界面的方式設定Rest請求資訊,設定完成後,點選 Send
按鈕檢視反饋的結果資訊。點選 OK
按鈕將設定的內容儲存至RestAPI控制元件屬性。
# 11.1. 屬性
屬性 | 功能說明 |
---|---|
APIName | API的名稱,作為標記描述資訊使用 |
Body | 請求主體的內容 |
ContentType | 請求的內容型別 |
Headers | 請求頭的值的型別 |
Method | 請求的型別 |
Params | 請求的參數內容 |
Script | 請求的指令碼內容 |
Server | 請求的伺服器的地址資訊 |
Url | 請求的除伺服器以外的地址的資訊 |
# 11.1.1. Body
property Body: TStringList;
設定請求體中的內容,點選屬性右側的按鈕以打開文字編輯框,向其中輸入資訊,通常可在其中輸入格式化的JSON文字或者key=value
型別的文字或者純文字資訊,根據API的需求進行填寫。
當ContentType設定為application/json
時,Body處填寫的是格式化的JSON文字;當ContentType設定為application/x-www-form-urlencoded
時,Body處填寫的是key=value
鍵值對。
# 11.1.2. ContentType
property ContentType: string;
設定請求內容的型別。通常有以下幾種型別:
text/html
:帶有html標記的文字型別。application/json
:格式化的json文字型別。application/xml
:格式化的xml文字型別。application/octet-stream
:未知型別,預設表示為二進制的數據流型別。application/x-www-form-urlencoded
:key=value型別的文字編碼方式。
# 11.1.3. Headers
property Headers: TStringList;
設定發送請求的請求頭的資訊。
# 11.1.4. Method
property Method: TRequestMethod;
設定請求的發送方式。
rmGET
:以GET的方式發送請求。rmPOST
:以POST的方式發送請求。rmDELETE
:以DELETE的方式發送請求。rmPUT
:以PUT的方式發送請求。
# 11.1.5. Params
property Params: TStringList;
設定發送的請求中帶有的參數資訊。以key=value
的方式設定,每行設定一個。此部分的參數在發送中會使用URL編碼的方式附加在URL後進行發送。
比如在Params中設定的參數為:
key1=value1
key2= value2
2
請求的地址為http://192.168.1.1/
,則在經過URL編碼后請求的地址形式如下:
http://192.168.1.1/?key1=value1&key2=value2
在請求的Rest地址與第一個參數中間使用?
分隔,其餘的參數與參數之間使用&
進行分隔。
# 11.1.6. Script
property Script: TStringList;
用於設定API返回的JSON資訊中將會使用的提取特定數值的指令碼資訊。可使用的有以下幾項內容。
GetJSONString
:獲取JSON中特定值的文字。GetJSONNumber
:獲取JSON中特定值的數值。GETJSONInteger
:獲取JSON中特定值的整數值資訊。GETJSONObject
:獲取JSON中特定的對象GETJSONBool
:獲取JSON中特定值的布林值資訊。GETJSONObject
:獲取JSON中指定名稱的對象資訊。GETJSONArray
:獲取JSON中指定名稱的對象陣列資訊。GETJSONPair
:獲取JSON中指定名稱的鍵值對的資訊。
具體的使用方式如下:
{
"$user":{
"auth_token": "ABDEDEEDEDEED",
"number": 1,
"float": 3.2,
"bool": true
},
"status":[
{"ok": true},
{"ok": false}
]
}
2
3
4
5
6
7
8
9
10
11
12
如果我們要從中取出auth_token
的值,在指令碼資訊中可以使用下述方式獲取:
方式一:寫路徑獲取
GETJSONString=$user.auth_token
方式二:分層單步獲取
GETJSONString=$user
GETJSONString=auth_token
2
如果是取特定陣列中的對象,使用以下方式來獲取:
陣列有名稱
GETJSONBool=status[0].ok
陣列無名稱:陣列無名稱通常使用在起始的位置。表示方式如下:
[
{"bad": "AA"},
{"bad": "BB"}
]
2
3
4
上述寫法如下:
GETJSONString=[0].bad
如果要取JSON中表示的各種數據型別的數值或者對象,使用下述方式:
文字型別
GETJSONString=$user.auth_token
數值型別(返回型別為文字)
GETJSONNumber=$user.number
整數
GETJSONInteger=$user.number
浮點數
GETJSONFloat=$user.float
布林值
GETJSONBool=$user.bool
對像
GETJSONObject=$user
陣列
GETJSONArray=status
值對
GETJSONPair=$user
# 11.1.7. Server
property Server: string;
設定API廠商的服務地址,此服務地址可從API服務管理界面進行設定。
# 11.1.8. Url
property Url: string;
設定處服務地址外的具體Url路徑資訊。首位不需要帶地址分隔符號。
# 11.2. 事件
# 11.2.1. ResultData
procedure UgRestApiResultData(sender: tobject;aresult: string);
設定當接收到RestAPI返回的訊息時觸發事件,在aresult
中顯示返回的文字。
示例:假設從返回的結果中獲取auth_token
,可使用下述的方式來獲取。
//PasScript
Procedure fxRestAPI1OnResultData(Sender: TObject; AResult: string);
Var
vValue: TJSONValue;
begin
fxMemo1.Lines.Add(aresult);
vValue := fxfun.ParseJSONValue(aresult);
vValue := TJSONObject(vValue).GetValue('$user');
vToken := TJSONObject(vValue).GetValue('auth_token').Value;
vJSON.Free;
end;
2
3
4
5
6
7
8
9
10
11
# 11.3. 方法
# 11.3.1. Send
procedure Send;
設定發送請求。
# 12. fxWebSocketClient
此元件為WebSocket客戶端元件,可用於與WebSocket伺服器連線實現通訊。
# 12.1. 屬性
# 12.1.1. Active
property Active: Boolean;
是否啟用WebSocket客戶端,為 True
時表示啟用客戶端功能。
# 12.1.2. Authentication
用於認證相關的選項,包含四種認證方式。如不需要使用認證,將其中的 Enabled
屬性設定為 False
。以下是認證方式對應的屬性說明。
Session:客戶端將使用者名稱
User
與Password
通過HTTP GET的方式發送給伺服器,如果WebSocket認證成功,伺服器會給客戶端反饋一個會話ID,客戶端使用會話ID作為參數可發起WebSocket連線。當Session
中的Enabled
設定為True
時使用此認證方式。URL:客戶端將使用者名稱
User
與密碼Password
作為參數傳遞給伺服器來打開WebSocket連線。當URL
中的Enabled
設定為True
時使用此認證方式。Basic:客戶端將使用者名稱
User
與密碼Password
置於HTTP請求頭中,使用基本認證的方式實現認證。當Basic
中的Enabled
設定為True
時使用此認證方式。Token: 使用令牌的方式進行認證,在發送時將令牌置於請求頭中進行發送。當
Token
中的Enabled
設定為True
時使用此認證方式。
# 12.1.3. HeartBeat
用於設定心跳連線的相關選項,當其中的 Enabled
屬性設定為 True
時,系統會每隔固定時向伺服器發送心跳包以保持客戶端的連線。
- Interval:設定心跳包發送的間隔時長。
- Timeout:設定發送心跳包的反饋的超時時間。
# 12.1.4. Host
設定WebSocket伺服器的IP地址或域名。
# 12.1.5. LoadBalancer
設定負載均衡的相關選項。當 Enabled
選項設定為 True
時,表示目前客戶端連線至一個負載均衡伺服器用以廣播訊息並獲取伺服器相關的資訊。
- Host:負載均衡伺服器的主機地址。
- Port:負載均衡伺服器的埠號。
- Servers:手動設定WebSocket Servers進行連線(如果不使用Load Balancer Server獲取伺服器連線方式)。
# 12.1.6. LogFile
在Debug模式下使用,用於輸出除錯日誌。
- Enabled:設定是否啟用日誌檔案。
- FileName:設定顯示的日誌文字名稱。
# 12.1.7. NotifyEvents
設定WebSocket事件的通知方式。
- neAsynchronous:這是預設模式,在非同步模式下通知執行緒事件,將事件新增到與主執行緒非同步同步的佇列中。
- neSynchronous:如果選擇該模式,在同步模式下通知執行緒事件,需要與主執行緒同步來通知這些事件。
- nwNoSync:不與主執行緒同步,如果需要訪問非執行緒安全的控制元件,則需要實現自己的同步方法。
# 12.1.8. Options
設定在連線階段使用自定義的請求頭。
CleanDisconnect:如果啟用,每次客戶端與伺服器斷開連線時,首先發送訊息通知伺服器連線將被關閉。
FragmentedMessages:允許處理碎片訊息
- frgOnlyBuffer:訊息被緩衝,直到收到所有數據,它引發 OnBinary 或 OnMessage 事件(預設選項)
- frgOnlyFragmented:每次收到新的分片時,都會引發 OnFragmented 事件。
- frgAll:每次接收到一個新的分片時,它會引發 OnFragmented 事件,其中包含從第一個數據包收到的所有數據。 當收到所有數據時,它會引發 OnBinary 或 OnMessage 事件。
Origin:自定義連線原點。
Parameters:定義 GET 上使用的參數。
RaiseDisconnectExceptions:預設啟用,每次因協議錯誤斷開連線時引發異常。
ValidateUTF8:如果啟用,則驗證訊息是否包含 UTF8 有效字元,預設情況下禁用。
# 12.1.9. Port
設定連線的埠。
# 12.1.10. Proxy
設定是否使用代理伺服器,如需要使用,設定 Enabled
為 True
,填寫代理伺服器的地址,埠號,使用者名稱與密碼,並設定代理伺服器的連線型別 proxyType
。
- pxyHTTP:HTTP的代理伺服器。
- pxySocks4:Socks4的代理伺服器。
- pxySocks4A:Socks4A的代理伺服器。
- pxySocks5:Socks5的代理伺服器。
# 12.1.11. QueueOptions
該屬性允許在內部佇列中排隊訊息(而不是直接發送)並在連線執行緒的上下文中發送訊息,這可以防止多個執行緒嘗試發送訊息時發生鎖定。 對於每種訊息型別:可以配置文字(Text)、二進制(Binary)或 Ping 佇列,預設情況下設定的值是 qmNone,這意味著訊息不排隊。 其他型別,表示不同的佇列級別,它們之間的區別只是處理的順序(首先處理 qmLevel1,然後是 qmLevel2,最後是 qmLevel3)。
示例:如果Text和Binary訊息的屬性設定為 qmLevel2 並且 Ping 設定為 qmLevel1。 客戶端將首先處理 Ping 訊息(因此,如果它們同時排隊,則 Ping 訊息比 Text 或 Binary 先發送),然後在同一佇列中處理 Text 和 Binary 訊息。
# 12.1.12. Throttle
用於限制每秒接收發送的數據速率。設定 Enabled
表示為啟用功能,在 BitsPerSec
中設定速率。
# 12.1.13. TLS
是否啟用安全連線。
# 12.1.14. TLSOptions
如果TLS選項啟用,以下可進行TLS選項的自定義設定。
- ALPNProtocols:將發送到伺服器的 ALPN 協議列表。
- CertFile:證書檔案的路徑。
- IOHandler:選擇使用哪個庫來使用 TLS 進行連線。
- iohOpenSSL:使用 OpenSSL 庫,是 Indy 元件的預設設定。需要部署openssl庫(可以從註冊客戶的私人帳戶下載)。
- iohSChannel:使用 Microsoft 為 Windows 實現的安全協議 Secure Channel,不需要部署 openssl 庫。僅適用於 Windows 32/64 位。
- KeyFile:證書金鑰檔案的路徑。
- RootCertFile:根證書檔案的路徑。
- Password:如果證書使用密碼保護,請在此處設定。
- VerifyCertificate:如果必須驗證證書,則啟用此屬性。
- VerifyDepth:是一個整數屬性,表示對 X.509 證書執行驗證時允許的最大鏈接數。
- Version:預設情況下協商所有可能的 TLS 版本,從新到低。可以選擇特定的 TLS 版本。
- tlsUndefined:這是預設值,客戶端將嘗試協商所有可能的 TLS 版本(從最新到最舊),直到連線成功。
- tls1_0:實現 TLS 1.0
- tls1_1:實現 TLS 1.1
- tls1_2:實現 TLS 1.2
- tls1_3:實現 TLS 1.3
- OpenSSL_Options:openSSL 庫的配置。
- APIVersion:允許定義將使用哪個 OpenSSL API。
- oslAPI_1_0:使用 API 1.0 OpenSSL,Indy 最新支援
- oslAPI_1_1:使用 API 1.1 OpenSSL,需要我們的自定義 Indy 庫並允許使用 OpenSSL 1.1.1 庫(支援 TLS 1.3)。
- oslAPI_3_0:使用 API 3.0 OpenSSL,需要我們的自定義 Indy 庫並允許使用 OpenSSL 3.0.0 庫(支援 TLS 1.3)。
- APIVersion:允許定義將使用哪個 OpenSSL API。
# 12.1.15. WatchDog
當此項啟用時,如果檢測到連線意外斷開,則會自動嘗試進行重新連線。
- Interval:檢測的時間間隔。
- Attempt:嘗試的最大次數,如果設定為0,表示會進行無限次數的連線。
# 12.2. 事件
事件名稱 | 觸發條件 |
---|---|
OnBeforeHeartBeat | 如果啟用了 HeartBeat,則允許實現自定義 HeartBeat 設定 Handled 參數為 True(這意味著不會發送標準 websocket ping) |
OnBinaryExt | 當每次向伺服器發送二進制訊息時,會觸發此事件 |
OnConnect | 當建立 WebSocket 連線時,會觸發此事件 |
OnDisConnect | 當 WebSocket 連線斷開時,會觸發此事件 |
OnError | 每次出現 WebSocket 錯誤(如格式錯誤的握手)時,都會觸發此事件 |
OnException | 每次發生異常時,都會觸發此事件 |
OnFragmented | 當接收到來自訊息的片段時(僅在 Options.FragmentedMessages = frgAll 或 frgOnlyFragmented 時觸發) |
OnHandShake | 在客戶端評估握手時觸發此事件 |
OnMessage | 每次伺服器發送訊息時,觸發該事件 |
OnSSLVerifyPeer | 如果啟用了驗證證書,在這種情況下您可以驗證伺服器證書是否有效並接受與否 |
# 12.3. 方法
# 12.3.1. Connect
function Connect(aTimeout:Integer): Boolean;
向伺服器發起連線。
# 12.3.2. DisConnect
function Disconnect(aTimeout:Integer): Boolean;
從伺服器斷開連線。
# 12.3.3. WriteString
procedure WriteString(aText: String);
向伺服器發送文字訊息。
fxWebSocketClient1.WriteString('{"action":"login","sid":"pintoo"}');
# 12.3.4. WriteStream
procedure WriteString(aStream: TStream);
向伺服器發送二進制內容訊息。
# 12.3.5. Ping
procedure ping(aText:String);
向伺服器發送一個測試包,如果出現連線超時而沒有接收到訊息,則會關閉連線。
# 12.3.6. Start
procedure Start;
使用第二執行緒來連線伺服器,這樣可以避免連線過程中的應用凍結。
# 12.3.7. Stop
procedure Stop;
使用第二執行緒來斷開伺服器連線,這樣可以避免斷開連線過程中的應用凍結。
# 13. TfxWebSocketServer
此元件將作為WebSocket伺服器控制元件,用於轉發WebSocket訊息。
# 13.1. 屬性
# 13.1.1. Active
設定是否啟用伺服器。
# 13.1.2. Authentication
如果此項的 Enabled
設定為 True
,則啟用連線認證。
- Authusers:設定認證的使用者列表,每行的使用者認證資訊請按照以下方式進行填寫:
user=password
。 - AllowNonAuth:設定是否運行不使用認證。
- Basic:設定是否使用為Basic認證。僅適用於伺服器與客戶端的 Websockets 和 HTTP 請求(客戶端 Web 瀏覽器不支援此類身份驗證)。
- Session:客戶端需要做一個 HTTP GET 傳遞使用者名稱和密碼,如果經過身份驗證,伺服器響應一個會話 ID。 使用此會話 ID,客戶端打開作為參數傳遞的 WebSocket 連線。
- URL:客戶端打開 Websocket 連線,將使用者名稱和密碼作為參數傳遞。
# 13.1.3. Bindings
用於配置管理服務繫結的IP地址與埠號。可使用此方式來管理繫結用於外部或內部訪問的埠資訊。
# 13.1.4. Extensions
您可以對發送的訊息啟用壓縮(如果客戶端不支援壓縮,則訊息將自動交換而無需壓縮)。
# 13.1.5. FallBack
如果瀏覽器本身不支援 WebSockets 協議,您可以啟用以下回退:
- Flash:如果啟用,如果瀏覽器沒有原生 WebSocket 實現並且啟用了 Flash,它使用 Flash 作為傳輸。
- ServerSentEvents:如果啟用,則允許從伺服器向瀏覽器客戶端發送推送通知。
- Retry:嘗試重新連線到伺服器的時間間隔(以秒為單位)(預設為 3)。
# 13.1.6. HeartBeat
用於設定心跳連線的相關選項,當其中的 Enabled
屬性設定為 True
時,系統會每隔固定時向客戶端發送心跳包以保持客戶端的連線。
- Interval:設定心跳包發送的間隔時長。
- Timeout:設定發送心跳包的反饋的超時時間。
# 13.1.7. HTTP2Options
預設情況下未啟用 HTTP/2 協議,它使用 HTTP 1.1 來處理 HTTP 請求。如果您想在客戶端支援的情況下使用 HTTP/2 協議,則啟用此屬性。
- Enabled:如果設定為
true
,則支援 HTTP/2 協議。如果客戶端不支援 HTTP/2,將使用 HTTP 1.1 作為後備。 - Settings:指定要發送至HTTP/2 伺服器的頭值。
- EnablePush:預設選項為
True
,設定此項可用於避免伺服器向客戶端推送內容。 - HeaderTableSize:允許發送方通知遠端端點用於解碼頭塊的頭壓縮表的最大大小,以八位位元組為單位。編碼器可以通過使用特定於標頭塊內的標頭壓縮格式的信令來選擇等於或小於此值的任何大小。初始值為 4,096 個八位位元組。
- InitialWindowSize:設定發送者的初始視窗大小(以八位位元組為單位),用於流級流量控制。初始值為 65,535 個位元組。此設定影響所有流的視窗大小。
- MaxConcurrentStreams:設定發送方允許的最大併發流數。這個限制是有方向的:它適用於發送者允許接收者建立的流的數量。預設未設定限制。
- MaxFrameSize:表示發送方願意接收的最大幀有效載荷的大小,以八位位元組為單位。初始值為 16,384 個八位位元組。
- MaxHeaderListSize:設定通知對等方發送方準備接受的標頭列表的最大大小(以八位位元組為單位)。該值基於頭欄位的未壓縮大小,包括以八位位元組為單位的名稱和值的長度以及每個標頭欄位的 32 個八位位元組的開銷。
- EnablePush:預設選項為
# 13.1.8. IOHandlerOptions
預設使用普通的 Indy Handler(每個連線都運行在自己的執行緒中)。
- iohDefault:預設indy IOHandler,每個新連線建立一個新執行緒。
- iohIOCP:僅適用於 windows 並且需要自定義 indy 版本,執行緒池處理所有連線。
# 13.1.9. LoadBalancer
連線到負載均衡伺服器以廣播訊息併發送有關伺服器的資訊。
- AutoRegisterBindings:如果啟用,則自動將伺服器繫結發送到負載平衡器伺服器。
- AutoRestart:負載平衡器伺服器連線斷開並嘗試重新連線后等待的時間(以秒為單位); 零表示不重新啟動(預設情況下);
- Bindings:可以設定發送到負載均衡伺服器的手動繫結,例如:
WS://127.0.0.1:80
或者WSS://127.0.0.2:8888
。 - Enabled:如果啟用,它將連線到負載均衡伺服器。
- Guid:用於對負載平衡伺服器進行標識。
- Host:負載均衡伺服器主機的地址。
- Port:負載均衡伺服器的埠。
# 13.1.10. LogFile
在Debug模式下使用,用於輸出除錯日誌。
- Enabled:設定是否啟用日誌檔案。
- FileName:設定顯示的日誌文字名稱。
# 13.1.11. MaxConnections
設定允許的最大連線數(如果設定為零,則表示為無限制)。
# 13.1.12. NotifyEvents
設定WebSocket事件的通知方式。
- neAsynchronous:這是預設模式,在非同步模式下通知執行緒事件,將事件新增到與主執行緒非同步同步的佇列中。
- neSynchronous:如果選擇該模式,在同步模式下通知執行緒事件,需要與主執行緒同步來通知這些事件。
- nwNoSync:不與主執行緒同步,如果需要訪問非執行緒安全的控制元件,則需要實現自己的同步方法。
# 13.1.13. Options
設定在連線階段使用自定義的請求頭。
CleanDisconnect:如果啟用,每次客戶端與伺服器斷開連線時,首先發送訊息通知伺服器連線將被關閉。
FragmentedMessages:允許處理碎片訊息
- frgOnlyBuffer:訊息被緩衝,直到收到所有數據,它引發 OnBinary 或 OnMessage 事件(預設選項)
- frgOnlyFragmented:每次收到新的分片時,都會引發 OnFragmented 事件。
- frgAll:每次接收到一個新的分片時,它會引發 OnFragmented 事件,其中包含從第一個數據包收到的所有數據。 當收到所有數據時,它會引發 OnBinary 或 OnMessage 事件。
HTMLFiles:如果此項啟用,可允許請求瀏覽器測試功能。地址格式為 http://host:port/sgcWebSockets.html (opens new window)。
JavaScriptFiles:如果此項啟用,可允許呼叫內建的JavaScript庫。
RaiseDisconnectExceptions:預設啟用,每次因協議錯誤斷開連線時引發異常。
ReadTimeOut:檢查socket連線是否有數據的時間,預設10毫秒。
ValidateUTF8:如果啟用,則驗證訊息是否包含 UTF8 有效字元,預設情況下禁用。
WriteTimeOut:向其他對等方發送數據的最大時間(以毫秒為單位),預設為 0(僅適用於 Windows 操作系統)。
# 13.1.14. Port
設定監聽的埠號。
# 13.1.15. QueueOptions
該屬性允許在內部佇列中排隊訊息(而不是直接發送)並在連線執行緒的上下文中發送訊息,這可以防止多個執行緒嘗試發送訊息時發生鎖定。 對於每種訊息型別:可以配置文字(Text)、二進制(Binary)或 Ping 佇列,預設情況下設定的值是 qmNone,這意味著訊息不排隊。 其他型別,表示不同的佇列級別,它們之間的區別只是處理的順序(首先處理 qmLevel1,然後是 qmLevel2,最後是 qmLevel3)。
示例:如果Text和Binary訊息的屬性設定為 qmLevel2 並且 Ping 設定為 qmLevel1。 客戶端將首先處理 Ping 訊息(因此,如果它們同時排隊,則 Ping 訊息比 Text 或 Binary 先發送),然後在同一佇列中處理 Text 和 Binary 訊息。
# 13.1.16. SecurityOptions
設定安全相關的選項。
- OriginsAllowed:在此處定義允許哪些來源(預設情況下接受來自所有來源的連線),如果來源不在列表中,則關閉連線。比如:
- 允許IP 127.0.0.1 和埠 5555 的所有連線。OriginsAllowed = "http://127.0.0.1:5555"
- 允IP 127.0.0.1 和所有埠的所有連線。 OriginsAllowed = "http://127.0.0.1:*"
- 允許來自任何 IP 的所有連線。 OriginsAllowed = ""
# 13.1.17. SSL
是否啟用SSL安全連線。
# 13.1.18. SSLOptions
用於設定SSL的屬性:證書,檔名稱,密碼等。
- CertFile:證書檔案的路徑。
- KeyFile:證書金鑰檔案的路徑。
- RootCertFile:根證書檔案的路徑。
- Password:如果證書使用密碼保護,請在此處設定。
- VerifyCertificate:如果必須驗證證書,則啟用此屬性。
- VerifyDepth:是一個整數屬性,表示對 X.509 證書執行驗證時允許的最大鏈接數。
- Version:預設情況下協商所有可能的 TLS 版本,從新到低。可以選擇特定的 TLS 版本。
- tlsUndefined:這是預設值,客戶端將嘗試協商所有可能的 TLS 版本(從最新到最舊),直到連線成功。
- tls1_0:實現 TLS 1.0
- tls1_1:實現 TLS 1.1
- tls1_2:實現 TLS 1.2
- tls1_3:實現 TLS 1.3
- OpenSSL_Options:openSSL 庫的配置。
- APIVersion:允許定義將使用哪個 OpenSSL API。
- oslAPI_1_0:使用 API 1.0 OpenSSL,Indy 最新支援
- oslAPI_1_1:使用 API 1.1 OpenSSL,需要我們的自定義 Indy 庫並允許使用 OpenSSL 1.1.1 庫(支援 TLS 1.3)。
- oslAPI_3_0:使用 API 3.0 OpenSSL,需要我們的自定義 Indy 庫並允許使用 OpenSSL 3.0.0 庫(支援 TLS 1.3)。
- APIVersion:允許定義將使用哪個 OpenSSL API。
- ECDHE:如果啟用,則使用 ECDHE 而不是 RSA 作為金鑰交換。 如果您使用 OpenSSL 1.0.2,建議啟用 ECDHE。
# 13.1.19. WatchDog
當此項啟用時,如果檢測到連線意外斷開,則會自動嘗試進行重新連線。
- Interval:檢測的時間間隔。
- Attempt:嘗試的最大次數,如果設定為0,表示會進行無限次數的連線。
# 13.2. 事件
事件名稱 | 觸發條件 |
---|---|
OnConnect | 每次建立 WebSocket 連線時,都會觸發此事件 |
OnDisConnect | 每次斷開 WebSocket 連線時,都會觸發此事件 |
OnError | 每次出現 WebSocket 錯誤(如格式錯誤的握手)時,都會觸發此事件 |
OnMessage | 每次客戶端發送文字訊息並被伺服器接收時,都會觸發此事件 |
OnBinaryExt | 每次客戶端發送二進制訊息並被伺服器接收時,都會觸發此事件 |
OnHandShake | 在伺服器端評估握手后觸發此事件 |
OnException | 每次發生異常時,都會觸發此事件 |
OnAuthentication | 如果啟用了身份驗證,則觸發此事件。您可以檢查客戶端傳遞的使用者和密碼,並啟用/禁用 Authenticated Variable |
OnUnknownProtocol | 如果未檢測到 WebSocket 協議(例如,因為客戶端使用純 TCP 協議),在這種情況下可以接受或拒絕連線 |
OnStartup | 在伺服器啟動后觸發事件 |
OnShutdown | 在伺服器停止后觸發 |
OnTCPConnect | 公共事件,在 TCP 連線之後和 Websocket 握手之前呼叫。當您的伺服器接受純 TCP 連線時很有用(因為 OnConnect 事件僅在客戶端發送第一條訊息后觸發) |
OnBeforeHeartBeat | 如果啟用了 HeartBeat,則允許實現自定義 HeartBeat 設定 Handled 參數為 True(這意味著不會發送標準 websocket ping) |
# 13.3. 方法
# 13.3.1. WriteString
procedure WriteString(aGuid,aText: String);
向客戶端發送文字訊息。
fxWebSocketServer1.WriteString(Guid,'{"action":"login","sid":"pintoo"}');
# 13.3.2. WriteStream
procedure WriteString(aGuid: String; aStream: TStream);
向伺服器發送二進制內容訊息。