public static bool HasScaling(this IDataServer server, string tagName) { ITag tag = server[tagName]; if (tag == null) { return(false); } int scaleid = server.GetScaleByID(tag.ID); return(scaleid >= 0); }
public static float ValueToScale(this ITag tag, float value) { IDataServer srv = tag.Parent.Server; int ind = srv.GetScaleByID(tag.ID); Scaling meta = ind < 0 ? Scaling.Empty : srv.ScalingList[ind]; if (meta.ScaleType == ScaleType.None) { return(value); } else { double temp = (value - meta.EULo) / (meta.EUHi - meta.EULo); if (meta.ScaleType == ScaleType.SquareRoot) { temp = temp * temp; } return((meta.RawHi - meta.RawLo) * (float)temp + meta.RawLo); } }
public static float ScaleToValue(this ITag tag, Storage value) { DataType type = tag.Address.VarType; if (type == DataType.BOOL) { return(value.Boolean ? 1f : 0f); } IDataServer srv = tag.Parent.Server; int ind = srv.GetScaleByID(tag.ID); Scaling meta = ind < 0 ? Scaling.Empty : srv.ScalingList[ind]; if (meta.ScaleType == ScaleType.None) { switch (type) { case DataType.BYTE: return((float)value.Byte); case DataType.WORD: case DataType.SHORT: return((float)value.Int16); case DataType.INT: return((float)value.Int32); case DataType.FLOAT: return(value.Single); case DataType.STR: return(float.Parse(tag.ToString())); default: return(0f); } } else { double temp; switch (type) { case DataType.BYTE: temp = (value.Byte - meta.RawLo) / (meta.RawHi - meta.RawLo); break; case DataType.WORD: case DataType.SHORT: temp = (value.Int16 - meta.RawLo) / (meta.RawHi - meta.RawLo); break; case DataType.INT: temp = (value.Int32 - meta.RawLo) / (meta.RawHi - meta.RawLo); break; case DataType.FLOAT: temp = (value.Single - meta.RawLo) / (meta.RawHi - meta.RawLo); break; default: return(0f); } if (meta.ScaleType == ScaleType.SquareRoot) { temp = Math.Sqrt(temp); } return((meta.EUHi - meta.EULo) * (float)temp + meta.EULo); } }