Ejemplo n.º 1
0
        /// <summary>
        /// 获取单个控制变量对象状态
        /// </summary>
        /// <param name="inVarObj"></param>
        /// <param name="isOnOff">
        /// true--导通,false--断开</param>
        /// <returns></returns>
        protected override bool DoGetInvarStatus(InVarObj inVarObj, out bool isOnOff)
        {
            bool rt = false;

            isOnOff = false;

            try
            {
                if (inVarObj != null)
                {
                    // 站号--2字节
                    string stationNum = inVarObj.StationNumber;

                    // 变量类型--1字节
                    string varType = inVarObj.VarType.Trim().ToUpper();

                    //限定以下触点类型有效
                    if (!(varType == "X" || varType == "Y" || varType == "R" || varType == "T" ||
                          varType == "C" || varType == "L"))
                    {
                        return(rt);
                    }

                    //控制变量地址--4字节
                    string varAddress = inVarObj.Address.ToString().PadRight(4, '0');
                    string cmd        = string.Format("%{0}#RCS{1}{2}", stationNum, varType, varAddress);
                    string cmdChk     = ProCommon.Communal.ToolFunctions.AddCheckCode(cmd);
                    //向串口写入指令数据
                    stationNum = WriteData(cmdChk, 50);

                    //串口无返回结果,则获取输入变量对象状态失败,返回
                    if (string.IsNullOrEmpty(stationNum))
                    {
                        return(rt);
                    }

                    //根据串口返回结果字符串--索引位置为3的字符:"$"--响应正常,"!"--响应异常
                    switch (stationNum.Substring(3, 1))
                    {
                    case "$":
                        rt = true;
                        //根据串口返回结果字符串--索引位置为6的字符:"0"--断开(OFF),"1"--导通(ON)
                        isOnOff           = (stationNum.Substring(6, 1) == "1") ? true : false;
                        inVarObj.NewValue = isOnOff;
                        break;

                    default: break;
                    }
                }
            }
            catch (System.Exception ex) { }
            return(rt);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 设置输入控制变量地址起始,指定个数数据寄存器的数据
        /// </summary>
        /// <param name="inVarObj"></param>
        /// <param name="num"></param>
        /// <param name="dData"></param>
        /// <returns></returns>
        protected override bool DoSetInvarData(InVarObj inVarObj, int num, double[] dData)
        {
            bool rt = false;

            try
            {
                if (inVarObj != null &&
                    dData != null)
                {
                    if (dData.Length == num)
                    {
                        // 站号--2字节
                        string stationNum = inVarObj.StationNumber;

                        // 变量类型--1字节
                        string varType = inVarObj.VarType.Trim().ToUpper();

                        //限定以下触点类型有效
                        if (!(varType == "D" || varType == "L" || varType == "F"))
                        {
                            return(rt);
                        }

                        //控制变量地址--5字节
                        string varAddressStart = inVarObj.Address.ToString().PadRight(5, '0');
                        string varAddressEnd   = (inVarObj.Address + num).ToString().PadRight(5, '0');

                        string cmd    = string.Format("%{0}#WD{1}{2}", stationNum, varType, varAddressStart + varAddressEnd);
                        string cmdChk = ProCommon.Communal.ToolFunctions.AddCheckCode(cmd);

                        //向串口写入指令数据
                        stationNum = WriteData(cmdChk, 50);

                        //串口无返回结果,则获取输入变量对象状态失败,返回
                        if (string.IsNullOrEmpty(stationNum))
                        {
                            return(rt);
                        }

                        //根据串口返回结果字符串--索引位置为3的字符:"$"--响应正常,"!"--响应异常
                        switch (stationNum.Substring(3, 1))
                        {
                        case "$":
                            rt = true;
                            string   dt    = string.Empty;
                            string[] dtArr = null;
                            dt    = stationNum.Substring(6, stationNum.Length - 6 - 2);  //从索引6开始,获取除开始6个字符以及2个结尾校验字符后的子字符串
                            dtArr = ProCommon.Communal.ToolFunctions.ReverseHighLow(dt); //高低位呼唤后的字符串数组
                            if (dtArr != null)
                            {
                                for (int i = 0; i < dtArr.Length; i++)
                                {
                                    dData[i] = ProCommon.Communal.ToolFunctions.HexadecimalToDecimal(dtArr[i]);
                                }
                            }
                            break;

                        default: break;
                        }
                    }
                }
            }
            catch (System.Exception ex) { }
            return(rt);
        }
Ejemplo n.º 3
0
 public bool GetInvarStatus(InVarObj inVarObj, out bool isOnOff)
 {
     return(DoGetInvarStatus(inVarObj, out isOnOff));
 }
Ejemplo n.º 4
0
 public bool SetInvarStatus(InVarObj inVarObj, bool isOnOff)
 {
     return(DoSetInvarStatus(inVarObj, isOnOff));
 }
Ejemplo n.º 5
0
 protected abstract bool DoSetInvarStatus(InVarObj inVarObj, bool isOnOff);