internal List<TiaAndSTep7DataBlockRow> _GetExpandedChlidren(S7DataBlockExpandOptions myExpOpt) { TiaAndSTep7DataBlockRow retVal = (TiaAndSTep7DataBlockRow)this.DeepCopy(); retVal._children = new List<IDataRow>(); if (Children != null) { if (this.Parent == null || ((TiaAndSTep7DataBlockRow)this.Parent).isInOut == false || myExpOpt.ExpandSubChildInINOUT) foreach (TiaAndSTep7DataBlockRow plcDataRow in this.Children) { List<TiaAndSTep7DataBlockRow> tmp = plcDataRow._GetExpandedChlidren(myExpOpt); retVal.AddRange(tmp); } } if (this.IsArray && (this.DataType != S7DataRowType.CHAR || myExpOpt.ExpandCharArrays)) { List<TiaAndSTep7DataBlockRow> arrAsList = new List<TiaAndSTep7DataBlockRow>(); var lastCnt = (ArrayStop.Last() - ArrayStart.Last()) + 1; int[] arrAk = ArrayStart.ToArray(); for (int i = 0; i < this.GetArrayLines(); i++) { string nm = ""; for (int n = 0; n < arrAk.Length; n++) { if (nm != "") nm += ", "; nm += arrAk[n]; } var frst = (i % lastCnt) == 0; //Erstes Elment des letzten Index eines Arrays TiaAndSTep7DataBlockRow tmp = (TiaAndSTep7DataBlockRow)retVal.DeepCopy(); tmp.Name = tmp.Name + "[" + nm + "]"; tmp.WasFirstInArray = retVal.IsArray && i == 0; tmp.WasArray = retVal.IsArray; tmp.IsArray = false; tmp.WasNextHigherIndex = frst; // arrAk[ArrayStart.Count - 1] == ArrayStart[ArrayStart.Count - 1]; arrAsList.Add(tmp); for (int n = arrAk.Length - 1; n >= 0; n--) { arrAk[n]++; if (arrAk[n] > ArrayStop[n]) { arrAk[n] = ArrayStart[n]; } else break; } } return arrAsList; } return new List<TiaAndSTep7DataBlockRow>() { retVal }; }
/// <summary> /// With this function you get the Structure with expanden Arrays! /// </summary> /// <returns></returns> public IDataRow GetArrayExpandedStructure(S7DataBlockExpandOptions myExpOpt) { return ((TiaAndSTep7DataBlockRow)Structure)._GetExpandedChlidren(myExpOpt)[0]; }
/// <summary> /// With this function you get the Structure with expanden Arrays! /// </summary> /// <returns></returns> public IDataRow GetArrayExpandedStructure(S7DataBlockExpandOptions myExpOpt) { return(((S7DataRow)Structure)._GetExpandedChlidren(myExpOpt)[0]); }
/* * internal static List<PLCDataRow> _GetRowsAsList(PLCDataRow currRow) * { * List<PLCDataRow> retVal = new List<PLCDataRow>(); * retVal.Add(currRow); * if (currRow.Children != null && currRow.DataType == PLCDataRowType.STRUCT) * foreach (PLCDataRow plcDataRow in currRow.Children) * retVal.AddRange(_GetRowsAsList(plcDataRow)); * return retVal; * } */ internal List <S7DataRow> _GetExpandedChlidren(S7DataBlockExpandOptions myExpOpt) { S7DataRow retVal = (S7DataRow)this.DeepCopy(); retVal._children = new List <S7DataRow>(); if (Children != null) { foreach (S7DataRow plcDataRow in this.Children) { List <S7DataRow> tmp = plcDataRow._GetExpandedChlidren(myExpOpt); retVal.AddRange(tmp); } } if (this.IsArray && (this.DataType != S7DataRowType.CHAR || myExpOpt.ExpandCharArrays)) { List <S7DataRow> arrAsList = new List <S7DataRow>(); int[] arrAk = ArrayStart.ToArray(); for (int i = 0; i < this.GetArrayLines(); i++) { string nm = ""; for (int n = 0; n < arrAk.Length; n++) { if (nm != "") { nm += ", "; } nm += arrAk[n]; } S7DataRow tmp = (S7DataRow)retVal.DeepCopy(); tmp.Name = tmp.Name + "[" + nm + "]"; tmp.WasFirstInArray = retVal.IsArray && i == 0; tmp.WasArray = retVal.IsArray; tmp.IsArray = false; arrAsList.Add(tmp); for (int n = arrAk.Length - 1; n >= 0; n--) { arrAk[n]++; if (arrAk[n] > ArrayStop[n]) { arrAk[n] = ArrayStart[n]; } else { break; } } } return(arrAsList); } return(new List <S7DataRow>() { retVal }); }
/* * internal static List<PLCDataRow> _GetRowsAsList(PLCDataRow currRow) * { * List<PLCDataRow> retVal = new List<PLCDataRow>(); * retVal.Add(currRow); * if (currRow.Children != null && currRow.DataType == PLCDataRowType.STRUCT) * foreach (PLCDataRow plcDataRow in currRow.Children) * retVal.AddRange(_GetRowsAsList(plcDataRow)); * return retVal; * } */ internal List <S7DataRow> _GetExpandedChlidren(S7DataBlockExpandOptions myExpOpt) { S7DataRow retVal = (S7DataRow)this.DeepCopy(); retVal._children = new List <IDataRow>(); if (Children != null) { if (this.Parent == null || ((S7DataRow)this.Parent).isInOut == false || myExpOpt.ExpandSubChildInINOUT) { foreach (S7DataRow plcDataRow in this.Children) { List <S7DataRow> tmp = plcDataRow._GetExpandedChlidren(myExpOpt); retVal.AddRange(tmp); } } } if (this.IsArray && (this.DataType != S7DataRowType.CHAR || myExpOpt.ExpandCharArrays)) { List <S7DataRow> arrAsList = new List <S7DataRow>(); var lastCnt = (ArrayStop.Last() - ArrayStart.Last()) + 1; int[] arrAk = ArrayStart.ToArray(); for (int i = 0; i < this.GetArrayLines(); i++) { string nm = ""; for (int n = 0; n < arrAk.Length; n++) { if (nm != "") { nm += ", "; } nm += arrAk[n]; } var frst = (i % lastCnt) == 0; //Erstes Elment des letzten Index eines Arrays S7DataRow tmp = (S7DataRow)retVal.DeepCopy(); tmp.Name = tmp.Name + "[" + nm + "]"; tmp.WasFirstInArray = retVal.IsArray && i == 0; tmp.WasArray = retVal.IsArray; tmp.IsArray = false; tmp.WasNextHigherIndex = frst; // arrAk[ArrayStart.Count - 1] == ArrayStart[ArrayStart.Count - 1]; arrAsList.Add(tmp); for (int n = arrAk.Length - 1; n >= 0; n--) { arrAk[n]++; if (arrAk[n] > ArrayStop[n]) { arrAk[n] = ArrayStart[n]; } else { break; } } } return(arrAsList); } return(new List <S7DataRow>() { retVal }); }
/* internal static List<PLCDataRow> _GetRowsAsList(PLCDataRow currRow) { List<PLCDataRow> retVal = new List<PLCDataRow>(); retVal.Add(currRow); if (currRow.Children != null && currRow.DataType == PLCDataRowType.STRUCT) foreach (PLCDataRow plcDataRow in currRow.Children) retVal.AddRange(_GetRowsAsList(plcDataRow)); return retVal; } */ internal List<S7DataRow> _GetExpandedChlidren(S7DataBlockExpandOptions myExpOpt) { S7DataRow retVal = (S7DataRow)this.DeepCopy(); retVal._children = new List<IDataRow>(); if (Children != null) { foreach (S7DataRow plcDataRow in this.Children) { List<S7DataRow> tmp = plcDataRow._GetExpandedChlidren(myExpOpt); retVal.AddRange(tmp); } } if (this.IsArray && (this.DataType!=S7DataRowType.CHAR || myExpOpt.ExpandCharArrays)) { List<S7DataRow> arrAsList = new List<S7DataRow>(); int[] arrAk = ArrayStart.ToArray(); for (int i = 0; i < this.GetArrayLines(); i++) { string nm = ""; for (int n = 0; n < arrAk.Length; n++) { if (nm != "") nm += ", "; nm += arrAk[n]; } S7DataRow tmp = (S7DataRow)retVal.DeepCopy(); tmp.Name = tmp.Name + "[" + nm + "]"; tmp.WasFirstInArray = retVal.IsArray && i == 0; tmp.WasArray = retVal.IsArray; tmp.IsArray = false; tmp.WasNextHigherIndex = arrAk[ArrayStart.Count - 1] == ArrayStart[ArrayStart.Count - 1]; arrAsList.Add(tmp); for (int n = arrAk.Length - 1; n >= 0; n--) { arrAk[n]++; if (arrAk[n] > ArrayStop[n]) { arrAk[n] = ArrayStart[n]; } else break; } } return arrAsList; } return new List<S7DataRow>() {retVal}; }
/// <summary> /// With this function you get the Structure with expanden Arrays! /// </summary> /// <returns></returns> public S7DataRow GetArrayExpandedStructure(S7DataBlockExpandOptions myExpOpt) { return Structure._GetExpandedChlidren(myExpOpt)[0]; }
public S7DataRow GetArrayExpandedStructure(S7DataBlockExpandOptions myExpOpt) { return Structure; }