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); }
//读取数据时,无论是读历史值还是当前值,数据来源都是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); }
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); }
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); }