RS232电子秤读数
# TaskRunner 自定程序 - RS232电子秤读数
# 1. 说明
- 任务运行器 TaskRunner 通过自定程序,以串口通讯的方式读取电子秤的读数,并解析显示。
- 示例使用的电子秤型号为耀华XK3190-A12+E,外观如下图所示。


- 地磅与秤头按照上图所示的内容进行连接,电子秤的外接串口端与USB串口转接线的串口端相连,另外一端与PC的USB端口连接,打开电子秤的开关,待连接确认后,打开Windows中的设备管理器,查看端口号信息,在范例中会使用到此端口号。
# 2. 设计程序
TaskRunner 的初始示例已包含 RS232电子秤读数
自定程序。下面介绍创建自定程序的流程。
- 点击
自定程序
选项卡,在自定程序界面中点击新建
按钮,打开新建程序界面。 - 在新建程序界面,填写要设计的自定程序的基本信息。如下图所示。填写完成点击
保存
按钮。
- 返回自定程序列表界面,选择刚才创建的
JS012
自定程序,点击菜单栏中的设计
按钮,打开程序设计器界面。 - 在程序设计器界面中输入自定程序代码,代码示例如下。完成后,点击
保存
按钮。
{
//定义变量
var d1,d2,v1,v2,D,COM;
var c = new TComPort(nil);
COM = iif(UgParams.Values["device"] =="","COM3",UgParams.Values["device"]);
try
{
//定义串口
TComPort(C).BaudRate = br9600;
TComPort(C).DeviceName = COM;
TComPort(C).DataBits = db8;
TComPort(C).StopBits = sb1;
TComPort(C).Parity = paNone;
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 == "+")
d1 = StrToFloat(v2)*0.0001
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
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

- 如需要测试效果,可在程序设计器界面中点击
运行
按钮进行测试。在测试前可先将 43 行取消注释,确认第 5 行的串口端口号是否一致。运行后可读取到电子秤的读数信息。
程序中定义的参数说明如下:
名称 | 说明 | 是否必填 | 默认值 |
---|---|---|---|
device | 设备使用的端口号 | 是 | COM3 |
# 3. 调用执行
设计完成的自定程序可使用以下方式来调用执行。
# 3.1. RestAPI
使用浏览器或RestAPI 客户端,访问以下地址,执行自定程序调用。请将 {ip}
修改为运行 TaskRunner 主机的IP地址,{port}
修改为 TaskRunner WebSocket 服务端监听的地址。
http://{ip}:{port}?restapi=script&taskname=JS012&evaluate=D
1
如需要自定义参数,参照以下方式执行。其中将 {device}
替换为设备的端口编号。
http://{ip}:{port}?restapi=script&taskname=JS012&evaluate=D&device={device}
1
# 3.2. WebSocket
使用WebSocket客户端,连接至 TaskRunner 中的 WebSocket 服务端。向 WebSocket 服务端发送以下文本实现自定程序的调用。
{"action":"script","taskname":"JS012"}
1
如需要自定义参数,参照以下方式执行。其中将 {device}
替换为设备的端口编号。
{"action":"script","taskname":"JS012","params":[{"name":"device","value":"{device}"}]}
1
注意
读取到的数据不能直接通过 WebSocket 直接传给客户端,此方法仅适用于中间环节的数据处理过程。
# 3.3. MQTT
使用 MQTT 客户端,连接至 TaskRunner 连接的 MQTT 服务器。MQTT 客户端向 TaskRunner 订阅的主题发送以下文本实现自定程序的调用。
{"action":"script","taskname":"JS012"}
1
如需要自定义参数,参照以下方式执行。其中将 {device}
替换为设备的端口编号。
{"action":"script","taskname":"JS012","params":[{"name":"device","value":"{device}"}]}
1
注意
读取到的数据不能直接通过 MQTT 直接传给客户端,此方法仅适用于中间环节的数据处理过程。