Exemplo n.º 1
0
        public static void Main()
        {
            var ports = SerialPort.GetPortNames();

            for (int i = 0; i < ports.Length; i++)
            {
                Console.WriteLine("{0}:{1}", i, ports[i]);
            }

            var strnum = Console.ReadKey().KeyChar.ToString();
            int num = -1;
            Console.WriteLine("\r\nOpening...");
            if (int.TryParse(strnum, out num))
            {
                var sport = new SerialPort(ports[num], 9600, Parity.None, 8, StopBits.One);
                sport.Encoding = Encoding.UTF8;
                sport.NewLine = "\n";
                sport.RtsEnable = true;
                sport.DtrEnable = true;
                sport.DiscardNull = false;
                sport.ReadTimeout = 10000;

                int counter = 0;
                while (true)
                {
                    try
                    {
                        if (sport.IsOpen)
                            sport.Close();

                        sport.Open();
                        break;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(counter);
                        System.Threading.Thread.Sleep(1000);
                        if (++counter > 10)
                            throw;
                    }
                }
                Console.WriteLine("opened successfully");

                var server = new PacketServer(sport.BaseStream);
                var dispatcher = new PacketDispatcher();
                var cens = dispatcher.GetTrainCensor(new DeviceID() { ParentPart = 1, ModulePart = 1 });
                server.AddAction(dispatcher);
                cens.PacketReceived += new PacketReceivedDelegate((dev, args) => Console.WriteLine(dev.ToString()));
                server.LoopStart();

                while (true)
                {
                    System.Threading.Thread.Sleep(100);
                }

                //bool sta = true, stab = false;
                //var watch = new System.Diagnostics.Stopwatch();
                //while (sport.IsOpen)
                //{
                //    //char[] buf = new char[64];
                //    //sport.Read(buf, 0, 64);

                //    //var output = new string(buf, 16, 48);
                //    //Console.WriteLine(output);
                //    string context = "";// sport.ReadLine();
                //    byte[] buffer = new byte[256];
                //    sport.Read(buffer, 0, 8);

                //    int startIndex = 0;
                //    int tmp = 0;

                //    while (!int.TryParse(context[startIndex].ToString(), out tmp))
                //        startIndex++;

                //    var val = float.Parse(context.Substring(startIndex, context.Length - startIndex).Trim().Split(',')[0]);
                //    if (!stab && val <= 2.0)
                //    {
                //        Console.WriteLine("{0} detecting", DateTime.Now.ToString());

                //        stab = true;
                //        if (sta) // first
                //        {
                //            watch.Restart();
                //            sta = false;
                //        }
                //        else
                //        {
                //            watch.Stop();
                //            if (watch.Elapsed.TotalSeconds < 5.0)
                //            {
                //                Console.WriteLine("{0}sec. v={1}m/s", watch.Elapsed.TotalSeconds, 0.05 / watch.Elapsed.TotalSeconds);
                //                sta = true;
                //            }
                //            else
                //            {
                //                // modify meisuring position
                //                watch.Restart();
                //                sta = false ;
                //            }
                //        }
                //    }
                //    else if (stab && val > 2.0)
                //    {
                //        stab = false;
                //        Console.WriteLine("{0} detected", DateTime.Now.ToString());

                //    }

                //}
            }
        }