物联网控件
# PinToo控件使用(物联网控制)
物联网控制控件中包含了常用了物联网通讯控制的控件。
# 1. TfxModBusTCP
- 引用单元 uModBusTCP
一个ModbusTCP客户端组件。
您可以用TfxModbusTCP组件实现支持ModbusTCP协议的设备的控制和数据采集。
# 1.1. 属性(Properties)
- TfxModbusTCP组件主要属性
属性 | 功能说明 |
---|---|
Host | 指定一个Modbus设备的IP地址 |
Port | 指定一个Modbus设备的端口号 |
# 1.1.1. Host属性
property Host: string;
Host是指ModbusTCP设备的IP地址。如:192.168.1.100。
fxModbusTCP1.Host := '192.168.1.100';
# 1.1.2. Port属性
property Port: Word;
Port是指ModbusTCP设备的端口号。默认502。
fxModbusTCP1.Port := 502;
# 1.2. 11.4.2.事件(Events)
- TfxModbusTCP组件主要事件
事件 | 何时触发 |
---|---|
OnConnected | 当设备连接成功时触发 |
OnDisconnected | 当设备断开时触发 |
# 1.2.1. OnConnected事件
当ModbusTCP设备连接成功时,触发该事件。
fxMemo1.Lines.Add('Connect 连接成功!')
# 1.2.2. OnDisconnected事件
当ModbusTCP设备断开时,触发该事件。
fxMemo1.Lines.Add('Disconnect 断开成功!')
# 1.3. 方法(Methods)
- TfxModbusTCP组件主要方法
方法 | 功能说明 |
---|---|
Connect | 连接设备 |
ReadCoil | 读取单个DO数位讯号输出 |
ReadCoils | 读取多个DO数位讯号输出 |
ReadHoldingRegister | 读取单个AO类比讯号输出 |
ReadHoldingRegisters | 读取多个AO类比讯号输出 |
ReadInputRegister | 读取单个AI类比讯号输入 |
WriteCoil | 写入单个AO数位讯号输出 |
WriteCoils | 写入多个AO数位讯号输出 |
WriteRegister | 写入单个DO类比讯号输出 |
WriteRegisters | 写入多个DO类比讯号输出 |
# 1.3.1. Connect方法
procedure Connect;
连接设备。
fxModbusTCP1.Connect;
# 1.3.2. ReadCoil方法
function ReadCoil(const RegNo: Word; out Value: Boolean): Boolean;
读取单个数位讯号输出。
//读取DO数位信号输出
Procedure btnReadCoilOnClick(Sender: TObject);
var
v:boolean;
Begin
if fxModbusTCP1.ReadCoil(1,v) then
begin
if v Then
fxMemo1.Lines.Add('ReadCoil Value->>> 1')
else
fxMemo1.Lines.Add('ReadCoil Value->>> 0');
End
else
fxMemo1.Lines.Add('ReadCoil->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1.3.3. ReadCoils方法
function ReadCoils(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
读取多个DO数位讯号输出。
var
v:string;
begin
fxModbusTCP1.ReadCoils(1,2,v);
end;
2
3
4
5
# 1.3.4. ReadHoldingRegister方法
function ReadHoldingRegister(const RegNo: Word; out Value: Word): Boolean;
读取单个AO类比讯号输出。
//读取AO类比信号输出
Procedure btnReadHoldingRegisterOnClick(Sender: TObject);
var
v:word;
Begin
if fxModbusTCP1.ReadHoldingRegister(1,v) then
begin
if v Then
fxMemo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v))
else
fxMemo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v));
End
else
fxMemo1.Lines.Add('ReadHoldingRegister->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1.3.5. ReadHoldingRegisters方法
function ReadHoldingRegisters(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
读取多个AO类比讯号输出。
说明: 读取多个AO数位讯号输出。
**返回值:**Boolean字符型。
- ReadHoldingRegisters函数语法中各部分说明
部分 | 说明 |
---|---|
RegNo | 开始位址 |
Blocks | 资料长度 |
- 示例
var
v:String;
Begin
fxModbusTCP1.ReadHoldingRegisters(1,4,v);
End;
2
3
4
5
# 1.3.6. ReadInputRegister方法
function ReadInputRegister(const RegNo: Word; out Value: Word): Boolean;
读取单个AI类比讯号输入。
//读取AI数位信号输入
Procedure btnReadInputRegisterOnClick(Sender: TObject);
var
v:word;
Begin
if fxModbusTCP1.ReadInputRegister(1,v) then
begin
if v Then
fxMemo1.Lines.Add('ReadInputRegister Value->>> '+floattostr(v))
else
fxMemo1.Lines.Add('ReadInputRegister Value->>> '+floattostr(v));
End
else
fxMemo1.Lines.Add('ReadInputRegister->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1.3.7. WriteCoil方法
function WriteCoil(const RegNo: Word; const Value: Boolean): Boolean;
控制单个DO数位信号输出。
//控制DO数位信号输出
Procedure btnWriteCoilOnClick(Sender: TObject);
var
v:boolean;
Begin
v := false;
if fxModbusTCP1.WriteCoil(1,v) then
begin
if v Then
fxMemo1.Lines.Add('WriteCoil Value->>> 1')
else
fxMemo1.Lines.Add('WriteCoil Value->>> 0');
End
else
fxMemo1.Lines.Add('WriteCoil->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1.3.8. WriteCoils方法
function WriteCoils(const RegNo: Word; const Blocks: Word; const RegisterData: string): Boolean;
控制多个DO数位信号输出。
var
v:boolean;
RegisterData:string;
begin
RegisterData := '1,0';1代表True,0代表False
v := fxModbusTCP1.WriteCoils(1,2,'1,0');
end;
2
3
4
5
6
7
# 1.3.9. WriteRegister方法
function WriteRegister(const RegNo: Word; const Value: Word): Boolean;
写入单个DO类比讯号输出
var
v:word;
Begin
v := 123;
if fxModbusTCP1.WriteRegister(1,v) then
begin
if v Then
fxMemo1.Lines.Add('WriteRegister Value->>> '+floattostr(v))
else
fxMemo1.Lines.Add('WriteRegister Value->>> '+floattostr(v));
End
else
fxMemo1.Lines.Add('WriteRegister->>> error!');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1.3.10. WriteRegisters方法
function WriteRegisters(const RegNo: Word; const RegisterData: string; Modbus: TfxModbusTCP): Boolean;
写入多个DO类比讯号输出。
var
v:boolean;
RegisterData:string;
begin
RegisterData := '1,0'
v := fxModbusTCP1.WriteRegisters(1,2,'1,0');
end;
2
3
4
5
6
7
# 2. TfxModbusRead
- 引用单元 ufxModbusRead
ModbusTCP多功能数据读取组件。
你可以简单设置TfxModbusRead组件属性即可完成ModbusTCP设备的数据采集功能,无需使用脚本。当然配合脚本使用可以丰富系统业务功能。
# 2.1. 属性(Properties)
- TfxModbusRead组件主要属性
属性 | 功能说明 |
---|---|
DataControl | 指定数据控件 |
DataField | 指定数据字段 |
DataLower | 指定数据下限 |
DataType | 指定数据类型 |
DataUpper | 指定数据上限 |
DataValue | 指定数据值 |
Enabled | 指定是否启用 |
FuntionCode | 指定Modbus功能码 |
Host | 指定ModbusTCP设备IP地址 |
Interval | 指定数据采集间隔时间 |
LowerWarning | 指定数据下限报警等级 |
Offset | 指定偏移量 |
Port | 指定ModbusTCP设备端口号 |
RegCount | 指定数据长度 |
Script | 指定脚本 |
Site | 指定站点名称 |
StartReg | 指定起始地址 |
UpperWarning | 指定数据上限报警等级 |
# 2.1.1. DataControl属性
property DataControl: string read FDataControl write SetDataControl;
DataControl属性是指需要将采集之数据显示在某个组件上时,这个组件的名称。
# 2.1.2. DataField属性
property DataField: string read FDataField write SetDataField;
DataField属性是指需要将采集之数据显示在某个组件上时,这个组件的属性名称。
# 2.1.3. DataLower属性
property DataLower: Double read FDataLower write SetDataLower;
DataLower属性是指数据下限值,当采集之数据低于下限值时,启动报警或异常。
# 2.1.4. DataType属性
property DataType: TDataType read FDataType write SetDataType;
DataType属性是指采集之数据的数据类型。例如:* dtBoolean -- 布尔类型, dtInt --整数类型。
# 2.1.5. DataUpper属性
property DataUpper: Double read FDataUpper write SetDataUpper;
DataLower属性是指数据上限值,当采集之数据超过上限值时,启动报警或异常。
# 2.1.6. DataValue属性
property DataValue: Double read FDataValue write FDataValue;
DataValue属性指采集之数据存放处。
# 2.1.7. Enabled属性
property Enabled: boolean read FEnabled write SetEnabled;
当Enabled设置为True时,表示启动定时采集线程,可设置Interval属性值改变采集频率。
# 2.1.8. FuntionCode属性
property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
FuntionCode属性是指Modbus功能码,根据不同的功能码读取Modbus设备不同区之地址的数据。
TfxModbusRead支持的读取功能码:
- fc01 读取输出数位讯号 Coils(code $01)
- fc02 读取输入数位讯号 Discrete Inputs (code $02)
- fc03 读取输出类比讯号 Holding Registers (code $03)
- fc04读取输入类比讯号 Input Registers (code $04)
# 2.1.9. Host属性
property Host: string read FHost write SetHost;
Host属性是指ModbusTCP设备的地址,如:192.168.1.100。
# 2.1.10. Interval属性
property Interval: Integer read FInterval write SetInterval;
Interval属性是指采集线程的频率,默认1000毫秒。
# 2.1.11. LowerWarning属性
property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
UpperWarning属性是指数据下限异常类型,目前有:lw1,lw2,lw3,lw4,lwNote。
# 2.1.12. Offset属性
property Offset: Double read FOffset write SetOffset;
UpperWarning属性是指数据偏移量。
# 2.1.13. Port属性
property Port: Integer read FPort write SetPort;
Host属性是指ModbusTCP设备的端口号,默认502。
# 2.1.14. RegCount属性
property RegCount: Integer read FRegCount write SetRegCount;
RegCount属性是指读取ModbusTCP数据地址的数据长度。
# 2.1.15. Script属性
property Script: TStrings read FScript write SetScript;
Script属性是指可通过脚本对采集之数据进行业务处理,经过业务处理后的值还是存储于DataValue中。
例如:
begin
self.DataValue := self.GetRegValues(0) * 0.1;
end.
2
3
# 2.1.16. Site属性
property Site: string read FSite write FSite;
Site属性是指ModbusTCP设备的站点名称,可以作为ModbusTCP数据地址的说明之用。
# 2.1.17. StartReg属性
property StartReg: Integer read FStartReg write SetStartReg;
RegCount属性是指读取ModbusTCP数据起始地址。
# 2.1.18. UpperWarning属性
property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
UpperWarning属性是指数据上限异常类型,目前有:uw1,uw2,uw3,uw4,uwNote。
# 2.2. 方法(Methods)
- TfxModbusRead组件主要方法
方法 | 功能说明 |
---|---|
GetRegValues | 根据索引号返回数组中的数值 |
GetBitValues | 根据索引号返回数组中的数值 |
SetPropValue | 设置组件属性值 |
GetPropValue | 读取组件属性值 |
# 2.2.1. GetRegValues方法
//存储类比信号数据
function GetRegValues(QIndex: Integer): Word;
2
通过GetRegValues方法可获取ModbusTCP设备返回的数组中的数据。通过索引号获取对应的数据。
var
i:Word;
begin
//获取数组中的第0个数据
i := fxModbusRead1.GetRegValues(0);
fxEdit2.Text := IntToStr(i);
end;
2
3
4
5
6
7
# 2.2.2. GetBitValues方法
//读取数位信号数据
function GetBitValues(QIndex: Integer): boolean;
2
通过GetRegValues方法可获取ModbusTCP设备返回的数组中的数据。通过索引号获取对应的数据。
var
i:boolean;
begin
//获取数组中的第0个数据
i := fxModbusRead1.GetBitValues(0);
end;
2
3
4
5
6
# 2.2.3. SetPropValue方法
procedure SetPropValue(QControl, QControlProp: string; QValue: Variant);
设置控件属性值,通过SetPropValue方法可以将DataValue赋值给指定控件的属性。
fxModbusRead1.SetPropValue(fxEdit1,Text);
# 2.2.4. GetPropValue方法
function GetPropValue(QControl, QControlProp: string): Variant;
设置控件属性值,通过GetPropValue方法可以获取指定控件属性的值,并返回。
var
v:String;
Begin
v := fxModbusRead1.GetPropValue(fxEdit1,Text);
End;
2
3
4
5
6
# 3. TfxModbusWrite
- 引用单元 ufxModbusWrite
ModbusTCP多功能数据写入组件。
你可以简单设置TfxModbusWrite组件属性即可完成ModbusTCP设备的数据写入功能,无需使用脚本。当然配合脚本使用可以丰富系统业务功能。
# 3.1. 属性(Properties)
- TfxModbusWrite组件主要属性
属性 | 功能说明 |
---|---|
DataControl | 指定数据控件 |
DataField | 指定数据字段 |
DataLower | 指定数据下限 |
DataType | 指定数据类型 |
DataUpper | 指定数据上限 |
DataValue | 指定数据值 |
FuntionCode | 指定Modbus功能码 |
Host | 指定ModbusTCP设备IP地址 |
LowerWarning | 指定数据下限报警等级 |
Port | 指定ModbusTCP设备端口号 |
RegCount | 指定数据长度 |
Site | 指定站点名称 |
StartReg | 指定起始地址 |
UpperWarning | 指定数据上限报警等级 |
# 3.1.1. DataControl属性
property DataControl: string read FDataControl write SetDataControl;
DataControl属性是指需要将写入之数据显示在某个组件上时,这个组件的名称。
# 3.1.2. DataField属性
property DataField: string read FDataField write SetDataField;
DataField属性是指需要将写入之数据显示在某个组件上时,这个组件的属性名称。
# 3.1.3. DataLower属性
property DataLower: Double read FDataLower write SetDataLower;
DataLower属性是指数据下限值,当写入之数据低于下限值时,启动报警或异常。
# 3.1.4. DataType属性
property DataType: TDataType read FDataType write SetDataType;
DataType属性是指写入之数据的数据类型。例如:* dtBoolean -- 布尔类型, dtInt --整数类型。
# 3.1.5. DataUpper属性
property DataUpper: Double read FDataUpper write SetDataUpper;
DataLower属性是指数据上限值,当写入之数据超过上限值时,启动报警或异常。
# 3.1.6. DataValue属性
property DataValue: Double read FDataValue write FDataValue;
DataValue属性指采写入数据存放处。
# 3.1.7. FuntionCode属性
property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
FuntionCode属性是指Modbus功能码,根据不同的功能码写入Modbus设备不同区之地址的数据。
TfxModbusRead支持的读取功能码:
- fc05 写入单笔输出数位讯号 Single Coil(code $05)
- fc06 写入单笔输出类比讯号 Single Register (code $06)
- fc15 写入多笔输出数位讯号 Multiple Coils(code $0F)
- fc16 写入多笔输出类比讯号 Multiple Registers (code $10)
# 3.1.8. Host属性
property Host: string read FHost write SetHost;
Host属性是指ModbusTCP设备的地址,如:192.168.1.100。
# 3.1.9. LowerWarning属性
property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
UpperWarning属性是指数据下限异常类型,目前有:lw1,lw2,lw3,lw4,lwNote。
# 3.1.10. Port属性
property Port: Integer read FPort write SetPort;
Host属性是指ModbusTCP设备的端口号,默认502。
# 3.1.11. RegCount属性
property RegCount: Integer read FRegCount write SetRegCount;
RegCount属性是指写入ModbusTCP数据地址的数据长度。
# 3.1.12. Site属性
property Site: string read FSite write FSite;
Host属性是指ModbusTCP设备的站点名称,可以作为ModbusTCP数据地址的说明之用。
# 3.1.13. StartReg属性
property StartReg: Integer read FStartReg write SetStartReg;
RegCount属性是指写入ModbusTCP数据起始地址。
# 3.1.14. UpperWarning属性
property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
UpperWarning属性是指数据上限异常类型,目前有:uw1,uw2,uw3,uw4,uwNote。
# 3.2. 方法(Methods)
- TfxModbusWrite组件主要方法
方法 | 功能说明 |
---|---|
execute | 执行Modbus写入操作 |
# 3.2.1. execute方法
procedure execute;
执行TfxModbusWrite的写入事件。
# 4. TfxModBusRTU
- 引用单元 uModBusRTU
ModbusRTU多功能数据采集与控制组件。
你可以简单设置TfxModBusRTU组件属性,然后配合脚本可实现丰富的ModbusRTU设备的采集与控制功能。
# 4.1. 属性(Properties)
- TfxModBusRTU组件主要属性
属性 | 功能说明 |
---|---|
Address | 指定Modbus设备地址 |
Comport | 指定TfxComport串口组件 |
Info | 是否显示反馈信息 |
RegCount | 数据长度 |
StartReg | 数据起始位址 |
# 4.2. 方法(Methods)
- TfxModBusRTU组件主要方法
方法 | 功能说明 |
---|---|
ReadCoils | 读取多个DO数位讯号输出 |
ReadHoldingRegisters | 读取多个AO类比讯号输出 |
ReadInputRegister | 读取单个AI类比讯号输入 |
WriteSingleCoil | 写入单个AO数位讯号输出 |
WriteCoils | 写入多个AO数位讯号输出 |
WriteSingleRegister | 写入单个DO类比讯号输出 |
WriteMultipleRegisters | 写入多个DO类比讯号输出 |
# 4.2.1. ReadCoils方法
//说明: 读取多个线圈状态(01)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// RegCount:数据长度
procedure ReadCoils(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 4.2.2. ReadDiscreteInputs方法
//说明: 读取离散输入状态(02)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// RegCount:数据长度
procedure ReadDiscreteInputs(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 4.2.3. ReadHoldingRegisters方法
//说明: 读取多个保持型寄存器(03)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// RegCount:数据长度
procedure ReadHoldingRegisters(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 4.2.4. ReadInputRegisters方法
//说明: 读取多个输入寄存器(04)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// RegCount:数据长度
procedure ReadInputRegisters(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 4.2.5. WriteSingleCoil方法
//说明: 写入单个线圈状态(05)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// UserData:数据值
procedure WriteSingleCoil(Address, StartReg: Word;UserData: Integer);
2
3
4
5
6
7
# 4.2.6. WriteMultipleCoils方法
//说明: 写入多个线圈状态(15)
//返回值: Integer
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// UserData:数据值
procedure WriteMultipleCoils(Address, StartReg, RegCount: Word; UserData: String);
2
3
4
5
6
7
8
# 4.2.7. WritSingleRegister方法
//说明: 写入单个保持型寄存器(06)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// UserData:数据值
procedure WritSingleRegister(Address, StartReg: Word; UserData: Word);
2
3
4
5
6
7
# 4.2.8. WriteMultipleRegisters方法
//说明: 写入多个保持型寄存器(16)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// UserData:数据值
procedure WriteMultipleRegisters(Address, StartReg, RegCount: Word; UserData:String);
2
3
4
5
6
7
# 4.3. 事件
- TModbusRTUl主要事件
事件 | 何时触发 |
---|---|
OnReadCoils | 在执行ReadCoils方法时触发该事件 |
OnReadDiscreteInputs | 在执行ReadDiscreteInputs方法时触发该事件 |
OnReadHoldingRegisters | 在执行ReadHoldingRegisters方法时触发该事件 |
OnReadHoldingRegisters | 在执行ReadHoldingRegisters方法时触发该事件 |
# 4.3.1. OnReadCoils事件
Procedure OnReadCoils(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 4.3.2. OnReadDiscreteInputs事件
Procedure OnReadDiscreteInputs(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 4.3.3. OnReadHoldingRegisters事件
Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 4.3.4. OnReadHoldingRegisters事件
Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 5. TfxMQTTClient
- 引用单元 TMSMQTTClient
TfxMQTTClient是一个广泛用于物联网、消息推送等场景的组件。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
# 5.1. 属性(Properties)
- TfxMQTTClient组件主要属性
属性 | 功能说明 |
---|---|
BrokerHostName | 指定MQTT Broker 地址 |
BrokerProt | 指定MQTT Broker 端口 |
ClientID | 指定客户端ID(标识) |
Credentials | 指定验证凭证(用户名、密码) |
IPVersion | 指定IP版本类型 |
KeepAliveSettings | 指定保持活着动的设置 |
LastWillSettings | |
UseSSL | 指定是否使用使SSL |
TfxMQTTClient组件主要属性说明:
KeepAliveSettings :保持活动的设置
- AutoReconnect:自动重新连接
- AutoReconnectInterval:自动重新连接间隔,单位毫秒
- KeepAliveInterval:存活间隔,单位毫秒
- KeepConnectionAlive:保持连接活着
LastWillSettings:MQTT遗嘱设置
- QoS:服务质量
- qosAtLeastOnce:至少一次
- qosAtMostOnce:最多一次
- qosExactlyOnce:确保只有一次
- qosRESERVED:保留
- Retain:保留
- Topic:主题
- WillMessage:遗嘱消息
- QoS:服务质量
属性赋值示例
//MQTTClient属性赋值
fxMQTTClientLED.BrokerHostName := edtBrokerHostName.Text;
fxMQTTClientLED.BrokerPort := StrToInt(edtBrokerProt.Text);
fxMQTTClientLED.Credentials.Password := edtPassword.Text;
fxMQTTClientLED.Credentials.Username := edtUsername.Text;
2
3
4
5
# 5.2. 事件(Events)
- TfxMQTTClient组件主要事件
事件 | 何时触发 |
---|---|
OnConnectedStatusChanged | 当连接状态发生改变时触发 |
OnPublishReceivedANSI | 当发布后返回消息时触发 |
OnPublishReceivedUTF8 | 当发布后返回消息时触发 |
# 5.2.1. OnConnectedStatusChanged事件
当TfxMQTTClient连接状态发生改变时触发OnConnectedStatusChanged事件。
//fxMQTTClientLED 控件 OnConnectedStatusChanged事件
Procedure fxMQTTClientLEDOnConnectedStatusChanged(ASender: TObject; AConnected: Boolean; AStatus: TTMSMQTTConnectionStatus);
Begin
if AConnected then
begin
MemoMsg.Lines.Add('MQTT Broker 连接成功!');
fxMQTTClientLED.Subscribe('LED',qosAtMostOnce);
end
else
MemoMsg.Lines.Add('MQTT Broker 连接超时!');
End;
2
3
4
5
6
7
8
9
10
11
# 5.2.2. OnPublishReceivedANSI事件
Procedure OnPublishReceivedANSI(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
当TfxMQTTClient发布后返回消息时触发OnPublishReceivedANSI事件。(使用爱招飞产品的 MQTT服务器时可使用此方法获取带有中文字符的订阅消息)
//fxMQTTClientLED 控件 OnPublishReceivedANSI事件(发布收到的内容)
Procedure fxMQTTClientLEDOnPublishReceivedANSI(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
Begin
if APayload='1' Then
MemoMsg.Lines.Add(ATopic+'->开')
else
MemoMsg.Lines.Add(ATopic+'->关');
End;
2
3
4
5
6
7
8
# 5.2.3. OnPublishReceivedUTF8事件
Procedure OnPublishReceivedUTF8(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
当TfxMQTTClient发布后返回消息时触发OnPublishReceivedUTF8事件。(使用其他第三方MQTT 服务端时可使用)
//fxMQTTClientLED 控件 OnPublishReceivedUTF8事件(发布收到的内容)
Procedure fxMQTTClientLEDOnPublishReceivedUTF8(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
Begin
if APayload='1' Then
MemoMsg.Lines.Add(ATopic+'->开')
else
MemoMsg.Lines.Add(ATopic+'->关');
End;
2
3
4
5
6
7
8
--
# 5.3. 方法(Methods)
- TfxMQTTClient组件主要方法
方法 | 功能说明 |
---|---|
Connect | 连接MQTT Broker |
Disconnect | 断开MQTT Broker |
IsConnected | 判断连接状态 |
Subscribe | 订阅MQTT主题 |
Publish | 发布MQTT信息 |
Unsubscribe | 退订MQTT主题 |
# 5.3.1. Connect方法
//说明: 连接MQTT Broker
//返回值: 无
//参数:ACleanSession 是否清除 Session
procedure Connect(ACleanSession: Boolean);
2
3
4
# 5.3.2. Disconnect方法
//说明: 断开MQTT Broker
//返回值: 无
//参数:无
procedure Disconnect;
2
3
4
示例:
fxMQTTClient1.Disconnect;
# 5.3.3. IsConnected方法
//说明: 判断连接状态
//返回值: Boolean
//参数:无
function IsConnected: Boolean;
2
3
4
示例:
if fxMQTTClient1.IsConnected then
begin
//代码片段
end;
2
3
4
# 5.3.4. Subscribe方法
//说明: 订阅主题
//返回值: 无
//参数:
// ATopic 主题名称
// ATopicQosLevel主题的服务质量级别,默认qosAtMostOnce
// TTMSMQTTQoS包含:
// qosAtMostOnce 最多一次交货
// qosAtLeastOnce 至少一次交货
// qosExactlyOnce 一次交货
// qosRESERVED 禁止保留
function Subscribe(ATopic: string; ATopicQosLevel: TTMSMQTTQoS): Word;
2
3
4
5
6
7
8
9
10
11
示例:
fxMQTTClientLED.Subscribe('LED',qosAtMostOnce);
# 5.3.5. Publish方法
//说明: 发布主题内容
//返回值: Word
//参数:
// ATopic 主题名称
// APayload 主题内容
// AQos主题的服务质量级别,默认qosAtMostOnce
// TTMSMQTTQoS包含:
// qosAtMostOnce 最多一次交货
// qosAtLeastOnce 至少一次交货
// qosExactlyOnce 一次交货
// qosRESERVED 禁止保留
// ARetain 是否保留
function Publish(ATopic: string; APayload: string; AQos: TTMSMQTTQoS; ARetain: Boolean): Word;
2
3
4
5
6
7
8
9
10
11
12
13
示例:
fxMQTTClientLED.Publish('LED','1',qosAtMostOnce,false);
# 5.3.6. Unsubscribe方法
//说明: 主题退订
//返回值: Word
//参数:ATopic 主题名称
function Unsubscribe(ATopic: string): Word;
2
3
4
示例:
fxMQTTClientLED.Unsubscribe('LED');
# 6. TfxOPCUAClient
- 引用单元 UAClient
OPC UA 客户端。
鼠标双击TfxOPCUAClient组件,可以弹出的对话框中进行OPCServer的选择。

# 7. TfxOPCDAClient
- 引用单元 OPC
OPC DA 客户端。
鼠标双击TfxOPCDAClient组件,可以弹出的对话框中进行OPCServer的指定以及OPC Groups、OPC Items的定义。
- OPC Server 选择

- OPC Groups、OPC Items 选择

# 8. TfxComPort
- 引用单元 ComPort TfxComPort 是一个串口通信组件。
# 8.1. 属性
- TfxComPort组件主要属性
属性 | 功能说明 |
---|---|
Active | 是否激活该组件 |
BaudRate | 获取或设置串行波特率 |
BlockMode | 指定阻塞模式 |
DataBits | 获取或设置每个字节的标准数据位长度 |
DeviceName | 组件对应的连接端口名称 |
Parity | 指定ComPort对象的奇偶校验位 |
StopBits | 指定在ComPort对象上使用的停止位的数目 |
# 8.1.1. DataBits 属性
获取或设置每个字节的标准数据位长度。默认为dbDefault,其余选项包括db4~db8。
# 8.1.2. Parity 属性
指定fxComPort对象的奇偶校验位。包含如下选项。
- paDefault:默认选项。
- paEven:设置奇偶校验位,使位数等于偶数。
- paNone:不发生奇偶校验检查。
- paOdd:设置奇偶校验位,使位数等于奇数。
# 8.1.3. StopBits 属性
指定在fxComPort对象上使用的停止位的数目。有如下选项。
- sbDefault:默认选项。
- sb1:使用一个停止位。
- sb2:使用两个停止位。
# 8.2. 事件
- TfxComPort主要事件
事件 | 何时触发 |
---|---|
AfterClose | 在端口关闭后触发该事件 |
AfterOpen | 在端口打开后触发该事件 |
BeforeClose | 在端口关闭前触发该事件 |
BeforeOpen | 在端口打开前触发该事件 |
# 9. TfxUsbSerial
- 引用单元 ufxUsbSerial TfxComPort 是一个串口通信组件。
# 9.1. 属性
- TfxUsbSerial组件主要属性
属性 | 功能说明 |
---|---|
BaudRate | 设定串口的通讯速率 |
DataBits | 串口单次通信的数据位数 |
Devices | Usb设备列表 |
FlowControl | 流控制的方式 |
Info | 是否显示反馈信息 |
Parity | 串口通讯的数据校验方式 |
StopBits | 串口通讯的数据停止位的数量 |
Synchronous | 是否设置通信同步 |
UsbDevice | Usb设备名称 |
UsbSerialType | Usb设备类型(RS232、RS485) |
# 9.1.1. Devices 属性
指驳接到设备USB接口上的所有USB设备名称集合。
# 9.1.2. Info 属性
指定是否显示执行信息,通过执行信息的反馈可以查看操作的信息以确定通讯是否正常。
# 9.1.3. UsbDevice 属性
指定当时操作的USB设备名称,该设备名称必需是在Devices集合中。
# 9.1.4. UsbSerialType 属性
指定USB设备的通讯协议类型。
# 9.2. 方法(Methods)
- TfxUsbSerial组件主要方法
方法 | 功能说明 |
---|---|
RefreshDevices | 刷新设备列表 |
Open | 打开设备连接 |
Close | 关闭设备连接 |
WriteByte | 写入Byte |
WriteStrToBytes | 写入Bytes |
ReadCoils | 读取多个线圈状态(01) |
ReadDiscreteInputs | 读取离散输入状态(02) |
ReadHoldingRegisters | 读取多个保持型寄存器(03) |
ReadInputRegisters | 读取多个输入寄存器(04) |
WriteSingleCoil | 写入单个线圈状态(05) |
WriteMultipleCoils | 写入多个线圈状态(15) |
WritSingleRegister | 写入单个保持型寄存器(06) |
WriteMultipleRegisters | 写入多个保持型寄存器(16) |
# 9.2.1. RefreshDevices方法
//说明: 刷新USB设备列表
//返回值: 无
//参数:无
procedure RefreshDevices;
2
3
4
示例:
fxUsbSerial.RefreshDevices;
# 9.2.2. Open方法
//说明: 打开USB设备连接
//返回值: 无
//参数:无
procedure Open(ASynchronous: Boolean);
2
3
4
示例:
fxUsbSerial.Open(True);
# 9.2.3. Close方法
//说明: 关闭USB设备连接
//返回值: 无
//参数:无
procedure Close;
2
3
4
示例:
fxUsbSerial.Clost;
# 9.2.4. Close方法
//说明: 关闭USB设备连接
//返回值: 无
//参数:无
procedure Close;
2
3
4
示例:
fxUsbSerial.Close;
# 9.2.5. WriteByte方法
//说明: 向设备写入Byte
//返回值: Integer
//参数:
// Data:写入的Byte值
// Timeout:写入超时时间(毫秒)
function WriteByte(Data: Byte; Timeout: Integer = 0): Integer;
2
3
4
5
6
示例:
//向电子秤发送R命令,读取电子秤数值
fxUsbSerial.WriteByte(Ord('R'));
2
# 9.2.6. WriteStrToBytes方法
//说明: 向设备写入Byte
//返回值: Integer
//参数:
// AStr:写入的文本内容
// AEncoding:编码类型 (Ansi\UTF8\UTF7|UniCode)
function WriteStrToBytes(AStr: string; AEncoding:string = 'Ansi'): Integer;
2
3
4
5
6
示例:
var
Str:string;
begin
//串口打印
Str :=
' SIZE 40 mm,30 mm'+
' CLS'+
' TEXT 50,30,"TSS24.BF2",0,1,1,"商品清单"'+
' TEXT 50,45,"4",0,1,1,"--------------------"'+
' TEXT 50,60,"TSS24.BF2",0,1,1,"红塔山 1 15 15 "'+
' TEXT 50,90,"TSS24.BF2",0,1,1,"娃哈哈 1 15 15 "'+
' TEXT 50,120,"TSS24.BF2",0,1,1,"牛肉干 1 15 15 "'+
' TEXT 50,150,"TSS24.BF2",0,1,1,"红牛 1 15 15 "'+
' TEXT 50,170,"4",0,1,1,"--------------------"'+
' TEXT 50,190,"TSS24.BF2",0,1,1,"合计 1 15 15 "'+
' QRCODE 50,20,L,4,A,0,"www.isoface.cn"'+
' PRINT 1'+
' EOP';
fxUsbSerial.WriteStrToBytes(Str,'Ansi');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 9.2.7. ReadCoils方法
//说明: 读取多个线圈状态(01)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// RegCount:数据长度
procedure ReadCoils(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 9.2.8. ReadDiscreteInputs方法
//说明: 读取离散输入状态(02)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// RegCount:数据长度
procedure ReadDiscreteInputs(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 9.2.9. ReadHoldingRegisters方法
//说明: 读取多个保持型寄存器(03)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// RegCount:数据长度
procedure ReadHoldingRegisters(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 9.2.10. ReadInputRegisters方法
//说明: 读取多个输入寄存器(04)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// RegCount:数据长度
procedure ReadInputRegisters(Address, StartReg, RegCount: Word);
2
3
4
5
6
7
# 9.2.11. WriteSingleCoil方法
//说明: 写入单个线圈状态(05)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// UserData:数据值
procedure WriteSingleCoil(Address, StartReg: Word;UserData: Integer);
2
3
4
5
6
7
# 9.2.12. WriteMultipleCoils方法
//说明: 写入多个线圈状态(15)
//返回值: Integer
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// UserData:数据值
procedure WriteMultipleCoils(Address, StartReg, RegCount: Word; UserData: String);
2
3
4
5
6
7
8
# 9.2.13. WritSingleRegister方法
//说明: 写入单个保持型寄存器(06)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// UserData:数据值
procedure WritSingleRegister(Address, StartReg: Word; UserData: Word);
2
3
4
5
6
7
# 9.2.14. WriteMultipleRegisters方法
//说明: 写入多个保持型寄存器(16)
//返回值: 无
//参数:
// Address:设备地址(1~247)
// StartReg:起始地址
// UserData:数据值
procedure WriteMultipleRegisters(Address, StartReg, RegCount: Word; UserData:String);
2
3
4
5
6
7
# 9.3. 事件
- TfxUsbSerial主要事件
事件 | 何时触发 |
---|---|
OnReceiveData | 在RS232通讯写入时触发该事件 |
OnReadCoils | 在执行ReadCoils方法时触发该事件 |
OnReadDiscreteInputs | 在执行ReadDiscreteInputs方法时触发该事件 |
OnReadHoldingRegisters | 在执行ReadHoldingRegisters方法时触发该事件 |
OnReadHoldingRegisters | 在执行ReadHoldingRegisters方法时触发该事件 |
# 9.3.1. OnReceiveData事件
Procedure OnReceiveData(Sender: TObject;ReceiveData: string);
# 9.3.2. OnReadCoils事件
Procedure OnReadCoils(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 9.3.3. OnReadDiscreteInputs事件
Procedure OnReadDiscreteInputs(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 9.3.4. OnReadHoldingRegisters事件
Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 9.3.5. OnReadHoldingRegisters事件
Procedure OnReadHoldingRegisters(Sender: TObject; SendData: string; ReceiveData: string; UserData: string);
# 10. TfxMeter
此组件为仪表的数据采集组件,可针对大量的数据进行队列采集。提供了程序内组件的COM连接接口,具有TComPort所有功能的同时还实现仪表数据采集之功能。
# 10.1. 属性
- TMeter组件主要属性
属性 | 功能说明 |
---|---|
Active | 是否激活该组件 |
BaudRate | 获取或设置串行波特率 |
BufferSizes | 缓存区设定 |
Characters | 设定控制字符 |
CustBaudRate | 获取或设置自定义串行波特率 |
DataBits | 获取或设置每个字节的标准数据位长度 |
DeviceName | 组件对应的连接端口名称 |
Parity | 指定Meter对象的奇偶校验位 |
StopBits | 指定在Meter对象上使用的停止位的数目 |
ThreadPriority | 指定线程的优先级别 |
MeterList | 仪表列表 |
Interval | 采集间隔时间 |
Enabled | 是否启动采集 |
# 10.1.1. DataBits 属性
获取或设置每个字节的标准数据位长度。默认为dbDefault,其余选项包括db4~db8。
# 10.1.2. Parity 属性
指定Meter对象的奇偶校验位。包含如下选项。
- paDefault:默认选项。
- paEven:设置奇偶校验位,使位数等于偶数。
- paMark:将奇偶校验位保留为 1。
- paNone:不发生奇偶校验检查。
- paOdd:设置奇偶校验位,使位数等于奇数。
- paSpace:将奇偶校验位保留为 0。
# 10.1.3. StopBits 属性
指定在Meter对象上使用的停止位的数目。有如下选项。
- sbDefault:默认选项。
- sb1:使用一个停止位。
- sb1_5:使用1.5个停止位。
- sb2:使用两个停止位。
# 10.1.4. MeterList 属性
Meter数据采集列表,有如下选项。
# 10.1.4.1. 属性
- TMeter组件主要属性
属性 | 功能说明 |
---|---|
Address | 仪表地址 |
Caption | 仪表名称 |
Code | 仪表编号 |
Data | 发送命令(电表使用) |
Error | 错误信息 |
Interval | 休眠时间(毫秒) |
ItemIndex | 仪表索引 |
LastSaveTime | 采集数据最后保存时间 |
LastTime | 最近采集时间 |
Log | 日志(发送和返回的原始数据) |
MeterType | 指定仪表类型 |
Rate | 仪表系数 |
Value1 | 采集数据1 |
Value2 | 采集数据2 |
Value3 | 采集数据3 |
Value4 | 采集数据4 |
Value5 | 采集数据5 |
# 10.1.4.2. Data属性
指定仪表采集时的一些特殊命令,目前只有电表会用到,如指定采集尖峰谷平的数据。
- 正向总功:00010000
- 组合尖峰谷平:0000FF00
# 10.1.4.3. MeterType属性
指定仪表类型,目前支持如下几种类型。
- LDZ_5J:金田水表
- LDYB_3000:英博水表
- LDM:恢宏水表
- DLT645_2007:电表 DLT645_2007
- FCM_Single:天信FCM体积修正仪 浮点单精度协议
- FCM_V1_3:天信FCM体积修正仪 天信V1.3协议
- EVC300:苍南仪表 EVC3000体积修正仪
- PROH_6000L:杭州普恒蒸汽表
- HS96:杭州成套节流装置蒸汽表
针对不同仪表类型肯协议,Value1,Value2,Value3,Value4,Value5 值都有不同的含义。
LDZ_5J:金田水表 Value1=累积流量,Value2=瞬时流量,Value3=未使用,Value4=未使用,Value5=未使用
LDYB_3000:英博水表 Value1=累积流量,Value2=瞬时流量,Value3=压力,Value4=流速,Value5=未使用
LDM:恢宏水表 Value1=累积流量,Value2=瞬时流量,Value3=未使用,Value4=未使用,Value5=未使用
DLT645_2007:电表 DLT645_2007 Value1=总功,Value2=尖电,Value3=峰电,Value4=平电,Value5=谷电
FCM_Single:天信FCM体积修正仪 浮点单精度协议 Value1=标准总量,Value2=标况体积流量,Value3=工况体积流量,Value4=温度,Value5=压力
FCM_V1_3:天信FCM体积修正仪 天信V1.3协议 Value1=标准总量,Value2=标况体积流量,Value3=工况体积流量,Value4=温度,Value5=压力
EVC300:苍南仪表 EVC3000体积修正仪 Value1=标准总量,Value2=标况体积流量,Value3=工况体积流量,Value4=温度,Value5=压力
PROH_6000L:杭州普恒蒸汽表 Value1=累积流量,Value2=瞬时流量,Value3=压力,Value4=压差,Value5=温度
HS96:杭州成套节流装置蒸汽表 Value1=累积流量,Value2=瞬时流量,Value3=压力,Value4=压差,Value5=温度
# 10.1.5. Interval 属性
指定在Meter数据采集时轮询的频率,单位毫秒(ms)。
//1秒轮询
FThis.Meter1.Interval := 1000;
2
# 10.1.6. Enabled 属性
指定是否启动Meter的数据采集。
//启动数据采集
FThis.Meter1.Enabled := true;
2
# 10.2. 事件
- TMeter主要事件
事件 | 何时触发 |
---|---|
AfterClose | 在端口关闭后触发该事件 |
AfterOpen | 在端口打开后触发该事件 |
BeforeClose | 在端口关闭前触发该事件 |
BeforeOpen | 在端口打开前触发该事件 |
ReceiveData | 数据采集后触触发该事件 |
# 10.2.1. ReceiveData 事件
TReceiveItemDataEvent = procedure(AItem: TMeterItem) of object;
指示仪表数据采集时,将采集到的数据通过该事件上回调数据。
- 示例
procedure TMyHandler.Meter1ReceiveData;
var
lvitem:Tlistitem; //此处一定要预定义临时记录存储变量.
begin
if lvLog.Items.Count > 27 then
lvLog.Items.Clear;
lvitem := lvLog.Items.add;
lvitem.Caption:=AItem.Code;
lvitem.SubItems.Add(AItem.Caption);
lvitem.SubItems.Add(AItem.Address);
lvitem.SubItems.Add(AItem.Value1);
lvitem.SubItems.Add(FormatDateTime('c',now));
end;
2
3
4
5
6
7
8
9
10
11
12
13
# 11. TfxRestAPI
该组件是RestAPI客户端,用于向第三方的Rest服务器发送请求,并获取反馈的信息。关于REST的表述可参考 REST (opens new window)。
在控件上使用鼠标双击,可使用向导界面的方式设置Rest请求信息,设置完成后,点击 Send
按钮查看反馈的结果信息。点击 OK
按钮将设置的内容保存至RestAPI控件属性。
# 11.1. 属性
属性 | 功能说明 |
---|---|
APIName | API的名称,作为标记描述信息使用 |
Body | 请求主体的内容 |
ContentType | 请求的内容类型 |
Headers | 请求头的值的类型 |
Method | 请求的类型 |
Params | 请求的参数内容 |
Script | 请求的脚本内容 |
Server | 请求的服务器的地址信息 |
Url | 请求的除服务器以外的地址的信息 |
# 11.1.1. Body
property Body: TStringList;
设置请求体中的内容,点击属性右侧的按钮以打开文本编辑框,向其中输入信息,通常可在其中输入格式化的JSON文本或者key=value
类型的文本或者纯文本信息,根据API的需求进行填写。
当ContentType设置为application/json
时,Body处填写的是格式化的JSON文本;当ContentType设置为application/x-www-form-urlencoded
时,Body处填写的是key=value
键值对。
# 11.1.2. ContentType
property ContentType: string;
设置请求内容的类型。通常有以下几种类型:
text/html
:带有html标记的文本类型。application/json
:格式化的json文本类型。application/xml
:格式化的xml文本类型。application/octet-stream
:未知类型,默认表示为二进制的数据流类型。application/x-www-form-urlencoded
:key=value类型的文本编码方式。
# 11.1.3. Headers
property Headers: TStringList;
设置发送请求的请求头的信息。
# 11.1.4. Method
property Method: TRequestMethod;
设置请求的发送方式。
rmGET
:以GET的方式发送请求。rmPOST
:以POST的方式发送请求。rmDELETE
:以DELETE的方式发送请求。rmPUT
:以PUT的方式发送请求。
# 11.1.5. Params
property Params: TStringList;
设置发送的请求中带有的参数信息。以key=value
的方式设置,每行设置一个。此部分的参数在发送中会使用URL编码的方式附加在URL后进行发送。
比如在Params中设置的参数为:
key1=value1
key2= value2
2
请求的地址为http://192.168.1.1/
,则在经过URL编码后请求的地址形式如下:
http://192.168.1.1/?key1=value1&key2=value2
在请求的Rest地址与第一个参数中间使用?
分隔,其余的参数与参数之间使用&
进行分隔。
# 11.1.6. Script
property Script: TStringList;
用于设置API返回的JSON信息中将会使用的提取特定数值的脚本信息。可使用的有以下几项内容。
GetJSONString
:获取JSON中特定值的文本。GetJSONNumber
:获取JSON中特定值的数值。GETJSONInteger
:获取JSON中特定值的整数值信息。GETJSONObject
:获取JSON中特定的对象GETJSONBool
:获取JSON中特定值的布尔值信息。GETJSONObject
:获取JSON中指定名称的对象信息。GETJSONArray
:获取JSON中指定名称的对象数组信息。GETJSONPair
:获取JSON中指定名称的键值对的信息。
具体的使用方式如下:
{
"$user":{
"auth_token": "ABDEDEEDEDEED",
"number": 1,
"float": 3.2,
"bool": true
},
"status":[
{"ok": true},
{"ok": false}
]
}
2
3
4
5
6
7
8
9
10
11
12
如果我们要从中取出auth_token
的值,在脚本信息中可以使用下述方式获取:
方式一:写路径获取
GETJSONString=$user.auth_token
方式二:分层单步获取
GETJSONString=$user
GETJSONString=auth_token
2
如果是取特定数组中的对象,使用以下方式来获取:
数组有名称
GETJSONBool=status[0].ok
数组无名称:数组无名称通常使用在起始的位置。表示方式如下:
[
{"bad": "AA"},
{"bad": "BB"}
]
2
3
4
上述写法如下:
GETJSONString=[0].bad
如果要取JSON中表示的各种数据类型的数值或者对象,使用下述方式:
文本类型
GETJSONString=$user.auth_token
数值类型(返回类型为文本)
GETJSONNumber=$user.number
整数
GETJSONInteger=$user.number
浮点数
GETJSONFloat=$user.float
布尔值
GETJSONBool=$user.bool
对象
GETJSONObject=$user
数组
GETJSONArray=status
值对
GETJSONPair=$user
# 11.1.7. Server
property Server: string;
设定API厂商的服务地址,此服务地址可从API服务管理界面进行设置。
# 11.1.8. Url
property Url: string;
设定处服务地址外的具体Url路径信息。首位不需要带地址分隔符号。
# 11.2. 事件
# 11.2.1. ResultData
procedure UgRestApiResultData(sender: tobject;aresult: string);
设置当接收到RestAPI返回的消息时触发事件,在aresult
中显示返回的文本。
示例:假设从返回的结果中获取auth_token
,可使用下述的方式来获取。
//PasScript
Procedure fxRestAPI1OnResultData(Sender: TObject; AResult: string);
Var
vValue: TJSONValue;
begin
fxMemo1.Lines.Add(aresult);
vValue := fxfun.ParseJSONValue(aresult);
vValue := TJSONObject(vValue).GetValue('$user');
vToken := TJSONObject(vValue).GetValue('auth_token').Value;
vJSON.Free;
end;
2
3
4
5
6
7
8
9
10
11
# 11.3. 方法
# 11.3.1. Send
procedure Send;
设置发送请求。
# 12. fxWebSocketClient
此组件为WebSocket客户端组件,可用于与WebSocket服务器连接实现通信。
# 12.1. 属性
# 12.1.1. Active
property Active: Boolean;
是否激活WebSocket客户端,为 True
时表示启用客户端功能。
# 12.1.2. Authentication
用于认证相关的选项,包含四种认证方式。如不需要使用认证,将其中的 Enabled
属性设置为 False
。以下是认证方式对应的属性说明。
Session:客户端将用户名
User
与Password
通过HTTP GET的方式发送给服务器,如果WebSocket认证成功,服务器会给客户端反馈一个会话ID,客户端使用会话ID作为参数可发起WebSocket连接。当Session
中的Enabled
设置为True
时使用此认证方式。URL:客户端将用户名
User
与密码Password
作为参数传递给服务器来打开WebSocket连接。当URL
中的Enabled
设置为True
时使用此认证方式。Basic:客户端将用户名
User
与密码Password
置于HTTP请求头中,使用基本认证的方式实现认证。当Basic
中的Enabled
设置为True
时使用此认证方式。Token: 使用令牌的方式进行认证,在发送时将令牌置于请求头中进行发送。当
Token
中的Enabled
设置为True
时使用此认证方式。
# 12.1.3. HeartBeat
用于设置心跳连接的相关选项,当其中的 Enabled
属性设置为 True
时,系统会每隔固定时向服务器发送心跳包以保持客户端的连接。
- Interval:设置心跳包发送的间隔时长。
- Timeout:设置发送心跳包的反馈的超时时间。
# 12.1.4. Host
设置WebSocket服务器的IP地址或域名。
# 12.1.5. LoadBalancer
设置负载均衡的相关选项。当 Enabled
选项设置为 True
时,表示当前客户端连接至一个负载均衡服务器用以广播消息并获取服务器相关的信息。
- Host:负载均衡服务器的主机地址。
- Port:负载均衡服务器的端口号。
- Servers:手动设置WebSocket Servers进行连接(如果不使用Load Balancer Server获取服务器连接方式)。
# 12.1.6. LogFile
在Debug模式下使用,用于输出调试日志。
- Enabled:设置是否启用日志文件。
- FileName:设置显示的日志文本名称。
# 12.1.7. NotifyEvents
设置WebSocket事件的通知方式。
- neAsynchronous:这是默认模式,在异步模式下通知线程事件,将事件添加到与主线程异步同步的队列中。
- neSynchronous:如果选择该模式,在同步模式下通知线程事件,需要与主线程同步来通知这些事件。
- nwNoSync:不与主线程同步,如果需要访问非线程安全的控件,则需要实现自己的同步方法。
# 12.1.8. Options
设置在连接阶段使用自定义的请求头。
CleanDisconnect:如果启用,每次客户端与服务器断开连接时,首先发送消息通知服务器连接将被关闭。
FragmentedMessages:允许处理碎片消息
- frgOnlyBuffer:消息被缓冲,直到收到所有数据,它引发 OnBinary 或 OnMessage 事件(默认选项)
- frgOnlyFragmented:每次收到新的分片时,都会引发 OnFragmented 事件。
- frgAll:每次接收到一个新的分片时,它会引发 OnFragmented 事件,其中包含从第一个数据包收到的所有数据。 当收到所有数据时,它会引发 OnBinary 或 OnMessage 事件。
Origin:自定义连接原点。
Parameters:定义 GET 上使用的参数。
RaiseDisconnectExceptions:默认启用,每次因协议错误断开连接时引发异常。
ValidateUTF8:如果启用,则验证消息是否包含 UTF8 有效字符,默认情况下禁用。
# 12.1.9. Port
设置连接的端口。
# 12.1.10. Proxy
设置是否使用代理服务器,如需要使用,设置 Enabled
为 True
,填写代理服务器的地址,端口号,用户名与密码,并设置代理服务器的连接类型 proxyType
。
- pxyHTTP:HTTP的代理服务器。
- pxySocks4:Socks4的代理服务器。
- pxySocks4A:Socks4A的代理服务器。
- pxySocks5:Socks5的代理服务器。
# 12.1.11. QueueOptions
该属性允许在内部队列中排队消息(而不是直接发送)并在连接线程的上下文中发送消息,这可以防止多个线程尝试发送消息时发生锁定。 对于每种消息类型:可以配置文本(Text)、二进制(Binary)或 Ping 队列,默认情况下设置的值是 qmNone,这意味着消息不排队。 其他类型,表示不同的队列级别,它们之间的区别只是处理的顺序(首先处理 qmLevel1,然后是 qmLevel2,最后是 qmLevel3)。
示例:如果Text和Binary消息的属性设置为 qmLevel2 并且 Ping 设置为 qmLevel1。 客户端将首先处理 Ping 消息(因此,如果它们同时排队,则 Ping 消息比 Text 或 Binary 先发送),然后在同一队列中处理 Text 和 Binary 消息。
# 12.1.12. Throttle
用于限制每秒接收发送的数据速率。设置 Enabled
表示为启用功能,在 BitsPerSec
中设置速率。
# 12.1.13. TLS
是否启用安全连接。
# 12.1.14. TLSOptions
如果TLS选项启用,以下可进行TLS选项的自定义设置。
- ALPNProtocols:将发送到服务器的 ALPN 协议列表。
- CertFile:证书文件的路径。
- IOHandler:选择使用哪个库来使用 TLS 进行连接。
- iohOpenSSL:使用 OpenSSL 库,是 Indy 组件的默认设置。需要部署openssl库(可以从注册客户的私人账户下载)。
- iohSChannel:使用 Microsoft 为 Windows 实现的安全协议 Secure Channel,不需要部署 openssl 库。仅适用于 Windows 32/64 位。
- KeyFile:证书密钥文件的路径。
- RootCertFile:根证书文件的路径。
- Password:如果证书使用密码保护,请在此处设置。
- VerifyCertificate:如果必须验证证书,则启用此属性。
- VerifyDepth:是一个整数属性,表示对 X.509 证书执行验证时允许的最大链接数。
- Version:默认情况下协商所有可能的 TLS 版本,从新到低。可以选择特定的 TLS 版本。
- tlsUndefined:这是默认值,客户端将尝试协商所有可能的 TLS 版本(从最新到最旧),直到连接成功。
- tls1_0:实现 TLS 1.0
- tls1_1:实现 TLS 1.1
- tls1_2:实现 TLS 1.2
- tls1_3:实现 TLS 1.3
- OpenSSL_Options:openSSL 库的配置。
- APIVersion:允许定义将使用哪个 OpenSSL API。
- oslAPI_1_0:使用 API 1.0 OpenSSL,Indy 最新支持
- oslAPI_1_1:使用 API 1.1 OpenSSL,需要我们的自定义 Indy 库并允许使用 OpenSSL 1.1.1 库(支持 TLS 1.3)。
- oslAPI_3_0:使用 API 3.0 OpenSSL,需要我们的自定义 Indy 库并允许使用 OpenSSL 3.0.0 库(支持 TLS 1.3)。
- APIVersion:允许定义将使用哪个 OpenSSL API。
# 12.1.15. WatchDog
当此项启用时,如果检测到连接意外断开,则会自动尝试进行重新连接。
- Interval:检测的时间间隔。
- Attempt:尝试的最大次数,如果设置为0,表示会进行无限次数的连接。
# 12.2. 事件
事件名称 | 触发条件 |
---|---|
OnBeforeHeartBeat | 如果启用了 HeartBeat,则允许实现自定义 HeartBeat 设置 Handled 参数为 True(这意味着不会发送标准 websocket ping) |
OnBinaryExt | 当每次向服务器发送二进制消息时,会触发此事件 |
OnConnect | 当建立 WebSocket 连接时,会触发此事件 |
OnDisConnect | 当 WebSocket 连接断开时,会触发此事件 |
OnError | 每次出现 WebSocket 错误(如格式错误的握手)时,都会触发此事件 |
OnException | 每次发生异常时,都会触发此事件 |
OnFragmented | 当接收到来自消息的片段时(仅在 Options.FragmentedMessages = frgAll 或 frgOnlyFragmented 时触发) |
OnHandShake | 在客户端评估握手时触发此事件 |
OnMessage | 每次服务器发送消息时,触发该事件 |
OnSSLVerifyPeer | 如果启用了验证证书,在这种情况下您可以验证服务器证书是否有效并接受与否 |
# 12.3. 方法
# 12.3.1. Connect
function Connect(aTimeout:Integer): Boolean;
向服务器发起连接。
# 12.3.2. DisConnect
function Disconnect(aTimeout:Integer): Boolean;
从服务器断开连接。
# 12.3.3. WriteString
procedure WriteString(aText: String);
向服务器发送文本消息。
fxWebSocketClient1.WriteString('{"action":"login","sid":"pintoo"}');
# 12.3.4. WriteStream
procedure WriteString(aStream: TStream);
向服务器发送二进制内容消息。
# 12.3.5. Ping
procedure ping(aText:String);
向服务器发送一个测试包,如果出现连接超时而没有接收到消息,则会关闭连接。
# 12.3.6. Start
procedure Start;
使用第二线程来连接服务器,这样可以避免连接过程中的应用冻结。
# 12.3.7. Stop
procedure Stop;
使用第二线程来断开服务器连接,这样可以避免断开连接过程中的应用冻结。
# 13. TfxWebSocketServer
此组件将作为WebSocket服务器控件,用于转发WebSocket消息。
# 13.1. 属性
# 13.1.1. Active
设置是否激活服务器。
# 13.1.2. Authentication
如果此项的 Enabled
设置为 True
,则启用连接认证。
- Authusers:设置认证的用户列表,每行的用户认证信息请按照以下方式进行填写:
user=password
。 - AllowNonAuth:设置是否运行不使用认证。
- Basic:设置是否使用为Basic认证。仅适用于服务器与客户端的 Websockets 和 HTTP 请求(客户端 Web 浏览器不支持此类身份验证)。
- Session:客户端需要做一个 HTTP GET 传递用户名和密码,如果经过身份验证,服务器响应一个会话 ID。 使用此会话 ID,客户端打开作为参数传递的 WebSocket 连接。
- URL:客户端打开 Websocket 连接,将用户名和密码作为参数传递。
# 13.1.3. Bindings
用于配置管理服务绑定的IP地址与端口号。可使用此方式来管理绑定用于外部或内部访问的端口信息。
# 13.1.4. Extensions
您可以对发送的消息启用压缩(如果客户端不支持压缩,则消息将自动交换而无需压缩)。
# 13.1.5. FallBack
如果浏览器本身不支持 WebSockets 协议,您可以启用以下回退:
- Flash:如果启用,如果浏览器没有原生 WebSocket 实现并且启用了 Flash,它使用 Flash 作为传输。
- ServerSentEvents:如果启用,则允许从服务器向浏览器客户端发送推送通知。
- Retry:尝试重新连接到服务器的时间间隔(以秒为单位)(默认为 3)。
# 13.1.6. HeartBeat
用于设置心跳连接的相关选项,当其中的 Enabled
属性设置为 True
时,系统会每隔固定时向客户端发送心跳包以保持客户端的连接。
- Interval:设置心跳包发送的间隔时长。
- Timeout:设置发送心跳包的反馈的超时时间。
# 13.1.7. HTTP2Options
默认情况下未启用 HTTP/2 协议,它使用 HTTP 1.1 来处理 HTTP 请求。如果您想在客户端支持的情况下使用 HTTP/2 协议,则启用此属性。
- Enabled:如果设置为
true
,则支持 HTTP/2 协议。如果客户端不支持 HTTP/2,将使用 HTTP 1.1 作为后备。 - Settings:指定要发送至HTTP/2 服务器的头值。
- EnablePush:默认选项为
True
,设置此项可用于避免服务器向客户端推送内容。 - HeaderTableSize:允许发送方通知远程端点用于解码头块的头压缩表的最大大小,以八位字节为单位。编码器可以通过使用特定于标头块内的标头压缩格式的信令来选择等于或小于此值的任何大小。初始值为 4,096 个八位字节。
- InitialWindowSize:设置发送者的初始窗口大小(以八位字节为单位),用于流级流量控制。初始值为 65,535 个字节。此设置影响所有流的窗口大小。
- MaxConcurrentStreams:设置发送方允许的最大并发流数。这个限制是有方向的:它适用于发送者允许接收者创建的流的数量。默认未设置限制。
- MaxFrameSize:表示发送方愿意接收的最大帧有效载荷的大小,以八位字节为单位。初始值为 16,384 个八位字节。
- MaxHeaderListSize:设置通知对等方发送方准备接受的标头列表的最大大小(以八位字节为单位)。该值基于头字段的未压缩大小,包括以八位字节为单位的名称和值的长度以及每个标头字段的 32 个八位字节的开销。
- EnablePush:默认选项为
# 13.1.8. IOHandlerOptions
默认使用普通的 Indy Handler(每个连接都运行在自己的线程中)。
- iohDefault:默认indy IOHandler,每个新连接创建一个新线程。
- iohIOCP:仅适用于 windows 并且需要自定义 indy 版本,线程池处理所有连接。
# 13.1.9. LoadBalancer
连接到负载均衡服务器以广播消息并发送有关服务器的信息。
- AutoRegisterBindings:如果启用,则自动将服务器绑定发送到负载平衡器服务器。
- AutoRestart:负载平衡器服务器连接断开并尝试重新连接后等待的时间(以秒为单位); 零表示不重新启动(默认情况下);
- Bindings:可以设置发送到负载均衡服务器的手动绑定,例如:
WS://127.0.0.1:80
或者WSS://127.0.0.2:8888
。 - Enabled:如果启用,它将连接到负载均衡服务器。
- Guid:用于对负载平衡服务器进行标识。
- Host:负载均衡服务器主机的地址。
- Port:负载均衡服务器的端口。
# 13.1.10. LogFile
在Debug模式下使用,用于输出调试日志。
- Enabled:设置是否启用日志文件。
- FileName:设置显示的日志文本名称。
# 13.1.11. MaxConnections
设置允许的最大连接数(如果设置为零,则表示为无限制)。
# 13.1.12. NotifyEvents
设置WebSocket事件的通知方式。
- neAsynchronous:这是默认模式,在异步模式下通知线程事件,将事件添加到与主线程异步同步的队列中。
- neSynchronous:如果选择该模式,在同步模式下通知线程事件,需要与主线程同步来通知这些事件。
- nwNoSync:不与主线程同步,如果需要访问非线程安全的控件,则需要实现自己的同步方法。
# 13.1.13. Options
设置在连接阶段使用自定义的请求头。
CleanDisconnect:如果启用,每次客户端与服务器断开连接时,首先发送消息通知服务器连接将被关闭。
FragmentedMessages:允许处理碎片消息
- frgOnlyBuffer:消息被缓冲,直到收到所有数据,它引发 OnBinary 或 OnMessage 事件(默认选项)
- frgOnlyFragmented:每次收到新的分片时,都会引发 OnFragmented 事件。
- frgAll:每次接收到一个新的分片时,它会引发 OnFragmented 事件,其中包含从第一个数据包收到的所有数据。 当收到所有数据时,它会引发 OnBinary 或 OnMessage 事件。
HTMLFiles:如果此项启用,可允许请求浏览器测试功能。地址格式为 http://host:port/sgcWebSockets.html (opens new window)。
JavaScriptFiles:如果此项启用,可允许调用内建的JavaScript库。
RaiseDisconnectExceptions:默认启用,每次因协议错误断开连接时引发异常。
ReadTimeOut:检查socket连接是否有数据的时间,默认10毫秒。
ValidateUTF8:如果启用,则验证消息是否包含 UTF8 有效字符,默认情况下禁用。
WriteTimeOut:向其他对等方发送数据的最大时间(以毫秒为单位),默认为 0(仅适用于 Windows 操作系统)。
# 13.1.14. Port
设置监听的端口号。
# 13.1.15. QueueOptions
该属性允许在内部队列中排队消息(而不是直接发送)并在连接线程的上下文中发送消息,这可以防止多个线程尝试发送消息时发生锁定。 对于每种消息类型:可以配置文本(Text)、二进制(Binary)或 Ping 队列,默认情况下设置的值是 qmNone,这意味着消息不排队。 其他类型,表示不同的队列级别,它们之间的区别只是处理的顺序(首先处理 qmLevel1,然后是 qmLevel2,最后是 qmLevel3)。
示例:如果Text和Binary消息的属性设置为 qmLevel2 并且 Ping 设置为 qmLevel1。 客户端将首先处理 Ping 消息(因此,如果它们同时排队,则 Ping 消息比 Text 或 Binary 先发送),然后在同一队列中处理 Text 和 Binary 消息。
# 13.1.16. SecurityOptions
设置安全相关的选项。
- OriginsAllowed:在此处定义允许哪些来源(默认情况下接受来自所有来源的连接),如果来源不在列表中,则关闭连接。比如:
- 允许IP 127.0.0.1 和端口 5555 的所有连接。OriginsAllowed = "http://127.0.0.1:5555"
- 允IP 127.0.0.1 和所有端口的所有连接。 OriginsAllowed = "http://127.0.0.1:*"
- 允许来自任何 IP 的所有连接。 OriginsAllowed = ""
# 13.1.17. SSL
是否启用SSL安全连接。
# 13.1.18. SSLOptions
用于设置SSL的属性:证书,文件名称,密码等。
- CertFile:证书文件的路径。
- KeyFile:证书密钥文件的路径。
- RootCertFile:根证书文件的路径。
- Password:如果证书使用密码保护,请在此处设置。
- VerifyCertificate:如果必须验证证书,则启用此属性。
- VerifyDepth:是一个整数属性,表示对 X.509 证书执行验证时允许的最大链接数。
- Version:默认情况下协商所有可能的 TLS 版本,从新到低。可以选择特定的 TLS 版本。
- tlsUndefined:这是默认值,客户端将尝试协商所有可能的 TLS 版本(从最新到最旧),直到连接成功。
- tls1_0:实现 TLS 1.0
- tls1_1:实现 TLS 1.1
- tls1_2:实现 TLS 1.2
- tls1_3:实现 TLS 1.3
- OpenSSL_Options:openSSL 库的配置。
- APIVersion:允许定义将使用哪个 OpenSSL API。
- oslAPI_1_0:使用 API 1.0 OpenSSL,Indy 最新支持
- oslAPI_1_1:使用 API 1.1 OpenSSL,需要我们的自定义 Indy 库并允许使用 OpenSSL 1.1.1 库(支持 TLS 1.3)。
- oslAPI_3_0:使用 API 3.0 OpenSSL,需要我们的自定义 Indy 库并允许使用 OpenSSL 3.0.0 库(支持 TLS 1.3)。
- APIVersion:允许定义将使用哪个 OpenSSL API。
- ECDHE:如果启用,则使用 ECDHE 而不是 RSA 作为密钥交换。 如果您使用 OpenSSL 1.0.2,建议启用 ECDHE。
# 13.1.19. WatchDog
当此项启用时,如果检测到连接意外断开,则会自动尝试进行重新连接。
- Interval:检测的时间间隔。
- Attempt:尝试的最大次数,如果设置为0,表示会进行无限次数的连接。
# 13.2. 事件
事件名称 | 触发条件 |
---|---|
OnConnect | 每次建立 WebSocket 连接时,都会触发此事件 |
OnDisConnect | 每次断开 WebSocket 连接时,都会触发此事件 |
OnError | 每次出现 WebSocket 错误(如格式错误的握手)时,都会触发此事件 |
OnMessage | 每次客户端发送文本消息并被服务器接收时,都会触发此事件 |
OnBinaryExt | 每次客户端发送二进制消息并被服务器接收时,都会触发此事件 |
OnHandShake | 在服务器端评估握手后触发此事件 |
OnException | 每次发生异常时,都会触发此事件 |
OnAuthentication | 如果启用了身份验证,则触发此事件。您可以检查客户端传递的用户和密码,并启用/禁用 Authenticated Variable |
OnUnknownProtocol | 如果未检测到 WebSocket 协议(例如,因为客户端使用纯 TCP 协议),在这种情况下可以接受或拒绝连接 |
OnStartup | 在服务器启动后触发事件 |
OnShutdown | 在服务器停止后触发 |
OnTCPConnect | 公共事件,在 TCP 连接之后和 Websocket 握手之前调用。当您的服务器接受纯 TCP 连接时很有用(因为 OnConnect 事件仅在客户端发送第一条消息后触发) |
OnBeforeHeartBeat | 如果启用了 HeartBeat,则允许实现自定义 HeartBeat 设置 Handled 参数为 True(这意味着不会发送标准 websocket ping) |
# 13.3. 方法
# 13.3.1. WriteString
procedure WriteString(aGuid,aText: String);
向客户端发送文本消息。
fxWebSocketServer1.WriteString(Guid,'{"action":"login","sid":"pintoo"}');
# 13.3.2. WriteStream
procedure WriteString(aGuid: String; aStream: TStream);
向服务器发送二进制内容消息。