Esempio n. 1
0
        private List <PValue> FloatDatatoPValueHist(Entity <FloatData> floatdata)
        {
            //list是一个起始时间从begin开始,截止时间为end的点集合.
            //其头部begin时间点,有可能恰好对应一个原始值,有可能用前一时刻的值补足的值。
            //其尾部end时间点,有可能恰好对应一个原始值,有可能是用end时刻补足的一个值。
            //GetFloatSingleValue如过返回0个值,则直接退出
            //GetFloatSingleValue如果仅返回一个值,则要么会在begin补值,要么会在end补值。要么会在两边都补。
            //GetFloatSingleValue如果仅返回两个值,有可能恰好在两边。这样两边都不需要补值
            //因此floatdata一定是一个至少包含两个元素的列表集合。(GetFloatSingleValue返回0个值的情况,已经直接处理了)
            //将结果转换为pvalue
            int           status  = 0;
            List <PValue> pvalues = new List <PValue>();

            for (int i = 0; i < floatdata.Count - 1; i++)       //floatdata一定是一个至少包含两个元素的列表集合。
            {
                if (floatdata.Data[i].Error == 0)
                {
                    //FloatData质量码定义,见golden手册3.4.3
                    //质量码512后为自定义
                    status = QualitieToInt(floatdata.Data[i].Qualitie);
                    pvalues.Add(new PValue(floatdata.Data[i].Value, floatdata.Data[i].Time, floatdata.Data[i + 1].Time, status));
                }
                else
                {
                    //如果error不为0,说明golden读取数据有误
                    //给pvalue赋一个初值,即timespan为1970-1-1 00:00:00
                    pvalues.Add(new PValue(0, new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local), new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local), 0));
                    //获得error描述,写入log
                    string errorStr = RTDBError.GetError(floatdata.Data[i].Error);
                    //Log.Error(errorStr);
                }
            }

            return(pvalues);
        }
Esempio n. 2
0
        //读取数据时,无论是读历史值还是当前值,数据来源都是floatdata形式,都要转换为pvalue形式来使用
        #region 读取用:将浮点数类型数据转换成PValue型数据 private List<PValue> FloatDatatoPValue(Entity<FloatData> floatdata)
        private List <PValue> FloatDatatoPValue(Entity <FloatData> floatdata)
        {
            int           status  = 0;
            List <PValue> pvalues = new List <PValue>();

            //实时数据处理版本:仅按实际的数据内容转换为PValue,PValue只准备时间、值、状态。
            foreach (FloatData d in floatdata.Data)
            {
                if (d.Error == 0)
                {
                    //FloatData质量码d.Qualitie定义,见golden手册3.4.3
                    //质量码512后为自定义

                    //FloatData错误码d.Error,如何处理。
                    //在id=0的情况下,对应位置返回的数据,Qualitie为good,但是Error不为0

                    status = QualitieToInt(d.Qualitie);
                    pvalues.Add(new PValue(d.Value, d.Time, status));
                }
                else
                {
                    //如果error不为0,说明golden读取数据有误
                    //给pvalue赋一个初值,即timespan为1970-1-1 00:00:00
                    pvalues.Add(new PValue(0, new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local), new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local), 0));
                    //获得error描述,写入log
                    string errorStr = RTDBError.GetError(d.Error);
                    //Log.Error(errorStr);
                }
            }
            return(pvalues);
        }
Esempio n. 3
0
        public int SetActValues(string[] tagnames, List <PValue> pvalues)
        {
            //golden数据库读取标签点当前值(即时值、快照值)是根据标签点id号
            //需要首先根据标签点名获得对应id号
            int[] ids = GetPointIDsbyName(tagnames); //批量获取标签名称对应的id号,找不到的点id=0
            //将pvalues转换为floatdata类型
            List <FloatData> floatdata = PValues2FloatData(ids, pvalues);
            //写入floatdata类型的当前值
            EntityResult <FloatData> result = new EntityResult <FloatData>();

            try
            {
                result = this._iSnapshot.PutFloatSnapshotsCollection(floatdata);
            }
            catch (RTDBException ex)
            {
                //将golden的异常PgimDataException记录在_exception中,并以PgimDataException的名称继续抛出异常
                this._exception = ex.ToString();
                throw new Exception(ex.ToString());     //将pgim的异常继续向外传递。
            }
            if (result.ErrorList.Count != 0)
            {
                string errstr = RTDBError.GetError(result.ErrorList[0].Error);
            }
            return(0);
        }
Esempio n. 4
0
        public int SetActValues(int[] tagids, List <PValue> pvalues)
        {
            //将pvalues转换为floatdata类型
            List <FloatData> floatdata = PValues2FloatData(tagids, pvalues);
            //写入floatdata类型的当前值
            EntityResult <FloatData> result = new EntityResult <FloatData>();

            try
            {
                result = this._iSnapshot.PutFloatSnapshotsCollection(floatdata);
            }
            catch (RTDBException ex)
            {
                //将golden的异常PgimDataException记录在_exception中,并以PgimDataException的名称继续抛出异常
                this._exception = ex.ToString();
                throw new Exception(ex.ToString());     //将pgim的异常继续向外传递。
            }
            if (result.ErrorList.Count != 0)
            {
                string errstr = RTDBError.GetError(result.ErrorList[0].Error);
            }
            return(0);
        }