Пример #1
0
        /// <summary>
        /// Получить данный, которые содержаться в пакете
        /// </summary>
        /// <param name="parames">Параметры пакета</param>
        /// <param name="result">Данные конвертера</param>
        /// <returns>Массив данных пакета или null если данные не удалось извлечь</returns>
        private byte[] GetData(Parameter[] parames, Float[] result)
        {
            int offset = 0;
            byte[] data = new byte[256];

            try
            {
                foreach (var parameter in parames)
                {
                    byte[] tmp = null;
                    float current = GetValue(parameter.Position, result);

                    if (!float.IsNaN(current))
                    {
                        tmp = BitConverter.GetBytes((int)Math.Round(current));
                    }
                    else
                        tmp = new byte[4];

                    Array.Resize(ref tmp, parameter.Size);
                    if (parameter.IsLittleEndian) Array.Reverse(tmp);

                    Array.Copy(tmp, 0, data, offset, parameter.Size);
                    offset = offset + parameter.Size;
                }

                Array.Resize(ref data, offset);
                return data;
            }
            catch
            {
                return null;
            }
        }
Пример #2
0
        /// <summary>
        /// Получить блоки для записи в файл
        /// </summary>
        /// <param name="parameters">Сохраняемые параметры</param>
        /// <param name="result">Параметры конвертера</param>
        /// <param name="time">Время вставляемое в блок данных</param>
        /// <returns>Список блоков для записи в файл, или null если не удалось выделить ни один блок</returns>
        private List<byte[]> GetBlocks(Parameter[] parameters, Float[] result, double time)
        {
            List<byte[]> blocks = new List<byte[]>();

            int block_count = (int)(parameters.Length / 126);
            int ostatok = (int)(parameters.Length % 126);

            if (block_count == 0 && ostatok == 0) return null;
            byte[] b_time = BitConverter.GetBytes(time);

            int position = 0;
            for (int i = 0; i < block_count; i++)
            {
                byte[] block = new byte[512];
                Array.Copy(b_time, block, b_time.Length);       // сохранили время

                for (int j = 0; j < 126; j++)
                {
                    if (position < parameters.Length)
                    {
                        if (parameters[position].IsActual)
                        {
                            float current = result[parameters[position++].Position].GetCurrentValue();
                            byte[] val = BitConverter.GetBytes(current);

                            Array.Copy(val, 0, block, (j * 4 + 8), 4);
                        }
                    }
                    else
                        return null;
                }

                blocks.Add(block);
            }

            if (ostatok > 0)
            {
                byte[] block_ost = new byte[512];
                for (int i = 0; i < ostatok; i++)
                {
                    Array.Copy(b_time, block_ost, b_time.Length);       // сохранили время
                    if (position < result.Length)
                    {
                        float current = result[parameters[position++].Position].GetCurrentValue();
                        byte[] val = BitConverter.GetBytes(current);

                        Array.Copy(val, 0, block_ost, (i * 4 + 8), 4);
                    }
                    else
                        return null;
                }

                blocks.Add(block_ost);
            }
            return blocks;
        }
Пример #3
0
 /// <summary>
 /// Добавить параметр
 /// </summary>
 /// <param name="parameter">Добавляемый параметр</param>
 public void Insert(Parameter parameter)
 {
     bool blocked = false;
     try
     {
         if (p_mutex.WaitOne(100, false))
         {
             blocked = true;
             parameters.Add(parameter);
         }
     }
     finally
     {
         if (blocked) p_mutex.ReleaseMutex();
     }
 }
Пример #4
0
        /// <summary>
        /// Добавить параметр в список
        /// </summary>
        /// <param name="parameter">Добавляемый параметр</param>
        private void InsertCondition(Parameter condition)
        {
            ListViewItem item = new ListViewItem(condition.Position.ToString());

            ListViewItem.ListViewSubItem device = new ListViewItem.ListViewSubItem(item, condition.Device.ToString());
            ListViewItem.ListViewSubItem offset = new ListViewItem.ListViewSubItem(item, condition.Offset.ToString());

            ListViewItem.ListViewSubItem desc = new ListViewItem.ListViewSubItem(item, condition.Description);
            ListViewItem.ListViewSubItem size = new ListViewItem.ListViewSubItem(item, condition.Size.ToString());

            item.SubItems.Add(device);
            item.SubItems.Add(offset);

            item.SubItems.Add(size);
            item.SubItems.Add(desc);

            item.Tag = condition;
            listViewChannels.Items.Add(item);
        }
        /// <summary>
        /// Добавить параметр
        /// </summary>
        /// <param name="node">Узел в котором сохранены параметры пакета</param>
        protected void InsertPacket(XmlNode node)
        {
            try
            {
                if (node.HasChildNodes)
                {
                    DisplayPacket packet = new DisplayPacket();
                    foreach (XmlNode child in node.ChildNodes)
                    {
                        switch (child.Name)
                        {
                            case parameterName:

                                try
                                {
                                    Parameter parameter = new Parameter();
                                    parameter.InstanceFromXml(child);

                                    packet.Insert(parameter);
                                }
                                catch
                                {
                                }
                                break;

                            case commentName:

                                try
                                {
                                    packet.Description = child.InnerText;
                                }
                                catch
                                {
                                }
                                break;

                            case deviceName:

                                try
                                {
                                    packet.Device = int.Parse(child.InnerText);
                                }
                                catch
                                {
                                }
                                break;

                            case activedName:

                                try
                                {
                                    packet.IsActived = bool.Parse(child.InnerText);
                                }
                                catch { }
                                break;

                            case toPortName:

                                try
                                {
                                    packet.ToPort = bool.Parse(child.InnerText);
                                }
                                catch { }
                                break;

                            case "port_type":

                                try
                                {
                                    packet.TypePort = (TypePort)Enum.Parse(typeof(TypePort), child.InnerText);
                                }
                                catch { }
                                break;

                            case "period":

                                try
                                {
                                    packet.Period = TimeSpan.Parse(child.InnerText);
                                }
                                catch { }
                                break;

                            default:
                                break;
                        }
                    }

                    Insert(packet);
                }
            }
            catch
            {
            }
        }
Пример #6
0
        /// <summary>
        /// Загрузить настройки
        /// </summary>
        /// <param name="root">Узел в котором находятся настройки</param>
        public void Load(XmlNode root)
        {
            try
            {
                string uri = string.Empty;
                XmlNode node = FindNode(root);

                if (node != null)
                {
                    if (node.HasChildNodes)
                    {
                        foreach (XmlNode child in node.ChildNodes)
                        {
                            switch (child.Name)
                            {
                                case uriName:

                                    try
                                    {
                                        uri = child.InnerText;
                                    }
                                    catch
                                    {
                                    }
                                    break;

                                case timeoutName:

                                    try
                                    {
                                        timeout = TimeSpan.Parse(child.InnerText);
                                    }
                                    catch
                                    {
                                    }
                                    break;

                                case parameterName:

                                    try
                                    {
                                        Parameter parameter = new Parameter();
                                        parameter.InstanceFromXml(child);

                                        Insert(parameter);
                                    }
                                    catch
                                    {
                                    }
                                    break;

                            }
                        }

                        if (uri != string.Empty)
                        {
                            file.Load(uri);
                        }
                    }
                }
            }
            catch
            {
            }
        }
Пример #7
0
        /// <summary>
        /// Определяет параметры
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void selectParameters_Click(object sender, EventArgs e)
        {
            SelectParametersBOForm frm = new SelectParametersBOForm(app);
            if (frm.ShowDialog(this) == DialogResult.OK)
            {
                foreach (Formula formula in frm.Formuls)
                {
                    Parameter parameter = new Parameter();

                    parameter.Size = frm.DefaultParameterSize;
                    parameter.Position = formula.Position;

                    InsertParameter(parameter);
                }
            }
        }
Пример #8
0
        /// <summary>
        /// Добавить формулу
        /// </summary>
        /// <param name="formula"></param>
        private void InsertParameter(Parameter formula)
        {
            ListViewItem item = new ListViewItem(formula.Size.ToString());
            ListViewItem.ListViewSubItem desc = new ListViewItem.ListViewSubItem(item, GetDescription(formula));

            item.SubItems.Add(desc);

            item.Tag = formula;
            listView1.Items.Add(item);
        }
Пример #9
0
        string GetDescription(Parameter formula)
        {
            foreach (var f in app.Converter.Formuls)
            {
                if (f.Position == formula.Position)
                {
                    return f.Macros.Description;
                }
            }

            return string.Empty;
        }
Пример #10
0
        /// <summary>
        /// Добавить параметр из XML узла
        /// </summary>
        /// <param name="channel">Узем из которого извлечь данные для добавлениея параметра</param>
        protected void InsertChannel(XmlNode channel)
        {
            if (channel != null)
            {
                XmlNodeList childs = channel.ChildNodes;
                if (childs != null)
                {
                    Parameter parameter = new Parameter();
                    foreach (XmlNode node in childs)
                    {

                        switch (node.Name)
                        {
                            case deviceName:

                                try
                                {
                                    parameter.Device = int.Parse(node.InnerText);
                                }
                                catch
                                {
                                    continue;
                                }
                                break;

                            case offsetName:

                                try
                                {
                                    parameter.Offset = int.Parse(node.InnerText);
                                }
                                catch
                                {
                                    continue;
                                }
                                break;

                            case lenghtName:

                                try
                                {
                                    parameter.Size = int.Parse(node.InnerText);
                                }
                                catch
                                {
                                    continue;
                                }
                                break;

                            case descriptionName:

                                parameter.Description = node.InnerText;
                                break;

                            case positionName:

                                try
                                {
                                    parameter.Position = int.Parse(node.InnerText);
                                }
                                catch
                                {
                                    continue;
                                }
                                break;

                            default:

                                break;
                        }
                    }

                    InsertCondition(parameter);
                }
            }
        }
Пример #11
0
        /// <summary>
        /// Добавляем канал
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void insert_channel_Click(object sender, EventArgs e)
        {
            InsertChannelForm ins = new InsertChannelForm();
            ins.Text = "Добавление канала";

            ins.Device = lastDevice;
            ins.Offset = lastOffset + lastSize;

            ins.DataSize = lastSize;

            if (ins.ShowDialog(this) == DialogResult.OK)
            {
                Parameter p = new Parameter();

                p.Device = ins.Device;
                p.Offset = ins.Offset;

                p.Size = ins.DataSize;
                p.Position = app.Stock.GetFreeChannel();

                p.Description = ins.Comment;

                lastDevice = p.Device;
                lastOffset = p.Offset;

                lastSize = p.Size;

                app.Stock.InsertCondition(p);
                InsertCondition(p);
            }
        }
Пример #12
0
        /// <summary>
        /// Добавить параметр в список
        /// </summary>
        /// <param name="parameter">Добавляемый параметр</param>
        private void InsertParameter(Parameter parameter)
        {
            ListViewItem item = new ListViewItem(listViewParameters.Items.Count.ToString());
            ListViewItem.ListViewSubItem desc = new ListViewItem.ListViewSubItem(item, parameter.Description);

            item.SubItems.Add(desc);
            item.Tag = parameter;

            if (!parameter.IsActual)
            {
                item.BackColor = Color.Salmon;
            }

            listViewParameters.Items.Add(item);
        }
Пример #13
0
        /// <summary>
        /// определить аргумент
        /// </summary>
        private void InsertChannel(int index)
        {
            if (radioButton1.Checked)
            {
                SignalsForm signs = new SignalsForm(app);
                if (signs.ShowDialog(this) == DialogResult.OK)
                {
                    Parameter par = signs.SelectedParameter;
                    if (par != null)
                    {
                        if (index == 0)
                        {
                            first = new Argument();

                            first.Index  = par.Position;
                            first.Source = DataSource.Signals;
                        }
                        else
                        {
                            second = new Argument();

                            second.Index  = par.Position;
                            second.Source = DataSource.Signals;
                        }

                        listView1.Items[index].SubItems[0].Text = par.Position.ToString();

                        listView1.Items[index].SubItems[1].Text = "Канал устройства";
                        listView1.Items[index].SubItems[2].Text = par.Description;
                    }
                }
            }
            else
            if (radioButton2.Checked)
            {
                ResultsForm res = new ResultsForm(app);
                if (res.ShowDialog(this) == DialogResult.OK)
                {
                    Formula form = res.SelectedParameter;
                    if (form != null)
                    {
                        if (index == 0)
                        {
                            first = new Argument();

                            first.Index  = form.Position;
                            first.Source = DataSource.Results;

                            listView1.Items[index].SubItems[0].Text = first.Index.ToString();
                        }
                        else
                        {
                            second = new Argument();

                            second.Index  = form.Position;
                            second.Source = DataSource.Results;

                            listView1.Items[index].SubItems[0].Text = second.Index.ToString();
                        }

                        listView1.Items[index].SubItems[1].Text = "Значение конвертера";
                        listView1.Items[index].SubItems[2].Text = form.Macros.Description;
                    }
                }
            }
        }
Пример #14
0
 /// <summary>
 /// Удалить параметр в список
 /// </summary>
 /// <param name="parameter">Удаляемый параметр</param>
 public void Remove(Parameter parameter)
 {
     if (p_locker.TryEnterWriteLock(300))
     {
         try
         {
             parameters.Remove(parameter);
         }
         finally
         {
             p_locker.ExitWriteLock();
         }
     }
 }
Пример #15
0
 /// <summary>
 /// Добавить параметр в список
 /// </summary>
 /// <param name="parameter">Добавляемый параметр</param>
 public void Insert(Parameter parameter)
 {
     if (p_locker.TryEnterWriteLock(300))
     {
         try
         {
             parameters.Add(parameter);
         }
         finally
         {
             p_locker.ExitWriteLock();
         }
     }
 }