コード例 #1
0
 /// <summary>
 /// Генерирование таблицы привязок
 /// </summary>
 void GenModBusTable()
 {
     try
     {
         ModbusTable mb = new ModbusTable();
         mb.LoadSource(Devices.ToList <Device>());
         mb.Generate();
         SaveFileDialog saveFileDialog = new SaveFileDialog();
         saveFileDialog.Filter = "XML documents (*.xml)|*.xml|All files (*.*)|*.*";
         AppSettings settings = AppSettings.GetSettings();
         if (!string.IsNullOrEmpty(settings.DefaultOutFilePath))
         {
             saveFileDialog.InitialDirectory = settings.DefaultOutFilePath;
         }
         if (saveFileDialog.ShowDialog() == true)
         {
             settings.DefaultOutFilePath = saveFileDialog.FileName;
             mb.Save(settings.DefaultOutFilePath);
             AppSettings.SetSettings(settings);
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
コード例 #2
0
        public static ushort ModifyToModbusRegisterAddress(ushort startAddr, ModbusTable funcCode)
        {
            switch (funcCode)
            {
            case ModbusTable.Coils:
                return(Convert.ToUInt16(1 + startAddr));          // coils

            case ModbusTable.Contacts:
                return(Convert.ToUInt16(10001 + startAddr));      // contacts

            case ModbusTable.Holdings:
                return(Convert.ToUInt16(40001 + startAddr));      // holdings

            case ModbusTable.Inputs:
                return(Convert.ToUInt16(30001 + startAddr));      // inputs
            }
            throw new NotImplementedException();
        }
コード例 #3
0
ファイル: ProgramService.cs プロジェクト: ashsvis/L2M
        private static void AddLogikaIndexArrays(XElement parentElement, List <RequestData> parameters)
        {
            byte        dad = 0, sad = 0, nodeAddr = 0;
            int         channel = 0, parameter = 0, answerWait = 0, arrayFirstIndex = 0, arrayItemsCount = 0;
            ModbusTable modbusTable = ModbusTable.None;
            LogikaParam paramKind = LogikaParam.Parameter;
            ushort      startAddr = 0;
            string      dataFormat = "", node = "Logika", tag = "*";
            bool        good = true;

            foreach (XElement logikaNodeElement in parentElement.Element("Runtime").Elements("LogikaNode"))
            {
                var element = logikaNodeElement.Element("Dad");
                if (element == null || !byte.TryParse(element.Value, out dad))
                {
                    good = false;
                }
                element = logikaNodeElement.Element("Sad");
                if (element == null || !byte.TryParse(element.Value, out sad))
                {
                    good = false;
                }
                element = logikaNodeElement.Element("Node");
                if (element != null)
                {
                    node = element.Value;
                }
                else
                {
                    good = false;
                }
                element = logikaNodeElement.Element("ModbusNode");
                if (element == null || !byte.TryParse(element.Value, out nodeAddr))
                {
                    good = false;
                }
                foreach (var item in logikaNodeElement.Elements("LogikaIndexArray"))
                {
                    element = item.Element("Tag");
                    if (element != null)
                    {
                        tag = element.Value;
                    }
                    else
                    {
                        good = false;
                    }
                    element = item.Element("Channel");
                    if (element == null || !int.TryParse(element.Value, out channel))
                    {
                        good = false;
                    }
                    element = item.Element("Parameter");
                    if (element != null)
                    {
                        paramKind = LogikaParam.Parameter;
                        if (!int.TryParse(element.Value, out parameter))
                        {
                            good = false;
                        }
                    }
                    else
                    {
                        element = item.Element("ArrayNumber");
                        if (element != null)
                        {
                            paramKind = LogikaParam.IndexArray;
                            if (!int.TryParse(element.Value, out parameter))
                            {
                                good = false;
                            }
                            element = item.Element("IndexFirst");
                            if (element == null || !int.TryParse(element.Value, out arrayFirstIndex))
                            {
                                good = false;
                            }
                            element = item.Element("ItemsCount");
                            if (element == null || !int.TryParse(element.Value, out arrayItemsCount))
                            {
                                good = false;
                            }
                        }
                        else
                        {
                            good = false;
                        }
                    }
                    element = item.Element("DataFormat");
                    if (element != null)
                    {
                        dataFormat = element.Value;
                    }
                    else
                    {
                        good = false;
                    }
                    element = item.Element("AnswerWait");
                    if (element == null || !int.TryParse(element.Value, out answerWait))
                    {
                        good = false;
                    }
                    element = item.Element("InputRegister");
                    if (element != null)
                    {
                        modbusTable = ModbusTable.Inputs;
                        if (!ushort.TryParse(element.Value, out startAddr))
                        {
                            good = false;
                        }
                    }
                    else
                    {
                        element = item.Element("HoldingRegister");
                        if (element != null)
                        {
                            modbusTable = ModbusTable.Holdings;
                            if (!ushort.TryParse(element.Value, out startAddr))
                            {
                                good = false;
                            }
                        }
                        else
                        {
                            good = false;
                        }
                    }
                    if (good)
                    {
                        for (var i = 0; i < arrayItemsCount; i++)
                        {
                            parameters.Add(new RequestData()
                            {
                                Node             = node,
                                Tag              = tag,
                                Dad              = dad,
                                Sad              = sad,
                                Channel          = channel,
                                ParameterKind    = paramKind,
                                Parameter        = parameter,
                                ArrayIndexNumber = arrayFirstIndex + i,
                                Archived         = arrayFirstIndex + i > 0,
                                NodeAddr         = nodeAddr,
                                StartAddr        = startAddr,
                                ModbusTable      = modbusTable,
                                FormatData       = dataFormat,
                                AnswerWait       = answerWait
                            });
                            startAddr += 2;
                        }
                    }
                }
            }
        }