/// <summary> /// Изменение значения аналогого датчика /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ViewIOSensorsTabbedDocument_ValueChanged(object sender, EventArgs e) { Kontel.Relkon.Components.Documents.DebuggerTabbedDocuments.ViewIOSensorsTabbedDocument.AnalogSensorControl Sender = (Kontel.Relkon.Components.Documents.DebuggerTabbedDocuments.ViewIOSensorsTabbedDocument.AnalogSensorControl)sender; if (_engine.EngineStatus == DebuggerEngineStatus.Started) { Kontel.Relkon.Classes.ControllerVar m_var = _solution.Vars.GetVarByName(Sender.SensorName); _engine.AddWriteItem(m_var.Address, m_var.Memory, Sender.GetData(), "Analog_W_" + m_var.Name, null, null); } }
/// <summary> /// Запись измененных данных /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void bWrite_Click(object sender, EventArgs e) { if (this._cycleReading) { try { //Удаление запроса на циклическое чтение памяти _engine.RemoveReadItem(_readAddress, _readMemory, "memory_cycle"); } catch (Exception ex) { Utils.ErrorMessage(ex.Message); return; } } int m_Address = this.tbStartAddress.Text.Contains("x") ? Convert.ToInt32(this.tbStartAddress.Text.Substring(2), 16) : Convert.ToInt32(this.tbStartAddress.Text, 10); SortedList <int, byte> ValueseToWrite = this.heMemory.GetValues(); int m_StartAddress = 0; List <Byte> m_alist = new List <Byte>(); ushort m_Size = 0; for (int i = this.heMemory.GetStartAddress(); i < this.heMemory.GetStartAddress() + this.heMemory.GetArraySize(); i++) { if (ValueseToWrite.ContainsKey(i)) { m_alist.Add(ValueseToWrite[i]); m_Size = Convert.ToUInt16(m_Size + 1); if ((i == 0) || (!ValueseToWrite.ContainsKey(i - 1))) { m_StartAddress = i; } if ((i + 1 == this.heMemory.GetArraySize()) || (!ValueseToWrite.ContainsKey(i + 1))) { _engine.AddWriteItem(m_StartAddress, _readMemory, m_alist.ToArray(), m_Size, null, null); m_alist.Clear(); m_Size = 0; } } else { } } this.heMemory.SaveChanges(); if (this._cycleReading) { //Запуск циклического чтения памяти _engine.AddReadItem(_readAddress, _readMemory, _readSize, "memory_cycle", StatusCallBack, CallBack); } }
/// <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; }
/// <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; } }