private async Task CallHomeAsync(SampleChanger sc)
 {
     using (var ct = new CancellationTokenSource(TimeSpan.FromMinutes(2)))
     {
         await sc.HomeAsync(ct.Token);
     }
 }
Exemple #2
0
        private async Task MoveToPosAsync(SampleChanger sc, int x = 30000)
        {
            //SampleChanger.ComSelect(sc.ComPort);

            if (sc.CurrentPosition.X == 30000)
            {
                x = 60000;
            }
            try
            {
                using (var ct = new CancellationTokenSource(TimeSpan.FromMinutes(1)))
                {
                    Console.WriteLine($"{sc.PairedDetector} is going to position");
                    var p = new Position()
                    {
                        X = x,
                        Y = 37300
                    };
                    await sc?.MoveToPositionAsync(p, moveAlongAxisFirst : Axes.X, ct.Token);

                    Console.WriteLine($"{sc.PairedDetector} at position");

                    await Task.Delay(TimeSpan.FromSeconds(5));
                }
            }
            catch (TaskCanceledException)
            {
                // await XemoCycle(sc);
            }
        }
Exemple #3
0
        private async Task XemoCycle(SampleChanger sc)
        {
            //SampleChanger.ComSelect(sc.ComPort);

            // sc.PositionReached += async (s) => await PositionReachedHandler(sc);
            await HomeAsync(sc);
            await MoveToPosAsync(sc);
        }
Exemple #4
0
        private async Task HomeAsync(SampleChanger sc)
        {
            try
            {
                //SampleChanger.ComSelect(sc.ComPort);

                Console.WriteLine($"Xemo {sc.PairedDetector} is going to home");
                using (var ct = new CancellationTokenSource(TimeSpan.FromSeconds(45)))
                {
                    await sc?.HomeAsync(ct.Token);

                    Console.WriteLine($"{sc.PairedDetector} at home");
                }
            }
            catch (TaskCanceledException)
            {
                Console.WriteLine("Home timeout exceeds");
            }
        }
        private async Task CompleteXemoCycle(SampleChanger sc, int?diskPosition)
        {
            if (!diskPosition.HasValue || sc == null)
            {
                return;
            }

            if (sc.IsSampleCaptured)
            {
                using (var ct = new CancellationTokenSource(TimeSpan.FromMinutes(2)))
                {
                    await sc.PutSampleToTheDiskAsync((short)diskPosition.Value, ct.Token);
                }
            }
            using (var ct = new CancellationTokenSource(TimeSpan.FromMinutes(2)))
            {
                await sc.HomeAsync(ct.Token);
            }
        }
Exemple #6
0
        public async Task SampleChangerParallelManagmentTest()
        {
            var ct1 = new CancellationTokenSource(TimeSpan.FromMinutes(1)).Token;
            //SampleChanger[] s = null;
            var s1 = new SampleChanger(107376);
            var s2 = new SampleChanger(114005);

            try
            {
                //s = new SampleChanger[] { new SampleChanger(107374), new SampleChanger(107375) };

                s1.ErrorOccurred += (i, j) => { Console.WriteLine($"{i}, {j}"); };
                s2.ErrorOccurred += (i, j) => { Console.WriteLine($"{i}, {j}"); };


                s1.PositionReached += async(s11) => await PositionReachedHandler(s11).ConfigureAwait(false);

                s2.PositionReached += async(s22) => await PositionReachedHandler(s22).ConfigureAwait(false);


                await Task.WhenAll(XemoCycle(s1), XemoCycle(s2));

                Console.WriteLine("Press enter for exit...");
                Console.ReadLine();
            }
            catch (TaskCanceledException)
            {
                Console.WriteLine("The task was cancelled");
                s1.Stop();
                s2.Stop();
            }
            finally
            {
                s1.Stop();
                s1.Disconnect();
                s2.Stop();
                s2.Disconnect();
            }
        }
Exemple #7
0
 private async Task PositionReachedHandler(SampleChanger sc)
 {
     Console.WriteLine($"{sc.PairedDetector} has reached the position.Move next!");
     await MoveToPosAsync(sc);
 }
Exemple #8
0
 private void Stop(SampleChanger sc)
 {
     sc?.Stop();
     Console.WriteLine($"{sc.PairedDetector} has stopped");
 }
Exemple #9
0
        static async Task Main(string[] args)
        {
            using var channel = GrpcChannel.ForAddress("https://localhost:5001");
            var client = new GRPCXemo.GRPCXemoClient(channel);
            int devId  = 0;

            try
            {
                Report.Notify(new Message(Codes.INFO_XM_GRPC_CLNT_INIT));
                // The port number(5001) must match the port of the gRPC server.
                devId = int.Parse(args[0]);

                if (devId == 0)
                {
                    throw new ArgumentException("Wrong device serial number!");
                }

                using (var sc = new SampleChanger(devId))
                {
                    var ctinit = new CancellationTokenSource(TimeSpan.FromSeconds(90));

                    await sc.HomeAsync(ctinit.Token);

                    var ct = new CancellationTokenSource();
                    Report.Notify(new Message(Codes.INFO_XM_GRPC_CLNT_IN_HOME));

                    var stopMeas = false;

                    while (!stopMeas)
                    {
                        Report.Notify(new Message(Codes.INFO_XM_GRPC_CLNT_IN_RUN_CYCL));

                        var ts = await client.DeviceIsReadyAsync(new DeviceIsReadyRequest { DevId = devId, IsReady = true });

                        await client.SampleInCellAsync(new SampleInCellRequest { DevId = devId, IsInCell = false });

                        await sc.TakeSampleFromTheCellAsync((short)ts.CellNum, ct.Token);

                        var gotodeth = await client.SampleHasTakenAsync(new SampleHasTakenRequest { DevId = devId, IsTaken = true });

                        await sc.PutSampleAboveDetectorWithHeightAsync(HH[gotodeth.H], ct.Token);

                        var takeSample1 = await client.SampleAboveDetectorAsync(new SampleAboveDetectorRequest { DevId = devId, IsAbove = true });

                        var isMeasDone = false;

                        Report.Notify(new Message(Codes.INFO_XM_GRPC_CLNT_WAIT_MEAS));
                        do
                        {
                            var measStatus = await client.IsMeasurementsDoneAsync(new IsMeasurementsDoneRequest { DevId = devId });

                            isMeasDone = measStatus.IsDone;
                            await Task.Delay(TimeSpan.FromSeconds(2));
                        }while (!isMeasDone);

                        Report.Notify(new Message(Codes.INFO_XM_GRPC_CLNT_MEAS_DONE));

                        var takeSample2 = await client.SampleAboveDetectorAsync(new SampleAboveDetectorRequest { DevId = devId, IsAbove = false });

                        await sc.PutSampleToTheDiskAsync((short)ts.CellNum, ct.Token);

                        var tsNext = await client.SampleInCellAsync(new SampleInCellRequest { DevId = devId, IsInCell = true });

                        var isLastMeasReply = await client.IsLastMeasurementAsync(new IsLastMeasurementRequest { DevId = devId });

                        stopMeas = isLastMeasReply.IsLast;
                    }

                    await sc.HomeAsync(ct.Token);

                    // NOTE: In order to not close main thread after await!
                    Console.WriteLine("Push any key to exit...");
                    Console.ReadKey();
                } // using (var sc = new SampleChanger(devId))
            }
            catch (TaskCanceledException)
            {
                Report.Notify(new Message(Codes.ERR_XM_GRPC_CLNT_DEV_NOT_ANS)
                {
                    DetailedText = $"Device '{devId}' do not answer. XemoClient will be rerun."
                });
                Shell.StartProcess("XemoClient.exe", devId.ToString());
            }
            catch (Exception ex)
            {
                await client.DeviceErrorAsync(new ErrorOccurredRequest { DevId = devId });

                Report.Notify(new Message(Codes.ERR_XM_GRPC_CLNT_UNREG)
                {
                    DetailedText = ex.Message
                });
            }
        }