/// <summary> /// /// </summary> private async void DoPipetting() { //Logger.Instance.Write("DoPipetting"); log.Info("Do Pipetting"); VsmdController vsmdController = VsmdController.GetVsmdController(); PumpController pumpController = PumpController.GetPumpController(); BoardSetting curBoardSetting = BoardSetting.GetInstance(); await BeforeMove(m_selectedTubes.Count); int touchDelaySeconds = (int)(1000 * curBoardSetting.CurrentBoard.DelaySeconds); int delayMicroSecondsBetweenSamples = (int)(Preference.GetInstace().DelaySeconds * 1000); int blockNum, row, col = 1; //await vsmdController.SetS3Mode(VsmdAxis.Z, 1); for (int i = m_pipettingIndex + 1; i < m_sortedTubesArr.Length; i++) { if (m_dripStatus != PipettingStatus.Moving) { break; } JObject obj = (JObject)m_sortedTubesArr[i]; GetPositionInfo(obj, out blockNum, out row, out col); SetPipettingWell(blockNum, row, col); int xPos = curBoardSetting.Convert2PhysicalPos(VsmdAxis.X, blockNum, col); int offset = curBoardSetting.CurrentBoard.TouchEdgeOffset; await vsmdController.MoveTo(VsmdAxis.X, xPos); await vsmdController.MoveTo(VsmdAxis.Y, curBoardSetting.Convert2PhysicalPos(VsmdAxis.Y, blockNum, row)); // TODO await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZDispense); // start pipetting await pumpController.SwitchOnOff(i); // wait several seconds, this time should be changed according to the volume dispensed Thread.Sleep(delayMicroSecondsBetweenSamples); await vsmdController.MoveTo(VsmdAxis.X, xPos + offset); Thread.Sleep(touchDelaySeconds); await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZTravel); // change the UI to start Thread.Sleep(100); MoveCallBack(blockNum, row, col); m_pipettingIndex = i; } bool bok = await AfterMove(); log.InfoFormat("finished pipetting, result is: {0}", bok); //Logger.Instance.Write("error happened in afterMove"); }
/// <summary> /// /// </summary> private async void DripThread() { VsmdController vsmdController = VsmdController.GetVsmdController(); PumpController pumpController = PumpController.GetPumpController(); BoardSetting curBoardSetting = BoardSetting.GetInstance(); JArray jsArr = m_selectedTubes; await BeforeMove(); int dripInterval = GeneralSettings.GetInstance().DripInterval; int blockNum, row, col = 1; //await vsmdController.SetS3Mode(VsmdAxis.Z, 1); for (int i = m_dripIndex + 1; i < jsArr.Count; i++) { if (m_dripStatus != DripStatus.Moving) { break; } JObject obj = (JObject)jsArr[i]; GetPositionInfo(obj, out blockNum, out row, out col); SetDrippingTube(blockNum, row, col); //await vsmdController.MoveTo(VsmdAxis.X, curBoardSetting.Convert2PhysicalPos(VsmdAxis.X, blockNum, col)); //await vsmdController.MoveTo(VsmdAxis.Y, curBoardSetting.Convert2PhysicalPos(VsmdAxis.Y, blockNum, row)); var moveXTask = vsmdController.MoveTo(VsmdAxis.X, curBoardSetting.Convert2PhysicalPos(VsmdAxis.X, blockNum, col)); var moveYTask = vsmdController.MoveTo(VsmdAxis.Y, curBoardSetting.Convert2PhysicalPos(VsmdAxis.Y, blockNum, row)); await Task.WhenAll(moveXTask, moveYTask); // TODO await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZDispense); // start drip //await vsmdController.ClickPump(); await pumpController.Drip(); // wait 5 seconds, this time should be changed according to the volume dripped Thread.Sleep(dripInterval); await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZTravel); // change the screen to start await pumpController.Drip(); //await Task.Delay(1000); MoveCallBack(blockNum, row, col); m_dripIndex = i; } AfterMove(); }
public async void MoveToHere(string args) { JObject targetTube = (JObject)JsonConvert.DeserializeObject(args); int blockNum, row, col; GetPositionInfo(targetTube, out blockNum, out row, out col); VsmdController vsmdController = VsmdController.GetVsmdController(); BoardSetting curBoardSetting = BoardSetting.GetInstance(); //await vsmdController.MoveTo(VsmdAxis.X, curBoardSetting.Convert2PhysicalPos(VsmdAxis.X, blockNum, col)); //await vsmdController.MoveTo(VsmdAxis.Y, curBoardSetting.Convert2PhysicalPos(VsmdAxis.Y, blockNum, row)); var moveXTask = vsmdController.MoveTo(VsmdAxis.X, curBoardSetting.Convert2PhysicalPos(VsmdAxis.X, blockNum, col)); var moveYTask = vsmdController.MoveTo(VsmdAxis.Y, curBoardSetting.Convert2PhysicalPos(VsmdAxis.Y, blockNum, row)); await Task.WhenAll(moveXTask, moveYTask); }