/// <summary>
        /// Устанавливает новые значения переменных заводских установок при изменении значения какой либо одной
        /// </summary>
        public void SetEmbeddedVarValue(string VarName, long value, bool InverseByteOrder)
        {
            ControllerEmbeddedVar WorkingVar = this.GetVarByName(VarName);

            if (WorkingVar == null)
            {
                return;
            }
            WorkingVar.Value = value;
            List <ControllerEmbeddedVar> vars = this.GetAllAssignedEmbeddedVars(VarName);

            int[]  ibytes = this.CreateVarBytesArray(vars, WorkingVar.Size, InverseByteOrder);
            byte[] bytes  = { (byte)ibytes[0], (byte)ibytes[1], (byte)ibytes[2], (byte)ibytes[3] };
            // Установка значений однобайтных переменных
            vars[0].Value = ibytes[0];
            vars[3].Value = ibytes[1];
            vars[4].Value = ibytes[2];
            vars[6].Value = ibytes[3];
            // Установка значений двухбайтных переменных
            if (WorkingVar != vars[1])
            {
                vars[1].Value = AppliedMath.BytesToInt(InverseByteOrder ? Utils.ReflectArray <byte>(Utils.GetSubArray <byte>(bytes, 0, 2)) : Utils.GetSubArray <byte>(bytes, 0, 2));
            }
            if (WorkingVar != vars[5])
            {
                vars[5].Value = AppliedMath.BytesToInt(InverseByteOrder ? Utils.ReflectArray <byte>(Utils.GetSubArray <byte>(bytes, 2)) : Utils.GetSubArray <byte>(bytes, 2));
            }
            // Установка значений четырехбайтной переменной
            if (WorkingVar != vars[2])
            {
                vars[2].Value = (uint)AppliedMath.BytesToInt(InverseByteOrder ? Utils.ReflectArray <byte>(bytes) : bytes);
            }
        }
Пример #2
0
        /// <summary>
        /// Читает размер буффера с контроллера на базе процессора MB90F347
        /// </summary>
        /// <param name="port">Порт, через который осуществляется чтение; должен быть уже открыт</param>
        private int ReadMB90F347BufferSize(Relkon37SerialPort port)
        {
            byte[] addresses = { 340, 344 };
            int    res       = int.MaxValue;

            for (int i = 0; i < 2; i++)
            {
                byte[] response = port.ReadEEPROM(addresses[i], 2);
                if (this.Parameters.InverseByteOrder)
                {
                    Array.Reverse(response);
                }
                int SRX = AppliedMath.BytesToInt(response);
                response = port.ReadEEPROM(addresses[i] + 4, 2);
                if (this.InverseByteOrder)
                {
                    Array.Reverse(response);
                }
                NRX = AppliedMath.BytesToInt(response);
                res = Math.Min(res, NRX - SRX + 1);
            }
            return(res);
        }
Пример #3
0
        /// <summary>
        /// Записть измененного знаячения при завершении редактирования ячейки
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgv_askStructs_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            //Определение правильности введенного значения
            bool m_error = false;
            //Определение изменяемой переменной
            DataRow m_CurrentRow = (DataRow)this.DisplayVarsTable.Rows[this.dgv_askStructs.CurrentRow.Index];

            //Определения правльности входных данных. Формирование массива для записи
            Byte[] m_Vars         = new Byte[4];
            Byte[] m_WriteVars    = new Byte[(int)m_CurrentRow[7]];
            int    m_SignValue    = 0;
            String m_CurrentValue = "";

            if (this.dgv_askStructs[e.ColumnIndex, e.RowIndex].Value.ToString().Trim() != "")
            {
                if (this.codingType == 10)
                {
                    m_CurrentValue = (String)(this.dgv_askStructs[e.ColumnIndex, e.RowIndex].Value);
                }
                else
                {
                    if ((int)m_CurrentRow[7] == 4)
                    {
                        m_CurrentValue = Convert.ToString((UInt32)(AppliedMath.HexToDec((String)this.dgv_askStructs[e.ColumnIndex, e.RowIndex].Value)));
                    }
                    else
                    {
                        m_CurrentValue = Convert.ToString(AppliedMath.HexToDec((String)this.dgv_askStructs[e.ColumnIndex, e.RowIndex].Value));
                    }
                    if (this.dgv_askStructs[e.ColumnIndex, e.RowIndex].Value.ToString().Contains("-"))
                    {
                        m_error = true;
                    }
                }
                try { long i = long.Parse(m_CurrentValue); }
                catch { m_error = true; }
            }
            else
            {
                m_error = true;
            }
            if ((!m_error) && ((Convert.ToInt64(m_CurrentValue) <= (long)m_CurrentRow[8]) && (Convert.ToInt64(m_CurrentValue) >= (long)m_CurrentRow[9])))
            {
                //Преобразование
                if (!((long)m_CurrentRow[9] < 0 || (int)m_CurrentRow[7] == 4))
                {
                    UInt32 m_Value = 0;
                    m_Value = Convert.ToUInt32(m_CurrentValue);
                    for (int i = 0; i < 4; i++)
                    {
                        m_Vars[i] = (Byte)(m_Value % 256);
                        m_Value   = m_Value / 256;
                    }
                    Array.Reverse(m_Vars);
                    m_SignValue = AppliedMath.BytesToInt(m_Vars);
                }
                else
                {
                    m_SignValue = Convert.ToInt32(m_CurrentValue);
                }
                m_Vars = AppliedMath.IntToBytes(m_SignValue);
                Array.Reverse(m_Vars);
                for (int i = 0; i < m_WriteVars.Length; i++)
                {
                    m_WriteVars[i] = m_Vars[i];
                }
                if (!_engine.Parameters.InverseByteOrder)
                {
                    Array.Reverse(m_WriteVars);
                }
            }
            else
            {
                m_error = true;
            }
            if (m_error)
            {
                this.dgv_askStructs[e.ColumnIndex, e.RowIndex].Value = this._EditCellText;
            }
            else
            {
                //Запись переменной в память
                _engine.AddWriteItem((int)m_CurrentRow[6], GetMemoryType(m_CurrentRow[5].ToString()), m_WriteVars, "vars_write_" + m_CurrentRow[1].ToString() + "_" + m_CurrentRow[0].ToString(), null, null);
            }
            this._EditRow = null;
        }
Пример #4
0
 /// <summary>
 /// По массиву data вычисляет значение датчика
 /// </summary>
 private int ComputeValue()
 {
     byte[] b = this.InverseByteOrder ? Utils.ReflectArray <byte>(this.data) : this.data;
     return(this.SigleByte ? b[0] : AppliedMath.BytesToInt(b));
 }
Пример #5
0
 /// <summary>
 /// Событие при оканчании редактирования значения переменной
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void dgVars_CellEndEdit(object sender, DataGridViewCellEventArgs e)
 {
     try
     {
         //Определение правильности введенного значения
         bool m_error = false;
         //Определение изменяемой переменной
         Kontel.Relkon.Classes.ControllerVar m_newVar = _solution.Vars.GetVarByName((String)this.dgVars[0, e.RowIndex].Value);
         DataRow m_CurrentRow = (DataRow)this.Table.Rows[this.dgVars.CurrentRow.Index];
         for (int i = 0; i < this.Table.Rows.Count; i++)
         {
             if ((String)this.Table.Rows[i][0] == this._EditVar)
             {
                 m_CurrentRow = (DataRow)this.Table.Rows[i];
                 break;
             }
         }
         //Определения правльности входных данных. Формирование массива для записи
         Byte[] m_Vars      = new Byte[4];
         Byte[] m_WriteVars = new Byte[m_newVar.Size];
         int    m_SignValue = 0;
         if (m_newVar is ControllerUserVar && ((ControllerUserVar)m_newVar).Array)
         {
             String m_ArrayVar   = (String)this.dgVars[e.ColumnIndex, e.RowIndex].Value;
             String m_CurrentVar = "";
             for (int i = 0; i < m_newVar.Size; i++)
             {
                 if (m_ArrayVar.IndexOf(' ') > 0)
                 {
                     m_CurrentVar = m_ArrayVar.Substring(0, m_ArrayVar.IndexOf(' '));
                     m_ArrayVar   = m_ArrayVar.Substring(m_ArrayVar.IndexOf(' ') + 1);
                 }
                 else
                 {
                     m_CurrentVar = m_ArrayVar;
                     m_ArrayVar   = "";
                 }
                 if (this.codingType == 16)
                 {
                     try { if (!((Convert.ToInt64(Convert.ToByte(AppliedMath.HexToDec(m_CurrentVar))) <= long.Parse(m_CurrentRow[2].ToString())) && ((Convert.ToInt64(Convert.ToByte(AppliedMath.HexToDec(m_CurrentVar)))) >= long.Parse(m_CurrentRow[3].ToString()))))
                           {
                               m_error = true;
                           }
                     }
                     catch { m_error = true; }
                     if ((AppliedMath.IsValidHexNumber(m_CurrentVar)) && (!m_error))
                     {
                         m_WriteVars[i] = Convert.ToByte(AppliedMath.HexToDec(m_CurrentVar));
                     }
                     else
                     {
                         m_error = true; break;
                     }
                 }
                 else
                 {
                     if ((AppliedMath.IsValidDecNumber(m_CurrentVar)) && ((Convert.ToInt64(m_CurrentVar) <= long.Parse(m_CurrentRow[2].ToString())) && (Convert.ToInt64(m_CurrentVar) >= long.Parse(m_CurrentRow[3].ToString()))))
                     {
                         m_WriteVars[i] = Convert.ToByte(m_CurrentVar);
                     }
                     else
                     {
                         m_error = true; break;
                     }
                 }
                 if ((m_ArrayVar.Trim() == "") && (i < m_newVar.Size - 1))
                 {
                     m_error = true;
                     break;
                 }
             }
         }
         else
         {
             String m_CurrentValue = "";
             if (this.codingType == 10)
             {
                 m_CurrentValue = (String)(this.dgVars[e.ColumnIndex, e.RowIndex].Value);
             }
             else
             {
                 if (m_newVar.Size == 4)
                 {
                     m_CurrentValue = Convert.ToString((UInt32)(AppliedMath.HexToDec((String)this.dgVars[e.ColumnIndex, e.RowIndex].Value)));
                 }
                 else
                 {
                     m_CurrentValue = Convert.ToString(AppliedMath.HexToDec((String)this.dgVars[e.ColumnIndex, e.RowIndex].Value));
                 }
             }
             try { long i = long.Parse(m_CurrentValue); }
             catch { m_error = true; }
             if ((!m_error) && ((Convert.ToInt64(m_CurrentValue) <= long.Parse(m_CurrentRow[2].ToString())) && (Convert.ToInt64(m_CurrentValue) >= long.Parse(m_CurrentRow[3].ToString()))))
             {
                 //Преобразование
                 if (this.codingType == 10)
                 {
                     if (m_newVar.HasSign)
                     {
                         m_SignValue = Convert.ToInt32(this.dgVars[e.ColumnIndex, e.RowIndex].Value);
                     }
                     else
                     {
                         if (m_newVar.Size == 4)
                         {
                             UInt32 m_Value = 0;
                             m_Value = Convert.ToUInt32(this.dgVars[e.ColumnIndex, e.RowIndex].Value);
                             for (int i = 0; i < 4; i++)
                             {
                                 m_Vars[i] = (Byte)(m_Value % 256);
                                 m_Value   = m_Value / 256;
                             }
                             Array.Reverse(m_Vars);
                             m_SignValue = AppliedMath.BytesToInt(m_Vars);
                         }
                         else
                         {
                             m_SignValue = Convert.ToInt32(this.dgVars[e.ColumnIndex, e.RowIndex].Value);
                         }
                     }
                 }
                 else
                 {
                     m_SignValue = Convert.ToInt32(AppliedMath.HexToDec((String)this.dgVars[e.ColumnIndex, e.RowIndex].Value));
                 }
                 m_Vars = AppliedMath.IntToBytes(m_SignValue);
                 //закоментированный вариант корректно опрашивает только с обратным порядокм байт
                 //if (_engine.Parameters.InverseByteOrder) Array.Reverse(m_Vars);
                 //for (int i = 0; i < m_WriteVars.Length; i++) m_WriteVars[i] = m_Vars[i];
                 for (int i = 0; i < m_WriteVars.Length; i++)
                 {
                     m_WriteVars[i] = m_Vars[i + (4 - m_WriteVars.Length)];
                 }
                 if (_engine.Parameters.InverseByteOrder)
                 {
                     Array.Reverse(m_WriteVars);
                 }
             }
             else
             {
                 m_error = true;
             }
         }
         if (m_error)
         {
             this.dgVars[e.ColumnIndex, e.RowIndex].Value = this._EditCellText;
         }
         else
         {
             //Запись переменной в память
             _engine.AddWriteItem(m_newVar.Address, m_newVar.Memory, m_WriteVars, "vars_write_" + m_newVar.Name, null, null);
         }
         this._EditVar = "";
     }
     catch (Exception ex)
     {
         this.dgVars[e.ColumnIndex, e.RowIndex].Value = this._EditCellText;
         this._EditVar = "";
         Utils.ErrorMessage("dgVars_CellEndEdit: " + ex.Message);
         return;
     }
 }