555 lines
11 KiB
Plaintext
555 lines
11 KiB
Plaintext
|
|
var g_aipoint = [];
|
||
|
|
var g_dipoint = [];
|
||
|
|
var g_pipoint = [];
|
||
|
|
var g_mipoint = [];
|
||
|
|
var g_param =[];
|
||
|
|
var g_list = [];
|
||
|
|
var g_appName = "PSCADA";
|
||
|
|
var g_domainId = 1;
|
||
|
|
var ctrlPointObj={};
|
||
|
|
|
||
|
|
function checkLock(tag,value)
|
||
|
|
{
|
||
|
|
var result = checkDevLock(tag,value);
|
||
|
|
if(result.length != 0)
|
||
|
|
{
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
result = checkPointLock(tag,value);
|
||
|
|
if(result.length != 0)
|
||
|
|
{
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
|
||
|
|
function checkDevLock(tag,value)
|
||
|
|
{
|
||
|
|
var str = SDAO.readFileData("../../data/model/DevGroupLock.json");
|
||
|
|
var obj = JSON.parse(str);
|
||
|
|
|
||
|
|
var items = obj.items;
|
||
|
|
var itemsArray = [];
|
||
|
|
var ctrlTableName = SView.truncTag(tag, "t");
|
||
|
|
var ctrlPointTag = SView.truncTag(tag, "key");
|
||
|
|
var loactionName = SView.truncTag(tag, "d");
|
||
|
|
g_domainId = SDAO.getDomainIdByLocation(loactionName);
|
||
|
|
var subName = SView.truncTag(tag, "a");
|
||
|
|
g_appName = SDAO.getAppNameBySubName(subName);
|
||
|
|
var ctrlAppId = SDAO.getAppIdByName(g_appName);
|
||
|
|
var subSystemId = SDAO.getSubIdByName(subName);
|
||
|
|
var devTag = SView.truncTag(tag, "l.dev");
|
||
|
|
var conddata = ctrlPointTag.split(".");
|
||
|
|
if(conddata.length != 3)
|
||
|
|
{
|
||
|
|
return "条件有误!请检查控制点标签:"+ctrlPointTag;
|
||
|
|
}
|
||
|
|
var tag_point = conddata[2];
|
||
|
|
if(ctrlTableName != "digital")
|
||
|
|
{
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
var sql = "select group_tag_name from dev_info where tag_name ='"+devTag+"'";
|
||
|
|
var devgResult = SDAO.dbSelect(sql);
|
||
|
|
if(devgResult[0] == 0)
|
||
|
|
{
|
||
|
|
//没查到 返回失败
|
||
|
|
return "设备组信息查询异常!";
|
||
|
|
}
|
||
|
|
var devgTag = String(devgResult[1]);
|
||
|
|
var devArray = [];
|
||
|
|
sql = "select tag_name from dev_info where group_tag_name ='"+devgTag+"'";
|
||
|
|
|
||
|
|
var devArrayResult = SDAO.dbSelect(sql);
|
||
|
|
if(devArrayResult[0] == 0)
|
||
|
|
{
|
||
|
|
//没查到 返回失败
|
||
|
|
return "设备信息查询异常!";
|
||
|
|
}
|
||
|
|
for(var i=1;i<=devArrayResult[0];i++)
|
||
|
|
{
|
||
|
|
devArray[i-1] = String(devArrayResult[i]);
|
||
|
|
}
|
||
|
|
|
||
|
|
var j = 0;
|
||
|
|
for(var n in items)
|
||
|
|
{
|
||
|
|
var childItemArray = [];
|
||
|
|
var itemsobj={};
|
||
|
|
|
||
|
|
itemsobj.script = items[n].script;
|
||
|
|
itemsobj.enable = items[n].enable;
|
||
|
|
var item = items[n].childitems;
|
||
|
|
var i= 0;
|
||
|
|
for(var m in item)
|
||
|
|
{
|
||
|
|
var childobj={};
|
||
|
|
childobj.table = item[m].table;
|
||
|
|
childobj.tag = item[m].tag;
|
||
|
|
childItemArray[i] = childobj;
|
||
|
|
i++;
|
||
|
|
}
|
||
|
|
itemsobj.childitems = childItemArray;
|
||
|
|
itemsArray[j] = itemsobj;
|
||
|
|
j++;
|
||
|
|
}
|
||
|
|
//获取设备组中的所有测点标签和值
|
||
|
|
|
||
|
|
var cond = "";
|
||
|
|
for(var i=0;i<devArray.length;i++)
|
||
|
|
{
|
||
|
|
if(i !=devArray.length-1)
|
||
|
|
{
|
||
|
|
cond +="'"+devArray[i]+"',";
|
||
|
|
}else{
|
||
|
|
cond +="'"+devArray[i]+"'";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
var aipoint = [];
|
||
|
|
sql = "select tag_name from analog where device in ("+cond+")";
|
||
|
|
var ai = SDAO.dbSelect(sql);
|
||
|
|
g_aipoint = getPoint(ai);
|
||
|
|
var dipoint = [];
|
||
|
|
sql = "select tag_name from digital where device in ("+cond+")";
|
||
|
|
var di= SDAO.dbSelect(sql);
|
||
|
|
g_dipoint = getPoint(di);
|
||
|
|
var pipoint = [];
|
||
|
|
sql = "select tag_name from accuml where device in ("+cond+")"
|
||
|
|
var pi= SDAO.dbSelect(sql);
|
||
|
|
g_pipoint = getPoint(pi);
|
||
|
|
var mipoint = [];
|
||
|
|
sql = "select tag_name from mix where device in ("+cond+")";
|
||
|
|
var mi= SDAO.dbSelect(sql);
|
||
|
|
g_mipoint = getPoint(mi);
|
||
|
|
|
||
|
|
//执行
|
||
|
|
for(var h= 0;h<itemsArray.length;h++)
|
||
|
|
{
|
||
|
|
g_param = [];
|
||
|
|
ctrlPointObj={};
|
||
|
|
ctrlPointObj.tag = ctrlPointTag;
|
||
|
|
var numSql = "select value_num from digital where tag_name = '"+ctrlPointTag+"'";
|
||
|
|
var enbaleResult = SDAO.dbSelect(numSql);
|
||
|
|
ctrlPointObj.num= parseFloat(enbaleResult[1]);
|
||
|
|
if(ctrlPointObj.num <= 0)
|
||
|
|
{
|
||
|
|
ctrlPointObj.num = 1;
|
||
|
|
}
|
||
|
|
ctrlPointObj.value = value;
|
||
|
|
ctrlPointObj.table = "digital";
|
||
|
|
|
||
|
|
g_param[0]=JSON.stringify(ctrlPointObj);
|
||
|
|
g_list = [];
|
||
|
|
|
||
|
|
if(itemsArray[h].enable == 0 || itemsArray[h].script == "" )
|
||
|
|
{
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
var childItemArray = [];
|
||
|
|
childItemArray = itemsArray[h].childitems;
|
||
|
|
var result =checkTag1(childItemArray,tag_point);
|
||
|
|
if(result.length != 0)
|
||
|
|
{
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(!checkTag2(childItemArray))
|
||
|
|
{
|
||
|
|
//设备组里没有条件需要的参数
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
g_param[1]=g_list.join(";");
|
||
|
|
//showMessageDialog(g_param);
|
||
|
|
result = SView.qsCall(itemsArray[h].script,g_param);
|
||
|
|
if(result.length != 0)
|
||
|
|
{
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
|
||
|
|
function getPoint(array)
|
||
|
|
{
|
||
|
|
var point = [];
|
||
|
|
if(array[0]== 0)
|
||
|
|
{
|
||
|
|
return point;
|
||
|
|
}
|
||
|
|
for(var i=1;i<=array[0];i++)
|
||
|
|
{
|
||
|
|
point[i-1]=String(array[i]);
|
||
|
|
}
|
||
|
|
return point;
|
||
|
|
}
|
||
|
|
|
||
|
|
//检查传入标签的最后一段是否在条件配置中
|
||
|
|
|
||
|
|
function checkTag1(childItemArray,tag_point)
|
||
|
|
{
|
||
|
|
for(var m = 0;m< childItemArray.length;m++)
|
||
|
|
{
|
||
|
|
var tag = childItemArray[m].tag;
|
||
|
|
var tagArray = tag.split(",");
|
||
|
|
for(var i=0;i<tagArray.length;i++)
|
||
|
|
{
|
||
|
|
if(tagArray[i] == tag_point)
|
||
|
|
{
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return "没有找到对应测点!";
|
||
|
|
}
|
||
|
|
|
||
|
|
function checkTag2(childItemArray)
|
||
|
|
{
|
||
|
|
var index= 3;
|
||
|
|
for(var m = 0;m< childItemArray.length;m++)
|
||
|
|
{
|
||
|
|
var tag = childItemArray[m].tag;
|
||
|
|
var tagArray = tag.split(",");
|
||
|
|
var exit = false;
|
||
|
|
for(var i=0;i<tagArray.length;i++)
|
||
|
|
{
|
||
|
|
var va = 0.0;
|
||
|
|
if(childItemArray[m].table == "analog")
|
||
|
|
{
|
||
|
|
if(getaiValue(tagArray[i],index))
|
||
|
|
{
|
||
|
|
exit = true;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}else if(childItemArray[m].table == "digital")
|
||
|
|
{
|
||
|
|
if(getdiValue(tagArray[i],index))
|
||
|
|
{
|
||
|
|
exit = true;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}else if(childItemArray[m].table == "accuml")
|
||
|
|
{
|
||
|
|
if(getpiValue(tagArray[i],index))
|
||
|
|
{
|
||
|
|
exit = true;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}else if(childItemArray[m].table == "mix")
|
||
|
|
{
|
||
|
|
if(getmiValue(tagArray[i],index))
|
||
|
|
{
|
||
|
|
exit = true;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if(exit == false)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
index++;
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
function getaiValue( tag,index)
|
||
|
|
{
|
||
|
|
for(var i = 0;i<g_aipoint.length;i++)
|
||
|
|
{
|
||
|
|
var ss = g_aipoint[i].split(".");
|
||
|
|
if(ss.length != 3)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if(ss[2]==tag)
|
||
|
|
{
|
||
|
|
var condition = "tag_name="+ g_aipoint[i];
|
||
|
|
var result = SDAO.rdbNetSelect(g_appName, "analog", "value",g_domainId, condition);
|
||
|
|
if(result[0] != 1)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
var paraObj ={};
|
||
|
|
paraObj.tag= g_aipoint[i];
|
||
|
|
paraObj.value = parseFloat(result[1]);
|
||
|
|
paraObj.table = "analog";
|
||
|
|
paraObj.num = 1;
|
||
|
|
g_list.push(JSON.stringify(paraObj));
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
function getdiValue( tag,index)
|
||
|
|
{
|
||
|
|
for(var i = 0;i<g_dipoint.length;i++)
|
||
|
|
{
|
||
|
|
var ss = g_dipoint[i].split(".");
|
||
|
|
if(ss.length != 3)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if(ss[2]==tag)
|
||
|
|
{
|
||
|
|
var condition = "tag_name="+ g_dipoint[i];
|
||
|
|
var result = SDAO.rdbNetSelect(g_appName, "digital", "value",g_domainId, condition);
|
||
|
|
if(result[0] != 1)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
var paraObj ={};
|
||
|
|
paraObj.tag= g_dipoint[i];
|
||
|
|
var numSql = "select value_num from digital where tag_name = '"+g_dipoint[i]+"'";
|
||
|
|
var enbaleResult = SDAO.dbSelect(numSql);
|
||
|
|
paraObj.num= parseFloat(enbaleResult[1]);
|
||
|
|
if(paraObj.num <= 0)
|
||
|
|
{
|
||
|
|
paraObj.num = 1;
|
||
|
|
}
|
||
|
|
paraObj.value = parseFloat(result[1]);
|
||
|
|
paraObj.table = "digital";
|
||
|
|
g_list.push(JSON.stringify(paraObj));
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
function getpiValue( tag,index)
|
||
|
|
{
|
||
|
|
for(var i = 0;i<g_pipoint.length;i++)
|
||
|
|
{
|
||
|
|
var ss = g_pipoint[i].split(".");
|
||
|
|
if(ss.length != 3)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if(ss[2]==tag)
|
||
|
|
{
|
||
|
|
var condition = "tag_name="+ g_pipoint[i];
|
||
|
|
var result = SDAO.rdbNetSelect(g_appName, "accuml", "value",g_domainId, condition);
|
||
|
|
if(result[0] != 1)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
var paraObj ={};
|
||
|
|
paraObj.tag= g_pipoint[i];
|
||
|
|
paraObj.value = parseFloat(result[1]);
|
||
|
|
paraObj.table = "accuml";
|
||
|
|
paraObj.num = 1;
|
||
|
|
g_list.push(JSON.stringify(paraObj));
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
function getmiValue( tag,index)
|
||
|
|
{
|
||
|
|
for(var i = 0;i<g_mipoint.length;i++)
|
||
|
|
{
|
||
|
|
var ss = g_mipoint[i].split(".");
|
||
|
|
if(ss.length != 3)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if(ss[2]==tag)
|
||
|
|
{
|
||
|
|
var condition = "tag_name="+ g_mipoint[i];
|
||
|
|
var result = SDAO.rdbNetSelect(g_appName, "mix", "value",g_domainId, condition);
|
||
|
|
if(result[0] != 1)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
var paraObj ={};
|
||
|
|
paraObj.tag= g_mipoint[i];
|
||
|
|
paraObj.value = parseFloat(result[1]);
|
||
|
|
paraObj.table = "mix";
|
||
|
|
paraObj.num = 1;
|
||
|
|
g_list.push(JSON.stringify(paraObj));
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
function checkPointLock(tag,value)
|
||
|
|
{
|
||
|
|
var ctrlPointTag = SView.truncTag(tag, "key");
|
||
|
|
var loactionName = SView.truncTag(tag, "d");
|
||
|
|
g_domainId = SDAO.getDomainIdByLocation(loactionName);
|
||
|
|
|
||
|
|
var subName = SView.truncTag(tag, "a");
|
||
|
|
g_appName = SDAO.getAppNameBySubName(subName);
|
||
|
|
|
||
|
|
var sql = "select isEnable from point_lock_config_info where tag_name = '"+ctrlPointTag+"' and actual_value = "+value;
|
||
|
|
var enbaleResult = SDAO.dbSelect(sql);
|
||
|
|
if(enbaleResult[0] == 0 || enbaleResult[1] ==0)
|
||
|
|
{
|
||
|
|
//未启用或者不存在 直接闭锁通过
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
|
||
|
|
//到此处说明启用了
|
||
|
|
sql = "select condition_tag_name,condition1,value1,condition2,value2,condition_table,condition_desc from point_lock_condition_info where tag_name ='"+ctrlPointTag+"' and actual_value = "+value;
|
||
|
|
|
||
|
|
var conditionResult = SDAO.dbSelect(sql);
|
||
|
|
if(conditionResult[0] == 0)
|
||
|
|
{
|
||
|
|
//启用了但是没有配置
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
|
||
|
|
var cond = [];
|
||
|
|
var i = 0;
|
||
|
|
var j = 1;
|
||
|
|
var condcount = parseInt(conditionResult[0]);
|
||
|
|
for(;j<=condcount;)
|
||
|
|
{
|
||
|
|
var text = String(conditionResult[j]);
|
||
|
|
var conddata = text.split(",");
|
||
|
|
var obj ={};
|
||
|
|
obj.condition_tag_name = conddata[0];
|
||
|
|
obj.condition1 = parseInt(conddata[1]);
|
||
|
|
obj.value1 = parseFloat(conddata[2]);
|
||
|
|
obj.condition2 = parseInt(conddata[3]);
|
||
|
|
obj.value2 = parseFloat(conddata[4]);
|
||
|
|
obj.condition_table = conddata[5];
|
||
|
|
obj.condition_desc = conddata[6];
|
||
|
|
obj.value = -1;
|
||
|
|
cond[i] = obj;
|
||
|
|
i++;
|
||
|
|
j++;
|
||
|
|
}
|
||
|
|
|
||
|
|
for(var k = 0;k<cond.length;k++)
|
||
|
|
{
|
||
|
|
var condition = "tag_name="+ cond[k].condition_tag_name;
|
||
|
|
|
||
|
|
|
||
|
|
var result = SDAO.rdbNetSelect(g_appName, cond[k].condition_table, "value",g_domainId, condition);
|
||
|
|
if(result[0] != 1)
|
||
|
|
{
|
||
|
|
return "不可控制,"+cond[k].condition_desc+",测点查询失败!";
|
||
|
|
}
|
||
|
|
|
||
|
|
cond[k].value = parseFloat(result[1]);
|
||
|
|
if(cond[k].condition_table == "digital")
|
||
|
|
{
|
||
|
|
if(cond[k].value !=cond[k].value1)
|
||
|
|
{
|
||
|
|
return "不可控制,"+cond[k].condition_desc+":"+getValueText(cond[k].condition_tag_name,cond[k].value);
|
||
|
|
}
|
||
|
|
}else
|
||
|
|
{
|
||
|
|
var check1 = checkValue(cond[k].condition1,cond[k].value1,cond[k].value);
|
||
|
|
var check2 = checkValue(cond[k].condition2,cond[k].value2,cond[k].value);
|
||
|
|
if(!check1 || !check2)
|
||
|
|
{
|
||
|
|
return "不可控制,"+cond[k].condition_desc+":"+cond[k].value;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
|
||
|
|
function getValueText(condition_tag_name, value)
|
||
|
|
{
|
||
|
|
var diStateText = getDiStateText(condition_tag_name);
|
||
|
|
if(diStateText.length == 0)
|
||
|
|
{
|
||
|
|
|
||
|
|
return ""+value;
|
||
|
|
}
|
||
|
|
|
||
|
|
var digText = SDAO.getDigTextNameByValue(diStateText, parseInt(value));
|
||
|
|
return digText;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
function getDiStateText(condition_tag_name)
|
||
|
|
{
|
||
|
|
var condition = "tag_name=" + condition_tag_name;
|
||
|
|
var result = SDAO.rdbNetSelect(g_appName, "digital", "state_text_name",g_domainId, condition);
|
||
|
|
if(result[0] != 1)
|
||
|
|
{
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
|
||
|
|
return ""+(result[1]);
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
function checkValue(condition,conditionvalue,value)
|
||
|
|
{
|
||
|
|
switch(condition){
|
||
|
|
case 0:
|
||
|
|
return true;
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
if(value<conditionvalue)
|
||
|
|
{
|
||
|
|
return true;
|
||
|
|
}else
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
if(value<=conditionvalue)
|
||
|
|
{
|
||
|
|
return true;
|
||
|
|
}else
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
if(value==conditionvalue)
|
||
|
|
{
|
||
|
|
return true;
|
||
|
|
}else
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
if(value>=conditionvalue)
|
||
|
|
{
|
||
|
|
return true;
|
||
|
|
}else
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 5:
|
||
|
|
if(value>conditionvalue)
|
||
|
|
{
|
||
|
|
return true;
|
||
|
|
}else
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case 6:
|
||
|
|
if(value!=conditionvalue)
|
||
|
|
{
|
||
|
|
return true;
|
||
|
|
}else
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
return false;
|
||
|
|
break;
|
||
|
|
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
}
|