通訊控制元件
# FastWeb通訊控制元件
- 適用平臺: APP(移動端)
該組中的控制元件為通過工業通訊協定的設定,連線物聯網設備採集資料的程式,進行數據的連線採集功能。
# 1. TUgNetHttpClient
此元件為Http服務請求使用的客戶端元件。是作為TUgRestApi的基礎元件存在,如需要使用完整的RestAPI請求功能請查閱 TUgRestApi,以下屬性僅作簡單說明。
# 1.1. 屬性
# 1.1.1. Accept
property Accept: string;
用於設定客戶端允許接收的內容型別,用於與服務端進行通訊連線。
# 1.1.2. AcceptCharSet
property AcceptCharSet: string;
用於設定客戶端允許接收的字符集型別。
# 1.1.3. AcceptEncoding
property AcceptEncoding: string;
用於設定客戶端允許接收的內容編碼壓縮型別。
# 1.1.4. AcceptLanguage
property AcceptLanguage: string;
設定客戶端優先響應的語言型別。
# 1.1.5. AllowCookies
property AllowCookies: Boolean;
設定客戶端是否接受來自服務端的cookie資訊。
# 1.1.6. Asynchronous
property Asynchronous: Boolean;
設定請求的方式是非同步(True)還是同步(False)。
# 1.1.7. ConnectionTimeOut
property ConnectionTimeout: Integer;
建立 HTTP 客戶端連線之前的超時數值,單位為ms(毫秒)。
# 1.1.8. ContentType
property ContentType: string;
設定請求的實體主體的媒體型別。
# 1.1.9. HandleRedirects
property HandleRedirects: Boolean;
如果此項設定為 True
,則客戶端元件會自動處理重定向。否則不處理重定向資訊。
# 1.1.10. MaxRedirects
property MaxRedirects: Integer;
設定客戶端允許的最大重定向的次數。
# 1.1.11. RedirectsWithGET
property RedirectsWithGET: THTTPRedirectsWithGET;
設定允許的重定向型別。
# 1.1.12. ResponseTimeOut
property ResponseTimeout: Integer;
表示給定 HTTP 客戶端請求中部分 HTTP 響應之間的最大超時,單位為毫秒。
# 1.1.13. SecureProtocols
property SecureProtocols: THTTPSecureProtocols;
設定客戶端的連線安全協議型別。
# 1.1.14. UserAgent
property UserAgent: string;
設定使用者代理標識,用於標識客戶端的型別。
# 1.2. 事件
名稱 | 觸發條件 |
---|---|
OnAuthEvent | 當需要向代理驗證使用者名稱時觸發事件 |
OnNeedClientCertificate | 需要客戶端證書時觸發事件 |
OnReceiveData | 在您的 HTTP 客戶端接收請求的響應數據時會觸發一次或者多次,它可以用於響應下載的進度 |
OnRequestCompleted | 在請求完成時觸發事件 |
OnRequestError | 在請求發生錯誤時觸發事件 |
OnValidateServerCertificate | 在檢查伺服器證書的有效性時觸發事件 |
# 2. TUgNetHttpRequest
此元件為Http服務請求的模板元件。是作為TUgRestApi的基礎元件存在,如需要使用完整的RestAPI請求功能請查閱 TUgRestApi,以下屬性僅作簡單說明。
# 2.1. 屬性
# 2.1.1. Accept
property Accept: string;
用於設定客戶端允許接收的內容型別,用於與服務端進行通訊連線。
# 2.1.2. AcceptCharSet
property AcceptCharSet: string;
用於設定客戶端允許接收的字符集型別。
# 2.1.3. AcceptEncoding
property AcceptEncoding: string;
用於設定客戶端允許接收的內容編碼壓縮型別。
# 2.1.4. AcceptLanguage
property AcceptLanguage: string;
設定客戶端優先響應的語言型別。
# 2.1.5. Asynchronous
property Asynchronous: Boolean;
設定請求的方式是非同步(True)還是同步(False)。
# 2.1.6. Client
property Client: TUgNetHTTPClient
指定請求繫結的HTTP客戶端元件。
# 2.1.7. ConnectionTimeOut
property ConnectionTimeout: Integer;
建立 HTTP 客戶端連線之前的超時數值,單位為ms(毫秒)。
# 2.1.8. MethodString
property MethodString: string;
設定從請求中訪問方法字串的屬性。
# 2.1.9. ResponseTimeOut
property ResponseTimeout: Integer;
表示給定 HTTP 客戶端請求中部分 HTTP 響應之間的最大超時,單位為毫秒。
# 2.1.10. URL
property URL: string;
設定允許的URL鏈接。
# 2.2. 事件
名稱 | 觸發條件 |
---|---|
OnNeedClientCertificate | 需要客戶端證書時觸發事件 |
OnReceiveData | 在您的 HTTP 客戶端接收請求的響應數據時會觸發一次或者多次,它可以用於響應下載的進度 |
OnRequestCompleted | 在請求完成時觸發事件 |
OnRequestError | 在請求發生錯誤時觸發事件 |
OnValidateServerCertificate | 在檢查伺服器證書的有效性時觸發事件 |
# 3. TUgIdHttp
該元件為Http服務的提供元件,用於設定並接收http請求,可作為HTTP請求的客戶端使用。
# 3.1. 方法
# 3.1.1. Get
function Get(AURL: string): string;
設定GET的請求。返回響應的內容。
# 3.1.2. Post
function Post(AURL: string; ASource: TStringList): string;
通過Post方式發送請求。
# 3.1.3. Post1
function Post1(AURL: string; const ASourceFile: String): string;
通過Post方式,將來自檔案的數據作為請求體發送到指定的URL。
//JScript
var Response;
try{
// 發送POST請求,並將來自檔案的數據發送到指定的URL
Response = UgIdHTTP01.Post1("http://example.com/api", "path_to_folder\\path_to_file");
// 處理響應數據
}
except{
// 處理異常
}
2
3
4
5
6
7
8
9
10
//PasScript
var
Response: string;
begin
try
// 發送POST請求,並將來自檔案的數據發送到指定的URL
Response := UgIdHTTP01.Post1('http://example.com/api', 'path_to_folder\path_to_file');
// 處理響應數據
except
on E: Exception do
begin
// 處理異常
end;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Make sure to add code blocks to your code group
# 3.1.4. Post2
function Post2(AURL: string; ASource: TStrings): string;
通過Post方式,將TStrings對像中的數據作為表單數據發送到指定的URL。當使用這種方式發送POST請求時,數據會以application/x-www-form-urlencoded
格式發送到伺服器,這是HTTP POST請求的一種常見方式。
//JScript
var Params,Response;
Params = new TStringList();
try{
// 新增表單參數到TStrings對像中
Params.Add("param1=value1");
Params.Add("param2=value2");
// 發送POST請求,並將來自檔案的數據發送到指定的URL
Response = UgIdHTTP01.Post2("http://example.com/api", Params);
// 處理伺服器響應
// ...
}
finally{
Params.Free;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//PasScript
var
Params: TStringList;
Response: string;
begin
Params := TStringList.Create;
try
// 新增表單參數到TStrings對像中
Params.Add('param1=value1');
Params.Add('param2=value2');
// 發送POST請求,並將TStrings對像中的數據作為表單數據發送到指定的URL
Response := UgIdHTTP01.Post2('http://example.com/api', Params);
// 處理伺服器響應
// ...
finally
Params.Free;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Make sure to add code blocks to your code group
# 3.1.5. Post3
function Post3(AURL: string; ASource: TStream): string;
通過Post方式,將TStream中的數據作為請求體發送到指定的URL。這種方法通常用於向伺服器上傳檔案或其他二進制數據。
//JScript
var FileStream,Response;
// 建立要發送的數據流,只讀模式
FileStream = new TFileStream("path_to_folder\\path_to_file", 0);
try{
// 發送POST請求,並將數據流中的內容作為請求體發送到指定的URL
Response = UgIdHTTP01.Post("http://example.com/api", FileStream);
// 處理伺服器響應
// ...
}
finally{
FileStream.Free;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
//PasScript
var
FileStream: TFileStream;
Response: string;
begin
// 建立要發送的數據流,只讀模式
FileStream := TFileStream.Create('path_to_folder\path_to_file', 0);
try
// 發送POST請求,並將數據流中的內容作為請求體發送到指定的URL
Response := UgIdHTTP01.Post('http://example.com/api', FileStream);
// 處理伺服器響應
// ...
finally
FileStream.Free;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Make sure to add code blocks to your code group
# 3.1.6. Post4
function Post4(AURL: string; ASource: TIdMultiPartFormDataStream): string;
通過Post方式,將TIdMultiPartFormDataStream對像中的數據作為多部分表單數據發送到指定的URL。這在需要上傳檔案或發送包含檔案和其他表單欄位的表單時非常有用。
//JScript
var FormData,Response;
// 建立TIdMultiPartFormDataStream對像
FormData = new TIdMultiPartFormDataStream();
try{
// 新增要發送的表單欄位
FormData.AddFormField("param1", "value1","","","");
FormData.AddFormField("param2", "value2","","","");
// 新增要上傳的檔案
FormData.AddFile("file1", "path_to_folder\\path_to_file1","application/octet-stream");
FormData.AddFile("file2", "path_to_folder\\path_to_file2","application/octet-stream");
// 發送POST請求,並將TIdMultiPartFormDataStream對像中的數據作為多部分表單數據發送到指定的URL
Response = UgIdHTTP01.Post4("http://example.com/api", FormData);
// 處理伺服器響應
// ...
}
finally{
FormData.Free;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//PasScript
var
FormData: TIdMultiPartFormDataStream;
Response: string;
begin
// 建立TIdMultiPartFormDataStream對像
FormData := TIdMultiPartFormDataStream.Create;
try
// 新增要發送的表單欄位
FormData.AddFormField('param1', 'value1','','','');
FormData.AddFormField('param2', 'value2','','','');
// 新增要上傳的檔案
FormData.AddFile('file1', 'path_to_folder\path_to_file1','application/octet-stream');
FormData.AddFile('file2', 'path_to_folder\path_to_file2','application/octet-stream');
// 發送POST請求,並將TIdMultiPartFormDataStream對像中的數據作為多部分表單數據發送到指定的URL
Response := UgIdHTTP01.Post4('http://example.com/api', FormData);
// 處理伺服器響應
// ...
finally
FormData.Free;
end;
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
// Make sure to add code blocks to your code group
# 3.1.7. Post5
procedure Post5(AURL: string; const ASourceFile: String; AResponseContent: TStream);
通過Post方式,將來自檔案的數據作為請求體發送到指定的URL。這個方法還允許你將伺服器的響應內容寫入到指定的TStream中。這種方法適用於需要發送檔案數據並且需要獲取伺服器響應內容的情況。
//JScript
var ResponseStream;
ResponseStream = new TMemoryStream();
try{
// 發送POST請求,並將來自檔案的數據發送到指定的URL,同時將伺服器的響應內容寫入到ResponseStream中
UgIdHTTP01.Post5("http://example.com/api", "path_to_folder\\path_to_file", ResponseStream);
// 處理伺服器響應內容,可以從ResponseStream中讀取
// ...
}
finally{
ResponseStream.Free;
}
2
3
4
5
6
7
8
9
10
11
12
13
//PasScript
var
ResponseStream: TMemoryStream;
begin
ResponseStream := TMemoryStream.Create;
try
// 發送POST請求,並將來自檔案的數據發送到指定的URL,同時將伺服器的響應內容寫入到ResponseStream中
UgIdHTTP01.Post5('http://example.com/api', 'path_to_file', ResponseStream);
// 處理伺服器響應內容,可以從ResponseStream中讀取
// ...
finally
ResponseStream.Free;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
// Make sure to add code blocks to your code group
# 3.1.8. Post6
procedure Post6(AURL: string; ASource: TStrings; AResponseContent: TStream);
通過Post方式,將TStrings對像中的數據作為表單數據發送到指定的URL。這個方法還允許你將伺服器的響應內容寫入到指定的TStream中。
//JScript
var Params,ResponseStream;
Params = new TStringList();
ResponseStream = new TMemoryStream();
try{
// 新增表單參數到TStrings對像中
Params.Add("param1=value1");
Params.Add("param2=value2");
// 發送POST請求,並將TStrings對像中的數據作為表單數據發送到指定的URL,同時將伺服器的響應內容寫入到ResponseStream中
UgIdHTTP01.Post6("http://example.com/api", Params, ResponseStream);
// 處理伺服器響應內容,可以從ResponseStream中讀取
// ...
}
finally{
Params.Free;
ResponseStream.Free;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//PasScript
var
Params: TStringList;
ResponseStream: TMemoryStream;
begin
Params := TStringList.Create;
ResponseStream := TMemoryStream.Create;
try
// 新增表單參數到TStrings對像中
Params.Add('param1=value1');
Params.Add('param2=value2');
// 發送POST請求,並將TStrings對像中的數據作為表單數據發送到指定的URL,同時將伺服器的響應內容寫入到ResponseStream中
IdHTTP1.Post('http://example.com/api', Params, ResponseStream);
// 處理伺服器響應內容,可以從ResponseStream中讀取
// ...
finally
Params.Free;
ResponseStream.Free;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Make sure to add code blocks to your code group
# 3.1.9. Post7
procedure Post7(AURL: string; ASource, AResponseContent: TStream);
通過Post方式,將TStream中的數據作為請求體發送到指定的URL。這個方法還允許你將伺服器的響應內容寫入到另一個TStream中。
//JScript
var FileStream, ResponseStream;
// 建立要發送的數據流,只讀模式
FileStream = new TFileStream("path_to_folder\\path_to_file", 0);
ResponseStream = new TMemoryStream();
try{
// 發送POST請求,並將RequestStream中的數據作為請求體發送到指定的URL,同時將伺服器的響應內容寫入到ResponseStream中
UgIdHTTP01.Post7("http://example.com/api", FileStream, ResponseStream);
// 處理伺服器響應內容,可以從ResponseStream中讀取
// ...
}
finally{
FileStream.Free;
ResponseStream.Free;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//PasScript
var
FileStream: TFileStream
ResponseStream: TMemoryStream;
begin
// 建立要發送的數據流,只讀模式
FileStream := TFileStream.Create('path_to_folder\path_to_file', 0);
ResponseStream := TMemoryStream.Create;
try
// 發送POST請求,並將FileStream中的數據作為請求體發送到指定的URL,同時將伺服器的響應內容寫入到ResponseStream中
UgIdHTTP01.Post7('http://example.com/api', FileStream, ResponseStream);
// 處理伺服器響應內容,可以從ResponseStream中讀取
// ...
finally
FileStream.Free;
ResponseStream.Free;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Make sure to add code blocks to your code group
# 3.1.10. Post8
procedure Post8(AURL: string; ASource: TIdMultiPartFormDataStream; AResponseContent: TStream);
通過Post方式,將TIdMultiPartFormDataStream對像中的數據作為多部分表單數據發送到指定的URL。這個方法還允許你將伺服器的響應內容寫入到另一個TStream中。這種方法適用於需要發送包含檔案和其他表單欄位的表單,並且需要獲取伺服器響應內容的情況。
//JScript
var FormData,ResponseStream;
// 建立TIdMultiPartFormDataStream對像
FormData = new TIdMultiPartFormDataStream();
ResponseStream = new TMemoryStream();
try{
// 新增要發送的表單欄位
FormData.AddFormField("param1", "value1","","","");
FormData.AddFormField("param2", "value2","","","");
// 新增要上傳的檔案
FormData.AddFile("file1", "path_to_folder\\path_to_file1","application/octet-stream");
FormData.AddFile("file2", "path_to_folder\\path_to_file2","application/octet-stream");
// 發送POST請求,並將TIdMultiPartFormDataStream對像中的數據作為多部分表單數據發送到指定的URL,同時將伺服器的響應內容寫入到ResponseStream中
UgIdHTTP01.Post8("http://example.com/api", FormData,ResponseStream);
// 處理伺服器響應
// ...
}
finally{
FormData.Free;
ResponseStream.Free;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//PasScript
var
FormData: TIdMultiPartFormDataStream;
ResponseStream: TMemoryStream;
begin
// 建立TIdMultiPartFormDataStream對像
FormData := TIdMultiPartFormDataStream.Create;
ResponseStream := TMemoryStream.Create;
try
// 新增要發送的表單欄位
FormData.AddFormField('param1', 'value1','','','');
FormData.AddFormField('param2', 'value2','','','');
// 新增要上傳的檔案
FormData.AddFile('file1', 'path_to_folder\path_to_file1','application/octet-stream');
FormData.AddFile('file2', 'path_to_folder\path_to_file2','application/octet-stream');
// 發送POST請求,並將TIdMultiPartFormDataStream對像中的數據作為多部分表單數據發送到指定的URL,同時將伺服器的響應內容寫入到ResponseStream中
UgIdHTTP01.Post8('http://example.com/api', FormData,ResponseStream);
// 處理伺服器響應
// ...
finally
FormData.Free;
ResponseStream.Free;
end;
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
// Make sure to add code blocks to your code group
# 4. TUgRestApi
該元件為客戶端向服務端發送請求使用的元件,可通過其接收到的資訊進行解析操作。在界面中雙擊控制元件,可打開RestApi管理器界面。
在上述界面中,點選左側的API列表,選擇要使用的API,有條件的API可在右側修改相關資訊,使用右側的[Send]
按鈕測試返回的結果。點選[OK]
按鈕確認並將參數資訊回傳至RestAPI控制元件中。
# 4.1. 屬性
屬性 | 說明 |
---|---|
Body | 請求主體的內容 |
ContentType | 請求的內容型別 |
GUID | 在RestAPI管理器中記錄的選擇項的值 |
Headers | 請求頭的值的型別 |
Method | 請求的型別 |
Params | 請求的參數內容 |
Script | 請求的指令碼內容 |
Server | 請求的伺服器的地址資訊 |
Url | 請求的除伺服器以外的地址的資訊 |
# 4.1.1. Body
property Body: TStringList;
設定請求體中的內容,點選屬性右側的按鈕以打開文字編輯框,向其中輸入資訊,通常可在其中輸入格式化的JSON文字或者key=value
型別的文字或者純文字資訊,根據API的需求進行填寫。
當ContentType設定為application/json
時,Body處填寫的是格式化的JSON文字;當ContentType設定為application/x-www-form-urlencoded
時,Body處填寫的是key=value
鍵值對。
# 4.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型別的文字編碼方式。
# 4.1.3. GUID
property GUID: string;
此處的GUID用來記錄在管理器界面選擇的RestAPI。
# 4.1.4. Headers
property Headers: TStringList;
設定發送請求的請求頭的資訊。
# 4.1.5. Method
property Method: TRequestMethod;
設定請求的發送方式。
rmGET
:以GET的方式發送請求。rmPOST
:以POST的方式發送請求。rmDELETE
:以DELETE的方式發送請求。rmPUT
:以PUT的方式發送請求。
# 4.1.6. 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地址與第一個參數中間使用?
分隔,其餘的參數與參數之間使用&
進行分隔。
# 4.1.7. 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
# 4.1.8. Server
property Server: string;
設定API廠商的服務地址,此服務地址可從API服務管理界面進行設定。
# 4.1.9. Url
property Url: string;
設定處服務地址外的具體Url路徑資訊。首位不需要帶地址分隔符號。
# 4.2. 事件
# 4.2.1. ResultData
procedure UgRestApiResultData(sender: tobject;aresult: string);
設定當接收到RestAPI返回的訊息時觸發事件,在aresult
中顯示返回的文字。
示例:假設從返回的結果中獲取auth_token
,可使用下述的方式來獲取。
//JScript
function UgRestApi01ResultData(sender,aresult)
var
vJSON: TJSONObject;
vValue: TJSONValue;
{
var vJSON,vValue;
UgMemo01.Lines.Add(aresult);
vJSON = new TJSONObject();
Try{
vValue = vJSON.ParseJSONValue(aresult,False,False);
vValue = TJSONObject(vValue).GetValue("$user");
vToken = TJSONObject(vValue).GetValue("auth_token").Value;
}
Finally{
vJSON.Free;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//PasScript
procedure UgRestApi01ResultData(sender: tobject;aresult: string);
Var
vJSON: TJSONObject;
vValue: TJSONValue;
begin
UgMemo01.Lines.Add(aresult);
vJSON := TJSONObject.Create();
Try
vValue := vJSON.ParseJSONValue(aresult,False,False);
vValue := TJSONObject(vValue).GetValue('$user');
vToken := TJSONObject(vValue).GetValue('auth_token').Value;
Finally
vJSON.Free;
End;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Make sure to add code blocks to your code group
# 4.3. 方法
# 4.3.1. Send
procedure Send;
設定發送請求。
# 4.3.2. Init
procedure Init(AGUID: string);
設定對連線資訊初始化操作。AGUID
表示為其連線使用的GUID欄位的名稱。通過引用后可將對應欄位的RestApi設定引入到界面中來。
# 5. TUgModbusTCPClient
該元件為ModbusTCP元件,用於與設備建立ModbusTCP連線。連線的發起是以FastWeb服務端為基準,不是以客戶端的方式呈現。
# 5.1. 屬性
屬性 | 功能說明 |
---|---|
AutoConnect | 是否進行自動連線 |
ConnectTimeOut | 設定連線超時的時間 |
Host | 指定一個Modbus設備的IP地址 |
Port | 指定一個Modbus設備的埠號 |
ReadTimeOut | 設定讀取超時的時間 |
# 5.1.1. Host
property Host: string;
Host是指ModbusTCP設備的IP地址。如:192.168.1.100。
//JScript
UgModbusTCPClient01.Host = "192.168.1.100";
2
//PasScript
UgModbusTCPClient01.Host := '192.168.1.100';
2
// Make sure to add code blocks to your code group
# 5.1.2. Port
property Port: Word;
Port是指ModbusTCP設備的埠號。預設502。
//JScript
UgModbusTCPClient01.Port = 502;
2
//PasScript
UgModbusTCPClient01.Port := 502;
2
// Make sure to add code blocks to your code group
# 5.2. 方法
# 5.2.1. Connect
procedure Connect;
連線設備。
//JScript
UgModbusTCPClient01.Connect;
2
//PasScript
UgModbusTCPClient01.Connect;
2
// Make sure to add code blocks to your code group
# 5.2.2. ReadCoil
function ReadCoil(const RegNo: Word; out Value: Boolean): Boolean;
讀取單個線圈暫存器的數值。
//JScript
//讀取DO數位訊號輸出
function btnReadCoilOnClick(Sender)
{
var v;
if (UgModbusTCPClient01.ReadCoil(1,v))
{
if (v){
UgMemo01.Lines.Add("ReadCoil Value->>> 1");
}
else{
UgMemo01.Lines.Add("ReadCoil Value->>> 0");
}
}
else{
UgMemo01.Lines.Add("ReadCoil->>> error!");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//PasScript
//讀取DO數位訊號輸出
Procedure btnReadCoilOnClick(Sender: TObject);
var
v:boolean;
Begin
if UgModbusTCPClient01.ReadCoil(1,v) then
begin
if v Then
UgMemo01.Lines.Add('ReadCoil Value->>> 1')
else
UgMemo01.Lines.Add('ReadCoil Value->>> 0');
End
else
UgMemo01.Lines.Add('ReadCoil->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Make sure to add code blocks to your code group
# 5.2.3. ReadCoils
function ReadCoils(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
讀取多個線圈暫存器的數值。
//JScript
var v;
UgModbusTCPClient01.ReadCoils(1,2,v);
2
3
//PasScript
var
v:string;
begin
UgModbusTCPClient01.ReadCoils(1,2,v);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
# 5.2.4. ReadHoldingRegister
function ReadHoldingRegister(const RegNo: Word; out Value: Word): Boolean;
讀取單個保持暫存器的數值。
//JScript
//讀取AO類比訊號輸出
function btnReadHoldingRegisterOnClick(Sender)
{
var v;
if (UgModbusTCPClient01.ReadHoldingRegister(1,v))
{
if (v){
UgMemo01.Lines.Add("ReadHoldingRegister Value->>> "+floattostr(v));
}
else{
UgMemo01.Lines.Add("ReadHoldingRegister Value->>> "+floattostr(v));
}
}
else{
UgMemo01.Lines.Add("ReadHoldingRegister->>> error!");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//PasScript
//讀取AO類比訊號輸出
Procedure btnReadHoldingRegisterOnClick(Sender: TObject);
var
v:word;
Begin
if UgModbusTCPClient01.ReadHoldingRegister(1,v) then
begin
if v Then
UgMemo01.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v))
else
UgMemo01.Lines.Add('ReadHoldingRegister Value->>> '+floattostr(v));
End
else
UgMemo01.Lines.Add('ReadHoldingRegister->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Make sure to add code blocks to your code group
# 5.2.5. ReadHoldingRegisters
function ReadHoldingRegisters(const RegNo: Word; const Blocks: Word; out RegisterData: string): Boolean;
讀取多個保持暫存器的數值。
說明: 讀取多個AO數位訊號輸出。
**返回值:**Boolean字元型。
- ReadHoldingRegisters函式語法中各部分說明
部分 | 說明 |
---|---|
RegNo | 開始位址 |
Blocks | 資料長度 |
- 示例
//JScript
var v;
UgModbusTCPClient01.ReadHoldingRegisters(1,4,v);
2
3
//PasScript
var
v:String;
Begin
UgModbusTCPClient01.ReadHoldingRegisters(1,4,v);
End;
2
3
4
5
6
// Make sure to add code blocks to your code group
# 5.2.6. ReadInputRegister
function ReadInputRegister(const RegNo: Word; out Value: Word): Boolean;
讀取單個輸入暫存器的數值。
//JScript
//讀取AI數位訊號輸入
function btnReadInputRegisterOnClick(Sender)
{
var v;
if (UgModbusTCPClient01.ReadInputRegister(1,v))
{
if (v){
UgMemo01.Lines.Add("ReadInputRegister Value->>> "+floattostr(v));
}
else{
UgMemo01.Lines.Add("ReadInputRegister Value->>> "+floattostr(v));
}
}
else{
UgMemo01.Lines.Add("ReadInputRegister->>> error!");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//PasScript
//讀取AI數位訊號輸入
Procedure btnReadInputRegisterOnClick(Sender: TObject);
var
v:word;
Begin
if UgModbusTCPClient01.ReadInputRegister(1,v) then
begin
if v Then
UgMemo01.Lines.Add('ReadInputRegister Value->>> '+floattostr(v))
else
UgMemo01.Lines.Add('ReadInputRegister Value->>> '+floattostr(v));
End
else
UgMemo01.Lines.Add('ReadInputRegister->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Make sure to add code blocks to your code group
# 5.2.7. ReadInputRegisters
function ReadInputRegisters(const RegNo: Word; const Blocks: Word; var RegisterData: string): Boolean;
讀取多個輸入暫存器的數值。
//JScript
var v;
UgModbusTCPClient01.ReadInputRegisters(1,2,v);
2
3
//PasScript
var
v:word;
begin
UgModbusTCPClient01.ReadInputRegisters(1,2,v);
end;
2
3
4
5
6
// Make sure to add code blocks to your code group
# 5.2.8. WriteCoil
function WriteCoil(const RegNo: Word; const Value: Boolean): Boolean;
寫入單個線圈暫存器的數值。
//JScript
//控制DO數位訊號輸出
function btnWriteCoilOnClick(Sender)
{
var v;
v = false;
if (UgModbusTCPClient01.WriteCoil(1,v))
{
if (v){
UgMemo01.Lines.Add("WriteCoil Value->>> 1");
}
else{
UgMemo01.Lines.Add("WriteCoil Value->>> 0");
}
}
else{
UgMemo01.Lines.Add("WriteCoil->>> error!");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//PasScript
//控制DO數位訊號輸出
Procedure btnWriteCoilOnClick(Sender: TObject);
var
v:boolean;
Begin
v := false;
if UgModbusTCPClient01.WriteCoil(1,v) then
begin
if v Then
UgMemo01.Lines.Add('WriteCoil Value->>> 1')
else
UgMemo01.Lines.Add('WriteCoil Value->>> 0');
End
else
UgMemo01.Lines.Add('WriteCoil->>> error!');
End;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Make sure to add code blocks to your code group
# 5.2.9. WriteCoils
function WriteCoils(const RegNo: Word; const Blocks: Word; const RegisterData: string): Boolean;
寫入多個線圈暫存器的數值。
//JScript
var v,RegisterData;
RegisterData := "1,0";//1代表True,0代表False
v = UgModbusTCPClient01.WriteCoils(1,2,"1,0");
2
3
4
//PasScript
var
v:boolean;
RegisterData:string;
begin
RegisterData := '1,0';//1代表True,0代表False
v := UgModbusTCPClient01.WriteCoils(1,2,'1,0');
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
# 5.2.10. WriteRegister
function WriteRegister(const RegNo: Word; const Value: Word): Boolean;
寫入單個保持暫存器的數值。
//JScript
var v;
v = 123;
if (UgModbusTCPClient01.WriteRegister(1,v))
{
if (v){
UgMemo01.Lines.Add("WriteRegister Value->>> "+floattostr(v));
}
else{
UgMemo01.Lines.Add("WriteRegister Value->>> "+floattostr(v));
}
}
else{
UgMemo01.Lines.Add("WriteRegister->>> error!");
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//PasScript
var
v:word;
Begin
v := 123;
if UgModbusTCPClient01.WriteRegister(1,v) then
begin
if v Then
UgMemo01.Lines.Add('WriteRegister Value->>> '+floattostr(v))
else
UgMemo01.Lines.Add('WriteRegister Value->>> '+floattostr(v));
End
else
UgMemo01.Lines.Add('WriteRegister->>> error!');
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Make sure to add code blocks to your code group
# 5.2.11. WriteRegisters
function WriteRegisters(const RegNo: Word; const RegisterData: string; Modbus: TUgModbusTCPClient): Boolean;
寫入多個保持暫存器的數值。
//JScript
var v,RegisterData;
RegisterData := "1,0";//指定1,0
v = UgModbusTCPClient01.WriteRegisters(1,2,"1,0");
2
3
4
//PasScript
var
v:boolean;
RegisterData:string;
begin
RegisterData := '1,0';//指定1,0
v := UgModbusTCPClient01.WriteRegisters(1,2,'1,0');
end;
2
3
4
5
6
7
8
// Make sure to add code blocks to your code group
# 6. TUgMQTTClient
MQTT是一個基於客戶端-伺服器的訊息發佈/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M)通訊和物聯網(IoT)。其在,通過衛星鏈路通訊感測器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。
# 6.1. 屬性
屬性 | 功能說明 |
---|---|
BrokerHostName | 是否自動開啟訂閱 |
BrokerHostName | 指定MQTT代理伺服器地址 |
Port | 指定MQTT代理伺服器端 |
ClientID | 指定客戶端標識 |
Credentials | 指定MQTTBroker的使用者登錄資訊 |
# 6.1.1. BrokerHostName
property BrokerHostName: string;
指定MQTT代理伺服器地址。
# 6.1.2. BrokerPort
property BrokerPort: Integer;
指定MQTT代理伺服器端。
# 6.1.3. ClientID
property ClientID:string read FClientID write SetClientID;
指定客戶端標識。
# 6.2. 事件
事件 | 何時觸發 |
---|---|
OnPublishRecerivedA | 當發佈訊息返回時觸發該事件 |
# 6.2.1. OnPublishReceivedA事件
procedure UgMQTTClient01OnPublishReceivedA(asender: tobject;apacketid: word;atopic: string;apayload: string);
atopic
表示為接收到訂閱訊息的主題名稱,apayload
表示為接收到訂閱訊息的主題內容。
# 6.3. 方法
方法 | 功能說明 |
---|---|
Connect | 連線MQTTBroker |
Disconnect | 斷開與MQTTBroker的連線 |
Subscribe | 主題訂閱 |
Unsubscribe | 取消主題訂閱 |
PublishStr | 推送主題訊息(字串) |
PublishByte | 推送主題訊息 (位元組) |
# 6.3.1. Connect
procedure Connect;
啟動與MQTTBroker的連線。
UgMQTTClient01.Connect;
# 6.3.2. Disconnect
procedure Disconnect;
斷開與MQTTBroker的連線。
UgMQTTClient01.Disconnect;
# 6.3.3. Subscribe
function Subscribe(ATopic: string): Word;
說明: MQTT 訂閱主題 返回值: Word型別
- Subscribe函式語法中各部分說明
部分 | 說明 |
---|---|
ATopic | 主題內容 |
- 示例
//JScript
//訂閱LED主題
UgMQTTClient01.Subscribe("LED");
2
3
//PasScript
//訂閱LED主題
UgMQTTClient01.Subscribe('LED');
2
3
// Make sure to add code blocks to your code group
# 6.3.4. UnSubscribe
function Unsubscribe(ATopic: string): Word;
說明: 註銷MQTT主題 返回值: Word型別
- MQTTUnSubscribe函式語法中各部分說明
部分 | 說明 |
---|---|
ATopic | 主題內容 |
- 示例
//JScript
//註銷LED主題
UgMQTTClient01.UnSubscribe("LED");
2
3
//PasScript
//註銷LED主題
UgMQTTClient01.UnSubscribe('LED');
2
3
// Make sure to add code blocks to your code group
# 6.3.5. Publish
function Publish(ATopic: string; APayload: string): Word;
說明: MQTT推送訊息 返回值: Word型別
- MQTTPublish函式語法中各部分說明
部分 | 說明 |
---|---|
ATopic | 主題內容 |
APayload | 推送的內容 |
- 示例
//JScript
//熄滅LED
UgMQTTClient01.Publish("LED","0");
2
3
//PasScript
//熄滅LED
UgMQTTClient01.Publish('LED','0');
2
3
// Make sure to add code blocks to your code group
# 7. TUgAppMQTTws
該元件為MQTT客戶端的WebSocket實現,與TUgAppMQTTClient實現的功能相同,區別在於TUgAppMQTTws是通過瀏覽器端直接與MQTT Broker建立連線,無需經過FastWeb伺服器中轉,可以縮短顯示響應的時間。
# 7.1. 屬性
屬性 | 功能說明 |
---|---|
MQTTOptions | 設定MQTT的相關選項 |
CleanSession | 是否保持乾淨連線 |
ClientID | 設定客戶端ID,該ID與連線中的客戶端ID不能重複 |
HostName | MQTT Broker的連線地址 |
Password | 設定連線到MQTT Broker的密碼 |
Port | 設定MQTT Broker WebSocket連線的埠號 |
SSL | 是否啟用SSL加密連線 |
Topic | 設定預設的訂閱主題 |
UserName | 設定連線MQTT Broker的使用者名稱稱 |
# 7.2. 事件
事件 | 何時觸發 |
---|---|
OnConnect | 當控制元件連線到MQTT Broker時觸發該事件 |
OnMessage | 當控制元件接收到訂閱主題的資訊時觸發該事件 |
OnConnectionLost | 當控制元件失去與MQTT Broker的連線時觸發該事件 |
# 7.2.1. OnConnect
procedure ugAppMQTTws01OnConnect(const amessage: string);
當控制元件連線到MQTT Broker時觸發該事件,其中的amessage
包含連線結果的相關資訊。
# 7.2.2. OnMessage
procedure ugAppMQTTws01OnMessage(const atopic: string;apayload: string);
當控制元件接收到指定訂閱主題的資訊時觸發該事件,其中的atopic
為訂閱的主題名稱,只有在客戶端訂閱了該主題后才能接收到該主題下的訂閱資訊。apayload
為訂閱主題的資訊內容。
# 7.2.3. OnConnectionLost
procedure ugAppMQTTws01OnConnectionLost(const amessage: string);
當控制元件與MQTT Broker的連線丟失時觸發該事件,其中的amessage
包含連線丟失的相關資訊。
# 7.3. 方法
# 7.3.1. SubScribe
procedure Subscribe(ATopic: string);
呼叫該方法,使控制元件訂閱主題資訊。注意在程式啟動時訂閱的資訊需要在MQTTOptions.Topic
屬性中定義,在指令碼中定義的程式啟動時訂閱主題的方法是無效的。ATopic
為主題名稱。
//JScript
ugAppMQTTws01.SubScribe("LED");
2
//PasScript
ugAppMQTTws01.SubScribe('LED');
2
// Make sure to add code blocks to your code group
# 7.3.2. UnSubScribe
procedure Unsubscribe(ATopic: string);
呼叫該方法,使控制元件取消訂閱該主題。ATopic
為主題名稱。
//JScript
ugAppMQTTws01.UnSubScribe("LED");
2
//PasScript
ugAppMQTTws01.UnSubScribe('LED');
2
// Make sure to add code blocks to your code group
# 7.3.3. Publish
procedure Publish(ATopic: string; APayload: string);
呼叫該方法,控制元件向指定主題發佈資訊。ATopic
為主題名稱,APayload
為主題內容。
//JScript
ugAppMQTTws01.Publish("LED","0");
2
//PasScript
ugAppMQTTws01.Publish('LED','0');
2
// Make sure to add code blocks to your code group