// Типа главная задача, которая запускается в отдельном потоке, выполнение которой (задачи) можно прервать // - Вопрос - что будет, если мы прервем задачу и затем запустим ее заного?? Состояние куда то сохраняется? private void analyzerWorkCycle() { resetAnalyzes(); AnalyzerOperations.MoveAllToHome(); AnalyzerOperations.NeedleWash(); Logger.Debug($"Запуск подготовки перед сканированием пробирок."); Analyzer.Needle.HomeLifterAndRotator(); Analyzer.Conveyor.PrepareBeforeScanning(); Logger.Debug($"Подготовка перед сканированием пробирок завершена."); processAnalyzesCycle(); if (interruptRequest) { state = States.Interrupted; interruptRequest = false; Logger.Debug($"Прерывание работы выполнено."); } else { Logger.Debug($"Все пробирки обработаны!"); // Точно? Ты уверен? } }
private void processAnalisysStage(AnalysisInfo analysis) { Logger.Debug($"Анализ [{analysis.BarCode}] - запуск выполнения {analysis.CurrentStage}-й стадии."); Analyzer.Needle.HomeLifterAndRotator(); AnalyzerOperations.NeedleWash(); // Подводим нужную ячейку картриджа под иглу Analyzer.Rotor.Home(); Analyzer.Rotor.PlaceCellUnderNeedle( analysis.Stages[analysis.CurrentStage].CartridgePosition, analysis.Stages[analysis.CurrentStage].Cell, RotorUnit.CellPosition.CellLeft); // Устанавливаем иглу над нужной ячейкой картриджа Analyzer.Needle.TurnToCartridge(analysis.Stages[analysis.CurrentStage].Cell); // Прокалываем ячейку картриджа Analyzer.Needle.GoDownAndPerforateCartridge(analysis.Stages[analysis.CurrentStage].Cell); // Поднимаемся на безопасную высоту над картриджем Analyzer.Needle.GoToSafeLevel(); // Подводим центр ячейки картриджа под иглу Analyzer.Rotor.PlaceCellUnderNeedle( analysis.Stages[analysis.CurrentStage].CartridgePosition, analysis.Stages[analysis.CurrentStage].Cell, RotorUnit.CellPosition.CellCenter); // Прокалываем ячейку картриджа Analyzer.Needle.GoDownAndPerforateCartridge(analysis.Stages[analysis.CurrentStage].Cell); // Забираем реагент из ячейки картриджа Analyzer.Pomp.Pull(0); // Поднимаемся на безопасную высоту над картриджем Analyzer.Needle.GoToSafeLevel(); // Устанавливаем иглу над белой ячейкой картриджа Analyzer.Needle.TurnToCartridge(CartridgeCell.MixCell); // Подводим белую кювету картриджа под иглу Analyzer.Rotor.Home(); Analyzer.Rotor.PlaceCellUnderNeedle( analysis.Stages[analysis.CurrentStage].CartridgePosition, CartridgeCell.MixCell); // Опускаем иглу в белую кювету Analyzer.Needle.GoDownAndPerforateCartridge(CartridgeCell.MixCell, false); // Сливаем реагент в белую кювету Analyzer.Pomp.Push(0); // Поднимаем иглу до дома Analyzer.Needle.HomeLifter(); Logger.Debug($"Анализ [{analysis.BarCode}] - завершено выполнение {analysis.CurrentStage}-й стадии."); }
void makeNaterialInjection() { // слив.1 Требуется поместить ячейку ротора (согласно стадии) с загруженным картриджем в место, где будет произведен слив материала с иглы. // слив.2 Требуется переместить иглу в позицию над ячейкой ротора (согласно стадии) и опустить до необходимого уровня. // слив.3 Требуется слить в ячейку (согласно стадии) заданное количество материала (согласно стадии). int volume = 0; moveMaterialToCartridge(volume); // слив.4 Требуется переместить иглу в позицию для промывки и выполнить промывку. AnalyzerOperations.NeedleWash(); }
// TODO: Эта задача не реализована до конца!!! private void processAnalisysFinishStage(AnalysisInfo analysis) { Logger.Debug($"Анализ [{analysis.BarCode}] - запуск выполнения завершающей стадии."); AnalyzerOperations.NeedleWash(); Analyzer.Rotor.Home(); Analyzer.Rotor.PlaceCellUnderNeedle( analysis.Stages[analysis.Stages.Count - 1].CartridgePosition, CartridgeCell.MixCell); Analyzer.Needle.HomeLifter(); Analyzer.Needle.TurnToCartridge(CartridgeCell.MixCell); Analyzer.Needle.GoDownAndPerforateCartridge(CartridgeCell.MixCell); Analyzer.Pomp.Pull(0); Analyzer.Needle.GoToSafeLevel(); Analyzer.Rotor.PlaceCellUnderNeedle(analysis.Stages[analysis.Stages.Count - 1].CartridgePosition, CartridgeCell.ResultCell); // Устанавливаем иглу над белой ячейкой картриджа Analyzer.Needle.TurnToCartridge(CartridgeCell.ResultCell); Analyzer.Needle.GoDownAndPerforateCartridge(CartridgeCell.ResultCell); // TODO: Добавить реализацию в NeedleUnit Analyzer.Pomp.Push(0); Analyzer.Needle.HomeLifter(); Analyzer.Rotor.PlaceCellUnderWashBuffer(analysis.Stages[analysis.Stages.Count - 1].CartridgePosition); //AnalyzerGateway.Rotor.PlaceCellAtDischarge(analysis.Stages[analysis.Stages.Count - 1].CartridgePosition); AnalyzerOperations.DischargeCartridge(analysis.Stages[analysis.Stages.Count - 1].CartridgePosition); // Далее нужно перелить в прозрачную кювету и отправить на анализ. // TODO: Эта задача не реализована до конца!!! Logger.Debug($"Анализ [{analysis.BarCode}] - выполнения завершающей стадии завершено."); }
private void processAnalisysInitialStage(AnalysisInfo analysis) { Logger.Debug($"Анализ [{analysis.BarCode}] - запущено выполнение подготовительной стадии."); Logger.Debug($"Подготовка к забору материала из пробирки."); // Смещаем пробирку, чтобы она оказалась под иглой Analyzer.Conveyor.Shift(false, ConveyorUnit.ShiftType.HalfTube); // Поднимаем иглу вверх до дома Analyzer.Needle.HomeLifter(); Logger.Debug($"Ожидание загрузки картриджа..."); AnalyzerOperations.ChargeCartridge(cartirdgePosition: 0, chargePosition: 5); Logger.Debug($"Загрузка картриджа завершена."); Logger.Debug($"Ожидание касания жидкости в пробирке..."); // Устанавливаем иглу над пробиркой и опускаем ее до контакта с материалом в пробирке Analyzer.Needle.TurnToTubeAndWaitTouch(); Logger.Debug($"Забор материала из пробирки."); // Набираем материал из пробирки Analyzer.Pomp.Pull(0); // Подводим белую кювету картриджа под иглу Analyzer.Rotor.Home(); Analyzer.Rotor.PlaceCellUnderNeedle( analysis.Stages[0].CartridgePosition, CartridgeCell.MixCell); // Поднимаем иглу вверх до дома Analyzer.Needle.HomeLifter(); // Устанавливаем иглу над белой ячейкой картриджа Analyzer.Needle.TurnToCartridge(CartridgeCell.MixCell); // Опускаем иглу в кювету Analyzer.Needle.GoDownAndPerforateCartridge(CartridgeCell.MixCell); Logger.Debug($"Слив забранного материала в белую кювету."); // Сливаем материал в белую кювету Analyzer.Pomp.Push(0); // Промываем иглу AnalyzerOperations.NeedleWash(); Logger.Debug($"Перенос реагента в белую кювету."); // Выполняем перенос реагента из нужной ячейки картриджа в белую кювету processAnalisysStage(analysis); // Устанавливаем иглу в домашнюю позицию Analyzer.Needle.HomeLifterAndRotator(); // Смещаем пробирку обратно Analyzer.Conveyor.Shift(reverse: true, ConveyorUnit.ShiftType.HalfTube); Logger.Debug($"Анализ [{analysis.BarCode}] - завершено выполнение подготовительной стадии."); }