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.Current_DateTime_toString(strFormat);

功能:以字符串形式返回日期时间。strFormat参数确定结果字符串的格式。

这些表达式可用于日期:

Expression Output
d the day as number without a leading zero (1 to 31)
dd the day as number with a leading zero (01 to 31)
ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). Uses the system locale to localize the name, i.e. QLocale::system().
dddd the long localized day name (e.g. 'Monday' to 'Sunday'). Uses the system locale to localize the name, i.e. QLocale::system().
M the month as number without a leading zero (1-12)
MM the month as number with a leading zero (01-12)
MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). Uses the system locale to localize the name, i.e. QLocale::system().
MMMM the long localized month name (e.g. 'January' to 'December'). Uses the system locale to localize the name, i.e. QLocale::system().
yy the year as two digit number (00-99)
yyyy the year as four digit number

These expressions may be used for the time:

Expression Output
h the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)
hh the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)
H the hour without a leading zero (0 to 23, even with AM/PM display)
HH the hour with a leading zero (00 to 23, even with AM/PM display)
m the minute without a leading zero (0 to 59)
mm the minute with a leading zero (00 to 59)
s the whole second without a leading zero (0 to 59)
ss the whole second with a leading zero where applicable (00 to 59)
z the fractional part of the second, to go after a decimal point, without trailing zeroes (0 to 999). Thus "s.z" reports the seconds to full available (millisecond) precision without trailing zeroes.
zzz the fractional part of the second, to millisecond precision, including trailing zeroes where applicable (000 to 999).
AP or A use AM/PM display. A/AP will be replaced by either "AM" or "PM".
ap or a use am/pm display. a/ap will be replaced by either "am" or "pm".
t the timezone (for example "CEST")

参数:

名称 类型 说明
strFormat String "采集点名"全称

返回值:以字符串形式返回日期时间。

示例:

var datetime = ECMA.Current_DateTime_toString("yyyy-MM-dd hh:mm:ss.zzz");
// datetime字符串为"2021-01-21 15:58:22.998"

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);// 读取收到的报文,一般执行完"写(SerialA.write)"功能后需要延时一段时间再"读(SerialA.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);// 读取收到的报文,一般执行完"写(SerialA.write)"功能后需要延时一段时间再"读(SerialA.readAll)"报文
    ECMA.Display("读取",read);
}

MQTT操作函数

例如添加了"strPropertyName"名称为"MQTT"的MQTT属性,则后续可以使用MQTT的方法
ECMA.AddProperty("MQTT","MQTT");// 添加一个MQTT,命名为MQTT,后续使用MQTT

MQTT.settopic_sub_List(topicList);

功能:设置订阅的topic列表

参数:

名称 类型 说明
topicList String 设置订阅的topic列表

返回值:无

示例:

var sublist = ["/test/aaa","/test/bbb","/test/ccc"];// 订阅的topic列表
MQTT.settopic_sub_List(sublist);// 设置订阅的topic列表

MQTT.connectToHost(hostName,port,clientId,username,password);

功能:设置用于与MQTT服务器建立连接的的地址、端口号、clientID、用户名、密码参数,并连接MQTT服务器

参数:

名称 类型 说明
strhostName String MQTT服务器IP地址或域名
port String 设置MQTT服务器的端口号
clientId String 设置客户端ID
username String 设置用户名
password String 设置密码

返回值:无

示例:

MQTT.connectToHost("47.94.202.25","1883","test","admin","123456");// 设置用于与MQTT服务器建立连接的的地址、端口号、clientID、用户名、密码参数,并连接MQTT服务器

MQTT.publish(message)

功能:发送报文

参数:

名称 类型 说明
message Object 参数为Object,需要指定类型:HEX或ASCII

返回值:无

示例1:

// TOPIC表示发布的topic;
// T表示类型,支持HEX和ASCII;
// D表示发布的消息内容
var message = {"TOPIC":"/test/aaa","T":"ASCII","D":"12345678901"};
MQTT.publish(message);// 发布MQTT消息

示例2:

// TOPIC表示发布的topic;
// T表示类型,支持HEX和ASCII;
// D表示发布的消息内容
var message = {"TOPIC":"/test/aaa","T":"HEX","D":"3132333435363738393031"};
MQTT.publish(message);// 发布MQTT消息

MQTT.getOneMessage(pread)

功能:获取订阅到的消息列表中的一条消息

参数:

名称 类型 说明
pread Object 参数为Object,需要指定类型:HEX或ASCII

返回值:返回一条读取到的消息,object类型

名称 类型 说明
TOPIC String topic
T String 消息类型,HEX或ASCII
D String 消息内容

示例1:

// T表示类型,支持HEX和ASCII;
var pread = {"T":"ASCII"};
var read = MQTT.getOneMessage(pread);// 读取1条MQTT消息
ECMA.Display("读取1条",read);

返回值示例:

{
    "D": "12345678901",
    "T": "ASCII",
    "TOPIC": "/test/aaa"
}

示例2:

// T表示类型,支持HEX和ASCII;
var pread = {"T":"HEX"};
var read = MQTT.getOneMessage(pread);// 读取1条MQTT消息
ECMA.Display("读取1条",read);

返回值示例:

{
    "D": "3132333435363738393031",
    "T": "HEX",
    "TOPIC": "/test/aaa"
}

MQTT.getAllMessage(pread)

功能:获取订阅到的消息列表中的所有消息

参数:

名称 类型 说明
pread Object 参数为Object,需要指定类型:HEX或ASCII

返回值:返回所有读取到的消息,list

名称 类型 说明
TOPIC String topic
T String 消息类型,HEX或ASCII
D String 消息内容

示例1:

// T表示类型,支持HEX和ASCII;
var pread = {"T":"ASCII"};
var read = MQTT.getAllMessage(pread);// 读取所有的MQTT消息
ECMA.Display("读取所有的",read);

返回值示例:

[
    {
        "D": "12345678902",
        "T": "ASCII",
        "TOPIC": "/test/aaa"
    },
    {
        "D": "12345678903",
        "T": "ASCII",
        "TOPIC": "/test/aaa"
    },
    {
        "D": "12345678904",
        "T": "ASCII",
        "TOPIC": "/test/aaa"
    },
    {
        "D": "12345678905",
        "T": "ASCII",
        "TOPIC": "/test/aaa"
    }
]

示例2:

// T表示类型,支持HEX和ASCII;
var pread = {"T":"HEX"};
var read = MQTT.getAllMessage(pread);// 读取所有的MQTT消息
ECMA.Display("读取所有的",read);

MQTT操作测试用例:

ECMA.AddProperty("MQTT","MQTT");// 添加一个MQTT,命名为MQTT,后续使用MQTT

var sublist = ["/test/aaa","/test/bbb","/test/ccc"];// 订阅的topic列表
MQTT.settopic_sub_List(sublist);// 设置订阅的topic列表

// 设置用于与MQTT服务器建立连接的的地址、端口号、clientID、用户名、密码参数,并连接MQTT服务器
MQTT.connectToHost("47.94.202.25","1883","test","admin","123456");

// 本脚本只执行一次,因此如果需要循环执行则需要在循环内编写脚本语言
// 以下为循环执行
while (1) {

    var message = {"TOPIC":"/test/aaa","T":"ASCII","D":"12345678901"};
    MQTT.publish(message);// 发布MQTT消息

    message = {"TOPIC":"/test/aaa","T":"ASCII","D":"12345678902"};
    MQTT.publish(message);// 发布MQTT消息

    message = {"TOPIC":"/test/aaa","T":"ASCII","D":"12345678903"};
    MQTT.publish(message);// 发布MQTT消息

    message = {"TOPIC":"/test/aaa","T":"ASCII","D":"12345678904"};
    MQTT.publish(message);// 发布MQTT消息

    message = {"TOPIC":"/test/aaa","T":"ASCII","D":"12345678905"};
    MQTT.publish(message);// 发布MQTT消息

    ECMA.Delay(1000);// 延时函数,单位毫秒,延时1000ms

    var pread = {"T":"ASCII"};
    var read = MQTT.getOneMessage(pread);// 读取1条MQTT消息
    ECMA.Display("读取1条",read);

    read = MQTT.getAllMessage(pread);// 读取所有的MQTT消息
    ECMA.Display("读取所有的",read);
}

上述示例打印执行结果:

Time:2022/06/17 11:25:23.042
Debug:Display
参数1:读取1条
参数2:{
    "D": "12345678901",
    "T": "ASCII",
    "TOPIC": "/test/aaa"
}

Time:2022/06/17 11:25:23.043
Debug:Display
参数1:读取所有的
参数2:[
    {
        "D": "12345678902",
        "T": "ASCII",
        "TOPIC": "/test/aaa"
    },
    {
        "D": "12345678903",
        "T": "ASCII",
        "TOPIC": "/test/aaa"
    },
    {
        "D": "12345678904",
        "T": "ASCII",
        "TOPIC": "/test/aaa"
    },
    {
        "D": "12345678905",
        "T": "ASCII",
        "TOPIC": "/test/aaa"
    }
]
2022年10月09日 以后的版本内新增“T”为“JSON”,可以发送json对象,如下示例:
    var data = [{"PHONE":"13388062266","TIME":"20180717171456","Flag":"Z","body":{"chiller1":{"status":0,"REG_VAL":{"p1":1,"p2":1,"p3":1,"p4":1,"p5":0,"p21":7.024,"p22":80.386}}}}];
    message = {"TOPIC":"/test/bbb","T":"JSON","D":data};
    MQTT.publish(message);// 发布MQTT消息
ECMA.AddProperty("MQTT","MQTT");
MQTT.connectToHost("47.94.202.25","1883","","","");
var sublist = ["touch"]
MQTT.settopic_sub_List(sublist);

while (1) {
    var test = {"M":"123","TS":123.4567,"C":678};
    ECMA.Display("test type1",typeof test);
    ECMA.Display("读取test",test);
    ECMA.Display("读取M1",test.M);

    var myJSON = JSON.stringify(test);// 使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。
    var message = {"TOPIC":"touch","T":"ASCII","D":myJSON};
    MQTT.publish(message);// 发布MQTT消息

    ECMA.Delay(1000);

    var date1={"T":"ASCII"};
    var read1 = MQTT.getOneMessage(date1);// 读取1条MQTT消息
    ECMA.Display("读取1",read1);
    ECMA.Display("读取D",read1.D);
    test = read1.D;

    ECMA.Display("test",test);
    ECMA.Display("test type",typeof test);
    if (typeof test === 'object')
    {
        test = JSON.parse(test);
        ECMA.Display("读取M",test.M);
        ECMA.Display("读取TS",test.TS);
        ECMA.Display("读取C",test.C);
        ECMA.SetValue('Net1.链接_1.设备_1@CJ0',test.M);
        ECMA.SetValue('Net1.链接_1.设备_1@CJ1',test.TS);
        ECMA.SetValue('Net1.链接_1.设备_1@CJ2',test.C);
    }

    ECMA.Delay(5000);

}

三.SOAP操作函数

results matching ""

    No results matching ""