2.12_JavaScript脚本编辑
功能简介
IoT 网关支持 JavaScript 脚本编辑功能,允许用户通过编写自定义脚本实现灵活的逻辑控制和数据处理。用户可以根据业务需求编写脚本,并设置脚本的开机启动或定时启动,满足复杂场景下的定制化需求。内置的 JavaScript 脚本编辑器提供了丰富的功能函数,帮助用户快速实现脚本开发。功能配置
具体操作如下:- 单击“添加”按钮;
-
在弹出的编辑框中添加唯一的js名称,执行方式总共有三种:开机运行、循环和定时。
- 开机运行:程序启动时运行JS脚本;
- 循环:根据配置的执行周期(ms)循环执行JS脚本;(已删除,请使用开机运行加上while(true))
- 定时:每天规定的时间(时:分:秒)执行JS脚本;
- 单击选中需要运行的函数;
- 点击“Add”按钮,在弹窗中选择一个需要读取或者设置的点;
- 单击“插入”按钮,将新建的函数添加到js编辑框的光标后面;
- 可重复3,4,5的步骤进行多个函数的添加;
- 点击”确定“按钮完成js脚本的编辑。

函数说明
JS 脚本编辑器内置的函数说明如下:读写函数
ReadBit函数 从指定Tag点读取Boolean,输入参数为Tag点名称的字符串,如果该点不存在或者质量戳不为Good,返回undefined。
示例: var tagValueBit = ReadBit('Device1.tag0001');ReadStatus函数 从指定Tag点读取状态,,输入参数为Tag点名称的字符串,返回为Boolean,True为采集成功,False为采集失败,如果该点不存在或者质量戳不为Good,返回undefined。
示例: var tagStatus = ReadStatus('Device1.tag0001');ReadInt函数 从指定Tag点读取整数,输入参数为Tag点名称的字符串,如果该点不存在或者质量戳不为Good,返回undefined。
示例: var tagValueInt = ReadInt('Device1.tag0001');ReadFloat函数 从指定Tag点读取浮点数,如果该点不存在或者质量戳不为Good,返回undefined。
示例: var tagValueFloat = ReadFloat('Device1.tag0001');WriteBit函数 向指定Tag点写入布尔型,参数依次为:Tag点名称(类型为字符串),需要写入Tag点的值(类型为布尔型),无返回值。
示例: var value = true;WriteBit('Device1.tag0001', value);
WriteInt函数 向指定Tag点写入整型,参数依次为:Tag点名称(类型为字符串),需要写入Tag点的值(类型为整型),无返回值。
示例: var value = 10;WriteInt('Device1.tag0001', value);
WriteFloat函数 向指定Tag点写入浮点型,参数依次为:Tag点名称(类型为字符串),需要写入Tag点的值(类型为浮点型),无返回值。
示例: var value = 1.23;WriteFloat('Device1.tag0001', value);
WriteString函数 向指定Tag点写入字符串,参数依次为:Tag点名称(类型为字符串),需要写入Tag点的值(类型为字符串),无返回值。
示例: var value = "String";WriteString('Device1.tag0001', value);
通讯函数
SendMsgToPort函数 向指定串口发送报文,并返回接收到的报文,参数依次为:串口号,波特率,数据位,停止位,奇偶校验( 0:N,1:O,2:E),超时时间(单位毫秒:1000毫秒=1秒),发送的报文,等待接收的字节数。返回值为字符串型。
示例:while(true){ //1个不会结束的循环
var A = [0x17, 0x03, 0x00, 0x00, 0x00, 0x04, 0x46, 0xff]; //报文内容
var rs = SendMsgToPort('com1',9600,8,1,0,2000,A,0); //向串口发送报文
//console.log(rs); //打印出返回值
if(rs){ //判断返回值是否为空
var str=rs.slice(7,8); //按报文说明截取数据
//console.log(str); //打印出str的内容
reint = parseInt(str,16); //把字符串转成int16
WriteFloat('user.tag0001',reint); //把值写入指定的用户点
}
Sleep(1000); //等待1秒后再次执行循环体
}
SendMsgToTCP函数 向指定网口发送指定报文,并返回接收到的报文。参数依次为:IP地址,端口,超时时间(单位毫秒:1000毫秒=1秒),发送的报文。返回值为字符串型。
示例:while(true){ //1个不会结束的循环
var A = [0x17, 0x03, 0x00, 0x00, 0x00, 0x04, 0x46, 0xff]; //报文内容
var rs = SendMsgToTCP('192.168.1.88',81,2000,A); //向网口发送报文
//console.log(rs); //打印出返回值
if(rs){ //判断返回值是否为空
var str = rs.slice(7,8); //按报文说明截取数据
//console.log(str); //打印出str的内容
reint = parseInt(str,16); //把字符串转成int16
WriteFloat('user.tag0001',reint); //把值写入指定的用户点
}
Sleep(1000); //等待1秒后再次执行循环体
}
系统函数
Sleep函数 延迟执行,输入参数值为毫秒,无返回值。
示例:Sleep(1000);//延迟等待1000mS
使用示例
开机运行示例
while (true) {
var status;
status = ReadStatus('system.TIME_SECOND'); //ReadStatus:读取数据点质量戳
console.log('system.TIME_SECOND status is ', status);
if(status){ // 如果该点存在并且质量戳为Good
var curVal;
curVal = ReadInt('system.TIME_SECOND'); //ReadInt:从指定数据点读取整数
console.log('system.TIME_SECOND value is ', status);
WriteInt('user.test',curVal); //WriteInt:向指定数据点写入整数
}
Sleep(1000); //休眠1秒钟
}
定时示例
var status;
status = ReadStatus('system.TIME_SECOND'); //ReadStatus:读取数据点质量戳
console.log('system.TIME_SECOND status is ', status);
if(status){
var curVal;
curVal = ReadInt('system.TIME_SECOND'); //ReadInt:从指定数据点读取整数
console.log('system.TIME_SECOND value is ', status);
WriteInt('user.test',curVal); //WriteInt:向指定数据点写入整数
}
编写JS脚本实现网关定时重启
Sleep(1000); //延时1000毫秒启动循环
var i = 0;
while(true){
if(i==72) {
Reboot();
}
i++;
Sleep(1000*60*60); //循环延时1小时
}