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);
}

三.SOAP操作函数


通道配置示例图

通道配置示例图

results matching ""

    No results matching ""