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());
 }
Exemplo n.º 2
0
 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()));
 }
Exemplo n.º 3
0
        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;
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        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;
                }
            }
        }