public IDataRow GetArrayExpandedStructure() { //Todo: Vergleich der Expand Options, und beim änderen eines inneren wertes des blocks, diesen löschen (erst bei schreibsup wichtig!) if (expStruct != null) return expStruct; return expStruct = (DataBlockRow)GetArrayExpandedStructure(new S7DataBlockExpandOptions()); }
public IDataRow GetArrayExpandedStructure() { //Todo: Vergleich der Expand Options, und beim änderen eines inneren wertes des blocks, diesen löschen (erst bei schreibsup wichtig!) if (expStruct != null) { return(expStruct); } return(expStruct = (DataBlockRow)GetArrayExpandedStructure(new S7DataBlockExpandOptions())); }
public static void ConvertLocaldataToSymbols(S7FunctionBlock myFct, S7ConvertingOptions myOpt) { if (myOpt.ReplaceLokalDataAddressesWithSymbolNames) { List <DataBlockRow> rows = null; Dictionary <String, String> parLst = new Dictionary <string, string>(); if (myFct.Parameter != null && myFct.Parameter.Children != null) { foreach (var plcDataRow in myFct.Parameter.Children) { if (plcDataRow.Name == "TEMP") { TiaAndSTep7DataBlockRow tmpRw = ((TiaAndSTep7DataBlockRow)plcDataRow)._GetExpandedChlidren(new S7DataBlockExpandOptions() { ExpandCharArrays = true, ExpandSubChildInINOUT = false })[0]; rows = DataBlockRow.GetChildrowsAsList(tmpRw); break; } } } if (rows != null) { foreach (var plcDataRow in rows) { if (plcDataRow.DataType != S7DataRowType.STRUCT && plcDataRow.DataType != S7DataRowType.UDT && plcDataRow.DataType != S7DataRowType.FB) { parLst.Add("P#L" + plcDataRow.BlockAddress.ToString(), "P##" + plcDataRow.StructuredName); } string tmp = ((S7DataRow)plcDataRow).GetSymbolicAddress(); if (tmp != null) { parLst.Add("L" + tmp.Replace("X", ""), "#" + plcDataRow.StructuredName); } } } foreach (S7FunctionBlockRow plcFunctionBlockRow in myFct.AWLCode) { if (!plcFunctionBlockRow.Parameter.Contains("'") && !plcFunctionBlockRow.Parameter.Contains("[AR") && plcFunctionBlockRow.Parameter.Contains("[")) { int pos1 = plcFunctionBlockRow.Parameter.IndexOf("[") + 1; int pos2 = plcFunctionBlockRow.Parameter.IndexOf("]"); string par = plcFunctionBlockRow.Parameter.Substring(pos1, pos2 - pos1); if (parLst.ContainsKey(par)) { byte[] tmp = plcFunctionBlockRow.MC7; plcFunctionBlockRow.Parameter = plcFunctionBlockRow.Parameter.Substring(0, pos1) + parLst[par] + "]"; plcFunctionBlockRow.MC7 = tmp; } } else { string par = plcFunctionBlockRow.Parameter.Replace(" ", ""); if (parLst.ContainsKey(par)) { byte[] tmp = plcFunctionBlockRow.MC7; plcFunctionBlockRow.Parameter = ""; plcFunctionBlockRow.Parameter = parLst[par]; plcFunctionBlockRow.MC7 = tmp; } } } } }
private void Button_Click_2(object sender, RoutedEventArgs e) { HMIGENOBJECTSLib.HMIGO HMIGOObject = null; try { HMIGOObject = new HMIGENOBJECTSLib.HMIGO(); } catch (Exception ex) { MessageBox.Show("The WinCC Object could not be created!\n\n Error:" + ex.Message); } foreach (var projectBlockInfo in ConvertBlocks) { S7DataBlock myDB = (S7DataBlock)projectBlockInfo.GetBlock(); List <DataBlockRow> myLst = null; if (chkExpandArrays.IsChecked.Value) { myLst = DataBlockRow.GetChildrowsAsList(((DataBlockRow)myDB.GetArrayExpandedStructure(new S7DataBlockExpandOptions()))); } // ) myDB.GetRowsAsArrayExpandedList(ne); else { myLst = DataBlockRow.GetChildrowsAsList(((DataBlockRow)myDB.Structure)); // myDB.GetRowsAsList(); } int cnt = 0; try { foreach (S7DataRow plcDataRow in myLst) { string tagName = txtTagsPrefix.Text + plcDataRow.StructuredName.Replace(".", "_").Replace("[", "_").Replace("]", ""). Replace(" ", "").Replace(",", "_"); try { switch (plcDataRow.DataType) { case S7DataRowType.BOOL: HMIGOObject.CreateTag(tagName, HMIGENOBJECTSLib.HMIGO_TAG_TYPE.TAG_BINARY_TAG, txtConnectionName.Text, "DB" + myDB.BlockNumber + ",D" + plcDataRow.BlockAddress.ToString(), "TAGS_DB" + myDB.BlockNumber); break; case S7DataRowType.INT: HMIGOObject.CreateTag(tagName, HMIGENOBJECTSLib.HMIGO_TAG_TYPE.TAG_SIGNED_16BIT_VALUE, txtConnectionName.Text, "DB" + myDB.BlockNumber + ",DW" + plcDataRow.BlockAddress.ByteAddress.ToString(), "TAGS_DB" + myDB.BlockNumber); break; case S7DataRowType.DINT: HMIGOObject.CreateTag(tagName, HMIGENOBJECTSLib.HMIGO_TAG_TYPE.TAG_SIGNED_32BIT_VALUE, txtConnectionName.Text, "DB" + myDB.BlockNumber + ",DD" + plcDataRow.BlockAddress.ByteAddress.ToString(), "TAGS_DB" + myDB.BlockNumber); break; case S7DataRowType.WORD: HMIGOObject.CreateTag(tagName, HMIGENOBJECTSLib.HMIGO_TAG_TYPE.TAG_UNSIGNED_16BIT_VALUE, txtConnectionName.Text, "DB" + myDB.BlockNumber + ",DW" + plcDataRow.BlockAddress.ByteAddress.ToString(), "TAGS_DB" + myDB.BlockNumber); break; case S7DataRowType.DWORD: HMIGOObject.CreateTag(tagName, HMIGENOBJECTSLib.HMIGO_TAG_TYPE.TAG_UNSIGNED_32BIT_VALUE, txtConnectionName.Text, "DB" + myDB.BlockNumber + ",DD" + plcDataRow.BlockAddress.ByteAddress.ToString(), "TAGS_DB" + myDB.BlockNumber); break; case S7DataRowType.BYTE: HMIGOObject.CreateTag(tagName, HMIGENOBJECTSLib.HMIGO_TAG_TYPE.TAG_UNSIGNED_8BIT_VALUE, txtConnectionName.Text, "DB" + myDB.BlockNumber + ",DBB" + plcDataRow.BlockAddress.ByteAddress.ToString(), "TAGS_DB" + myDB.BlockNumber); break; case S7DataRowType.REAL: HMIGOObject.CreateTag(tagName, HMIGENOBJECTSLib.HMIGO_TAG_TYPE. TAG_FLOATINGPOINT_NUMBER_32BIT_IEEE_754, txtConnectionName.Text, "DB" + myDB.BlockNumber + ",DD" + plcDataRow.BlockAddress.ByteAddress.ToString(), "TAGS_DB" + myDB.BlockNumber); break; } } catch (System.Runtime.InteropServices.COMException ex) { if (ex.ErrorCode != -2147196408) { throw ex; } //Tag existiert schoin } } } catch (System.Runtime.InteropServices.COMException ex) { if (ex.ErrorCode == -2147195889) { MessageBox.Show("Error: The Connection Name you specified does not exist!"); } else { MessageBox.Show("Error: " + ex.Message); } return; } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); return; } } }