Автоматизированное рабочее место оператора радиостанции

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

dexFrame += 1;

}

///

/// Возвращает значение, жив ли поток на отправку.

///

/// bool ThreadToSend_isAlive()

{(_ThreadToSend.IsAlive)true;false;

}void SetIndex(byte _z)

{

_IndexFrame = _z;

}

/////Временный метод

//public void AddPacket(byte[] buffer)

//{

// var _Frame = new CFrame(buffer);

// _ReadFrameQueue.Add(_Frame);

//}

///

/// Включает DTR на время time

///

/// void DTREnable(int time)

{= true;.Sleep(time);= false;

}void DTRDisable(int time)

{= false;.Sleep(time);= true;

}

///

/// Закрываем порт

/// void MyClose()

{(IsOpen)

{.Close();

}

}

///

/// Посылаем фрейм

///

/// void Send(CFrame _Packet)

{(_WriteFrameQueue)

{(_ThreadToSend.IsAlive)

{

_WriteFrameQueue.Add(_Packet);

}

{

_Packet.State = enumState.Error;

}

}

}

///

/// Метод, удаляющий указанный кадр из очереди на отправку

///

/// void RemoveTargetFrameToSend(int _PacketNumber)

{

{(_WriteFrameQueue.Count != 0)

{(_PacketNumber < _WriteFrameQueue.Count)

{.Info(string.Format(PortName + ": Удаляем пакет {1}, его номер в очереди: {0}", _PacketNumber.ToString(),_WriteFrameQueue[_PacketNumber].ToString()));

_WriteFrameQueue.RemoveAt(_PacketNumber);

}

{new Exception(string.Format("Пакета с выбранным номером {0} не существует в очереди.", _PacketNumber.ToString()));

}

}

}(Exception _ex)

{.Error(_ex);

}

}

///

/// Метод, удаляющий все кадры из очереди на отправку

///

/// void ClearWriteFrameQueue()

{

{(_WriteFrameQueue.Count != 0)

{

_WriteFrameQueue.Clear();.Info(PortName + ": Очистили очередь на отправку 1");

}

}(Exception _ex)

{.Error(_ex);

}

}

///

/// Метод, прерывающий процесс отправки текущего кадра (Выставляет флаг, который делает пакет, крутящийся в цикле, мертвым)

///

/// void KillFrameToSend()

{

{

_killFrameToSend = true;.Info(PortName + ":Убили текущий пакет на отправку");

}(Exception _ex)

{.Error(_ex);

}

}

///

/// Метод, удаляющий всю информацию из буффера приема

///

/// void ClearReadFrameQueue()

{

{(_cacheBuffer.Count != 0)

{

_cacheBuffer.Clear();.Info(PortName + ": Очистили буффер приема 2");

}

}(Exception _ex)

{.Error(_ex);

}

}

///

/// Метод, удаляющий все кадры из очереди на отправку и всю информацию из буффера приема

///

/// void ClearAllFrameQueues()

{

{(_WriteFrameQueue.Count != 0)

{

_WriteFrameQueue.Clear();.Info(PortName + ": Очистили очередь на отправку 3" );

}(_cacheBuffer.Count != 0)

{

_cacheBuffer.Clear();.Info(PortName + ": Очистили буффер приема 3");

}

}(Exception _ex)

{.Error(_ex);

}

}

///

/// Метод, удаляющий указанный кадр из очереди принятых кадров

///

///

//public void RemoveTargetReceivedFrame(int _PacketNumber)

//{

// if (_ReadFrameQueue.Count != 0)

// {

// _ReadFrameQueue.RemoveAt(_PacketNumber);

// }

//}

///

/// Возвращает CFrame стоящий на посылке.

///

/// CFrame GetCurrentFrameToSend()

{(_WriteFrameQueue.Count == 0)null;_WriteFrameQueue[0];

}

///

/// Удаляет CFrame стоящий на посылке.

///

/// void RemoveCurrentFrameToSend()

{(_WriteFrameQueue.Count != 0)

{

_WriteFrameQueue.RemoveAt(0);

}

}

///

/// Метод вызыватся, если порт не удалось настроить...

/// Признак того, что надо менять параметры работы порта

///

///

/// void portPinChanged(object sender, SerialPinChangedEventArgs e)

{.Info(PortName + ": portPinChanged:" + e);

}

///

/// Метод который вызывается когда произошла ошибка при получении данных

///

///

/// void portErrorReceived(object sender, SerialErrorReceivedEventArgs e)

{

//Выходим если порт в состоянии закрытия..Info(e.ToString());

}

///

/// Метод для чтения данных с порта

/// void ThreadToCommand(object command)

{_command = (CCommand)command;

{

_command.onCommandReceived();(Global_locks.waitcomplete)

{(_command.Prepare())

{.Info(string.Format("{0}: {1} Попали в execute пришедшей команды", PortName, _command.Name));

_command.Execute();

}

}((_command.Name != "ПРМ") && (_command.Name != "ПРД") && (_command.Name != "Запрос телеметрии")) _command.onCommandCompleted();.Info(string.Format("{0}: Завершение минипотока обработки команды {1}", PortName, _command.Name));

}(Exception _ex)

{

_command.onError();.Error(_ex);

}

}

///

/// Метод для чтения данных с порта

/// void ThreadToRead()

{

//Выходим если порт в состоянии закрытия.(!IsOpen) return;.Info(PortName + ": Поток отвечающий за прием - запущен.");(IsOpen)

{

{bytes = BytesToRead;buffer = new byte[bytes];(buffer, 0, bytes);

0)">_cacheBuffer.AddRange(buffer);(_cacheBuffer.Count > 0)

{(_cacheBuffer.IndexOf(CFrame.VersionFrame) != 1)

{.WriteBytesToLog(PortName + " Ошибка в буфере", _cacheBuffer.ToArray());(_cacheBuffer.IndexOf(CFrame.VersionFrame) < 0)

{

//В буфере по любому должен оставаться идентификатор пакета

//если его нет - то буфер 100% с ошибкой.Info(PortName + ": Очистили буффер приема 4");

_cacheBuffer.Clear();

}

{

_cacheBuffer.RemoveRange(0, _cacheBuffer.IndexOf(CFrame.BeginFrame));

}.WriteBytesToLog(PortName + " Исправленный буфер", _cacheBuffer.ToArray());

}(CFrame.isFrame(_cacheBuffer.ToArray()) && IsOpen)

{[] _frame = CFrame.GetFrame(_cacheBuffer.ToArray());

_cacheBuffer.RemoveRange(0, _frame.Length);.WriteBytesToLog(PortName + ": Выделеный фрейм из буфера:", _frame);isFrame = false;isCommand = false;_Frame = null;_command = null;

{

_Fram