Beispiel #1
0
        ////public Agilent(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
        ////{
        ////    this._port = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
        ////}

        ////public void ReadFormAgilent()
        ////{ }

        ////public void SendDataToDB()
        ////{ }

        ////public void Initiate()
        ////{ }

        ///// <summary>
        ///// 静态方法:安捷伦通讯获取安捷伦测量量
        ///// </summary>
        ///// <param name="TFRun">是否运行安捷伦</param>
        //private static void GetAgilentData(bool TFRun)
        //{
        //    if (TFRun)
        //    {
        //        //config Agilent34970a communication
        //        SimpleDAQ AgilentDAQ = new SimpleDAQ();
        //        SimpleDAQ.ChDef mychdef = new SimpleDAQ.ChDef();
        //        ArrayList Reading = new ArrayList();
        //        ArrayList TimeStamp = new ArrayList();
        //        ArrayList ChNum = new ArrayList();

        //        mychdef.ChDelay = "0.05";//通道延迟,秒
        //        mychdef.CurrentDCChNum = "";//电流通道选定
        //        mychdef.VoltageDCChNum = "101,102,105,106,107,108,109,110,111,112";//电压通道选定omniscience
        //        mychdef.FRTDChNum = "103,104";//四线RTD通道选定
        //        mychdef.FRTDalpha = "85";//四线RTD温度系数代号
        //        mychdef.COMPortNum = 3;//COM号

        //        //Get Agilent data
        //        AgilentDAQ.GetMeasurement(mychdef,
        //                                  ref Reading,
        //                                  ref TimeStamp,
        //                                  ref ChNum
        //                                  );
        //        AgilentIO.AgilentData.Reading = (double[])Reading.ToArray(typeof(double));
        //        AgilentIO.AgilentData.ChNum = (short[])ChNum.ToArray(typeof(short));
        //        AgilentIO.AgilentData.TimeStamp = (string[])TimeStamp.ToArray(typeof(string));
        //    }
        //    else
        //    {
        //        return;
        //    }


        //}

        ///// <summary>
        ///// 安捷伦变量输出调整量程
        ///// </summary>
        ///// <param name="IO"></param>
        //private static void AgilentIO2Output(AgilentIODef IO)
        //{
        //    //!!!!现场要核对通道顺序是否就是数组顺序
        //    //!!!!现场要核对量程
        //    if (IO.AgilentData.Reading.Count() == 12)
        //    {
        //        //2014-07-27变送器输出全部信号为1-5V
        //        AgilentOutput.AirInDBT = AnalogSignalChangeRange(5, 1, 50, 0, IO.AgilentData.Reading[0]);
        //        AgilentOutput.AirInWBT = AnalogSignalChangeRange(5, 1, 50, 0, IO.AgilentData.Reading[1]);
        //        AgilentOutput.AirOutDBT = IO.AgilentData.Reading[2];//直接测的FRTD
        //        AgilentOutput.AirOutWBT = IO.AgilentData.Reading[3];//直接测的FRTD
        //        AgilentOutput.WaterInTemp = AnalogSignalChangeRange(5, 1, 100, 0, IO.AgilentData.Reading[4]);
        //        AgilentOutput.WaterReturnTemp = AnalogSignalChangeRange(5, 1, 100, 0, IO.AgilentData.Reading[5]);
        //        AgilentOutput.WaterTankOutT = AnalogSignalChangeRange(5, 1, 100, 0, IO.AgilentData.Reading[10]);
        //        AgilentOutput.AirOutP = AnalogSignalChangeRange(5, 1, 250, -250, IO.AgilentData.Reading[7]);//pa
        //        AgilentOutput.NozzleDP = AnalogSignalChangeRange(5, 1, 900, 0, IO.AgilentData.Reading[8]);//pa
        //        AgilentOutput.AtmosphereP = AnalogSignalChangeRange(5, 1, 120, 80, IO.AgilentData.Reading[9]);//kpa
        //        AgilentOutput.WaterDP = AnalogSignalChangeRange(5, 1, 75, 0, IO.AgilentData.Reading[6]);//Kpa
        //        AgilentOutput.WaterFlowRate = AnalogSignalChangeRange(5, 1, 3 * 1000 / 60, 0, IO.AgilentData.Reading[11]);//L/min
        //    }
        //}


        ///// <summary>
        ///// 线性调整测量量的量程
        ///// </summary>
        ///// <param name="SignalUp">原始信号最大值</param>
        ///// <param name="SignalDn">原始信号最小值</param>
        ///// <param name="TargetUp">目标信号最大值</param>
        ///// <param name="TargetDn">目标信号最小值</param>
        ///// <param name="SignalVal">当前原始信号值</param>
        ///// <returns>调整量程后的信号值</returns>
        //private static double AnalogSignalChangeRange
        //(double SignalUp, double SignalDn, double TargetUp, double TargetDn, double SignalVal)
        //{
        //    return ((SignalVal - SignalDn) / (SignalUp - SignalDn) * (TargetUp - TargetDn) + TargetDn);
        //}
        #endregion

        /// <summary>
        /// 建立各个Agilent通道,的各个参数,从最开始的数据库中读取
        /// </summary>
        /// <param name="ListAgilient"></param>
        /// <param name="DBPath"></param>
        /// <param name="TableName"></param>
        public static void BuildAgilentList(List <AgilentVar> ListAgilient, string DBPath, string TableName)
        {
            ListAgilient.Clear();
            List <string[]> StringsListFromDB = Utility.MDBComm.ReadAllStringFromTable(DBPath, TableName);

            for (int i = 0; i < StringsListFromDB.Count; i++)
            {
                AgilentVar AgilientVar = new AgilentVar();  //安捷伦数据定义类的声明  注意:要声明在函数里面
                //各个信号的名称和量程、通道号的赋值
                AgilientVar.Name       = StringsListFromDB[i][1];
                AgilientVar.Type       = StringsListFromDB[i][2];
                AgilientVar.ChannelNum = StringsListFromDB[i][3];
                AgilientVar.SignalDn   = Convert.ToDouble(StringsListFromDB[i][4]);
                AgilientVar.SignalUp   = Convert.ToDouble(StringsListFromDB[i][5]);
                try
                {
                    AgilientVar.TargetDn = Convert.ToDouble(StringsListFromDB[i][6]);
                    AgilientVar.TargetUp = Convert.ToDouble(StringsListFromDB[i][7]);
                }
                catch
                {
                    AgilientVar.TargetDn = double.NaN;
                    AgilientVar.TargetUp = double.NaN;
                }
                //修正系数的赋值
                for (int j = 0; j < Agilent.CorrXYPointsNum; j = j + 1)
                {
                    try
                    {
                        AgilientVar.CorrX[j] = Convert.ToDouble(StringsListFromDB[i][2 * j + 8]);
                        AgilientVar.CorrY[j] = Convert.ToDouble(StringsListFromDB[i][2 * j + 1 + 8]);
                    }
                    catch
                    {
                        AgilientVar.CorrX[j] = double.NaN;
                        AgilientVar.CorrY[j] = double.NaN;
                    }
                }

                //AgilientVar.CorrX.sor
                ListAgilient.Add(AgilientVar);
            }
            ListAgilient.TrimExcess();
        }
Beispiel #2
0
        /// <summary>
        /// Agilent修正函数
        /// </summary>
        /// <param name="AgilentVarINP"></param>
        /// <param name="CorrectIntervalIndex"></param>
        public static void AgilentVarCorrect(AgilentVar AgilentVarINP, int CorrectIntervalIndex)
        {
            if (CorrectIntervalIndex != -1)
            {
                double y1 = AgilentVarINP.CorrY[CorrectIntervalIndex];
                double y2 = AgilentVarINP.CorrY[CorrectIntervalIndex + 1];

                double x1 = AgilentVarINP.CorrX[CorrectIntervalIndex];
                double x2 = AgilentVarINP.CorrX[CorrectIntervalIndex + 1];

                double a = (y1 - y2) / (x1 - x2);
                double b = y1 - a * x1;

                AgilentVarINP.TargetCorr = LinearCorrect(a, b, AgilentVarINP.TargetValue);
            }
            else
            {
                AgilentVarINP.TargetCorr = AgilentVarINP.TargetValue;
            }
        }
Beispiel #3
0
        /// <summary>
        /// 找需要修正值的插值区间的序号
        /// </summary>
        /// <param name="AgilentVINP"></param>
        /// <returns></returns>
        public static int FindCorrectInterval(AgilentVar AgilentVINP)
        {
            int Index = -1;

            for (int i = 0; i < Agilent.CorrXYPointsNum - 1; i++)
            {
                if (AgilentVINP.TargetValue >= AgilentVINP.CorrX[i] && AgilentVINP.TargetValue < AgilentVINP.CorrX[i + 1])
                {
                    Index = i;
                    break;
                }
                else
                {
                    //说明不在范围内
                    Index = -1;
                }
            }

            return(Index);
        }