愛招飛幫助手冊 愛招飛幫助手冊
  • FastERP-1
  • Smart
  • PinToo
  • FastWeb
  • FastERP-2 企業管理系統 (opens new window)
  • 印染業ERP (opens new window)
  • 工廠終端機 (opens new window)
  • TARS
  • MARS
  • TaskRunner
  • Flying
  • FastDesk
  • HiDesk
  • HiNAT
  • FastBPM
  • 設備故障診斷 (opens new window)
  • 設備最佳運轉效益 (opens new window)
  • 企業智能助手SmeGPT (opens new window)
  • 燈號管理 (opens new window)
  • 戰情室 (opens new window)
  • 能源管理 (opens new window)
  • 人車定位 (opens new window)
  • 戰情指揮系統 (opens new window)
  • FastERP-1
  • FastWeb
  • Smart
  • PinToo
  • Flying
  • TARS
  • 通用功能

    • Report
    • Script
    • Echarts
    • Chart
    • DB Install
  • FastERP-1
  • Smart
  • PinToo
  • FastWeb
  • FastERP-2 企業管理系統 (opens new window)
  • 印染業ERP (opens new window)
  • 工廠終端機 (opens new window)
  • TARS
  • MARS
  • TaskRunner
  • Flying
  • FastDesk
  • HiDesk
  • HiNAT
  • FastBPM
  • 設備故障診斷 (opens new window)
  • 設備最佳運轉效益 (opens new window)
  • 企業智能助手SmeGPT (opens new window)
  • 燈號管理 (opens new window)
  • 戰情室 (opens new window)
  • 能源管理 (opens new window)
  • 人車定位 (opens new window)
  • 戰情指揮系統 (opens new window)
  • FastERP-1
  • FastWeb
  • Smart
  • PinToo
  • Flying
  • TARS
  • 通用功能

    • Report
    • Script
    • Echarts
    • Chart
    • DB Install
  • PinToo幫助主頁
  • 學習手冊

    • 基本入門

    • 功能介紹

    • 控制元件說明

      • 公共屬性
      • 標準控制元件
      • 系統控制元件
      • 附加控制元件
      • 佈局控制元件
      • 形狀控制元件
      • 數據控制控制元件
      • 手勢控制元件
      • 儀表盤控制元件
      • 快速設計控制元件
      • 多媒體控制元件
      • 物聯網控制元件
        • 1. TfxModBusTCP
          • 1.1. 屬性(Properties)
          • 1.1.1. Host屬性
          • 1.1.2. Port屬性
          • 1.2. 11.4.2.事件(Events)
          • 1.2.1. OnConnected事件
          • 1.2.2. OnDisconnected事件
          • 1.3. 方法(Methods)
          • 1.3.1. Connect方法
          • 1.3.2. ReadCoil方法
          • 1.3.3. ReadCoils方法
          • 1.3.4. ReadHoldingRegister方法
          • 1.3.5. ReadHoldingRegisters方法
          • 1.3.6. ReadInputRegister方法
          • 1.3.7. WriteCoil方法
          • 1.3.8. WriteCoils方法
          • 1.3.9. WriteRegister方法
          • 1.3.10. WriteRegisters方法
        • 2. TfxModbusRead
          • 2.1. 屬性(Properties)
          • 2.1.1. DataControl屬性
          • 2.1.2. DataField屬性
          • 2.1.3. DataLower屬性
          • 2.1.4. DataType屬性
          • 2.1.5. DataUpper屬性
          • 2.1.6. DataValue屬性
          • 2.1.7. Enabled屬性
          • 2.1.8. FuntionCode屬性
          • 2.1.9. Host屬性
          • 2.1.10. Interval屬性
          • 2.1.11. LowerWarning屬性
          • 2.1.12. Offset屬性
          • 2.1.13. Port屬性
          • 2.1.14. RegCount屬性
          • 2.1.15. Script屬性
          • 2.1.16. Site屬性
          • 2.1.17. StartReg屬性
          • 2.1.18. UpperWarning屬性
          • 2.2. 方法(Methods)
          • 2.2.1. GetRegValues方法
          • 2.2.2. GetBitValues方法
          • 2.2.3. SetPropValue方法
          • 2.2.4. GetPropValue方法
        • 3. TfxModbusWrite
          • 3.1. 屬性(Properties)
          • 3.1.1. DataControl屬性
          • 3.1.2. DataField屬性
          • 3.1.3. DataLower屬性
          • 3.1.4. DataType屬性
          • 3.1.5. DataUpper屬性
          • 3.1.6. DataValue屬性
          • 3.1.7. FuntionCode屬性
          • 3.1.8. Host屬性
          • 3.1.9. LowerWarning屬性
          • 3.1.10. Port屬性
          • 3.1.11. RegCount屬性
          • 3.1.12. Site屬性
          • 3.1.13. StartReg屬性
          • 3.1.14. UpperWarning屬性
          • 3.2. 方法(Methods)
          • 3.2.1. execute方法
        • 4. TfxModBusRTU
          • 4.1. 屬性(Properties)
          • 4.2. 方法(Methods)
          • 4.2.1. ReadCoils方法
          • 4.2.2. ReadDiscreteInputs方法
          • 4.2.3. ReadHoldingRegisters方法
          • 4.2.4. ReadInputRegisters方法
          • 4.2.5. WriteSingleCoil方法
          • 4.2.6. WriteMultipleCoils方法
          • 4.2.7. WritSingleRegister方法
          • 4.2.8. WriteMultipleRegisters方法
          • 4.3. 事件
          • 4.3.1. OnReadCoils事件
          • 4.3.2. OnReadDiscreteInputs事件
          • 4.3.3. OnReadHoldingRegisters事件
          • 4.3.4. OnReadHoldingRegisters事件
        • 5. TfxMQTTClient
          • 5.1. 屬性(Properties)
          • 5.2. 事件(Events)
          • 5.2.1. OnConnectedStatusChanged事件
          • 5.2.2. OnPublishReceivedANSI事件
          • 5.2.3. OnPublishReceivedUTF8事件
          • 5.3. 方法(Methods)
          • 5.3.1. Connect方法
          • 5.3.2. Disconnect方法
          • 5.3.3. IsConnected方法
          • 5.3.4. Subscribe方法
          • 5.3.5. Publish方法
          • 5.3.6. Unsubscribe方法
        • 6. TfxOPCUAClient
        • 7. TfxOPCDAClient
        • 8. TfxComPort
          • 8.1. 屬性
          • 8.1.1. DataBits 屬性
          • 8.1.2. Parity 屬性
          • 8.1.3. StopBits 屬性
          • 8.2. 事件
        • 9. TfxUsbSerial
          • 9.1. 屬性
          • 9.1.1. Devices 屬性
          • 9.1.2. Info 屬性
          • 9.1.3. UsbDevice 屬性
          • 9.1.4. UsbSerialType 屬性
          • 9.2. 方法(Methods)
          • 9.2.1. RefreshDevices方法
          • 9.2.2. Open方法
          • 9.2.3. Close方法
          • 9.2.4. Close方法
          • 9.2.5. WriteByte方法
          • 9.2.6. WriteStrToBytes方法
          • 9.2.7. ReadCoils方法
          • 9.2.8. ReadDiscreteInputs方法
          • 9.2.9. ReadHoldingRegisters方法
          • 9.2.10. ReadInputRegisters方法
          • 9.2.11. WriteSingleCoil方法
          • 9.2.12. WriteMultipleCoils方法
          • 9.2.13. WritSingleRegister方法
          • 9.2.14. WriteMultipleRegisters方法
          • 9.3. 事件
          • 9.3.1. OnReceiveData事件
          • 9.3.2. OnReadCoils事件
          • 9.3.3. OnReadDiscreteInputs事件
          • 9.3.4. OnReadHoldingRegisters事件
          • 9.3.5. OnReadHoldingRegisters事件
        • 10. TfxMeter
          • 10.1. 屬性
          • 10.1.1. DataBits 屬性
          • 10.1.2. Parity 屬性
          • 10.1.3. StopBits 屬性
          • 10.1.4. MeterList 屬性
          • 10.1.4.1. 屬性
          • 10.1.4.2. Data屬性
          • 10.1.4.3. MeterType屬性
          • 10.1.5. Interval 屬性
          • 10.1.6. Enabled 屬性
          • 10.2. 事件
          • 10.2.1. ReceiveData 事件
        • 11. TfxRestAPI
          • 11.1. 屬性
          • 11.1.1. Body
          • 11.1.2. ContentType
          • 11.1.3. Headers
          • 11.1.4. Method
          • 11.1.5. Params
          • 11.1.6. Script
          • 11.1.7. Server
          • 11.1.8. Url
          • 11.2. 事件
          • 11.2.1. ResultData
          • 11.3. 方法
          • 11.3.1. Send
        • 12. fxWebSocketClient
          • 12.1. 屬性
          • 12.1.1. Active
          • 12.1.2. Authentication
          • 12.1.3. HeartBeat
          • 12.1.4. Host
          • 12.1.5. LoadBalancer
          • 12.1.6. LogFile
          • 12.1.7. NotifyEvents
          • 12.1.8. Options
          • 12.1.9. Port
          • 12.1.10. Proxy
          • 12.1.11. QueueOptions
          • 12.1.12. Throttle
          • 12.1.13. TLS
          • 12.1.14. TLSOptions
          • 12.1.15. WatchDog
          • 12.2. 事件
          • 12.3. 方法
          • 12.3.1. Connect
          • 12.3.2. DisConnect
          • 12.3.3. WriteString
          • 12.3.4. WriteStream
          • 12.3.5. Ping
          • 12.3.6. Start
          • 12.3.7. Stop
        • 13. TfxWebSocketServer
          • 13.1. 屬性
          • 13.1.1. Active
          • 13.1.2. Authentication
          • 13.1.3. Bindings
          • 13.1.4. Extensions
          • 13.1.5. FallBack
          • 13.1.6. HeartBeat
          • 13.1.7. HTTP2Options
          • 13.1.8. IOHandlerOptions
          • 13.1.9. LoadBalancer
          • 13.1.10. LogFile
          • 13.1.11. MaxConnections
          • 13.1.12. NotifyEvents
          • 13.1.13. Options
          • 13.1.14. Port
          • 13.1.15. QueueOptions
          • 13.1.16. SecurityOptions
          • 13.1.17. SSL
          • 13.1.18. SSLOptions
          • 13.1.19. WatchDog
          • 13.2. 事件
          • 13.3. 方法
          • 13.3.1. WriteString
          • 13.3.2. WriteStream
      • 地圖控制元件
      • 數據表格控制元件
      • 特效控制元件
      • 動畫控制元件
      • SVG控制元件
      • IsoBean控制元件
    • 功能用法

    • 專用模板

    • 開發流程

    • 函式程式

  • 開發手冊

目录

物聯網控制元件

# PinToo控制元件使用(物聯網控制)

  物聯網控制控制元件中包含了常用了物聯網通訊控制的控制元件。

# 1. TfxModBusTCP

  • 引用單元 uModBusTCP

  一個ModbusTCP客戶端元件。

  您可以用TfxModbusTCP元件實現支援ModbusTCP協議的設備的控制和數據採集。

# 1.1. 屬性(Properties)

  • TfxModbusTCP元件主要屬性
屬性 功能說明
Host 指定一個Modbus設備的IP地址
Port 指定一個Modbus設備的埠號

# 1.1.1. Host屬性

property Host: string;
1

  Host是指ModbusTCP設備的IP地址。如:192.168.1.100。

fxModbusTCP1.Host := '192.168.1.100';
1

# 1.1.2. Port屬性

property Port: Word;
1

  Port是指ModbusTCP設備的埠號。預設502。

fxModbusTCP1.Port := 502;
1

# 1.2. 11.4.2.事件(Events)

  • TfxModbusTCP元件主要事件
事件 何時觸發
OnConnected 當設備連線成功時觸發
OnDisconnected 當設備斷開時觸發

# 1.2.1. OnConnected事件

  當ModbusTCP設備連線成功時,觸發該事件。

  fxMemo1.Lines.Add('Connect 連線成功!')
1

# 1.2.2. OnDisconnected事件

  當ModbusTCP設備斷開時,觸發該事件。

  fxMemo1.Lines.Add('Disconnect 斷開成功!')
1

# 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;
1

  連線設備。

fxModbusTCP1.Connect;
1

# 1.3.2. ReadCoil方法

function ReadCoil(const RegNo: Word; out Value: Boolean): Boolean;
1

  讀取單個數位訊號輸出。

//讀取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;
1
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;
1

  讀取多個DO數位訊號輸出。

var
  v:string;
begin
    fxModbusTCP1.ReadCoils(1,2,v);
end;
1
2
3
4
5

# 1.3.4. ReadHoldingRegister方法

function ReadHoldingRegister(const RegNo: Word; out Value: Word): Boolean;
1

  讀取單個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;
1
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;
1

  讀取多個AO類比訊號輸出。

說明: 讀取多個AO數位訊號輸出。

**返回值:**Boolean字元型。

  • ReadHoldingRegisters函式語法中各部分說明
部分 說明
RegNo 開始位址
Blocks 資料長度
  • 示例
var
    v:String;
Begin
   fxModbusTCP1.ReadHoldingRegisters(1,4,v);
End;
1
2
3
4
5

# 1.3.6. ReadInputRegister方法

function ReadInputRegister(const RegNo: Word; out Value: Word): Boolean;
1

  讀取單個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;
1
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;
1

  控制單個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;
1
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;
1

  控制多個DO數位訊號輸出。

var
  v:boolean;
  RegisterData:string;
begin
    RegisterData := '1,0';1代表True,0代表False
    v := fxModbusTCP1.WriteCoils(1,2,'1,0');
end;
1
2
3
4
5
6
7

# 1.3.9. WriteRegister方法

function WriteRegister(const RegNo: Word; const Value: Word): Boolean;
1

  寫入單個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;
1
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;
1

  寫入多個DO類比訊號輸出。

var
  v:boolean;
  RegisterData:string;
begin
    RegisterData := '1,0'
    v := fxModbusTCP1.WriteRegisters(1,2,'1,0');
end;
1
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;
1

   DataControl屬性是指需要將採集之數據顯示在某個元件上時,這個元件的名稱。

# 2.1.2. DataField屬性

property DataField: string read FDataField write SetDataField;
1

   DataField屬性是指需要將採集之數據顯示在某個元件上時,這個元件的屬性名稱。

# 2.1.3. DataLower屬性

property DataLower: Double read FDataLower write SetDataLower;
1

   DataLower屬性是指數據下限值,當採集之數據低於下限值時,啟動報警或異常。

# 2.1.4. DataType屬性

property DataType: TDataType read FDataType write SetDataType;
1

   DataType屬性是指採集之數據的數據型別。例如:* dtBoolean -- 布爾型別, dtInt --整數型別。

# 2.1.5. DataUpper屬性

property DataUpper: Double read FDataUpper write SetDataUpper;
1

   DataLower屬性是指數據上限值,當採集之數據超過上限值時,啟動報警或異常。

# 2.1.6. DataValue屬性

property DataValue: Double read FDataValue write FDataValue;
1

   DataValue屬性指採集之數據存放處。

# 2.1.7. Enabled屬性

property Enabled: boolean read FEnabled write SetEnabled;
1

   當Enabled設定為True時,表示啟動定時採集執行緒,可設定Interval屬性值改變採集頻率。

# 2.1.8. FuntionCode屬性

property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
1

   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;
1

   Host屬性是指ModbusTCP設備的地址,如:192.168.1.100。

# 2.1.10. Interval屬性

property Interval: Integer read FInterval write SetInterval;
1

   Interval屬性是指採集執行緒的頻率,預設1000毫秒。

# 2.1.11. LowerWarning屬性

property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
1

   UpperWarning屬性是指數據下限異常型別,目前有:lw1,lw2,lw3,lw4,lwNote。

# 2.1.12. Offset屬性

property Offset: Double read FOffset write SetOffset;
1

   UpperWarning屬性是指數據偏移量。

# 2.1.13. Port屬性

property Port: Integer read FPort write SetPort;
1

   Host屬性是指ModbusTCP設備的埠號,預設502。

# 2.1.14. RegCount屬性

property RegCount: Integer read FRegCount write SetRegCount;
1

   RegCount屬性是指讀取ModbusTCP數據地址的數據長度。

# 2.1.15. Script屬性

property Script: TStrings read FScript write SetScript;
1

  Script屬性是指可通過指令碼對採集之數據進行業務處理,經過業務處理后的值還是儲存于DataValue中。

例如:

begin
 self.DataValue := self.GetRegValues(0) * 0.1;
end.
1
2
3

# 2.1.16. Site屬性

property Site: string read FSite write FSite;
1

   Site屬性是指ModbusTCP設備的站點名稱,可以作為ModbusTCP數據地址的說明之用。

# 2.1.17. StartReg屬性

property StartReg: Integer read FStartReg write SetStartReg;
1

   RegCount屬性是指讀取ModbusTCP數據起始地址。

# 2.1.18. UpperWarning屬性

property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
1

   UpperWarning屬性是指數據上限異常型別,目前有:uw1,uw2,uw3,uw4,uwNote。

# 2.2. 方法(Methods)

  • TfxModbusRead元件主要方法
方法 功能說明
GetRegValues 根據索引號返回陣列中的數值
GetBitValues 根據索引號返回陣列中的數值
SetPropValue 設定元件屬性值
GetPropValue 讀取元件屬性值

# 2.2.1. GetRegValues方法

//儲存類比訊號數據
function GetRegValues(QIndex: Integer): Word;
1
2

  通過GetRegValues方法可獲取ModbusTCP設備返回的陣列中的數據。通過索引號獲取對應的數據。

var
 i:Word;
begin
  //獲取陣列中的第0個數據
  i := fxModbusRead1.GetRegValues(0);
  fxEdit2.Text := IntToStr(i);
end;
1
2
3
4
5
6
7

# 2.2.2. GetBitValues方法

//讀取數位訊號數據
function GetBitValues(QIndex: Integer): boolean;
1
2

  通過GetRegValues方法可獲取ModbusTCP設備返回的陣列中的數據。通過索引號獲取對應的數據。

var
 i:boolean;
begin
  //獲取陣列中的第0個數據
  i := fxModbusRead1.GetBitValues(0);
end;
1
2
3
4
5
6

# 2.2.3. SetPropValue方法

procedure SetPropValue(QControl, QControlProp: string; QValue: Variant);
1

  設定控制元件屬性值,通過SetPropValue方法可以將DataValue賦值給指定控制元件的屬性。

fxModbusRead1.SetPropValue(fxEdit1,Text);
1

# 2.2.4. GetPropValue方法

function GetPropValue(QControl, QControlProp: string): Variant;
1

  設定控制元件屬性值,通過GetPropValue方法可以獲取指定控制元件屬性的值,並返回。

var
 v:String;
Begin
  v := fxModbusRead1.GetPropValue(fxEdit1,Text);
End;

1
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;
1

   DataControl屬性是指需要將寫入之數據顯示在某個元件上時,這個元件的名稱。

# 3.1.2. DataField屬性

property DataField: string read FDataField write SetDataField;
1

   DataField屬性是指需要將寫入之數據顯示在某個元件上時,這個元件的屬性名稱。

# 3.1.3. DataLower屬性

property DataLower: Double read FDataLower write SetDataLower;
1

   DataLower屬性是指數據下限值,當寫入之數據低於下限值時,啟動報警或異常。

# 3.1.4. DataType屬性

property DataType: TDataType read FDataType write SetDataType;
1

   DataType屬性是指寫入之數據的數據型別。例如:* dtBoolean -- 布爾型別, dtInt --整數型別。

# 3.1.5. DataUpper屬性

property DataUpper: Double read FDataUpper write SetDataUpper;
1

   DataLower屬性是指數據上限值,當寫入之數據超過上限值時,啟動報警或異常。

# 3.1.6. DataValue屬性

property DataValue: Double read FDataValue write FDataValue;
1

   DataValue屬性指採寫入數據存放處。

# 3.1.7. FuntionCode屬性

property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
1

   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;
1

   Host屬性是指ModbusTCP設備的地址,如:192.168.1.100。

# 3.1.9. LowerWarning屬性

property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
1

   UpperWarning屬性是指數據下限異常型別,目前有:lw1,lw2,lw3,lw4,lwNote。

# 3.1.10. Port屬性

property Port: Integer read FPort write SetPort;
1

   Host屬性是指ModbusTCP設備的埠號,預設502。

# 3.1.11. RegCount屬性

property RegCount: Integer read FRegCount write SetRegCount;
1

   RegCount屬性是指寫入ModbusTCP數據地址的數據長度。

# 3.1.12. Site屬性

property Site: string read FSite write FSite;
1

   Host屬性是指ModbusTCP設備的站點名稱,可以作為ModbusTCP數據地址的說明之用。

# 3.1.13. StartReg屬性

property StartReg: Integer read FStartReg write SetStartReg;
1

   RegCount屬性是指寫入ModbusTCP數據起始地址。

# 3.1.14. UpperWarning屬性

property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
1

   UpperWarning屬性是指數據上限異常型別,目前有:uw1,uw2,uw3,uw4,uwNote。

# 3.2. 方法(Methods)

  • TfxModbusWrite元件主要方法
方法 功能說明
execute 執行Modbus寫入操作

# 3.2.1. execute方法

procedure execute;
1

  執行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);
1
2
3
4
5
6
7

# 4.2.2. ReadDiscreteInputs方法

//說明: 讀取離散輸入狀態(02)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    RegCount:數據長度
procedure ReadDiscreteInputs(Address, StartReg, RegCount: Word);
1
2
3
4
5
6
7

# 4.2.3. ReadHoldingRegisters方法

//說明: 讀取多個保持型暫存器(03)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    RegCount:數據長度
procedure ReadHoldingRegisters(Address, StartReg, RegCount: Word);
1
2
3
4
5
6
7

# 4.2.4. ReadInputRegisters方法

//說明: 讀取多個輸入暫存器(04)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    RegCount:數據長度
procedure ReadInputRegisters(Address, StartReg, RegCount: Word);
1
2
3
4
5
6
7

# 4.2.5. WriteSingleCoil方法

//說明: 寫入單個線圈狀態(05)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    UserData:數據值
procedure WriteSingleCoil(Address, StartReg: Word;UserData: Integer);
1
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);
1
2
3
4
5
6
7
8

# 4.2.7. WritSingleRegister方法

//說明: 寫入單個保持型暫存器(06)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    UserData:數據值
procedure WritSingleRegister(Address, StartReg: Word; UserData: Word);
1
2
3
4
5
6
7

# 4.2.8. WriteMultipleRegisters方法

//說明: 寫入多個保持型暫存器(16)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    UserData:數據值
procedure WriteMultipleRegisters(Address, StartReg, RegCount: Word; UserData:String);
1
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);
1

# 4.3.2. OnReadDiscreteInputs事件

    Procedure OnReadDiscreteInputs(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
1

# 4.3.3. OnReadHoldingRegisters事件

    Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
1

# 4.3.4. OnReadHoldingRegisters事件

    Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
1

# 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:遺囑訊息

屬性賦值示例

  //MQTTClient屬性賦值
  fxMQTTClientLED.BrokerHostName := edtBrokerHostName.Text;
  fxMQTTClientLED.BrokerPort := StrToInt(edtBrokerProt.Text);
  fxMQTTClientLED.Credentials.Password := edtPassword.Text;
  fxMQTTClientLED.Credentials.Username := edtUsername.Text;
1
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;
1
2
3
4
5
6
7
8
9
10
11

# 5.2.2. OnPublishReceivedANSI事件

Procedure OnPublishReceivedANSI(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
1

  當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;
1
2
3
4
5
6
7
8

# 5.2.3. OnPublishReceivedUTF8事件

Procedure OnPublishReceivedUTF8(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
1

  當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;
1
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);
1
2
3
4

# 5.3.2. Disconnect方法

//說明: 斷開MQTT Broker
//返回值: 無
//參數:無
procedure Disconnect;
1
2
3
4

示例:

  fxMQTTClient1.Disconnect;
1

# 5.3.3. IsConnected方法

//說明: 判斷連線狀態
//返回值: Boolean
//參數:無
function IsConnected: Boolean;
1
2
3
4

示例:

  if fxMQTTClient1.IsConnected then
  begin
      //程式碼片段
  end;
1
2
3
4

# 5.3.4. Subscribe方法

//說明: 訂閱主題
//返回值: 無
//參數:
//    ATopic 主題名稱
//    ATopicQosLevel主題的服務質量級別,預設qosAtMostOnce
//    TTMSMQTTQoS包含:
//    qosAtMostOnce  最多一次交貨
//    qosAtLeastOnce 至少一次交貨
//    qosExactlyOnce 一次交貨
//    qosRESERVED 禁止保留
function Subscribe(ATopic: string; ATopicQosLevel: TTMSMQTTQoS): Word;
1
2
3
4
5
6
7
8
9
10
11

示例:

  fxMQTTClientLED.Subscribe('LED',qosAtMostOnce);
1

# 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;
1
2
3
4
5
6
7
8
9
10
11
12
13

示例:

  fxMQTTClientLED.Publish('LED','1',qosAtMostOnce,false);
1

# 5.3.6. Unsubscribe方法

//說明: 主題退訂
//返回值: Word
//參數:ATopic 主題名稱
function Unsubscribe(ATopic: string): Word;
1
2
3
4

示例:

  fxMQTTClientLED.Unsubscribe('LED');
1

# 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;
1
2
3
4

示例:

  fxUsbSerial.RefreshDevices;
1

# 9.2.2. Open方法

//說明: 打開USB設備連線
//返回值: 無
//參數:無
procedure Open(ASynchronous: Boolean);
1
2
3
4

示例:

  fxUsbSerial.Open(True);
1

# 9.2.3. Close方法

//說明: 關閉USB設備連線
//返回值: 無
//參數:無
procedure Close;
1
2
3
4

示例:

  fxUsbSerial.Clost;
1

# 9.2.4. Close方法

//說明: 關閉USB設備連線
//返回值: 無
//參數:無
procedure Close;
1
2
3
4

示例:

  fxUsbSerial.Close;
1

# 9.2.5. WriteByte方法

//說明: 向設備寫入Byte
//返回值: Integer
//參數:
//    Data:寫入的Byte值
//    Timeout:寫入超時時間(毫秒)
function WriteByte(Data: Byte; Timeout: Integer = 0): Integer;
1
2
3
4
5
6

示例:

  //向電子秤發送R命令,讀取電子秤數值
  fxUsbSerial.WriteByte(Ord('R'));
1
2

# 9.2.6. WriteStrToBytes方法

//說明: 向設備寫入Byte
//返回值: Integer
//參數:
//    AStr:寫入的文字內容
//    AEncoding:編碼型別 (Ansi\UTF8\UTF7|UniCode)
function WriteStrToBytes(AStr: string; AEncoding:string = 'Ansi'): Integer;
1
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;
1
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);
1
2
3
4
5
6
7

# 9.2.8. ReadDiscreteInputs方法

//說明: 讀取離散輸入狀態(02)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    RegCount:數據長度
procedure ReadDiscreteInputs(Address, StartReg, RegCount: Word);
1
2
3
4
5
6
7

# 9.2.9. ReadHoldingRegisters方法

//說明: 讀取多個保持型暫存器(03)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    RegCount:數據長度
procedure ReadHoldingRegisters(Address, StartReg, RegCount: Word);
1
2
3
4
5
6
7

# 9.2.10. ReadInputRegisters方法

//說明: 讀取多個輸入暫存器(04)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    RegCount:數據長度
procedure ReadInputRegisters(Address, StartReg, RegCount: Word);
1
2
3
4
5
6
7

# 9.2.11. WriteSingleCoil方法

//說明: 寫入單個線圈狀態(05)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    UserData:數據值
procedure WriteSingleCoil(Address, StartReg: Word;UserData: Integer);
1
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);
1
2
3
4
5
6
7
8

# 9.2.13. WritSingleRegister方法

//說明: 寫入單個保持型暫存器(06)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    UserData:數據值
procedure WritSingleRegister(Address, StartReg: Word; UserData: Word);
1
2
3
4
5
6
7

# 9.2.14. WriteMultipleRegisters方法

//說明: 寫入多個保持型暫存器(16)
//返回值: 無
//參數:
//    Address:設備地址(1~247)
//    StartReg:起始地址
//    UserData:數據值
procedure WriteMultipleRegisters(Address, StartReg, RegCount: Word; UserData:String);
1
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);
1

# 9.3.2. OnReadCoils事件

    Procedure OnReadCoils(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
1

# 9.3.3. OnReadDiscreteInputs事件

    Procedure OnReadDiscreteInputs(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
1

# 9.3.4. OnReadHoldingRegisters事件

    Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
1

# 9.3.5. OnReadHoldingRegisters事件

    Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
1

# 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;
1
2

# 10.1.6. Enabled 屬性

  指定是否啟動Meter的數據採集。

 //啟動數據採集
 FThis.Meter1.Enabled := true;
1
2

# 10.2. 事件

  • TMeter主要事件
事件 何時觸發
AfterClose 在埠關閉后觸發該事件
AfterOpen 在埠打開后觸發該事件
BeforeClose 在埠關閉前觸發該事件
BeforeOpen 在埠打開前觸發該事件
ReceiveData 數據採集后觸觸發該事件

# 10.2.1. ReceiveData 事件

TReceiveItemDataEvent = procedure(AItem: TMeterItem) of object;
1

  指示儀表數據採集時,將採集到的數據通過該事件上回調數據。

  • 示例
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;
1
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;
1

  設定請求體中的內容,點選屬性右側的按鈕以打開文字編輯框,向其中輸入資訊,通常可在其中輸入格式化的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;
1

  設定請求內容的型別。通常有以下幾種型別:

  • 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;
1

  設定發送請求的請求頭的資訊。

# 11.1.4. Method

property Method: TRequestMethod;
1

  設定請求的發送方式。

  • rmGET:以GET的方式發送請求。
  • rmPOST:以POST的方式發送請求。
  • rmDELETE:以DELETE的方式發送請求。
  • rmPUT:以PUT的方式發送請求。

# 11.1.5. Params

property Params: TStringList;
1

  設定發送的請求中帶有的參數資訊。以key=value的方式設定,每行設定一個。此部分的參數在發送中會使用URL編碼的方式附加在URL後進行發送。

  比如在Params中設定的參數為:

key1=value1
key2= value2
1
2

  請求的地址為http://192.168.1.1/,則在經過URL編碼后請求的地址形式如下:

http://192.168.1.1/?key1=value1&key2=value2
1

  在請求的Rest地址與第一個參數中間使用?分隔,其餘的參數與參數之間使用&進行分隔。

# 11.1.6. Script

property Script: TStringList;
1

  用於設定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}
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12

  如果我們要從中取出auth_token的值,在指令碼資訊中可以使用下述方式獲取:

方式一:寫路徑獲取

GETJSONString=$user.auth_token
1

方式二:分層單步獲取

GETJSONString=$user
GETJSONString=auth_token
1
2

  如果是取特定陣列中的對象,使用以下方式來獲取:

陣列有名稱

GETJSONBool=status[0].ok
1

陣列無名稱:陣列無名稱通常使用在起始的位置。表示方式如下:

[
    {"bad": "AA"},
    {"bad": "BB"}
]
1
2
3
4

  上述寫法如下:

GETJSONString=[0].bad
1

  如果要取JSON中表示的各種數據型別的數值或者對象,使用下述方式:

文字型別

GETJSONString=$user.auth_token
1

數值型別(返回型別為文字)

GETJSONNumber=$user.number
1

整數

GETJSONInteger=$user.number
1

浮點數

GETJSONFloat=$user.float
1

布林值

GETJSONBool=$user.bool
1

對像

GETJSONObject=$user
1

陣列

GETJSONArray=status
1

值對

GETJSONPair=$user
1

# 11.1.7. Server

property Server: string;
1

  設定API廠商的服務地址,此服務地址可從API服務管理界面進行設定。

# 11.1.8. Url

property Url: string;
1

  設定處服務地址外的具體Url路徑資訊。首位不需要帶地址分隔符號。

# 11.2. 事件

# 11.2.1. ResultData

procedure UgRestApiResultData(sender: tobject;aresult: string);
1

  設定當接收到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;
1
2
3
4
5
6
7
8
9
10
11

# 11.3. 方法

# 11.3.1. Send

procedure Send;
1

  設定發送請求。

# 12. fxWebSocketClient

  此元件為WebSocket客戶端元件,可用於與WebSocket伺服器連線實現通訊。

# 12.1. 屬性

# 12.1.1. Active

property Active: Boolean;
1

  是否啟用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)。

# 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;
1

  向伺服器發起連線。

# 12.3.2. DisConnect

function Disconnect(aTimeout:Integer): Boolean;
1

  從伺服器斷開連線。

# 12.3.3. WriteString

procedure WriteString(aText: String);
1

  向伺服器發送文字訊息。

fxWebSocketClient1.WriteString('{"action":"login","sid":"pintoo"}');
1

# 12.3.4. WriteStream

procedure WriteString(aStream: TStream);
1

  向伺服器發送二進制內容訊息。

# 12.3.5. Ping

procedure ping(aText:String);
1

  向伺服器發送一個測試包,如果出現連線超時而沒有接收到訊息,則會關閉連線。

# 12.3.6. Start

procedure Start;
1

  使用第二執行緒來連線伺服器,這樣可以避免連線過程中的應用凍結。

# 12.3.7. Stop

procedure Stop;
1

  使用第二執行緒來斷開伺服器連線,這樣可以避免斷開連線過程中的應用凍結。

# 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 個八位位元組的開銷。

# 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)。
  • 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);
1

  向客戶端發送文字訊息。

fxWebSocketServer1.WriteString(Guid,'{"action":"login","sid":"pintoo"}');
1

# 13.3.2. WriteStream

procedure WriteString(aGuid: String; aStream: TStream);
1

  向伺服器發送二進制內容訊息。

多媒體控制元件
地圖控制元件

← 多媒體控制元件 地圖控制元件→

Copyright © 2021-2025 愛招飛IsoFace | ALL Rights Reserved
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式