控件使用
# 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,\"www.isoface.cn \"");
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://fastweb.isoface.cn:1443";
//如果基础地址后有其它的相对地址,可加至此。
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
# 9. Python使用
TaskRunner中提供了Python运用的组件,可以通过这些组件使用Python的相关功能。请参考Python说明。