遥测类型状态量转多个遥信点

设备说明:

通讯管理机创建遥测类型状态量点:

通讯管理机创建遥信类型虚量点:

方法一:

代码量大,适用于遥信点名无规律情况

方法一示例代码:

// 遥测类型状态分解遥信点
var srcValue = qso.GetValue('Serial1.设备_1@故障代号');
switch (srcValue) {
    case 0:
        {// 值为0,将所有点值都置0
            qso.SetValue('Serial1.设备_1@F2_YX0', 0);
            qso.SetValue('Serial1.设备_1@F2_YX1', 0);
            qso.SetValue('Serial1.设备_1@F2_YX2', 0);
            qso.SetValue('Serial1.设备_1@F2_YX3', 0);
            qso.SetValue('Serial1.设备_1@F2_YX4', 0);
            qso.SetValue('Serial1.设备_1@F2_YX5', 0);
            qso.SetValue('Serial1.设备_1@F2_YX6', 0);
            qso.SetValue('Serial1.设备_1@F2_YX7', 0);
            qso.SetValue('Serial1.设备_1@F2_YX8', 0);
            qso.SetValue('Serial1.设备_1@F2_YX9', 0);
            qso.SetValue('Serial1.设备_1@F2_YX10', 0);
            qso.SetValue('Serial1.设备_1@F2_YX11', 0);
            qso.SetValue('Serial1.设备_1@F2_YX12', 0);
            qso.SetValue('Serial1.设备_1@F2_YX13', 0);
            qso.SetValue('Serial1.设备_1@F2_YX14', 0);
            qso.SetValue('Serial1.设备_1@F2_YX15', 0);
            qso.SetValue('Serial1.设备_1@F2_YX16', 0);
            qso.SetValue('Serial1.设备_1@F2_YX17', 0);
            qso.SetValue('Serial1.设备_1@F2_YX18', 0);
            qso.SetValue('Serial1.设备_1@F2_YX19', 0);
            qso.SetValue('Serial1.设备_1@F2_YX20', 0);
            qso.SetValue('Serial1.设备_1@F2_YX21', 0);
            qso.SetValue('Serial1.设备_1@F2_YX22', 0);
            qso.SetValue('Serial1.设备_1@F2_YX23', 0);
            qso.SetValue('Serial1.设备_1@F2_YX24', 0);
            qso.SetValue('Serial1.设备_1@F2_YX25', 0);
            qso.SetValue('Serial1.设备_1@F2_YX26', 0);
            qso.SetValue('Serial1.设备_1@F2_YX27', 0);
            qso.SetValue('Serial1.设备_1@F2_YX28', 0);
        }
        break;
    case 1:
        {// 值为1,将F2_YX1点值置1,其它点值置0
            qso.SetValue('Serial1.设备_1@F2_YX0', 0);
            qso.SetValue('Serial1.设备_1@F2_YX1', 1);// 状态值为1就置其它点为0,该点值为1
            qso.SetValue('Serial1.设备_1@F2_YX2', 0);
            qso.SetValue('Serial1.设备_1@F2_YX3', 0);
            qso.SetValue('Serial1.设备_1@F2_YX4', 0);
            qso.SetValue('Serial1.设备_1@F2_YX5', 0);
            qso.SetValue('Serial1.设备_1@F2_YX6', 0);
            qso.SetValue('Serial1.设备_1@F2_YX7', 0);
            qso.SetValue('Serial1.设备_1@F2_YX8', 0);
            qso.SetValue('Serial1.设备_1@F2_YX9', 0);
            qso.SetValue('Serial1.设备_1@F2_YX10', 0);
            qso.SetValue('Serial1.设备_1@F2_YX11', 0);
            qso.SetValue('Serial1.设备_1@F2_YX12', 0);
            qso.SetValue('Serial1.设备_1@F2_YX13', 0);
            qso.SetValue('Serial1.设备_1@F2_YX14', 0);
            qso.SetValue('Serial1.设备_1@F2_YX15', 0);
            qso.SetValue('Serial1.设备_1@F2_YX16', 0);
            qso.SetValue('Serial1.设备_1@F2_YX17', 0);
            qso.SetValue('Serial1.设备_1@F2_YX18', 0);
            qso.SetValue('Serial1.设备_1@F2_YX19', 0);
            qso.SetValue('Serial1.设备_1@F2_YX20', 0);
            qso.SetValue('Serial1.设备_1@F2_YX21', 0);
            qso.SetValue('Serial1.设备_1@F2_YX22', 0);
            qso.SetValue('Serial1.设备_1@F2_YX23', 0);
            qso.SetValue('Serial1.设备_1@F2_YX24', 0);
            qso.SetValue('Serial1.设备_1@F2_YX25', 0);
            qso.SetValue('Serial1.设备_1@F2_YX26', 0);
            qso.SetValue('Serial1.设备_1@F2_YX27', 0);
            qso.SetValue('Serial1.设备_1@F2_YX28', 0);
        }
        break;
    case 2:
        {// 值为2,将F2_YX2点值置1,其它点值置0
            qso.SetValue('Serial1.设备_1@F2_YX0', 0);
            qso.SetValue('Serial1.设备_1@F2_YX1', 0);
            qso.SetValue('Serial1.设备_1@F2_YX2', 1);// 状态值为2就置其它点为0,该点值为1
            qso.SetValue('Serial1.设备_1@F2_YX3', 0);
            qso.SetValue('Serial1.设备_1@F2_YX4', 0);
            qso.SetValue('Serial1.设备_1@F2_YX5', 0);
            qso.SetValue('Serial1.设备_1@F2_YX6', 0);
            qso.SetValue('Serial1.设备_1@F2_YX7', 0);
            qso.SetValue('Serial1.设备_1@F2_YX8', 0);
            qso.SetValue('Serial1.设备_1@F2_YX9', 0);
            qso.SetValue('Serial1.设备_1@F2_YX10', 0);
            qso.SetValue('Serial1.设备_1@F2_YX11', 0);
            qso.SetValue('Serial1.设备_1@F2_YX12', 0);
            qso.SetValue('Serial1.设备_1@F2_YX13', 0);
            qso.SetValue('Serial1.设备_1@F2_YX14', 0);
            qso.SetValue('Serial1.设备_1@F2_YX15', 0);
            qso.SetValue('Serial1.设备_1@F2_YX16', 0);
            qso.SetValue('Serial1.设备_1@F2_YX17', 0);
            qso.SetValue('Serial1.设备_1@F2_YX18', 0);
            qso.SetValue('Serial1.设备_1@F2_YX19', 0);
            qso.SetValue('Serial1.设备_1@F2_YX20', 0);
            qso.SetValue('Serial1.设备_1@F2_YX21', 0);
            qso.SetValue('Serial1.设备_1@F2_YX22', 0);
            qso.SetValue('Serial1.设备_1@F2_YX23', 0);
            qso.SetValue('Serial1.设备_1@F2_YX24', 0);
            qso.SetValue('Serial1.设备_1@F2_YX25', 0);
            qso.SetValue('Serial1.设备_1@F2_YX26', 0);
            qso.SetValue('Serial1.设备_1@F2_YX27', 0);
            qso.SetValue('Serial1.设备_1@F2_YX28', 0);
        }
        break;
        // 以此类推
    default:
        break;
}

方法二:

代码量少,适用于遥信点名有规律情况

方法二示例代码:

// 遥测类型状态分解遥信点
// 该方法仅针对遥信点名命名有规律的情况,例如有29个遥信点,遥信点名为“Serial1.设备_1@F2_YX0”至“Serial1.设备_1@F2_YX28”

var srcValue = qso.GetValue('Serial1.设备_1@故障代号');// 获取遥测点的值
var name = 'Serial1.设备_1@F2_YX';// 遥信点名的固定部分名称,不包含序号部分
var pointCount = 29;// 遥信点数量
var start = 0;// 遥信点名从0开始,即F2_YX0~F2_YX28
for (start = 0; start < pointCount; ++start)
{
    var pointName = name+start;// 合成遥信点的完整点名称
    if(srcValue == 0)
    {// 遥测点值为0,则置所有状态点的值为0
        qso.SetValue(pointName, 0);
    }else
    {
        if (srcValue == start)
        {// 遥测点值与遥信点名中的序号部分相同
            qso.SetValue(pointName, 1);// 当前遥测点值与遥信点名相关,则为该遥信点置1
        }else
        {
            qso.SetValue(pointName, 0);// 当前遥测点值与遥信点名不相关,则为该遥信点置0
        }
    }
}

results matching ""

    No results matching ""