脚本初始化
private ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engineArr = new ScriptEngine;
从文件加载脚本,预编译,检查语法错误
String fileScript = "./cabtype.js";
File fs = new File(fileScript);
if (fs.exists()) {
try {
engineArr = mgr.getEngineByName("JavaScript");
FileReader fr = new FileReader(fileScript);
engineArr.eval(fr);
logger.info("加载脚本 cabType = {} 成功!", i);
} catch (Exception e) {
logger.error("加载脚本 cabType = {} 失败!", i);
}
}
调用js脚本中的函数,js函数可以以数组的形式返回多个返回值
Invocable inv = (Invocable) engineArr;
int i = 0;
try {
ScriptObjectMirror som = (ScriptObjectMirror) inv.invokeFunction(paramSymbol + "_fault", newVA);//调用JS函数
if (som == null) {//TODO 代表无函数,可以不做处理
} else if (som.isEmpty()) {
logger.info("脚本执行返回空数组元素!");
} else {
//取数组中的返回值
if (som.isArray() && som.size() >= 3) {
String faultCode = som.get("0").toString();
String faultValu = som.get("1").toString();
String faultName = som.get("2").toString();
} else {
logger.error("NODEID:{}, 脚本返回的故障参数{}值不为3的倍数", sNodeId, obj.getParamSymbol());
}
}
} catch (ScriptException e) {
logger.error("NODEID:{}, FAULT脚本异常:{}", sNodeId, e.getMessage());
} catch (NoSuchMethodException e) {
logger.error("NODEID:{}, FAULT方法异常:{}", sNodeId, e.getMessage());
} catch (Exception e) {
logger.error("NODEID:{}, FAULT未知异常:{}", sNodeId, e.getMessage());
}
js文件中的部分函数例子
//主路EEV 3 强制开
function f3_646_range ( projectId, cabId, js) {
var minV = 0;
var maxV = 500;
return [6,646,0,500,0,"步"] ;
}
function f3_646_write(value) {
return [6, 646, value];
}
//主路EEV 4 强制开
function f3_647_show (value) {
return [value, value+"步"] ;
}
//主路EEV 4 强制开
function f3_647_range ( projectId, cabId, js) {
var minV = 0;
var maxV = 500;
return [6,647,0,500,0,"步"] ;
}
function f3_647_write(value) {
return [6, 647, value];
}
//辅路EEV 3 强制开
function f3_648_show (value) {
return [value, value+"步"] ;
}
//辅路EEV 3 强制开
function f3_648_range ( projectId, cabId, js) {
var minV = 0;
var maxV = 500;
return [6,648,0,500,0,"步"] ;
}