ECMAScript_V2
需要将"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.AddProperty(strType,strPropertyName);
功能:添加属性
参数:
名称 | 类型 | 说明 |
---|---|---|
strType | String | 资源类型名: Serial:串口 TCPClient:TCP客户端 等,待添加 |
strPropertyName | String | 属性名,实例名或对象名 |
返回值:添加成功返回1;添加失败返回0
示例:
ECMA.AddProperty("Serial","SerialA");// 添加一个Serial,命名为SerialA,后续使用SerialA
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
}
]
}
二.串口操作函数
例如添加了"strPropertyName"名称为"SerialA"的串口(Serial)属性,则后续可以使用SerialA的方法
ECMA.AddProperty("Serial","SerialA");// 添加一个Serial,命名为SerialA,后续使用SerialA
SerialA.Open(strPortName,strBaud,strDataBit,strStopBit,strParity);
功能:打开指定串口
参数:
名称 | 类型 | 说明 |
---|---|---|
strPortName | String | 串口设备名称 |
strBaud | String | 波特率 |
strDataBit | String | 数据位 |
strStopBit | String | 停止位 |
strParity | String | 校验方式 NONE,EVEN,ODD,Space,Mark |
返回值:打开成功返回1,打开失败返回0
示例:
// 使用SerialA打开指定的串口,参数分别为:串口名称,波特率,数据位,停止位,校验方式(NONE,EVEN,ODD,Space,Mark)
var isOpen = SerialA.Open("ttyUSB0","9600","8","1","NONE");
ECMA.SetValue('API.设备_1@YK7', isOpen);
SerialA.Close();
功能:关闭串口
参数:无
返回值:无
示例:
SerialA.Close();// 关掉串口
SerialA.isOpen();
功能:获取链路状态.
参数:无
返回值:通讯链路正常返回1;通讯链路异常返回0
示例:
// 获取串口状态
var isOpen0 = SerialA.isOpen();
ECMA.SetValue('API.设备_1@YK20', isOpen0);
SerialA.write(data)
功能:发送报文
参数:
名称 | 类型 | 说明 |
---|---|---|
data | String或Object | 当参数为String时,直接发送 当参数为Object时,可以指定类型:HEX或ASCII |
返回值:返回成功发送的字节个数
示例1:
SerialA.write("12345");// 发送ASCII格式的123456字符串
示例2:
var data = {"T":"ASCII","D":"112233445566778899001122"};// 要发送的报文 ASCII格式
var size = SerialA.write(data);// 发送报文,并获取发送报文的字节数
ECMA.Display("发送",data);
ECMA.SetValue('API.设备_1@YK8', size);// 将发送报文的字节数设置给某个点,设置单个点值
示例3:
var data = {"T":"HEX","D":"112233445566778899001122"};// 要发送的报文 HEX格式
var size = SerialA.write(data);// 发送报文,并获取发送报文的字节数
ECMA.Display("发送",data);
ECMA.SetValue('API.设备_1@YK9', size);// 将发送报文的字节数设置给某个点,设置单个点值
SerialA.readAll(data);
功能:读取报文
参数:
名称 | 类型 | 说明 |
---|---|---|
data | Object | 参数为Object时,可以指定读取类型:HEX或ASCII |
返回值:返回本次读取到的报文
示例1:
var pread = {"T":"ASCII"};
var read = SerialA.readAll(pread);// 读取收到的报文,ASCII格式
ECMA.Display("读取",read);
示例2:
var pread = {"T":"HEX"};
var read = SerialA.readAll(pread);// 读取收到的报文,HEX格式
ECMA.Display("读取",read);
串口操作测试用例:
ECMA.AddProperty("Serial","SerialA");// 添加一个Serial,命名为SerialA,后续使用SerialA
// 使用SerialA打开指定的串口,参数分别为:串口名称,波特率,数据位,停止位,校验方式(NONE,EVEN,ODD,Space,Mark)
var isOpen = SerialA.Open("ttyUSB0","9600","8","1","NONE");
ECMA.SetValue('API.设备_1@YK7', isOpen);
// 本脚本只执行一次,因此如果需要循环执行则需要在循环内编写脚本语言
// 以下为循环执行
while (1) {
var isOpen0 = SerialA.isOpen();
ECMA.SetValue('API.设备_1@YK20', isOpen0);
var data = {"T":"ASCII","D":"112233445566778899001122"};// 要发送的报文
var size = SerialA.write(data);// 发送报文,并获取发送报文的字节数
ECMA.Display("发送",data);
ECMA.SetValue('API.设备_1@YK8', size);// 将发送报文的字节数设置给某个点,设置单个点值
ECMA.Delay(1000);// 延时函数,单位毫秒,延时1000ms
var pread = {"T":"ASCII"};
var read = SerialA.readAll(pread);// 读取收到的报文,一般执行完"写(ECMA.write)"功能后需要延时一段时间再"读(ECMA.readAll)"报文
ECMA.Display("读取",read);
ECMA.Delay(500);// 延时函数,单位毫秒,延时1000ms
var data = {"T":"HEX","D":"112233445566778899001122"};// 要发送的报文
var size = SerialA.write(data);// 发送报文,并获取发送报文的字节数
ECMA.Display("发送",data);
ECMA.SetValue('API.设备_1@YK9', size);// 将发送报文的字节数设置给某个点,设置单个点值
ECMA.Delay(1000);// 延时函数,单位毫秒,延时1000ms
var pread = {"T":"HEX"};
var read = SerialA.readAll(pread);// 读取收到的报文,一般执行完"写(ECMA.write)"功能后需要延时一段时间再"读(ECMA.readAll)"报文
ECMA.Display("读取",read);
}