public async void DripTube(string args) { JObject targetTube = (JObject)JsonConvert.DeserializeObject(args); int type = int.Parse(targetTube["type"].ToString()); int blockNum, row, col = 1; if (type == (int)BoardType.Site) { blockNum = int.Parse(targetTube["site"].ToString()); col = int.Parse(targetTube["col"].ToString()); } else { blockNum = int.Parse(targetTube["grid"].ToString()); } row = int.Parse(targetTube["row"].ToString()); SetDrippingTube(blockNum, row, col); VsmdController vsmdController = VsmdController.GetVsmdController(); PumpController pumpController = PumpController.GetPumpController(); BoardSetting curBoardSetting = BoardSetting.GetInstance(); await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZDispense); await pumpController.Drip(); Thread.Sleep(GeneralSettings.GetInstance().DripInterval); await pumpController.Drip(); await vsmdController.MoveTo(VsmdAxis.Z, curBoardSetting.CurrentBoard.ZTravel); MoveCallBack(blockNum, row, col); }
/// <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); }