555 lines
11 KiB
Plaintext
Raw Normal View History

2025-07-04 11:59:16 +08:00
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;
}