控制元件使用
# TaskRunner 控制元件使用
TaskRunner對物聯網設備控制,監聽等需要依賴於物聯網控制元件來實現,下面將會列出TaskRunner內建的物聯網控制元件,對物聯網控制元件的基本使用方法進行說明。
# 1. 通訊埠
TaskRunner通訊埠控制元件的使用示例如下:
//連線電子秤的示例
{
//定義變數,建立控制元件
var c = new TComPort(nil);
try
{
//定義通訊埠基本資訊
//傳輸速率
TComPort(C).BaudRate = br9600;
//埠號
TComPort(C).DeviceName = "COM3";
//數據位數
TComPort(C).DataBits = db8;
//停止位數
TComPort(C).StopBits = sb1;
//打開通訊埠
TComPort(C).Open;
//判斷通訊埠是否被啟用
if (TComPort(C).Active)
{
//向電子秤發送讀取數據指令
TComPort(C).WriteChar("R");
//延時0.1秒後讀取
sleep(100);
Text = copy(TComPort(C).ReadUtf8, 1, 12);
if (Length(Text) != 12)
Exit;
if (Text == "")
{
D = "0.00";
exit;
}
v1 = copy(Text, 4, 1);
v2 = copy(Text, 5, 7);
if (v1 == "0")
d1 = StrToFloat(v2)*0.0011
else if (v1 == "-")
d1 = -1 * StrToFloat(v2)*0.0001;
if (v2=="0000.00")
{
d1 = 0;
D = floattostr(d1);
}
if (d1 == 0) Exit;
D = floattostr(d1);
//Showmessage("電子稱讀數為:"+D+" KG");
//寫入到動態日誌
UGMM.AddLog("電子稱讀數為:"+D+" KG");
}
}
//釋放對像
finally
{
c.free;
}
}
1
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
59
60
61
62
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
59
60
61
62
//連線通訊埠印表機的示例
{
//定義變數
var s = new TStringList();
var c = new TComPort(nil);
var p;
try
{
//外部傳入列印的數據
p = UGParams.Values["data"];
//列印資料,有多行,分成多行進行輸入
TStringList(s).Add("SIZE 40 mm,40 mm");
TStringList(s).Add("CLS");
TStringList(s).Add("TEXT 50,30,\"TSS24.BF2\",0,1,1,\"商品清單 \"");
TStringList(s).Add("TEXT 50,45,\"4\",0,1,1,\"-------------------------------\"");
TStringList(s).Add("TEXT 50,70,\"TSS24.BF2\",0,1,1,\"NOODLES 1 15 15 \"");
TStringList(s).Add("TEXT 50,100,\"TSS24.BF2\",0,1,1,\"POTATO 1 15 15 \"");
TStringList(s).Add("TEXT 50,130,\"TSS24.BF2\",0,1,1,\"KNIFE 1 15 15 \"");
TStringList(s).Add("TEXT 50,160,\"TSS24.BF2\",0,1,1,\"CHICKENS 1 15 15 \"");
TStringList(s).Add("TEXT 50,175,\"4\",0,1,1,\"------------------------------\"");
TStringList(s).Add("TEXT 50,200,\"TSS24.BF2\",0,1,1,\"SUM 4 60 60 \"");
TStringList(s).Add("QRCODE 50,230,L,4,A,0,\"isoface.net \"");
TStringList(s).Add("PRINT 1");
TStringList(s).Add("EOP");
//定義通訊埠基本資訊
//傳輸速率
TComPort(C).BaudRate = br9600;
//埠號
TComPort(C).DeviceName = "COM3";
//數據位數
TComPort(C).DataBits = db8;
//停止位數
TComPort(C).StopBits = sb1;
//打開通訊埠
TComPort(C).Open;
//判斷通訊埠是否被啟用
if (TComPort(C).Active)
{
//如果外部傳入列印數據為空,則列印預設內容
if (p == "")
TComPort(C).WriteAnsiLine(s.Text)
else
TComPort(C).WriteAnsiLine(p);
}
}
//釋放對像
finally
{
c.free;
s.free;
}
}
1
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
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
# 2. ModbusTCP
ModbusTCP控制元件的使用示例如下:
{
//定義變數
var v;
var m = new TModbusTCPClient(nil);
//設定參數
//Modbus從機的IP地址
TModbusTCPClient(m).Host = "127.0.0.1";
//Modbus從機的埠號
TModbusTCPClient(m).Port = 502;
TModbusTCPClient(m).UnitID = 255;
//讀取保持暫存器
if (TModbusTCPClient(m).ReadHoldingRegister(1,v))
{
if (v == 0)
//寫暫存器
TModbusTCPClient(m).WriteRegister(1,1)
else
TModbusTCPClient(m).WriteRegister(1,0);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
關於ModbusTCP的可用方法請參考ModbusTCPClient。
# 3. RestAPI
TaskRunner中的RestAPI控制元件作為客戶端使用,可向其它服務發送請求。使用的示例如下:
//回撥事件,接收返回的資訊
function OnRestAPIResultData(Sender,AResult)
{
//Showmessage("GUID:"+AResult);
UGMM.AddLog("GUID:" + AResult);
}
//主程式
{
var rest = new TRestAPI(nil);
try{
//邦定事件
TRestAPI(rest).OnResultData = &OnRestAPIResultData;
//屬性賦值
//API的描述資訊
TRestAPI(rest).Caption = "獲取GUID";
//設定RestAPI伺服器,格式如下,埠號後面不要加 '/'
TRestAPI(rest).Server = "https://web.diylogi.com";
//如果基礎地址後有其它的相對地址,可加至此。
TRestAPI(rest).Url = "";
//期望返回的內容型別
TRestAPI(rest).ContentType = "text/html";
//請求方法 rmPOST、rmGET、rmPUT、rmDELETE
TRestAPI(rest).Method = rmGET;
//URL參數定義,如有多個參數則分成多行,如下所示。
TRestAPI(rest).Params.Add("restapi=script");
TRestAPI(rest).Params.Add("apiname=guid");
//呼叫
TRestAPI(rest).Send;
}
finally
{
//釋放
rest.free;
}
}
1
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
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
# 4. WebSocket
WebSocket部分的資訊詳見WebSocket說明。
# 5. MQTT
MQTT部分的資訊詳見MQTT說明。
# 6. 數據連線
數據連線可使用以下模式來實現。
# 6.1. 引用資料庫設定
var D,V,O,DB;
D = new TFDQuery(nil);
//使用資料庫設定的連線
DB = UGMM.GetDBConnection("FastERP");
D.Connection = DB;
//使用預設SQL
D.SQL.Text = UGMM.GetSQL("SQL001");
D.Open;
//數據集轉換
V = TFDQuery(D).ToJSONArray;
O = new TJSONObject();
O.AddPair("status","ok");
O.AddPair("message","success");
O.AddPair("records",TJSONNumber.Create(D.RecordCount));
O.AddPair("data",V);
return(O.ToString);
D.Free;
V.Free;
O.Free;
DB.Free;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 6.2. 連線TARS
以下部分為TARS資料庫連線的方式:
var D,S;
try
{
//建立資料庫連線
D= new TRFConnection(nil);
D.ConnectionDefName = "FastERP";
D.ServerAddr = "127.0.0.1";
D.ServerPort = "8809";
D.LoginOptions.UserName = "admin";
D.LoginOptions.Password = "admin";
D.LoginOptions.MD5Salt = "";
D.ForceEncryption = true;
D.SecureKey = "123456";
//建立數據集
S= new TRFDataSet(nil);
TRFDataSet(S).Connection = D;
TRFDataSet(S).SQL.Text = "SELECT * FROM Basic_WHS";
TRFDataSet(S).Open;
//輸出數據集JSON
Showmessage(TRFDataSet(S).ToJSONArrayString);
}
finally{
//釋放對像
FreeAndNil(D);
FreeAndNil(S);
}
1
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
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
# 6.3. TFastDataSet
TFastDataSet是本機數據集控制元件,可用於數據集快速處理。使用此控制元件前,需在資料庫設定界面中設定資料庫連線。
var D,V,O;
D = new TFastDataSet(nil);
TFastDataSet(d).ConnectionDefName = "FastERP";
TFastDataSet(D).CommandText = "SELECT * FROM Basic_WHS";
TFastDataSet(D).Open;
//數據集轉換
V = TFastDataSet(D).ToJSONArray;
O = new TJSONObject();
O.AddPair("status","ok");
O.AddPair("message","success");
O.AddPair("records",TJSONNumber.Create(D.RecordCount));
O.AddPair("data",V);
return(O.ToString);
D.Free;
V.Free;
O.Free;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 7. 郵件
郵件發送可使用系統預設設定中提供的地址,也可使用 TEmailMsg
元件來發送郵件,使用的示例如下:
{
var Email;
Email = new TEmailMsg(nil);
//郵箱伺服器地址
TEmailMsg(Email).Host = "smtp.example.com";
//郵箱埠
TEmailMsg(Email).Port = 25;
//發件人(郵箱)
TEmailMsg(Email).Username = "sampleuser@example.com";
//郵箱密碼
TEmailMsg(Email).Password = "password";
//收件人郵箱地址
TEmailMsg(Email).Address = "receiveuser@example.com";
//主題
TEmailMsg(Email).Subject = "TaskRunner Email Test";
//正文
TEmailMsg(Email).Body = "<p><font color = \"red\">hello</font></p>";
//if Use HTML
TEmailMsg(Email).BodyHtml = True;
//發送郵件
if(TEmailMsg(Email).SendEmail){
UGMM.AddLog("Email Send Success");
}
Email.Free;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 8. 遠端列印
遠端列印功能由Flying提供,TaskRunner中提供了客戶端控制元件TFlying
,方便使用者在自定程式中使用。
在使用前,請先參考Flying 報表設計說明設計定義數據源格式,以及需要使用的報表格式。
TaskRunner中使用的示例如下:
//配合FastERP2中的遠端列印自定按鈕實現遠端列印的功能
{
var F,DA,DB,D;
//建立TFlying控制元件
F = new TFlying(nil);
DA = new TFDQuery(nil);
DB = new TFDQuery(nil);
D = UGMM.GetDBConnection("fasterp2");
try{
DA.Connection = D;
DB.Connection = D;
//此處的SQL查詢,查詢的結果中包含的欄位與報表設計環節定義的數據源的欄位一致
DA.SQL.Text = "select * from SdShipOrder where shipno = :shipno";
DB.SQL.Text = "select * from SdShipPart where shipno = :shipno";
//從自定程式的URL參數中獲取參數值,並賦值
DA.ParamByName("shipno").AsString = UGParams.Values["shipno"];
DB.ParamByName("shipno").AsString = UGParams.Values["shipno"];
DA.Open;
DB.Open;
if((DA.RecordCount > 0) && (DB.RecordCount > 0)){
//使用HTTP列印模式
TFlying(F).PrintOptions.PrintType = HTTP;
//設定為報表設計環節指定的報表檔名稱
TFlying(F).PrintOptions.ReportName = "fasterp2_shiporder.fr3";
//HTTP列印服務的主機地址
TFlying(F).HTTPOptions.Host = "127.0.0.1";
//HTTP列印服務的埠號
TFlying(F).HTTPOptions.Port = 8801;
//要按照順序,與報表設計環節定義的數據源順序保持一致
TFlying(F).PrintOptions.Data.Add("\"AData\":"+ DA.ToJSONArrayString);
TFlying(F).PrintOptions.Data.Add("\"BData\":"+ DB.ToJSONArrayString);
//執行列印
TFlying(F).Print;
}
}
finally{
//執行完成,釋放記憶體
DA.Free;
DB.Free;
D.Free;
F.Free;
}
}
1
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
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