Автоматизированное рабочее место оператора радиостанции
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
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