Автоматизированное рабочее место оператора радиостанции
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
e = new CFrame(_frame);= true;(_iamAccept.Contains(_Frame.ToDevice))
{
_command = _Frame.Parse();
_command.m_Port = this;
_command.Action = enumAction.Receive;
_command.State = enumState.Receive;
_ThreadToCommand = new Thread(ThreadToCommand);
_ThreadToCommand.Name = "Command " + _ThreadToCommand.ManagedThreadId;
_ThreadToCommand.Start((_command));.Info(string.Format("{0}: Запущен минипоток обработки команды {1}", PortName, _command.Name));= true;(_command);
}
{.Info(PortName + " Пришедший кадр не для меня!");
}
}(Exception innerException)
{.Error(PortName + " Ошибка формирования кадра", innerException);
}(isFrame && !isCommand)
{(_iamAccept.Contains(_Frame.ToDevice))
{
//Отправляем квитанцию только если пришедший кадр для меняticket = CCommand.GetCommand(enumCommand.Ticket);.TimeOutToSend = 0; //не ждать ответа вообще..Action = enumAction.Send;.Send(this, _Frame.FromDevice, _Frame.ToDevice, _Frame.Index, ticket);
}
}(onGetFrame != null)
{(_frame, isFrame, isCommand);
}.Sleep(1);.Info(string.Format("{0}: Поток обработки команды {1} завершен", PortName, _command.Name));
}
}
}(TimeoutException)
{.Warning(PortName + ": Время ожидания истекло!");
}
{.Warning(PortName + ": Ошибка!");
}.Sleep(ReadTimeout);
}.Info(string.Format("{0}: Поток, отвечающий за прием кадров, завершен!\n", PortName));
}
///
/// Метод, работающий в потоке и отсылающий пакетв по очереди
/// void ThreadToSend()
{
//Выходим если порт в состоянии закрытия.(!IsOpen) return;.Info(PortName + ": Поток отвечающий за отправку - запущен.");(IsOpen)
{
0&&IsOpen)">_killFrameToSend = false;(_WriteFrameQueue.Count > 0 && IsOpen)
{
_killFrameToSend = false;_packet = _WriteFrameQueue[0];
{_timeout = 0;(
!_packet.isDead
&& _packet.State != enumState.Error
=_timeout">&& (int)_packet.TimeOutStep >= _timeout
&& IsOpen)
{(_packet.State)
{enumState.Busy:
//Проверяем, следует ли прервать отправку.(_killFrameToSend == true)
{
_killFrameToSend = false;
_packet.isDead = true;
}.Warning(.Format("{1}: Кадр {0}: Устройство занято обработкой данных. Ждем цикл.", _packet.Index, PortName));.Info(.Format("{2}: Кадр {0}: Ожидания подтверждения {1} msec.", _packet.Index, (int)_packet.TimeOutStep,));
_timeout = 0;;enumState.TicketReceived:
//Проверяем, следует ли прервать отправку.(_killFrameToSend == true)
{
_killFrameToSend = false;
_packet.isDead = true;
}.Info(string.Format("{2}: Кадр {0}: Попали в статус TicketReceived.{1} msec.", _packet.Index, (int)_packet.TimeOutStep, PortName));(_packet.State != enumState.DoneReceived)
_packet.onTicketReceived();
_timeout = (int)_packet.TimeOutStep + 10;(_packet.State != enumState.DoneReceived)
_packet.State = enumState.DoneWaiting;;enumState.DoneWaiting:
//Проверяем, следует ли прервать отправку.(_killFrameToSend == true)
{
_killFrameToSend = false;
_packet.isDead = true;
}.Info(string.Format("{2}: Кадр {0}: Попали в статус DoneWaiting. {1} msec.", _packet.Index, (int)_packet.TimeOutStep, PortName));
//TODO: Разкомментарить, когда найду баг, почему не проставляется статус DoneRecieved иногда при приходе "Готово".
/*if ((int)_packet.TimeOutStep == _timeout)
{
_packet.CountTryToSend += 1;(!_packet.isDead && this.IsOpen)
{(_packet.Packet, 0, _packet.Packet.Length);.WriteBytesToLog(PortName + ": Послан фрейм(retry):", _packet.Packet);.Info(string.Format("{2}: Кадр {0}: Послан ожидаем ответ от устройства.(Попытка {1})", _packet.Index,
_packet.CountTryToSend, PortName));
_timeout = 0;
_packet.onDoneWaiting();
}
}*/;enumState.DoneReceived:
//Проверяем, следует ли прервать отправку.(_killFrameToSend == true)
{
_killFrameToSend = false;
_packet.isDead = true;
}.Info(string.Format("Кадр {0}: Попали в статус DoneReceived.", _packet.Index));
_packet.onCompleteReceived();
_timeout = (int)_packet.TimeOutStep + 10;;enumState.Error:
//Проверяем, следует ли прервать отправку.(_killFrameToSend == true)
{
_killFrameToSend = false;
_packet.isDead = true;
}
_packet.onError();
_timeout = (int)_packet.TimeOutStep + 10;;enumState.Sended:
//Проверяем, следует ли прервать отправку.(_killFrameToSend == true)
{
_killFrameToSend = false;
_packet.isDead = true;
}((int)_packet.TimeOutStep == _timeout)
{
_packet.CountTryToSend += 1;(!_packet.isDead && this.IsOpen)
{(_packet.Packet, 0, _packet.Packet.Length);.WriteBytesToLog(PortName + ": Послан фрейм(retry):", _packet.Packet);.Info(string.Format("{2}: Кадр {0}: Послан ожидаем ответ от устройства.(Попытка {1})", _packet.Index,
_packet.CountTryToSend, PortName));
_timeout = 0;
_packet.onSended();
}
};enumState.Send:
//Проверяем, следует ли прервать отправку.(_killFrameToSend == true)
{
_killFrameToSend = false;
_packet.isDead = true;
}
///-------------(!CFrame.isFrame(_cacheBuffer.ToArray()))
{
_packet.CountTryToSend += 1;(!_packet.isDead && this.IsOpen)
{
_packet.onSend();(_packet.Packet, 0, _packet.Packet.Length);
_packet.State = enumState.Sended;.WriteBytesToLog(PortName + ": Послан фрейм(1):", _packet.Packet);.Info(string.Format("{2}: Кадр {0}: Послан ожидаем ответ от устройства.(Попытка {1})", _packet.Index,
_packet.CountTryToSend, PortName));
_timeout = 0;((int)_packet.TimeOutStep == 0)
{
//Говорит о том, что надо выйти из цикла
_timeout = (int)_packet.TimeOutStep + 10;
}
//_packet.onSend();
//_packet.State = enumState.Sended;
}
}
{.Info(string.Format("{1}: Кадр {0}: не послан так как буфер приема не обработан.", _packet.Index, PortName));
}
///--------------;:
//Проверяем, следует ли прервать отправку.(_killFrameToSend == true)
{
_killFrameToSend = false;
_packet.isDead = true;
};
}
_timeout += 10;.Info(string.Format("{1}: Ожидаем {0}, {2}", _timeout, PortName, _packet.Command.Name));
//Проверяем, следует ли прервать отправку.(_killFrameToSend == true)
{
_killFrameToSend = false;
_packet.isDead = true;
}.Sleep(10);
}
}(TimeoutException e)
{.Error(.Format("{1}: Кадр {0}: Время ожидания на посылку кадра истекло. ", _packet.Index, PortName), e);
_packet.State = enumState.Error;
_packet.onError();
}(Exception _ex)
{
//TODO: 1+1ин раз при онлайн смене устройств обмена, сюда пришло packet = null. Проверить, отдебажить..Error(.Format("{1}: Кадр {0}: Возникла неизвестная ошибка при посылке кадра.", _packet.Index, PortName),
_ex);
_packet.State = enumState.Error;
_packet.onError();
}
/*finally
{(_WriteFrameQueue)
0)">{(_WriteFrameQueue.Count > 0)
{.Info(string.Format("{1}: Кадр {0}: Удаляем кадр из очереди", _packet.Index, PortName));
//Гарантирует что удаляется именно тот пакет, который обрабатывали
_WriteFrameQueue.Remove(_packet);
}
}
}*/
}
//Усыпляем поток - состояние ожидания.Sleep(10);
}.Info(string.Format("{0}: Поток, отвечающий за отправку кадров, завершен!\n", PortName));
}
}
}
П1.2. Тек?/p>