通讯控制控件
# Smart 控件使用(通讯控制)
通讯控制控件组中包含特定通讯协定的连接方式的设定控件,用于实现物联网的相关功能。
# 1. TMQTTChannel 组件
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
TMQTTChannel 组件是基于MQTT扩展的,它集成了更丰富的功能,其集成的脚本功能,可实现对获取到的数据进行二次加工的能力。
# 1.1. 属性
- TMQTTChannel组件主要属性
属性 | 功能说明 |
---|---|
BrokerHostName | 指定MQTT代理服务器地址 |
BrokerPort | 指定MQTT代理服务器端 |
ClientID | 指定客户端标识 |
Username | 指定MQTTBroker 用户名 |
Password | 指定MQTTBroker 密码 |
Topic | 指定MQTT主题 |
DataControl | 指定数据控件 |
DataFields | 指定数据字段 |
DataLower | 指定数据下限 |
DataType | 指定数据类型 |
DataUpper | 指定数据上限 |
DataValue | 指定数据值 |
DBConnection | 指定数据连接组件 |
Enabled | 表示MQTTClient是否连接 |
EndTime | 指定数据采集结束时间 |
Formula | 指定数据解析脚本公 |
LowerWarning | 指定数据下限报警等级 |
Machine | 指定采集点所在的机器 |
MeterType | 指定采集点仪表类型 |
ModuleName | 指定设备名称 |
ModeuleNo | 指定设备编号 |
MonitorType | 指定监测类型 |
MsgScript | 指定消息脚本 |
Name | 指定控件名称 |
Offset | 指定偏移量 |
PulseRatio | 指定活动率% |
ReadConfig | 指定是否读取配置 |
SavaData | 指定是否保存采集之数据 |
Site | 指定站点名称 |
BeginTime | 指定数据采集开始时间 |
UpperWarning | 指定数据上限报警等级 |
# 1.1.1. BrokerHostName属性
property BrokerHostName: string read FHost write SetHost;
指定MQTT代理服务器地址
# 1.1.2. BrokerPort属性
property BrokerPort: Integer read FPort write SetPort;
指定MQTT代理服务器端
# 1.1.3. ClientID属性
property ClientID:string read FClientID write SetClientID;
指定客户端标识
# 1.1.4. DataType属性
property DataType: TDataType read FDataType write FDataType;
数据类型
# 1.1.5. DataValue属性
property DataValue: Variant read FDataValue write FDataValue;
获取到的数据值
# 1.1.6. DataControl属性
property DataControl: string read FDataControl write FDataControl;
指定一个需要显示数据的控件名
# 1.1.7. DataField属性
property DataField: string read FDataField write FDataField;
指定一个数据控件显示数据的属性名
# 1.1.8. Enabled属性
property Enabled: boolean read FEnabled write SetEnabled;
表示MQTTClient是否连接
# 1.1.9. Username属性
property Username: string read FUsername write SetUsername;
指定MQTTBroker 用户名
# 1.1.10. Password属性
property Password: string read FPassword write SetPassword;
指定MQTTBroker 密码
# 1.1.11. Formula属性
property Formula: TStrings read FFormula write SetFormula;
数据解析公式
# 1.1.12. Topic属性
property Topic: string read FTopic write FTopic;
指定MQTT主题
# 1.1.13. LowerWarning属性
property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
UpperWarning属性是指数据下限异常类型,目前有:lw1,lw2,lw3,lw4,lwNote。
# 1.1.14. Machine属性
property Machine: string read FMachine write FMachine;
Machine属性指采集站点所属哪个机台设备。
# 1.1.15. MeterType属性
property MonitorType: string read FMonitorType write FMonitorType;
MeterType属性指仪表类型
# 1.1.16. MobusConnection属性
property ModbusConnection: TModbusConnection read FModbusConnection write SetModbusConnection;
MobusConnection属性指TModbusConnection组件,使用时必需绑定此组件。
# 1.1.17. ModuleName属性
property ModuleName: string read FModuleName write FModuleName;
ModuleName属性指Modbus设备名称,XX温控器、XX电表 等。
# 1.1.18. ModeuleNo属性
property ModuleNo: string read FModuleNo write FModuleNo;
ModuleNo属性指Modbus设备的编号,如001、002等。
# 1.1.19. MonitorType属性
property MonitorType: string read FMonitorType write FMonitorType;
MonitorType属性指站点的监测类型,如温度、压力等。
# 1.1.20. MsgScript属性
property MsgScript: TStrings read FMsgScript write SetMsgScript;
MsgScript属性用作预警消息触发时,可在脚本中进行其它的业务整合运用,脚本采用纯Pascal语言脚本。
# 1.1.21. Offset属性
property Offset: Double read FOffset write SetOffset;
Offset属性是指数据偏移量。
# 1.1.22. BeginTime属性
property BeginTime: string read FStartDateTime write FStartDateTime;
BeginTime属性指采集数据的起始时间。
# 1.1.23. Site属性
property Site: string read FSite write FSite;
Site属性是指MQTT设备的站点名称,可以作为MQTT数据地址的说明之用。
# 2. TMQTTClient 组件
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
# 2.1. 属性
- TMQTTClient组件主要属性
属性 | 功能说明 |
---|---|
BrokerHostName | 指定MQTT代理服务器地址 |
BrokerPort | 指定MQTT代理服务器端 |
ClientID | 指定客户端标识 |
DataType | 数据类型 |
DataValue | 获取到的数据值 |
DataControl | 指定一个需要显示数据的控件名 |
DataField | 指定一个数据控件显示数据的属性名 |
Enabled | 表示MQTTClient是否连接 |
Username | 指定MQTTBroker 用户名 |
Password | 指定MQTTBroker 密码 |
Formula | 数据解析公式 |
Topic | 指定MQTT主题 |
# 2.1.1. BrokerHostName属性
property BrokerHostName: string read FHost write SetHost;
指定MQTT代理服务器地址
# 2.1.2. BrokerPort属性
property BrokerPort: Integer read FPort write SetPort;
指定MQTT代理服务器端
# 2.1.3. ClientID属性
property ClientID:string read FClientID write SetClientID;
指定客户端标识
# 2.1.4. DataType属性
property DataType: TDataType read FDataType write FDataType;
数据类型
# 2.1.5. DataValue属性
property DataValue: Variant read FDataValue write FDataValue;
获取到的数据值
# 2.1.6. DataControl属性
property DataControl: string read FDataControl write FDataControl;
指定一个需要显示数据的控件名
# 2.1.7. DataField属性
property DataField: string read FDataField write FDataField;
指定一个数据控件显示数据的属性名
# 2.1.8. Enabled属性
property Enabled: boolean read FEnabled write SetEnabled;
表示MQTTClient是否连接
# 2.1.9. Username属性
property Username: string read FUsername write SetUsername;
指定MQTTBroker 用户名
# 2.1.10. Password属性
property Password: string read FPassword write SetPassword;
指定MQTTBroker 密码
# 2.1.11. Formula属性
property Formula: TStrings read FFormula write SetFormula;
数据解析公式
# 2.1.12. Topic属性
property Topic: string read FTopic write FTopic;
指定MQTT主题
# 2.2. 事件
- TMQTTClient组件主要事件列表
事件 | 何时触发 |
---|---|
OnPublishRecerived | 当发布消息返回时触发该事件 |
# 2.2.1. OnPublishReceived事件
Procedure OnPublishReceived(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
# 2.3. 方法
方法 | 功能说明 |
---|---|
Subscribe | 主题订阅 |
Unsubscribe | 取消主题订阅 |
PublishStr | 推送主题消息(字符串) |
PublishByte | 推送主题消息 (字节) |
# 2.3.1. Subscribe函数
function Subscribe(ATopic: string): Word;
说明: MQTT 订阅主题 返回值: Word类型
- Subscribe函数语法中各部分说明
部分 | 说明 |
---|---|
ATopic | 主题内容 |
- 示例
//订阅LED主题
FThis.MQTTClient1.MQTTSubscribe('LED');
2
# 2.3.2. UnSubscribe函数
function Unsubscribe(ATopic: string): Word;
说明: 注销MQTT主题 返回值: Word类型
- MQTTUnSubscribe函数语法中各部分说明
部分 | 说明 |
---|---|
ATopic | 主题内容 |
- 示例
//注销LED主题
FThis.MQTTClient1.UnSubscribe('LED');
2
# 2.3.3. PublishStr函数
function PublishStr(ATopic: string; APayload: string): Word;
说明: MQTT推送消息 返回值: Word类型
- MQTTPublishStr函数语法中各部分说明
部分 | 说明 |
---|---|
ATopic | 主题内容 |
APayload | 推送的内容 |
- 示例
//熄灭LED
FThis.MQTTClient1.PublishStr('LED','0');
2
# 2.3.4. PublishByte函数
function PublishByte(ATopic: string; APayload: TBytes): Word;
说明: MQTT推送消息 返回值: Word类型
- PublishByte函数语法中各部分说明
部分 | 说明 |
---|---|
ATopic | 主题内容 |
APayload | 推送的内容 |
- 示例
//熄灭LED
FThis.MQTTClient1.PublishByte('LED',0);
2
示例
- MQTT 控制LED灯
type
TMyHandler = class(TForm)
private
FThis:TBaseForm;
Public
constructor Create(AOwner: TComponent); override;
{模块声明 MODULE-DECLARE}
procedure LEDOpenClick(Sender: TObject);
procedure LEDCloseClick(Sender: TObject);
procedure MQTTClientLEDPublishReceived(ASender: TObject; APacketID: Word; ATopic: string; APayload: string);
end;
constructor TMyHandler.Create(AOwner: TComponent);
begin
FThis :=TBaseForm(AOwner);
//MQTTClientLED 属性赋值
FThis.MQTTClientLED.BrokerHostName := FThis.edtBrokerHostName.Text;
FThis.MQTTClientLED.BrokerPort := StrToInt(FThis.edtBrokerPort.Text);
FThis.MQTTClientLED.Password := FThis.edtPassword.Text;
FThis.MQTTClientLED.Username := FThis.edtUsername.Text;
//MQTTClientLED 连接
FThis.MQTTClientLED.Enabled := true;
end;
{方法实现 MODULE-REAL}
//LEDOpen 控件 Click 事件
procedure TMyHandler.LEDOpenClick;
begin
//点亮LED
FThis.MQTTClientLED.PublishStr('LED','1');
end;
//LEDClose 控件 Click 事件
procedure TMyHandler.LEDCloseClick;
begin
//熄灭LED
FThis.MQTTClientLED.PublishStr('LED','0');
end;
//MQTTClientLED 控件 OnPublishReceived 事件(发布收到的内容)
procedure TMyHandler.MQTTClientLEDPublishReceived;
begin
if APayload='1' Then
FThis.MemoMsg.Lines.Add(ATopic+'->开')
else
FThis.MemoMsg.Lines.Add(ATopic+'->关');
end;
var
FMyHandler:TMyHandler;
begin
FMyHandler := TMyHandler.Create(this);
{事件绑定 MODULE-BIND}
this.LEDOpen.OnClick := FMyHandler.LEDOpenClick;
this.LEDClose.OnClick := FMyHandler.LEDCloseClick;
this.MQTTClientLED.OnPublishReceived := FMyHandler.MQTTClientLEDPublishReceived;
end.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 3. TModbusRTUReadChannel 组件
ModbusRTU多功能数据读取组件,可通过定义多个TModbusRTUReadItem子项实现对多个Modbus设备的数据采集。
你可以简单设置TModbusRTUReadItem组件属性即可完成ModbusRTU设备的数据采集功能,无需使用脚本。当然配合脚本使用可以丰富系统业务功能。
可通过右键点击控件,选择 Import Excel...
选项打开导入界面,选择基础资料表格文件实现导入的功能。制作的Excel表格表头与表格内容的示例如下:
SlaveID | StartReg | RegCount | FunctionCode | ConnectionMode | ModuleNo | ModuleName | Site | Machine | MeterType | MonitorType | DataType | BeginTime | EndTime | DataUpper | DataLower | UpperWarning | LowerWarning | SaveData | PulseRatio | Offset | Interval | SaveInterval |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | fc03 | cmClient | 温度 | 温控器 | 温湿度 | dtfloat | 08:00 | 20:00 | 100 | -30 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
1 | 2 | 1 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:01 | 20:01 | 101 | -29 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
1 | 3 | 1 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:02 | 20:02 | 102 | -28 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
2 | 1 | 1 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:03 | 20:03 | 103 | -27 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
2 | 2 | 1 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:04 | 20:04 | 104 | -26 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
2 | 3 | 1 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:05 | 20:05 | 105 | -25 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
3 | 1 | 1 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:06 | 20:06 | 106 | -24 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
3 | 2 | 1 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:07 | 20:07 | 107 | -23 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
3 | 3 | 1 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:08 | 20:08 | 108 | -22 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
4 | 1 | 2 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:09 | 20:09 | 109 | -21 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
4 | 3 | 2 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:10 | 20:10 | 110 | -20 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 | |||
4 | 5 | 2 | fc03 | cmClient | 湿度 | 温控器 | 温湿度 | dtfloat | 08:11 | 20:11 | 111 | -19 | uw1 | lw1 | TRUE | 0.5 | 1 | 1000 | 2000 |
# 3.1. 属性(Properties)
- TModbusRTUReadItem组件主要属性
属性 | 功能说明 |
---|---|
ConnectionMode | 指定连接模式 |
DataControl | 指定数据控件 |
DataFields | 指定数据字段 |
DataLower | 指定数据下限 |
DataType | 指定数据类型 |
DataUpper | 指定数据上限 |
DataValue | 指定数据值 |
DBConnection | 指定数据连接组件 |
Enabled | 指定是否启用 |
EndTime | 指定数据采集结束时间 |
Formula | 指定数据解析脚本公 |
FuntionCode | 指定Modbus功能码 |
Interval | 指定数据采集间隔时间 |
LowerWarning | 指定数据下限报警等级 |
Machine | 指定采集点所在的机器 |
MeterType | 指定采集点仪表类型 |
MobusConnection | 指定Modbus连接组件 |
ModuleName | 指定设备名称 |
ModeuleNo | 指定设备编号 |
MonitorType | 指定监测类型 |
MsgScript | 指定消息脚本 |
Name | 指定控件名称 |
Offset | 指定偏移量 |
PulseRatio | 指定活动率% |
ReadConfig | 指定是否读取配置 |
RegCount | 指定数据长度 |
SavaData | 指定是否保存采集之数据 |
SavaInterval | 指定数据保存间隔时间(毫秒) |
ServerAddress | 指定ModbusRUT设备地址 |
Site | 指定站点名称 |
BeginTime | 指定数据采集开始时间 |
StartReg | 指定起始地址 |
UpperWarning | 指定数据上限报警等级 |
# 3.1.1. ConnectionMode属性
property ConnectionMode: TConnMode read FConnectionMode write FConnectionMode;
ConnectionMode属性有两个值:cmClient、cmServer。 cmClient模式下,是客户端直接与Modbus设备进行通讯采集数据并显示的,cmServer模式下,是读取TARS物联网之下的配置内容,仅显示TARS采集的数据。
# 3.1.2. DataControl属性
property DataControl: string read FDataControl write SetDataControl;
DataControl属性是指需要将采集之数据显示在某个组件上时,这个组件的名称。
# 3.1.3. DataFields属性
property DataFields: string read FDataFields write SetDataFields;
DataFields属性是指需要将采集之数据显示在某个组件上时,这个组件的属性名称。
# 3.1.4. DataLower属性
property DataLower: Double read FDataLower write SetDataLower;
DataLower属性是指数据下限值,当采集之数据低于下限值时,启动报警或异常。
# 3.1.5. DataType属性
property DataType: TDataType read FDataType write SetDataType;
DataType属性是指采集之数据的数据类型。例如:* dtBoolean -- 布尔类型, dtInt --整数类型。
# 3.1.6. DataUpper属性
property DataUpper: Double read FDataUpper write SetDataUpper;
DataLower属性是指数据上限值,当采集之数据超过上限值时,启动报警或异常。
# 3.1.7. DataValue属性
property DataValue: Double read FDataValue write FDataValue;
DataValue属性指采集之数据存放处。
# 3.1.8. DBConnection属性
property DBConnection: TRFConnection read FOwerDBConnection write SetDBConnection;
DBConnection属性是用来指定TRFConnection组件的,通过TRFConnection组件,可与TARS云端服务器进行数据交互。
# 3.1.9. Enabled属性
property Enabled: boolean read FEnabled write SetEnabled;
当Enabled设置为True时,表示启动定时采集线程,可设置Interval属性值改变采集频率。
# 3.1.10. Formula属性
property Formula: TStrings read FFormula write SetFormula;
Formula属性是指可通过脚本对采集之数据进行业务处理,经过业务处理后的值还是存储于DataValue中。
示例
begin
FThis.DataValue := FThis.GetRegValues(0) * 0.1;
end.
2
3
# 3.1.11. FuntionCode属性
property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
FuntionCode属性是指Modbus功能码,根据不同的功能码读取Modbus设备不同区之地址的数据。
TModbusRTUReadItem支持的读取功能码:
- fc01 读取输出数位讯号 Coils(code $01)
- fc02 读取输入数位讯号 Discrete Inputs (code $02)
- fc03 读取输出类比讯号 Holding Registers (code $03)
- fc04读取输入类比讯号 Input Registers (code $04)
# 3.1.12. EndTime属性
property EndTime: string read FEndDateTime write FEndDateTime;
EndTime属性是指采集数据的动作何时结束。
# 3.1.13. Interval属性
property Interval: Integer read FInterval write SetInterval;
Interval属性是指采集线程的频率,默认1000毫秒。
# 3.1.14. LowerWarning属性
property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
UpperWarning属性是指数据下限异常类型,目前有:lw1,lw2,lw3,lw4,lwNote。
# 3.1.15. Machine属性
property Machine: string read FMachine write FMachine;
Machine属性指采集站点所属哪个机台设备。
# 3.1.16. MeterType属性
property MonitorType: string read FMonitorType write FMonitorType;
MeterType属性指仪表类型
# 3.1.17. MobusConnection属性
property ModbusConnection: TModbusConnection read FModbusConnection write SetModbusConnection;
MobusConnection属性指TModbusConnection组件,使用时必需绑定此组件。
# 3.1.18. ModuleName属性
property ModuleName: string read FModuleName write FModuleName;
ModuleName属性指Modbus设备名称,XX温控器、XX电表 等。
# 3.1.19. ModeuleNo属性
property ModuleNo: string read FModuleNo write FModuleNo;
ModuleNo属性指Modbus设备的编号,如001、002等。
# 3.1.20. MonitorType属性
property MonitorType: string read FMonitorType write FMonitorType;
MonitorType属性指站点的监测类型,如温度、压力等。
# 3.1.21. MsgScript属性
property MsgScript: TStrings read FMsgScript write SetMsgScript;
MsgScript属性用作预警消息触发时,可在脚本中进行其它的业务整合运用,脚本采用纯Pascal语言脚本。
# 3.1.22. Offset属性
property Offset: Double read FOffset write SetOffset;
Offset属性是指数据偏移量。
# 3.1.23. RegCount属性
property RegCount: Integer read FRegCount write SetRegCount;
RegCount属性是指读取ModbusTCP数据地址的数据长度。
# 3.1.24. SavaData属性
property SaveData: boolean read FSaveData write FSaveData default false;
SavaData属性勾选后,会将监测到的数据上传到TARS云端服务器,这里必需要指定DBConnection属性的控件。
# 3.1.25. SavaInterval属性
property SaveInterval: Integer read FSaveInterval write SetSaveInterval;
SavaInterval属性是指采集数据保存时的频率。
# 3.1.26. ServerAddress属性
property ServerAddress: Integer read FServerAddress write SetServerAddress;
ServerAddress属性是指ModbusRTU设备的地址(1~127)。
# 3.1.27. BeginTime属性
property BeginTime: string read FStartDateTime write FStartDateTime;
BeginTime属性指采集数据的起始时间。
# 3.1.28. Site属性
property Site: string read FSite write FSite;
Site属性是指ModbusTCP设备的站点名称,可以作为ModbusTCP数据地址的说明之用。
# 3.1.29. StartReg属性
property StartReg: Integer read FStartReg write SetStartReg;
RegCount属性是指读取ModbusTCP数据起始地址。
# 3.1.30. UpperWarning属性
property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
UpperWarning属性是指数据上限异常类型,目前有:uw1,uw2,uw3,uw4,uwNote。
# 3.2. 方法(Methods)
- TfxModbusRead组件主要方法
方法 | 功能说明 |
---|---|
GetRegValues | 根据索引号返回数组中的数值 |
GetBitValues | 根据索引号返回数组中的数值 |
SetPropValue | 设置组件属性值 |
GetPropValue | 读取组件属性值 |
# 3.2.1. GetRegValues方法
//存储类比信号数据
function GetRegValues(QIndex: Integer): Word;
2
通过GetRegValues方法可获取ModbusTCP设备返回的数组中的数据。通过索引号获取对应的数据。
var
i:Word;
begin
//获取数组中的第0个数据
i := FThis.ModbusRTUWriteChannel1.ModbusList[0].GetRegValues(0);
fxEdit2.Text := IntToStr(i);
end;
2
3
4
5
6
7
# 3.2.2. GetBitValues方法
//读取数位信号数据
function GetBitValues(QIndex: Integer): boolean;
2
通过GetRegValues方法可获取ModbusTCP设备返回的数组中的数据。通过索引号获取对应的数据。
var
i:boolean;
begin
//获取数组中的第0个数据
i := FThis.ModbusRTUWriteChannel1.ModbusList[0].GetBitValues(0);
end;
2
3
4
5
6
# 3.2.3. SetPropValue方法
procedure SetPropValue(QControl, QControlProp: string; QValue: Variant);
设置控件属性值,通过SetPropValue方法可以将DataValue赋值给指定控件的属性。
FThis.ModbusRTUWriteChannel1.ModbusList[0].SetPropValue(fxEdit1,Text);
# 3.2.4. GetPropValue方法
function GetPropValue(QControl, QControlProp: string): Variant;
设置控件属性值,通过GetPropValue方法可以获取指定控件属性的值,并返回。
var
v:String;
Begin
v := FThis.ModbusRTUWriteChannel1.ModbusList[0].GetPropValue(fxEdit1,Text);
End;
2
3
4
5
6
# 4. TModbusRTUWriteChannel 组件
ModbusRTU多功能数据写入组件,可通过定义多个TModbusRTUWriteItem子项实现对多个Modbus设备的控制。
你可以简单设置ModbusRTUWriteChannel组件属性即可完成ModbusRTU设备的数据写入功能,无需使用脚本。当然配合脚本使用可以丰富系统业务功能。
# 4.1. 属性(Properties)
- TModbusRTUWriteChannel Item组件主要属性
属性 | 功能说明 |
---|---|
ConnectionMode | 指定连接模式 |
DataControl | 指定数据控件 |
DataField | 指定数据字段 |
DataLower | 指定数据下限 |
DataType | 指定数据类型 |
DataUpper | 指定数据上限 |
DataValue | 指定数据值 |
DBConnection | 指定数据连接组件 |
Formula | 指定数据解析脚本公式 |
FuntionCode | 指定Modbus功能码 |
LowerWarning | 指定数据下限报警等级 |
Machine | 指定采集点所在的机器 |
MeterType | 指定采集点仪表类型 |
MobusConnection | 指定Modbus连接组件 |
ModuleName | 指定设备名称 |
ModeuleNo | 指定设备编号 |
MonitorType | 指定监测类型 |
MsgScript | 指定消息脚本 |
ReadConfig | 指定是否读取配置 |
RegCount | 指定数据长度 |
Site | 指定站点名称 |
StartReg | 指定起始地址 |
UpperWarning | 指定数据上限报警等级 |
# 4.1.1. ConnectionMode属性
property ConnectionMode: TConnMode read FConnectionMode write FConnectionMode;
ConnectionMode属性有两个值:cmClient、cmServer。 cmClient模式下,是客户端直接与Modbus设备进行通讯采集数据并显示的,cmServer模式下,是读取TARS物联网之下的配置内容,仅显示TARS采集的数据。
# 4.1.2. DataControl属性
property DataControl: string read FDataControl write SetDataControl;
DataControl属性是指需要将写入之数据显示在某个组件上时,这个组件的名称。
# 4.1.3. DataField属性
property DataField: string read FDataField write SetDataField;
DataField属性是指需要将写入之数据显示在某个组件上时,这个组件的属性名称。
# 4.1.4. DataLower属性
property DataLower: Double read FDataLower write SetDataLower;
DataLower属性是指数据下限值,当写入之数据低于下限值时,启动报警或异常。
# 4.1.5. DataType属性
property DataType: TDataType read FDataType write SetDataType;
DataType属性是指写入之数据的数据类型。例如:* dtBoolean -- 布尔类型, dtInt --整数类型。
# 4.1.6. DataUpper属性
property DataUpper: Double read FDataUpper write SetDataUpper;
DataLower属性是指数据上限值,当写入之数据超过上限值时,启动报警或异常。
# 4.1.7. DataValue属性
property DataValue: Double read FDataValue write FDataValue;
DataValue属性指采写入数据存放处。
# 4.1.8. DBConnection属性
property DBConnection: TRFConnection read FOwerDBConnection write SetDBConnection;
DBConnection属性是用来指定TRFConnection组件的,通过TRFConnection组件,可与TARS云端服务器进行数据交互。
# 4.1.9. Formula属性
property Formula: TStrings read FFormula write SetFormula;
Formula属性是指可通过脚本对采集之数据进行业务处理,经过业务处理后的值还是存储于DataValue中。
示例
begin
FThis.DataValue := FThis.GetRegValues(0) * 0.1;
end.
2
3
# 4.1.10. 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)
# 4.1.11. Host属性
property Host: string read FHost write SetHost;
Host属性是指ModbusTCP设备的地址,如:192.168.1.100。
# 4.1.12. LowerWarning属性
property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
UpperWarning属性是指数据下限异常类型,目前有:lw1,lw2,lw3,lw4,lwNote。
# 4.1.13. Machine属性
property Machine: string read FMachine write FMachine;
Machine属性指采集站点所属哪个机台设备。
# 4.1.14. MeterType属性
property MonitorType: string read FMonitorType write FMonitorType;
MeterType属性指仪表类型
# 4.1.15. MobusConnection属性
property ModbusConnection: TModbusConnection read FModbusConnection write SetModbusConnection;
MobusConnection属性指TModbusConnection组件,使用时必需绑定此组件。
# 4.1.16. ModuleName属性
property ModuleName: string read FModuleName write FModuleName;
ModuleName属性指Modbus设备名称,XX温控器、XX电表 等。
# 4.1.17. ModeuleNo属性
property ModuleNo: string read FModuleNo write FModuleNo;
ModuleNo属性指Modbus设备的编号,如001、002等。
# 4.1.18. MonitorType属性
property MonitorType: string read FMonitorType write FMonitorType;
MonitorType属性指站点的监测类型,如温度、压力等。
# 4.1.19. MsgScript属性
property MsgScript: TStrings read FMsgScript write SetMsgScript;
MsgScript属性用作预警消息触发时,可在脚本中进行其它的业务整合运用,脚本采用纯Pascal语言脚本。
# 4.1.20. RegCount属性
property RegCount: Integer read FRegCount write SetRegCount;
RegCount属性是指写入ModbusTCP数据地址的数据长度。
# 4.1.21. Site属性
property Site: string read FSite write FSite;
Site属性是指ModbusTCP设备的站点名称,可以作为ModbusTCP数据地址的说明之用。
# 4.1.22. StartReg属性
property StartReg: Integer read FStartReg write SetStartReg;
RegCount属性是指写入ModbusTCP数据起始地址。
# 4.1.23. UpperWarning属性
property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
UpperWarning属性是指数据上限异常类型,目前有:uw1,uw2,uw3,uw4,uwNote。
# 4.2. 方法(Methods)
- TModbusRTUWriteChannel 组件主要方法
方法 | 功能说明 |
---|---|
Write | 执行Modbus写入操作 |
- TModbusRTUWriteItem组件主要方法
方法 | 功能说明 |
---|---|
execute | 执行Modbus写入操作 |
# 4.2.1. execute方法
procedure execute;
执行TModbusRTUWriteItem的写入事件。
# 4.2.2. Write方法
procedure Write(QIndex: Integer; QValue: Variant);
示例
//以下两种方法执行的结果是一样的。
FThis.ModbusRTUWriteChannel.ModbusList[0].DataValue := 1;
FThis.ModbusRTUWriteChannel.ModbusList[0].execute;
FThis.ModbusRTUWriteChannel.Write(0,1);
2
3
4
5
# 5. TModbusTCPReadChannel 组件
ModbusRTU多功能数据读取组件,可通过定义多个TModbusTCPReadItem子项实现对多个Modbus设备的数据采集。
你可以简单设置 TModbusRTUReadItem组件属性即可完成ModbusRTU设备的数据采集功能,无需使用脚本。当然配合脚本使用可以丰富系统业务功能。
# 5.1. 属性(Properties)
- TModbusRTUReadChannel Item组件主要属性
属性 | 功能说明 |
---|---|
ConnectionMode | 指定连接模式 |
DataControl | 指定数据控件 |
DataFields | 指定数据字段 |
DataLower | 指定数据下限 |
DataType | 指定数据类型 |
DataUpper | 指定数据上限 |
DataValue | 指定数据值 |
DBConnection | 指定数据连接组件 |
Enabled | 指定是否启用 |
EndTime | 指定数据采集结束时间 |
Formula | 指定数据解析脚本公 |
FuntionCode | 指定Modbus功能码 |
Host | 指定ModbusTCP设备IP地址 |
Interval | 指定数据采集间隔时间 |
LowerWarning | 指定数据下限报警等级 |
Machine | 指定采集点所在的机器 |
MeterType | 指定采集点仪表类型 |
ModuleName | 指定设备名称 |
ModeuleNo | 指定设备编号 |
MonitorType | 指定监测类型 |
MsgScript | 指定消息脚本 |
Name | 指定控件名称 |
Offset | 指定偏移量 |
PulseRatio | 指定活动率% |
Port | 指定ModbusTCP设备端口号 |
ReadConfig | 指定是否读取配置 |
RegCount | 指定数据长度 |
SavaData | 指定是否保存采集之数据 |
SavaInterval | 指定数据保存间隔时间(毫秒) |
Site | 指定站点名称 |
BeginTime | 指定数据采集开始时间 |
StartReg | 指定起始地址 |
UpperWarning | 指定数据上限报警等级 |
# 5.1.1. ConnectionMode属性
property ConnectionMode: TConnMode read FConnectionMode write FConnectionMode;
ConnectionMode属性有两个值:cmClient、cmServer。 cmClient模式下,是客户端直接与Modbus设备进行通讯采集数据并显示的,cmServer模式下,是读取TARS物联网之下的配置内容,仅显示TARS采集的数据。
# 5.1.2. DataControl属性
property DataControl: string read FDataControl write SetDataControl;
DataControl属性是指需要将采集之数据显示在某个组件上时,这个组件的名称。
# 5.1.3. DataFields属性
property DataFields: string read FDataFields write SetDataFields;
DataFields属性是指需要将采集之数据显示在某个组件上时,这个组件的属性名称。
# 5.1.4. DataLower属性
property DataLower: Double read FDataLower write SetDataLower;
DataLower属性是指数据下限值,当采集之数据低于下限值时,启动报警或异常。
# 5.1.5. DataType属性
property DataType: TDataType read FDataType write SetDataType;
DataType属性是指采集之数据的数据类型。例如:* dtBoolean -- 布尔类型, dtInt --整数类型。
# 5.1.6. DataUpper属性
property DataUpper: Double read FDataUpper write SetDataUpper;
DataLower属性是指数据上限值,当采集之数据超过上限值时,启动报警或异常。
# 5.1.7. DataValue属性
property DataValue: Double read FDataValue write FDataValue;
DataValue属性指采集之数据存放处。
# 5.1.8. DBConnection属性
property DBConnection: TRFConnection read FOwerDBConnection write SetDBConnection;
DBConnection属性是用来指定TRFConnection组件的,通过TRFConnection组件,可与TARS云端服务器进行数据交互。
# 5.1.9. Enabled属性
property Enabled: boolean read FEnabled write SetEnabled;
当Enabled设置为True时,表示启动定时采集线程,可设置Interval属性值改变采集频率。
# 5.1.10. Formula属性
property Formula: TStrings read FFormula write SetFormula;
Formula属性是指可通过脚本对采集之数据进行业务处理,经过业务处理后的值还是存储于DataValue中。
示例
begin
FThis.DataValue := FThis.GetRegValues(0) * 0.1;
end.
2
3
# 5.1.11. FuntionCode属性
property FunctionCode: TFunReadCode read FFunctionCode write SetFunctionCode;
FuntionCode属性是指Modbus功能码,根据不同的功能码读取Modbus设备不同区之地址的数据。
TModbusRTUReadItem支持的读取功能码:
- fc01 读取输出数位讯号 Coils(code $01)
- fc02 读取输入数位讯号 Discrete Inputs (code $02)
- fc03 读取输出类比讯号 Holding Registers (code $03)
- fc04 读取输入类比讯号 Input Registers (code $04)
# 5.1.12. Host属性
property Host: string read FHost write SetHost;
Host属性是指ModbusTCP设备的地址,如:192.168.1.100。
# 5.1.13. EndTime属性
property EndTime: string read FEndDateTime write FEndDateTime;
EndTime属性是指采集数据的动作何时结束。
# 5.1.14. Interval属性
property Interval: Integer read FInterval write SetInterval;
Interval属性是指采集线程的频率,默认1000毫秒。
# 5.1.15. LowerWarning属性
property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
UpperWarning属性是指数据下限异常类型,目前有:lw1,lw2,lw3,lw4,lwNote。
# 5.1.16. Machine属性
property Machine: string read FMachine write FMachine;
Machine属性指采集站点所属哪个机台设备。
# 5.1.17. MeterType属性
property MonitorType: string read FMonitorType write FMonitorType;
MeterType属性指仪表类型
# 5.1.18. ModuleName属性
property ModuleName: string read FModuleName write FModuleName;
ModuleName属性指Modbus设备名称,XX温控器、XX电表 等。
# 5.1.19. ModeuleNo属性
property ModuleNo: string read FModuleNo write FModuleNo;
ModuleNo属性指Modbus设备的编号,如001、002等。
# 5.1.20. MonitorType属性
property MonitorType: string read FMonitorType write FMonitorType;
MonitorType属性指站点的监测类型,如温度、压力等。
# 5.1.21. MsgScript属性
property MsgScript: TStrings read FMsgScript write SetMsgScript;
MsgScript属性用作预警消息触发时,可在脚本中进行其它的业务整合运用,脚本采用纯Pascal语言脚本。
# 5.1.22. Offset属性
property Offset: Double read FOffset write SetOffset;
UpperWarning属性是指数据偏移量。
# 5.1.23. Port属性
property Port: Integer read FPort write SetPort;
Host属性是指ModbusTCP设备的端口号,默认502。
# 5.1.24. RegCount属性
property RegCount: Integer read FRegCount write SetRegCount;
RegCount属性是指读取ModbusTCP数据地址的数据长度。
# 5.1.25. SavaData属性
property SaveData: boolean read FSaveData write FSaveData default false;
SavaData属性勾选后,会将监测到的数据上传到TARS云端服务器,这里必需要指定DBConnection属性的控件。
# 5.1.26. SavaInterval属性
property SaveInterval: Integer read FSaveInterval write SetSaveInterval;
SavaInterval属性是指采集数据保存时的频率。
# 5.1.27. BeginTime属性
property BeginTime: string read FStartDateTime write FStartDateTime;
BeginTime属性指采集数据的起始时间。
# 5.1.28. Site属性
property Site: string read FSite write FSite;
Site属性是指ModbusTCP设备的站点名称,可以作为ModbusTCP数据地址的说明之用。
# 5.1.29. StartReg属性
property StartReg: Integer read FStartReg write SetStartReg;
RegCount属性是指读取ModbusTCP数据起始地址。
# 5.1.30. UpperWarning属性
property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
UpperWarning属性是指数据上限异常类型,目前有:uw1,uw2,uw3,uw4,uwNote。
# 5.2. 方法(Methods)
- TModbusTCPReadItem 组件主要方法
方法 | 功能说明 |
---|---|
GetRegValues | 根据索引号返回数组中的数值 |
GetBitValues | 根据索引号返回数组中的数值 |
SetPropValue | 设置组件属性值 |
GetPropValue | 读取组件属性值 |
# 5.2.1. GetRegValues方法
//存储类比信号数据
function GetRegValues(QIndex: Integer): Word;
2
通过GetRegValues方法可获取ModbusTCP设备返回的数组中的数据。通过索引号获取对应的数据。
var
i:Word;
begin
//获取数组中的第0个数据
i := FThis.ModbusTCPReadChannel1.ModbusList[0].GetRegValues(0);
fxEdit2.Text := IntToStr(i);
end;
2
3
4
5
6
7
# 5.2.2. GetBitValues方法
//读取数位信号数据
function GetBitValues(QIndex: Integer): boolean;
2
通过GetRegValues方法可获取ModbusTCP设备返回的数组中的数据。通过索引号获取对应的数据。
var
i:boolean;
begin
//获取数组中的第0个数据
i := FThis.ModbusTCPReadChannel1.ModbusList[0].GetBitValues(0);
end;
2
3
4
5
6
# 5.2.3. SetPropValue方法
procedure SetPropValue(QControl, QControlProp: string; QValue: Variant);
设置控件属性值,通过SetPropValue方法可以将DataValue赋值给指定控件的属性。
FThis.ModbusTCPReadChannel1.ModbusList[0].SetPropValue(fxEdit1,Text);
# 5.2.4. GetPropValue方法
function GetPropValue(QControl, QControlProp: string): Variant;
设置控件属性值,通过GetPropValue方法可以获取指定控件属性的值,并返回。
var
v:String;
Begin
v := FThis.ModbusTCPReadChannel1.ModbusList[0].GetPropValue(fxEdit1,Text);
End;
2
3
4
5
6
# 6. TModbusTCPWriteChannel 组件
ModbusTCP多功能数据写入组件,可通过定义多个TModbusTCPWriteItem子项实现对多个Modbus设备的控制。
你可以简单设置ModbusTCPWriteChannel组件属性即可完成ModbusTCP设备的数据写入功能,无需使用脚本。当然配合脚本使用可以丰富系统业务功能。
# 6.1. 属性(Properties)
- TModbusTCPWriteChannel Item组件主要属性
属性 | 功能说明 |
---|---|
ConnectionMode | 指定连接模式 |
DataControl | 指定数据控件 |
DataField | 指定数据字段 |
DataLower | 指定数据下限 |
DataType | 指定数据类型 |
DataUpper | 指定数据上限 |
DataValue | 指定数据值 |
DBConnection | 指定数据连接组件 |
Formula | 指定数据解析脚本公式 |
FuntionCode | 指定Modbus功能码 |
Host | 指定ModbusTCP设备IP地址 |
LowerWarning | 指定数据下限报警等级 |
Machine | 指定采集点所在的机器 |
MeterType | 指定采集点仪表类型 |
ModuleName | 指定设备名称 |
ModeuleNo | 指定设备编号 |
MonitorType | 指定监测类型 |
MsgScript | 指定消息脚本 |
Port | 指定ModbusTCP设备端口号 |
ReadConfig | 指定是否读取配置 |
RegCount | 指定数据长度 |
Site | 指定站点名称 |
StartReg | 指定起始地址 |
UpperWarning | 指定数据上限报警等级 |
# 6.1.1. ConnectionMode属性
property ConnectionMode: TConnMode read FConnectionMode write FConnectionMode;
ConnectionMode属性有两个值:cmClient、cmServer。 cmClient模式下,是客户端直接与Modbus设备进行通讯采集数据并显示的,cmServer模式下,是读取TARS物联网之下的配置内容,仅显示TARS采集的数据。
# 6.1.2. DataControl属性
property DataControl: string read FDataControl write SetDataControl;
DataControl属性是指需要将写入之数据显示在某个组件上时,这个组件的名称。
# 6.1.3. DataField属性
property DataField: string read FDataField write SetDataField;
DataField属性是指需要将写入之数据显示在某个组件上时,这个组件的属性名称。
# 6.1.4. DataLower属性
property DataLower: Double read FDataLower write SetDataLower;
DataLower属性是指数据下限值,当写入之数据低于下限值时,启动报警或异常。
# 6.1.5. DataType属性
property DataType: TDataType read FDataType write SetDataType;
DataType属性是指写入之数据的数据类型。例如:* dtBoolean -- 布尔类型, dtInt --整数类型。
# 6.1.6. DataUpper属性
property DataUpper: Double read FDataUpper write SetDataUpper;
DataLower属性是指数据上限值,当写入之数据超过上限值时,启动报警或异常。
# 6.1.7. DataValue属性
property DataValue: Double read FDataValue write FDataValue;
DataValue属性指采写入数据存放处。
# 6.1.8. DBConnection属性
property DBConnection: TRFConnection read FOwerDBConnection write SetDBConnection;
DBConnection属性是用来指定TRFConnection组件的,通过TRFConnection组件,可与TARS云端服务器进行数据交互。
# 6.1.9. Formula属性
property Formula: TStrings read FFormula write SetFormula;
Formula属性是指可通过脚本对采集之数据进行业务处理,经过业务处理后的值还是存储于DataValue中。
示例
begin
FThis.DataValue := FThis.GetRegValues(0) * 0.1;
end.
2
3
# 6.1.10. 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)
# 6.1.11. Host属性
property Host: string read FHost write SetHost;
Host属性是指ModbusTCP设备的地址,如:192.168.1.100。
# 6.1.12. LowerWarning属性
property LowerWarning: TLowerWarning read FLowerWarning write SetLowerWarning;
UpperWarning属性是指数据下限异常类型,目前有:lw1,lw2,lw3,lw4,lwNote。
# 6.1.13. Machine属性
property Machine: string read FMachine write FMachine;
Machine属性指采集站点所属哪个机台设备。
# 6.1.14. MeterType属性
property MonitorType: string read FMonitorType write FMonitorType;
MeterType属性指仪表类型
# 6.1.15. ModuleName属性
property ModuleName: string read FModuleName write FModuleName;
ModuleName属性指Modbus设备名称,XX温控器、XX电表 等。
# 6.1.16. ModeuleNo属性
property ModuleNo: string read FModuleNo write FModuleNo;
ModuleNo属性指Modbus设备的编号,如001、002等。
# 6.1.17. MonitorType属性
property MonitorType: string read FMonitorType write FMonitorType;
MonitorType属性指站点的监测类型,如温度、压力等。
# 6.1.18. MsgScript属性
property MsgScript: TStrings read FMsgScript write SetMsgScript;
MsgScript属性用作预警消息触发时,可在脚本中进行其它的业务整合运用,脚本采用纯Pascal语言脚本。
# 6.1.19. Port属性
property Port: Integer read FPort write SetPort;
Host属性是指ModbusTCP设备的端口号,默认502。
# 6.1.20. RegCount属性
property RegCount: Integer read FRegCount write SetRegCount;
RegCount属性是指写入ModbusTCP数据地址的数据长度。
# 6.1.21. Site属性
property Site: string read FSite write FSite;
Site属性是指ModbusTCP设备的站点名称,可以作为ModbusTCP数据地址的说明之用。
# 6.1.22. StartReg属性
property StartReg: Integer read FStartReg write SetStartReg;
RegCount属性是指写入ModbusTCP数据起始地址。
# 6.1.23. UpperWarning属性
property UpperWarning: TUpperWarning read FUpperWarning write SetUpperWarning;
UpperWarning属性是指数据上限异常类型,目前有:uw1,uw2,uw3,uw4,uwNote。
# 6.2. 方法(Methods)
- TModbusTCPWriteChannel 组件主要方法
方法 | 功能说明 |
---|---|
Write | 执行Modbus写入操作 |
- TModbusTCPWriteItem组件主要方法
方法 | 功能说明 |
---|---|
execute | 执行Modbus写入操作 |
# 6.2.1. execute方法
procedure execute;
执行TModbusTCPWriteItem的写入事件。
# 6.2.2. Write方法
procedure Write(QIndex: Integer; QValue: Variant);
示例
//以下两种方法执行的结果是一样的。
FThis.ModbusTCPWriteChannel.ModbusList[0].DataValue := 1;
FThis.ModbusTCPWriteChannel.ModbusList[0].execute;
FThis.ModbusTCPWriteChannel.Write(0,1);
2
3
4
5
# 7. TModbusConnection 组件
ModbusRTU 网络通讯协议的连接组件。 TModbusConnection配合TModbusClient 、TModbusRTUReadChannel 、TModbusRTUWriteChannel 组件使用,不可单独使用。

TModbusConnection 主要属性说明
- Serial Port:通讯端口。
- Baud Rate:波特率。
- Echo Query Before Reply:查询前先回复。
- Data Bits:数据位。
- Paritty:校验位。
- Stop Bits:停止位。
- Transmission Mode:传输方式。
- Flow Control:流控制。
- Enabled Lines:可控制线。
- Silent Interval [character times]:间歇时间间隔。
# 8. TModbusClient 组件
ModbusRTU多功能数据采集与控制组件。
# 8.1. 属性(Properties)
- TModbusClient组件主要属性
属性 | 功能说明 |
---|---|
Connection | 指定TModbusConnection通讯连接组件 |
MaxConsecutiveTimeouts | 指定最长连续超时时间 |
ServerAddress | 指定Modbus设备地址 |
# 8.2. 方法(Methods)
- TModbusClient组主要方法
方法 | 功能说明 |
---|---|
ReadCoils | 读取多个DO数位讯号输出 |
ReadHoldingRegisters | 读取多个AO类比讯号输出 |
ReadInputRegister | 读取单个AO类比讯号输入 |
ReadDiscreteInputs | 读取单个DO类比讯号输入 |
WriteSingleCoil | 写入单个AO数位讯号输出 |
WriteCoils | 写入多个AO数位讯号输出 |
WriteSingleRegister | 写入单个DO类比讯号输出 |
WriteMultipleRegisters | 写入多个DO类比讯号输出 |
# 8.2.1. ReadCoils方法
读取多个线圈状态(01)
function ReadCoils(StartBit: Word; BitCount: Word; UserData: Pointer = nil): Cardinal;
- 示列
FThis.ModbusClient1.ReadCoils(1,3,nil);
# 8.2.2. ReadDiscreteInputs方法
读取离散输入状态(02)
function ReadDiscreteInputs(StartBit: Word; BitCount: Word; UserData: Pointer = nil): Cardinal;
- 示列
FThis.ModbusClient1.ReadDiscreteInputs(1,3,nil);
# 8.2.3. ReadHoldingRegisters方法
读取多个保持型寄存器(03)
function ReadHoldingRegisters(StartReg: Word; RegCount: Word; UserData: Pointer = nil): Cardinal;
- 示列
FThis.ModbusClient1.ReadHoldingRegisters(1,3,nil);
# 8.2.4. ReadInputRegisters方法
读取多个输入寄存器(04)
function ReadInputRegisters(StartReg: Word; RegCount: Word; UserData: Pointer = nil): Cardinal;
- 示列
FThis.ModbusClient1.ReadInputRegisters(1,3,nil);
# 8.2.5. WriteSingleCoil方法
写入单个线圈状态(05)
function WriteSingleCoil(BitAddr: Word; BitValue: Boolean; UserData: Pointer = nil): Cardinal;
- 示列
FThis.ModbusClient1.WriteSingleCoil(1,True,nil);
# 8.2.6. WriteMultipleCoils方法
写入多个线圈状态(15)
function WriteMultipleCoils(StartBit: Word; const BitValues: TBitValues;UserData: Pointer = nil): Cardinal;
- 示列
var
v:TBitValues;
begin
Setlength(v,3);
v[0] := true;
v[1] := true;
v[2] := false;
FThis.ModbusClient1.WriteMultipleCoils(1,v,nil);
end;
2
3
4
5
6
7
8
9
# 8.2.7. WritSingleRegister方法
写入单个保持型寄存器(06)
function WriteSingleRegister(RegAddr: Word; RegValue: Word; UserData: Pointer = nil): Cardinal;
- 示例
FThis.ModbusClient1.ReadInputRegisters(1,3,nil);
# 8.2.8. WriteMultipleRegisters方法
写入多个保持型寄存器(16)
function WriteMultipleRegisters(StartReg: Word; const RegValues: TRegValues;UserData: Pointer = nil): Cardinal;
- 示例
var
v:TRegValues;
begin
Setlength(v,3);
v[0] := 11;
v[1] := 22;
v[2] := 33;
FThis.ModbusClient1.WriteMultipleRegisters(1,v,nil);
end;
2
3
4
5
6
7
8
9
# 8.3. 事件
- TModbusClient主要事件
事件 | 何时触发 |
---|---|
OnReadCoilsRead | 在执行ReadCoils方法时触发该事件 |
OnReadDiscreteInputsRead | 在执行ReadDiscreteInputs方法时触发该事件 |
OnReadHoldingRegistersRead | 在执行ReadHoldingRegisters方法时触发该事件 |
OnInputRegistersRead | 在执行ReadInputRegisters方法时触发该事件 |
# 8.3.1. OnCoilsRead事件
在执行ReadCoils方法时触发该事件
procedure OnCoilsRead(Sender: TModbusClient; const Info: TTransactionInfo; StartBit: Word; BitCount: Word; const BitValues: TBitValues);
- 示例
var
i:Integer;
begin
for i := Low(BitValues) to High(BitValues) do
begin
if BitValues[i] then
FThis.Memo1.Lines.Add('True')
else
FThis.Memo1.Lines.Add('False')
end;
end;
2
3
4
5
6
7
8
9
10
11
# 8.3.2. OnDiscreteInputsRead事件
在执行ReadDiscreteInputs方法时触发该事件
procedure OnDiscreteInputsRead(Sender: TModbusClient; const Info: TTransactionInfo; StartBit: Word; BitCount: Word; const BitValues: TBitValues);
- 示例
var
i:Integer;
begin
for i := Low(BitValues) to High(BitValues) do
begin
if BitValues[i] then
FThis.Memo1.Lines.Add('True')
else
FThis.Memo1.Lines.Add('False')
end;
end;
2
3
4
5
6
7
8
9
10
11
# 8.3.3. OnHoldingRegistersRead事件
在执行ReadHoldingRegisters方法时触发该事件
procedure OnHoldingRegistersRead(Sender: TModbusClient; const Info: TTransactionInfo; StartReg: Word; RegCount: Word; const RegValues: TRegValues);
- 示例
var
i:Integer;
begin
for i := Low(RegValues) to High(RegValues) do
begin
FThis.Memo1.Lines.Add(IntToStr(RegValues[i]));
end;
end;
2
3
4
5
6
7
8
# 8.3.4. OnHoldingRegistersRead事件
在执行ReadInputRegisters方法时触发该事件
procedure OnInputRegistersRead(Sender: TModbusClient; const Info: TTransactionInfo; StartReg: Word; RegCount: Word; const RegValues: TRegValues);
- 示例
var
i:Integer;
begin
for i := Low(RegValues) to High(RegValues) do
begin
FThis.Memo1.Lines.Add(IntToStr(RegValues[i]));
end;
end;
2
3
4
5
6
7
8
# 9. TModbusTCP 组件
一个ModbusTCP客户端组件。
您可以用TModbusTCP组件实现支持ModbusTCP协议的设备的控制和数据采集。
# 9.1. 属性(Properties)
- TModbusTCP组件主要属性
属性 | 功能说明 |
---|---|
AutoConnect | 是否自动连接 |
Host | 指定一个Modbus设备的IP地址 |
Port | 指定一个Modbus设备的端口号 |
UnitID | 制定Modbus设备的Slave ID |
# 9.1.1. AutoConnect
property AutoConnect: Boolean read FAutoConnect write SetAutoConnect default True;
# 9.1.2. Host属性
property Host: string;
Host是指ModbusTCP设备的IP地址。如:192.168.1.100。
FThis.ModbusTCP1.Host := '192.168.1.100';
# 9.1.3. Port属性
property Port: Word;
Port是指ModbusTCP设备的端口号。默认502。
FThis.ModbusTCP1.Port := 502;
# 9.1.4. UnitID属性
property UnitID: Integer;
制定ModbusTCP 设备的SlaveID 对于需要使用SlaveID 的ModbusTCP设备有作用。
# 9.2. 事件(Events)
无
# 9.3. 方法(Methods)
- TModbusTCP组件主要方法
方法 | 功能说明 |
---|---|
Connected | 判断连接状态 |
ReadCoil | 读取单个DO数位讯号输出 |
ReadCoils | 读取多个DO数位讯号输出 |
ReadHoldingRegister | 读取单个AO类比讯号输出 |
ReadHoldingRegisters | 读取多个AO类比讯号输出 |
ReadInputRegister | 读取单个AI类比讯号输入 |
WriteCoil | 写入单个AO数位讯号输出 |
WriteCoils | 写入多个AO数位讯号输出 |
WriteRegister | 写入单个DO类比讯号输出 |
WriteRegisters | 写入多个DO类比讯号输出 |
# 9.3.1. Connect方法
function Connected:Boolean;
连接设备。
if FThis.ModbusTCP1.Connected then
Showmessage('连接成功!');
2
# 9.3.2. ReadCoil方法
function ReadCoil(const RegNo: Word; out Value: Boolean): Boolean;
读取单个数位讯号输出。
//读取DO数位信号输出
Procedure btnReadCoilOnClick(Sender: TObject);
var
v:boolean;
Begin
if .ReadCoil(1,v) then
begin
if v Then
FThis.Memo1.Lines.Add('ReadCoil Value->>> 1')
else
FThis.Memo1.Lines.Add('ReadCoil Value->>> 0');
End
else
FThis.Memo1.Lines.Add('ReadCoil->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 9.3.3. ReadCoils方法
function ReadCoils(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
读取多个DO数位讯号输出。
var
v:string;
begin
FThis.ModbusTCP1.ReadCoils(1,2,v);
end;
2
3
4
5
# 9.3.4. ReadHoldingRegister方法
function ReadHoldingRegister(const RegNo: Word; out Value: Word): Boolean;
读取单个AO类比讯号输出。
//读取AO类比信号输出
Procedure btnReadHoldingRegisterOnClick(Sender: TObject);
var
v:word;
Begin
if FThis.ModbusTCP1.ReadHoldingRegister(1,v) then
begin
if v Then
FThis.Memo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v))
else
FThis.Memo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v));
End
else
FThis.Memo1.Lines.Add('ReadHoldingRegister->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 9.3.5. ReadHoldingRegisters方法
function ReadHoldingRegisters(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
读取多个AO类比讯号输出。
var
v:String;
Begin
FThis.ModbusTCP1.ReadHoldingRegisters(1,4,v);
End;
2
3
4
5
# 9.3.6. ReadInputRegister方法
function ReadInputRegister(const RegNo: Word; out Value: Word): Boolean;
读取单个AI类比讯号输入。
//读取AI数位信号输入
Procedure btnReadInputRegisterOnClick(Sender: TObject);
var
v:word;
Begin
if FThis.ModbusTCP1.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
# 9.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 FThis.ModbusTCP1.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
# 9.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 := FThis.ModbusTCP1.WriteCoils(1,2,'1,0');
end;
2
3
4
5
6
7
# 9.3.9. WriteRegister方法
function WriteRegister(const RegNo: Word; const Value: Word): Boolean;
写入单个DO类比讯号输出
var
v:word;
Begin
v := 123;
if FThis.ModbusTCP1.WriteRegister(1,v) then
begin
if v Then
FThis.Memo1.Lines.Add('WriteRegister Value->>> '+floattostr(v))
else
FThis.Memo1.Lines.Add('WriteRegister Value->>> '+floattostr(v));
End
else
FThis.Memo1.Lines.Add('WriteRegister->>> error!');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
# 9.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 := FThis.ModbusTCP1.WriteRegisters(1,2,'1,0');
end;
2
3
4
5
6
7
# 10. TOPCDAServer 组件
该组件用于配置OPCDA服务器与客户端的连接。将OPCDAServer拖动至窗体界面后,配置方式如下(此处以OPCDA控制LED灯范例中的OPC客户端为例):
- 双击
OPCDAServer1
,打开OPC Inspector
对话框。
- 选择
Server-Select
,打开Select OPC Server
对话框。
- 点击右侧的
Find
按钮,列表中会出现可选的OPC服务器,选择该服务器,点击[ok]
。

- 回到
OPC Inspector
界面,选择Server-Connect
,连接成功。接下来在该界面下新建Groups与Items。选择Groups-Add
,填写组名称,点击OK
保存。
- 选择
Items-Add
,在Select OPC Item
对话框中选择项目,此处的项目是在Arduino程序中进行定义的。选择对应选项,点击Open
按钮。
- 至此 OPCDAServer1配置完毕。
# 11. TAMapView 组件
该组件显示为高德地图的展示,可用于定位信息的标注。
# 11.1. 属性
- TAMapView组件主要属性
属性 | 功能说明 |
---|---|
Options.Center | 指定地图默认显示的位置经纬度信息 |
Options.lang | 指定地图显示的默认语言 |
Satellite.Visible | 指定是否显示卫星地图 |
# 11.2. 方法
# 11.2.1. LoadMap方法
procedure LoadMap;
该方法可用于启用组件的加载地图功能。
# 12. TBaiduAPI 组件
TBaiduAPI是一个基于BaiduOCR的OCR识别组件。使用时需要到百度官方网站进行注册申请Key。
# 12.1. 属性(Properties)
- TBaiduAPI组件SdkConfig主要属性
属性 | 功能说明 |
---|---|
APIKey | 百度OCR APIKey |
Secret | 百度OCR密钥 |
- 示例
基础文字识别
//基础文字识别
var
v:string;
begin
//可指定文件或指定图片的Bitmap
v := fxBaiduAPI1.doFileToGeneralBasic(PicturePath)//PicturePath是指图片路径
v := fxBaiduAPI1.doBitmapToGeneralBasic(Image1.Bitmap)//指定图片的Bitmap
end;
2
3
4
5
6
7
8
//基础文字识别时触发OnGeneralBasic事件,可在事件中定义其它配合的业务逻辑
Procedure fxBaiduAPI1OnGeneralBasic(Sender: TObject; Info: string);
Begin
Showmessage(Info);
End;
2
3
4
5
车牌识别
//车牌识别
var
v:string;
begin
//可指定文件或指定图片的Bitmap
v := fxBaiduAPI1.doFileToLicensePlate(PicturePath)//PicturePath是指图片路径
v := fxBaiduAPI1.doBitmapToLicensePlate(Image1.Bitmap)//指定图片的Bitmap
end;
2
3
4
5
6
7
8
//车牌识别时触发DolicensePlate事件,可在事件中定义其它配合的业务逻辑
Procedure fxBaiduAPI1OnlicensePlate(Sender: TObject; Color: string; Number: string);
Begin
Showmessage('颜色:'+Color+',车牌号:'+Number);
End;
2
3
4
5
车型识别
//车型识别
var
v:string;
begin
//可指定文件或指定图片的Bitmap
v := fxBaiduAPI1.doFileToCarInfo(PicturePath)//PicturePath是指图片路径
v := fxBaiduAPI1.doBitmapToCarInfo(Image1.Bitmap)//指定图片的Bitmap
end;
2
3
4
5
6
7
8
//车型识别时触发OnCarInfo事件,可在事件中定义其它配合的业务逻辑
Procedure fxBaiduAPI1OnCarInfo(Sender: TObject; Info: string);
Begin
Showmessage(Info);
End;
2
3
4
5
# 13. TIdModbuClient 组件
此控件可生成一个Modbus控件,用于读取ModbusTCP协议连接的设备数据。
# 13.1. 属性
属性 | 功能说明 |
---|---|
AutoConnect | 是否允许自动连接 |
Host | ModbusTCP服务端的地址 |
Port | ModbusTCP服务端连接的端口号 |
# 13.2. 方法
- TIdModbusClient组件主要方法
方法 | 功能说明 |
---|---|
Connected | 判断连接状态 |
ReadCoil | 读取单个DO数位讯号输出 |
ReadCoils | 读取多个DO数位讯号输出 |
ReadHoldingRegister | 读取单个AO类比讯号输出 |
ReadHoldingRegisters | 读取多个AO类比讯号输出 |
ReadInputRegister | 读取单个AI类比讯号输入 |
WriteCoil | 写入单个AO数位讯号输出 |
WriteCoils | 写入多个AO数位讯号输出 |
WriteRegister | 写入单个DO类比讯号输出 |
WriteRegisters | 写入多个DO类比讯号输出 |
# 13.2.1. Connected方法
procedure Connect;
function Connected:Boolean;
2
连接设备。
FThis.IdModbusClient1.Connect;
if FThis.IdModbusClient1.Connected then
Showmessage('连接成功!');
2
3
# 13.2.2. ReadCoil方法
function ReadCoil(const RegNo: Word; out Value: Boolean): Boolean;
读取单个数位讯号输出。
//读取DO数位信号输出
Procedure btnReadCoilOnClick(Sender: TObject);
var
v:boolean;
Begin
if FThis.IdModbusClient1.ReadCoil(1,v) then
begin
if v Then
FThis.Memo1.Lines.Add('ReadCoil Value->>> 1')
else
FThis.Memo1.Lines.Add('ReadCoil Value->>> 0');
End
else
FThis.Memo1.Lines.Add('ReadCoil->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 13.2.3. ReadCoils方法
function ReadCoils(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
读取多个DO数位讯号输出。
var
v:string;
begin
FThis.IdModbusClient1.ReadCoils(1,2,v);
end;
2
3
4
5
# 13.2.4. ReadHoldingRegister方法
function ReadHoldingRegister(const RegNo: Word; out Value: Word): Boolean;
读取单个AO类比讯号输出。
//读取AO类比信号输出
Procedure btnReadHoldingRegisterOnClick(Sender: TObject);
var
v:word;
Begin
if FThis.IdModbusClient1.ReadHoldingRegister(1,v) then
begin
if v Then
FThis.Memo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v))
else
FThis.Memo1.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v));
End
else
FThis.Memo1.Lines.Add('ReadHoldingRegister->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 13.2.5. ReadHoldingRegisters方法
function ReadHoldingRegisters(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
读取多个AO类比讯号输出。
var
v:String;
Begin
FThis.IdModbusClient1.ReadHoldingRegisters(1,4,v);
End;
2
3
4
5
# 13.2.6. ReadInputRegister方法
function ReadInputRegister(const RegNo: Word; out Value: Word): Boolean;
读取单个AI类比讯号输入。
//读取AI数位信号输入
Procedure btnReadInputRegisterOnClick(Sender: TObject);
var
v:word;
Begin
if FThis.IdModbusClient1.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
# 13.2.7. WriteCoil方法
function WriteCoil(const RegNo: Word; const Value: Boolean): Boolean;
控制单个DO数位信号输出。
//控制DO数位信号输出
Procedure btnWriteCoilOnClick(Sender: TObject);
var
v:boolean;
Begin
v := false;
if FThis.IdModbusClient1.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
# 13.2.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 := FThis.IdModbusClient1.WriteCoils(1,2,'1,0');
end;
2
3
4
5
6
7
# 13.2.9. WriteRegister方法
function WriteRegister(const RegNo: Word; const Value: Word): Boolean;
写入单个DO类比讯号输出。
var
v:word;
Begin
v := 123;
if FThis.IdModbusClient1.WriteRegister(1,v) then
begin
if v Then
FThis.Memo1.Lines.Add('WriteRegister Value->>> '+floattostr(v))
else
FThis.Memo1.Lines.Add('WriteRegister Value->>> '+floattostr(v));
End
else
FThis.Memo1.Lines.Add('WriteRegister->>> error!');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
# 13.2.10. WriteRegisters方法
function WriteRegisters(const RegNo: Word; const RegisterData: string; Modbus: TfxModbusTCP): Boolean;
写入多个DO类比讯号输出。
var
v:boolean;
RegisterData:string;
begin
RegisterData := '1,0'
v := FThis.IdModbusClient1.WriteRegisters(1,2,'1,0');
end;
2
3
4
5
6
7
# 14. TIdModbusServer 组件
该组件作为服务端用于作为可供连接的ModbusTCP服务器使用。
# 14.1. 属性
属性 | 功能说明 |
---|---|
Active | 功能是否处于激活状态 |
BaseRegister | 寄存器的起始地址 |
DefaultPort | ModbusTCP连接的端口号信息 |
MaxConnections | 设定允许的最大连接 |
MaxRegister | 设定最大的寄存器数量 |
MinRegister | 设定最小的寄存器数量 |
# 15. TRestAPI 组件
该组件是RestAPI客户端,用于向第三方的Rest服务器发送请求,并获取反馈的信息。关于REST的表述可参考 REST (opens new window)。
在控件上使用鼠标右键单击,选择 Properties
选项,可使用向导界面的方式设置Rest请求信息,设置完成后,点击 Send
按钮查看反馈的结果信息。点击 OK
按钮将设置的内容保存至RestAPI控件的属性中。
# 15.1. 属性
属性 | 功能说明 |
---|---|
APIName | API的名称,作为标记描述信息使用 |
Body | 请求主体的内容 |
ContentType | 请求的内容类型 |
Headers | 请求头的值的类型 |
Method | 请求的类型 |
Params | 请求的参数内容 |
Script | 请求的脚本内容 |
Server | 请求的服务器的地址信息 |
Url | 请求的除服务器以外的地址的信息 |
# 15.1.1. Body
property Body: TStringList;
设置请求体中的内容,点击属性右侧的按钮以打开文本编辑框,向其中输入信息,通常可在其中输入格式化的JSON文本或者key=value
类型的文本或者纯文本信息,根据API的需求进行填写。
当ContentType设置为application/json
时,Body处填写的是格式化的JSON文本;当ContentType设置为application/x-www-form-urlencoded
时,Body处填写的是key=value
键值对。
# 15.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类型的文本编码方式。
# 15.1.3. Headers
property Headers: TStringList;
设置发送请求的请求头的信息。
# 15.1.4. Method
property Method: TRequestMethod;
设置请求的发送方式。
rmGET
:以GET的方式发送请求。rmPOST
:以POST的方式发送请求。rmDELETE
:以DELETE的方式发送请求。rmPUT
:以PUT的方式发送请求。
# 15.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地址与第一个参数中间使用?
分隔,其余的参数与参数之间使用&
进行分隔。
# 15.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
# 15.1.7. Server
property Server: string;
设定API厂商的服务地址,此服务地址可从API服务管理界面进行设置。
# 15.1.8. Url
property Url: string;
设定处服务地址外的具体Url路径信息。首位不需要带地址分隔符号。
# 15.2. 事件
# 15.2.1. ResultData
procedure UgRestApiResultData(sender: tobject;aresult: string);
设置当接收到RestAPI返回的消息时触发事件,在aresult
中显示返回的文本。
示例:假设从返回的结果中获取auth_token
,可使用下述的方式来获取。
//PasScript
procedure TMyHandler.RestAPI1ResultData;
Var
vValue: TJSONValue;
begin
FThis.Memo1.Lines.Add(aresult);
vValue := paxfunc.ParseJSONValue(aresult);
vValue := TJSONObject(vValue).GetValue('$user');
vToken := TJSONObject(vValue).GetValue('auth_token').Value;
end;
2
3
4
5
6
7
8
9
10
# 15.3. 方法
# 15.3.1. Send
procedure Send;
设置发送请求。
# 16. TWebSocketClient 组件
此组件为WebSocket客户端组件,可用于与WebSocket服务器连接实现通信。
# 16.1. 属性
# 16.1.1. Active
property Active: Boolean;
是否激活WebSocket客户端,为 True
时表示启用客户端功能。
# 16.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
时使用此认证方式。
# 16.1.3. HeartBeat
用于设置心跳连接的相关选项,当其中的 Enabled
属性设置为 True
时,系统会每隔固定时向服务器发送心跳包以保持客户端的连接。
- Interval:设置心跳包发送的间隔时长。
- Timeout:设置发送心跳包的反馈的超时时间。
# 16.1.4. Host
设置WebSocket服务器的IP地址或域名。
# 16.1.5. LoadBalancer
设置负载均衡的相关选项。当 Enabled
选项设置为 True
时,表示当前客户端连接至一个负载均衡服务器用以广播消息并获取服务器相关的信息。
- Host:负载均衡服务器的主机地址。
- Port:负载均衡服务器的端口号。
- Servers:手动设置WebSocket Servers进行连接(如果不使用Load Balancer Server获取服务器连接方式)。
# 16.1.6. LogFile
在Debug模式下使用,用于输出调试日志。
- Enabled:设置是否启用日志文件。
- FileName:设置显示的日志文本名称。
# 16.1.7. NotifyEvents
设置WebSocket事件的通知方式。
- neAsynchronous:这是默认模式,在异步模式下通知线程事件,将事件添加到与主线程异步同步的队列中。
- neSynchronous:如果选择该模式,在同步模式下通知线程事件,需要与主线程同步来通知这些事件。
- nwNoSync:不与主线程同步,如果需要访问非线程安全的控件,则需要实现自己的同步方法。
# 16.1.8. Options
设置在连接阶段使用自定义的请求头。
CleanDisconnect:如果启用,每次客户端与服务器断开连接时,首先发送消息通知服务器连接将被关闭。
FragmentedMessages:允许处理碎片消息
- frgOnlyBuffer:消息被缓冲,直到收到所有数据,它引发 OnBinary 或 OnMessage 事件(默认选项)
- frgOnlyFragmented:每次收到新的分片时,都会引发 OnFragmented 事件。
- frgAll:每次接收到一个新的分片时,它会引发 OnFragmented 事件,其中包含从第一个数据包收到的所有数据。 当收到所有数据时,它会引发 OnBinary 或 OnMessage 事件。
Origin:自定义连接原点。
Parameters:定义 GET 上使用的参数。
RaiseDisconnectExceptions:默认启用,每次因协议错误断开连接时引发异常。
ValidateUTF8:如果启用,则验证消息是否包含 UTF8 有效字符,默认情况下禁用。
# 16.1.9. Port
设置连接的端口。
# 16.1.10. Proxy
设置是否使用代理服务器,如需要使用,设置 Enabled
为 True
,填写代理服务器的地址,端口号,用户名与密码,并设置代理服务器的连接类型 proxyType
。
- pxyHTTP:HTTP的代理服务器。
- pxySocks4:Socks4的代理服务器。
- pxySocks4A:Socks4A的代理服务器。
- pxySocks5:Socks5的代理服务器。
# 16.1.11. QueueOptions
该属性允许在内部队列中排队消息(而不是直接发送)并在连接线程的上下文中发送消息,这可以防止多个线程尝试发送消息时发生锁定。 对于每种消息类型:可以配置文本(Text)、二进制(Binary)或 Ping 队列,默认情况下设置的值是 qmNone,这意味着消息不排队。 其他类型,表示不同的队列级别,它们之间的区别只是处理的顺序(首先处理 qmLevel1,然后是 qmLevel2,最后是 qmLevel3)。
示例:如果Text和Binary消息的属性设置为 qmLevel2 并且 Ping 设置为 qmLevel1。 客户端将首先处理 Ping 消息(因此,如果它们同时排队,则 Ping 消息比 Text 或 Binary 先发送),然后在同一队列中处理 Text 和 Binary 消息。
# 16.1.12. Throttle
用于限制每秒接收发送的数据速率。设置 Enabled
表示为启用功能,在 BitsPerSec
中设置速率。
# 16.1.13. TLS
是否启用安全连接。
# 16.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。
# 16.1.15. WatchDog
当此项启用时,如果检测到连接意外断开,则会自动尝试进行重新连接。
- Interval:检测的时间间隔。
- Attempt:尝试的最大次数,如果设置为0,表示会进行无限次数的连接。
# 16.2. 事件
事件名称 | 触发条件 |
---|---|
OnBeforeHeartBeat | 如果启用了 HeartBeat,则允许实现自定义 HeartBeat 设置 Handled 参数为 True(这意味着不会发送标准 websocket ping) |
OnBinaryExt | 当服务器向客户端发送二进制消息时,会触发此事件 |
OnConnect | 当建立 WebSocket 连接时,会触发此事件 |
OnDisConnect | 当 WebSocket 连接断开时,会触发此事件 |
OnError | 每次出现 WebSocket 错误(如格式错误的握手)时,都会触发此事件 |
OnException | 每次发生异常时,都会触发此事件 |
OnFragmented | 当接收到来自消息的片段时(仅在 Options.FragmentedMessages = frgAll 或 frgOnlyFragmented 时触发) |
OnHandShake | 在客户端评估握手时触发此事件 |
OnMessage | 每次服务器发送消息时,触发该事件 |
OnSSLVerifyPeer | 如果启用了验证证书,在这种情况下您可以验证服务器证书是否有效并接受与否 |
# 16.3. 方法
# 16.3.1. Connect
function Connect(aTimeout:Integer): Boolean;
向服务器发起连接。
# 16.3.2. DisConnect
function Disconnect(aTimeout:Integer): Boolean;
从服务器断开连接。
# 16.3.3. WriteString
procedure WriteString(aText: String);
向服务器发送文本消息。
FThis.WebSocketClient1.WriteString('{"action":"login","sid":"smart"}');
# 16.3.4. WriteStream
procedure WriteString(aStream: TStream);
向服务器发送二进制内容消息。
# 16.3.5. Ping
procedure ping(aText:String);
向服务器发送一个测试包,如果出现连接超时而没有接收到消息,则会关闭连接。
# 16.3.6. Start
procedure Start;
使用第二线程来连接服务器,这样可以避免连接过程中的应用冻结。
# 16.3.7. Stop
procedure Stop;
使用第二线程来断开服务器连接,这样可以避免断开连接过程中的应用冻结。
# 17. TWebSocketSever 组件
此组件将作为WebSocket服务器控件,用于转发WebSocket消息。
# 17.1. 属性
# 17.1.1. Active
设置是否激活服务器。
# 17.1.2. Authentication
如果此项的 Enabled
设置为 True
,则启用连接认证。
- Authusers:设置认证的用户列表,每行的用户认证信息请按照以下方式进行填写:
user=password
。 - AllowNonAuth:设置是否运行不使用认证。
- Basic:设置是否使用为Basic认证。仅适用于服务器与客户端的 Websockets 和 HTTP 请求(客户端 Web 浏览器不支持此类身份验证)。
- Session:客户端需要做一个 HTTP GET 传递用户名和密码,如果经过身份验证,服务器响应一个会话 ID。 使用此会话 ID,客户端打开作为参数传递的 WebSocket 连接。
- URL:客户端打开 Websocket 连接,将用户名和密码作为参数传递。
# 17.1.3. Bindings
用于配置管理服务绑定的IP地址与端口号。可使用此方式来管理绑定用于外部或内部访问的端口信息。
# 17.1.4. Extensions
您可以对发送的消息启用压缩(如果客户端不支持压缩,则消息将自动交换而无需压缩)。
# 17.1.5. FallBack
如果浏览器本身不支持 WebSockets 协议,您可以启用以下回退:
- Flash:如果启用,如果浏览器没有原生 WebSocket 实现并且启用了 Flash,它使用 Flash 作为传输。
- ServerSentEvents:如果启用,则允许从服务器向浏览器客户端发送推送通知。
- Retry:尝试重新连接到服务器的时间间隔(以秒为单位)(默认为 3)。
# 17.1.6. HeartBeat
用于设置心跳连接的相关选项,当其中的 Enabled
属性设置为 True
时,系统会每隔固定时向客户端发送心跳包以保持客户端的连接。
- Interval:设置心跳包发送的间隔时长。
- Timeout:设置发送心跳包的反馈的超时时间。
# 17.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:默认选项为
# 17.1.8. IOHandlerOptions
默认使用普通的 Indy Handler(每个连接都运行在自己的线程中)。
- iohDefault:默认indy IOHandler,每个新连接创建一个新线程。
- iohIOCP:仅适用于 windows 并且需要自定义 indy 版本,线程池处理所有连接。
# 17.1.9. LoadBalancer
连接到负载均衡服务器以广播消息并发送有关服务器的信息。
- AutoRegisterBindings:如果启用,则自动将服务器绑定发送到负载平衡器服务器。
- AutoRestart:负载平衡器服务器连接断开并尝试重新连接后等待的时间(以秒为单位); 零表示不重新启动(默认情况下);
- Bindings:可以设置发送到负载均衡服务器的手动绑定,例如:
WS://127.0.0.1:80
或者WSS://127.0.0.2:8888
。 - Enabled:如果启用,它将连接到负载均衡服务器。
- Guid:用于对负载平衡服务器进行标识。
- Host:负载均衡服务器主机的地址。
- Port:负载均衡服务器的端口。
# 17.1.10. LogFile
在Debug模式下使用,用于输出调试日志。
- Enabled:设置是否启用日志文件。
- FileName:设置显示的日志文本名称。
# 17.1.11. MaxConnections
设置允许的最大连接数(如果设置为零,则表示为无限制)。
# 17.1.12. NotifyEvents
设置WebSocket事件的通知方式。
- neAsynchronous:这是默认模式,在异步模式下通知线程事件,将事件添加到与主线程异步同步的队列中。
- neSynchronous:如果选择该模式,在同步模式下通知线程事件,需要与主线程同步来通知这些事件。
- nwNoSync:不与主线程同步,如果需要访问非线程安全的控件,则需要实现自己的同步方法。
# 17.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 操作系统)。
# 17.1.14. Port
设置监听的端口号。
# 17.1.15. QueueOptions
该属性允许在内部队列中排队消息(而不是直接发送)并在连接线程的上下文中发送消息,这可以防止多个线程尝试发送消息时发生锁定。 对于每种消息类型:可以配置文本(Text)、二进制(Binary)或 Ping 队列,默认情况下设置的值是 qmNone,这意味着消息不排队。 其他类型,表示不同的队列级别,它们之间的区别只是处理的顺序(首先处理 qmLevel1,然后是 qmLevel2,最后是 qmLevel3)。
示例:如果Text和Binary消息的属性设置为 qmLevel2 并且 Ping 设置为 qmLevel1。 客户端将首先处理 Ping 消息(因此,如果它们同时排队,则 Ping 消息比 Text 或 Binary 先发送),然后在同一队列中处理 Text 和 Binary 消息。
# 17.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 = ""
# 17.1.17. SSL
是否启用SSL安全连接。
# 17.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。
# 17.1.19. WatchDog
当此项启用时,如果检测到连接意外断开,则会自动尝试进行重新连接。
- Interval:检测的时间间隔。
- Attempt:尝试的最大次数,如果设置为0,表示会进行无限次数的连接。
# 17.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) |
# 17.3. 方法
# 17.3.1. WriteString
procedure WriteString(aGuid,aText: String);
向客户端发送文本消息。
FThis.WebSocketServer1.WriteString(Guid,'{"action":"login","sid":"smart"}');
# 17.3.2. WriteStream
procedure WriteString(aGuid: String; aStream: TStream);
向服务器发送二进制内容消息。