爱招飞帮助手册 爱招飞帮助手册
首页
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 系统工具
    • 系统管理
    • 数据库工具
    • 专用模板
    • 外部功能
    • 开发流程
    • 函数代码
  • 开发手册
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 开发手册
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 开发手册
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • 报表设计
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • RestAPI
    • WebSocket
  • 学习手册

    • 安装配置
    • 快速上手
    • 程序架构
    • 界面介绍
    • 功能介绍
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • 预设资料
    • RestAPI说明
    • WebSocket说明
    • MQTT说明
    • Python说明
    • 自定程序
    • 运行卫士
    • 自动化作业
    • 函数程序
    • 控件使用
  • 开发手册
  • FastERP
  • FastWeb
  • Smart
  • PinToo
  • Flying
  • TARS
  • 通用功能

    • Report
    • Script
    • Echarts
    • Chart
    • DB Install
    • HiDesk
    • HiNAT
    • FastBPM
    • ReportBuilder
首页
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 系统工具
    • 系统管理
    • 数据库工具
    • 专用模板
    • 外部功能
    • 开发流程
    • 函数代码
  • 开发手册
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 开发手册
  • 学习手册

    • 基本入门
    • 功能介绍
    • 控件说明
    • 功能用法
    • 专用模板
    • 开发流程
    • 函数程序
  • 开发手册
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • 报表设计
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • RestAPI
    • WebSocket
  • 学习手册

    • 安装配置
    • 快速上手
    • 程序架构
    • 界面介绍
    • 功能介绍
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
  • 学习手册

    • 安装配置
    • 快速上手
    • 界面介绍
    • 功能介绍
    • 预设资料
    • RestAPI说明
    • WebSocket说明
    • MQTT说明
    • Python说明
    • 自定程序
    • 运行卫士
    • 自动化作业
    • 函数程序
    • 控件使用
  • 开发手册
  • FastERP
  • FastWeb
  • Smart
  • PinToo
  • Flying
  • TARS
  • 通用功能

    • Report
    • Script
    • Echarts
    • Chart
    • DB Install
    • HiDesk
    • HiNAT
    • FastBPM
    • ReportBuilder
  • 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,"www.isoface.cn"'+
' 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
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式