通訊控制控制元件
# 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);
向伺服器發送二進制內容訊息。