ECMAScript
需要将"Web版本"升级到"3.6.6-210927002-code"及以上版本
一. 串口
定制函数
ECMA.SetValue(strTagName, value);
功能:设置单个点值
参数:
名称 | 类型 | 说明 |
---|---|---|
strTagName | String | "采集点名"全称 |
value | 不限 | 设置的值 |
返回值:设置成功返回1;设置失败返回0
示例:
var oDate = new Date(); //初始化系统时间函数
var year = oDate.getFullYear();
var month = oDate.getMonth() + 1;
var day = oDate.getDate();
var hour = oDate.getHours();
var minute = oDate.getMinutes();
var second = oDate.getSeconds();
// 获取年月日时分秒,设置年月日时分秒
ECMA.SetValue('API.设备_1@YK1', year);
ECMA.SetValue('API.设备_1@YK2', month);
ECMA.SetValue('API.设备_1@YK3', day);
ECMA.SetValue('API.设备_1@YK4', hour);
ECMA.SetValue('API.设备_1@YK5', minute);
ECMA.SetValue('API.设备_1@YK6', second);
ECMA.SetMultipleValue(obj);
功能:设置多个点值
参数:
名称 | 类型 | 说明 |
---|---|---|
obj | list | 设置多个点值,格式: [ { name: 控制点名, value: 设置的值 }, … ] 可以同时设置多个点值 |
返回值:设置成功返回1;设置失败返回0
示例:
var multiplevalue_List = [{ "name": "API.设备_1@YK21", "value": 123 }, { "name": "API.设备_1@YK22", "value": 456.789 }, { "name": "API.设备_1@YK23", "value": "1234567890" }, { "name": "API.设备_1@YK24", "value": "测试中文" }];
ECMA.SetMultipleValue(multiplevalue_List);
ECMA.GetValue(strTagName);
功能:获取点值
参数:
名称 | 类型 | 说明 |
---|---|---|
strTagName | String | "采集点名"全称 |
返回值:该点数据值
示例
var value = ECMA.GetValue('API.设备_1@YK9');
ECMA.Delay(nMiSecondDelay);
功能:延时函数
名称 | 类型 | 说明 |
---|---|---|
nMiSecondDelay | int | 延时函数,参数单位为毫秒 |
返回值:无
示例
ECMA.Delay(1000);// 延时函数,单位毫秒,延时1000ms
ECMA.isOpen();
功能:获取链路状态.
参数:无
返回值:通讯链路正常返回1;通讯链路异常返回0
示例
// 获取串口状态
var isOpen = ECMA.isOpen();
ECMA.write(data)
功能:发送报文
参数:
名称 | 类型 | 说明 |
---|---|---|
data | String | 发送的报文 |
返回值:返回成功发送的字节个数
示例:
ECMA.write("12345");// 发送ASCII格式的123456字符串
ECMA.readAll();
功能:读取报文
参数:无
返回值:返回本次读取到的报文
示例:
ECMA.Delay(1000);// 延时函数,单位毫秒,延时1000ms
var read = ECMA.readAll();// 读取返回的报文
ECMA.SetFrameHex();
功能:设置报文格式为十六进制格式,
设置报文格式,十六进制格式.默认报文格式为字符串格式,通过此函数可以将报文格式设置为十六进制形式,在发送时会对js合成的报文做fromHex操作,在读取返回js时会对报文做toHex操作
参数:无
返回值:无
示例:
ECMA.SetFrameHex();// 报文设置HEX格式,一般在脚本开始位置设置,只需设置一次即可
ECMA.Display(str, value);
功能:将信息输出到报文界面,可协助调试过程,正常运行后尽量使用此函数的部分
参数:
名称 | 类型 | 说明 |
---|---|---|
str | String | 可以填写一些调试信息 |
value | 不限 | 可以输出字符串或者列表等数据类型 |
返回值:无
示例:
var data = "112233445566778899001122";// 要发送的报文
var multiplevalue_List = [{"name":"API.设备_1@YK21","value":123},{"name":"API.设备_1@YK22","value":456.789},{"name":"API.设备_1@YK23","value":"1234567890"},{"name":"API.设备_1@YK24","value":"测试中文"}];
ECMA.Display("测试1",data);
ECMA.Display("测试2",multiplevalue_List);
ECMA.GetElapsedTimer_elapsed_seconds();
功能:获取计时器时间,可用于前后两次获取的值进行差值计算,可以算出使用了多少时间
参数:无
返回值:返回计时器时间,单位:秒
示例:
var timer1 = ECMA.GetElapsedTimer_elapsed_seconds();// 计时器 秒
var timer2 = ECMA.GetElapsedTimer_elapsed_millisecond();// 计时器 毫秒
var timer3 = ECMA.GetElapsedTimer_elapsed_microseconds();// 计时器 微秒
var timer4 = ECMA.GetElapsedTimer_elapsed_nanosecond();// 计时器 纳秒
ECMA.SetValue('API.设备_1@YK11',timer1);
ECMA.SetValue('API.设备_1@YK12',timer2);
ECMA.SetValue('API.设备_1@YK13',timer3);
ECMA.SetValue('API.设备_1@YK14',timer4);
ECMA.GetElapsedTimer_elapsed_millisecond();
功能:获取计时器时间,可用于前后两次获取的值进行差值计算,可以算出使用了多少时间
参数:无
返回值:返回计时器时间,单位:毫秒
示例:
var timer1 = ECMA.GetElapsedTimer_elapsed_seconds();// 计时器 秒
var timer2 = ECMA.GetElapsedTimer_elapsed_millisecond();// 计时器 毫秒
var timer3 = ECMA.GetElapsedTimer_elapsed_microseconds();// 计时器 微秒
var timer4 = ECMA.GetElapsedTimer_elapsed_nanosecond();// 计时器 纳秒
ECMA.SetValue('API.设备_1@YK11',timer1);
ECMA.SetValue('API.设备_1@YK12',timer2);
ECMA.SetValue('API.设备_1@YK13',timer3);
ECMA.SetValue('API.设备_1@YK14',timer4);
ECMA.GetElapsedTimer_elapsed_microseconds();
功能:获取计时器时间,可用于前后两次获取的值进行差值计算,可以算出使用了多少时间
参数:无
返回值:返回计时器时间,单位:微秒
示例:
var timer1 = ECMA.GetElapsedTimer_elapsed_seconds();// 计时器 秒
var timer2 = ECMA.GetElapsedTimer_elapsed_millisecond();// 计时器 毫秒
var timer3 = ECMA.GetElapsedTimer_elapsed_microseconds();// 计时器 微秒
var timer4 = ECMA.GetElapsedTimer_elapsed_nanosecond();// 计时器 纳秒
ECMA.SetValue('API.设备_1@YK11',timer1);
ECMA.SetValue('API.设备_1@YK12',timer2);
ECMA.SetValue('API.设备_1@YK13',timer3);
ECMA.SetValue('API.设备_1@YK14',timer4);
ECMA.GetElapsedTimer_elapsed_nanosecond();
功能:获取计时器时间,可用于前后两次获取的值进行差值计算,可以算出使用了多少时间
参数:无
返回值:返回计时器时间,单位:纳秒
示例:
var timer1 = ECMA.GetElapsedTimer_elapsed_seconds();// 计时器 秒
var timer2 = ECMA.GetElapsedTimer_elapsed_millisecond();// 计时器 毫秒
var timer3 = ECMA.GetElapsedTimer_elapsed_microseconds();// 计时器 微秒
var timer4 = ECMA.GetElapsedTimer_elapsed_nanosecond();// 计时器 纳秒
ECMA.SetValue('API.设备_1@YK11',timer1);
ECMA.SetValue('API.设备_1@YK12',timer2);
ECMA.SetValue('API.设备_1@YK13',timer3);
ECMA.SetValue('API.设备_1@YK14',timer4);
ECMA.DB_Sql_exec(strSql);
功能:直接编写SQL语句操作数据库
参数:
名称 | 类型 | 说明 |
---|---|---|
strSql | String | 要执行的sql语句 |
返回值:返回执行结果,为Object,包含三个部分:
名称 | 类型 | 说明 |
---|---|---|
err_type | String | 错误类型 |
err_text | String | 错误描述 |
rows | Array | 如果为查询语句则返回查询到的数据 |
示例:
var dateformat = moment().format('YYYY-MM-DD hh:mm:ss');// 格式化当前时间
ECMA.Display("时间格式化",dateformat);// 打印格式化后的时间字符串
// var sql = "insert into test(ID,Value,AcpTime) values ("+num+",123,\"2021-05-13 11:22:33\");";
var sql = "insert into test(ID,Value,AcpTime) values ("+num+","+num*100+",\""+dateformat+"\");";// 合成插入sql语句
var dbresult = ECMA.DB_Sql_exec(sql);// 执行并获取返回值
ECMA.Display("数据库写入测试",dbresult);// 打印执行结果
dbresult = ECMA.DB_Sql_exec("select * from test;");// 查询test表所有数据
ECMA.Display("数据库查询测试",dbresult);// 打印执行结果
上述示例打印执行结果:
Time:2021/09/30 08:55:04.170
Debug:Display
参数1:时间格式化
参数2:2021-09-30 08:55:04
Time:2021/09/30 08:55:04.189
Debug:Display
参数1:数据库写入测试
参数2:{
"err_text": " ",
"err_type": 0,
"rows": [
]
}
Time:2021/09/30 08:55:04.235
Debug:Display
参数1:数据库查询测试
参数2:{
"err_text": " ",
"err_type": 0,
"rows": [
{
"AcpTime": "2021-09-30T08:54:59",
"ID": 1,
"Value": 100
},
{
"AcpTime": "2021-09-30T08:55:02",
"ID": 2,
"Value": 200
},
{
"AcpTime": "2021-09-30T08:55:04",
"ID": 3,
"Value": 300
}
]
}
测试用例:
ECMA.SetFrameHex();// 脚本起始位置将报文格式设置为HEX格式
// 本脚本只执行一次,因此如果需要循环执行则需要在循环内编写脚本语言
// 以下为循环执行
while (1) {
var oDate = new Date(); //初始化系统时间函数
var year = oDate.getFullYear();
var month = oDate.getMonth() + 1;
var day = oDate.getDate();
var hour = oDate.getHours();
var minute = oDate.getMinutes();
var second = oDate.getSeconds();
// 获取年月日时分秒,设置年月日时分秒
ECMA.SetValue('API.设备_1@YK1', year);
ECMA.SetValue('API.设备_1@YK2', month);
ECMA.SetValue('API.设备_1@YK3', day);
ECMA.SetValue('API.设备_1@YK4', hour);
ECMA.SetValue('API.设备_1@YK5', minute);
ECMA.SetValue('API.设备_1@YK6', second);
// 判断串口是否打开
var isOpen = ECMA.isOpen();
ECMA.SetValue('API.设备_1@YK7', isOpen);
var data = "112233445566778899001122";// 要发送的报文
var size = ECMA.write(data);// 发送报文,并获取发送报文的字节数
ECMA.SetValue('API.设备_1@YK8', size);// 将发送报文的字节数设置给某个点,设置单个点值
ECMA.Delay(1000);// 延时函数,单位毫秒,延时1000ms
var read = ECMA.readAll();// 读取收到的报文,一般执行完"写(ECMA.write)"功能后需要延时一段时间再"读(ECMA.readAll)"报文
ECMA.SetValue('API.设备_1@YK9', read);
var timer1 = ECMA.GetElapsedTimer_elapsed_seconds();// 计时器 秒
var timer2 = ECMA.GetElapsedTimer_elapsed_millisecond();// 计时器 毫秒
var timer3 = ECMA.GetElapsedTimer_elapsed_microseconds();// 计时器 微秒
var timer4 = ECMA.GetElapsedTimer_elapsed_nanosecond();// 计时器 纳秒
ECMA.SetValue('API.设备_1@YK11',timer1);
ECMA.SetValue('API.设备_1@YK12',timer2);
ECMA.SetValue('API.设备_1@YK13',timer3);
ECMA.SetValue('API.设备_1@YK14',timer4);
var multiplevalue_List = [{"name":"API.设备_1@YK21","value":123},{"name":"API.设备_1@YK22","value":456.789},{"name":"API.设备_1@YK23","value":"1234567890"},{"name":"API.设备_1@YK24","value":"测试中文"}];
ECMA.SetMultipleValue(multiplevalue_List);// 批量设置多个点值
ECMA.Display("测试1",data);// 调试信息输出到报文界面
ECMA.Display("测试2",multiplevalue_List);// 调试信息输出到报文界面
}