예제 #1
0
        static void Main(string[] args)
        {
            {
                //1(0) GetNames
                do
                {
                    TextColor.GreenColor("Получение информации об активных COM портах...", true);
                    if (!COM.PortsNamesUpdate())
                    {
                        TextColor.ErrorColor("Ошибка получения имен портов.", true);
                        Console.WriteLine("Нажмите любую клавишу для повторной попытки...\n");
                        Console.ReadKey();
                    }
                    if ((PortCount = COM.GetPortsCount()) == 0)
                    {
                        TextColor.ErrorColor("Активные порты не найдены. Проверьте наличие активных портов в диспетчере устройств.", true);
                        Console.WriteLine("Нажмите любую клавишу для повторной проверки...\n");
                        Console.ReadKey();
                    }
                } while (PortCount == 0);
                for (int i = 0; i < PortCount; i++)
                {
                    Console.WriteLine(i + ".  =>  " + COM.GetPortsName(i));
                }
                TextColor.GrayColor("Введите номер нужного вам порта (от 0 до " + (PortCount - 1) + "): ", false);
                do
                {
                    try
                    {
                        PortNum = Convert.ToInt32(Console.ReadLine());
                        if (PortNum < 0 || PortNum > PortCount - 1)
                        {
                            TextColor.ErrorColor("Неверное число, повторите ввод (число от 0 до " + (PortCount - 1) + "): ", false);
                            continue;
                        }
                    }
                    catch (ArgumentException)
                    {
                        TextColor.ErrorColor("Неверный формат, введите число (от 0 до " + (PortCount - 1) + "): ", false);
                    }
                    catch (FormatException)
                    {
                        TextColor.ErrorColor("Неверный формат, введите число (от 0 до " + (PortCount - 1) + "): ", false);
                    }
                } while (PortNum < 0 || PortNum > PortCount - 1);
                COM.SetPortName(PortNum);
                GetStateConfigurate(0);


                //2(1) SetBaudRate
                TextColor.GreenColor("\nУстановите скорость приема/передачи COM порта в Бодах.", true);
                for (int i = 1; i <= 9; i++)
                {
                    Console.WriteLine(i + ".  =>  " + COM.GetBaud(i));
                }
                TextColor.GrayColor("Введите номер нужной вам скорости или введите вручную (10 и больше): ", false);
                do
                {
                    try
                    {
                        PortBaudRate = Convert.ToInt32(Console.ReadLine());
                        if (PortBaudRate < 1)
                        {
                            TextColor.ErrorColor("Неверное число, повторите ввод (число от 1 до 9) или введите вручную (10 и больше): ", false);
                        }
                    }
                    catch (ArgumentException)
                    {
                        TextColor.ErrorColor("Неверный формат, введите число: ", false);
                    }
                    catch (FormatException)
                    {
                        TextColor.ErrorColor("Неверный формат, введите число: ", false);
                    }
                } while (PortBaudRate < 1);
                if (PortBaudRate < 10)
                {
                    COM.SetPortBaud(COM.GetBaud(PortBaudRate));
                }
                else
                {
                    COM.SetPortBaud(PortBaudRate);
                }
                GetStateConfigurate(1);

                //3 Advanced settings
                TextColor.DarkCyanColor("Включить режим расширенной настройки (если пропустите, настройки будут заданы по умолчанию).\n[Y/y: Yes| AnyKey: No]: ", false);
                int AdvanSetting = Console.Read();
                Console.ReadLine();
                if (AdvanSetting == 89 || AdvanSetting == 121)
                {
                    GetStateConfigurate(1);
                    //3.1(2) SetParity
                    TextColor.GreenColor("\nВыберите контроль четности битов (если не знаете что это, выберите 1).", true);
                    for (int i = 1; i <= 5; i++)
                    {
                        Console.WriteLine(i + ".  =>  " + COM.GetParityName(i));
                    }
                    TextColor.GrayColor("Введите номер нужного вам контроля четности битов (от 1 до 5): ", false);
                    do
                    {
                        try
                        {
                            PortParity = Convert.ToInt32(Console.ReadLine());
                            if (PortParity < 1 || PortParity > 5)
                            {
                                TextColor.ErrorColor("Неверное число, повторите ввод (число от 1 до 5): ", false);
                            }
                        }
                        catch (ArgumentException)
                        {
                            TextColor.ErrorColor("Неверный формат, введите число (от 1 до 5): ", false);
                        }
                        catch (FormatException)
                        {
                            TextColor.ErrorColor("Неверный формат, введите число (от 1 до 5): ", false);
                        }
                    } while (PortParity < 1 || PortParity > 5);
                    COM.SetPortParity(PortParity);
                    GetStateConfigurate(2);

                    //3.2(3) SetDataBits
                    TextColor.GreenColor("\nУстановите чило битов данных в байте (если не знаете что это, введите 8).", true);
                    TextColor.GrayColor("Введите кол-во битов, рекомендуется 8 (от 5 до 8): ", false);
                    do
                    {
                        try
                        {
                            PortDataBits = Convert.ToInt32(Console.ReadLine());
                            if (PortDataBits < 5 || PortDataBits > 8)
                            {
                                TextColor.ErrorColor("Неверное число, повторите ввод (число от 5 до 8): ", false);
                            }
                        }
                        catch (ArgumentException)
                        {
                            TextColor.ErrorColor("Неверный формат, введите число (от 5 до 8): ", false);
                        }
                        catch (FormatException)
                        {
                            TextColor.ErrorColor("Неверный формат, введите число (от 5 до 8): ", false);
                        }
                    } while (PortDataBits < 5 || PortDataBits > 8);
                    COM.SetPortDataBits(PortDataBits);
                    GetStateConfigurate(3);

                    //3.3(4) SetStopBits
                    TextColor.GreenColor("\nУстановите число стопБитов (если не знаете что это, выберите 1).", true);
                    for (int i = 1; i <= 4; i++)
                    {
                        Console.WriteLine((i - 1) + ".  =>  " + COM.GetStopBitsName(i));
                    }
                    TextColor.GrayColor("Введите номер нужного вам кол-ва стопБитов (от 1 до 3): ", false);
                    do
                    {
                        try
                        {
                            PortStopBits = Convert.ToInt32(Console.ReadLine()) + 1;
                            if (PortStopBits < 2 || PortStopBits > 4)
                            {
                                TextColor.ErrorColor("Неверное число, повторите ввод (число от 1 до 3): ", false);
                            }
                        }
                        catch (ArgumentException)
                        {
                            TextColor.ErrorColor("Неверный формат, введите число (от 1 до 3): ", false);
                        }
                        catch (FormatException)
                        {
                            TextColor.ErrorColor("Неверный формат, введите число (от 1 до 3): ", false);
                        }
                    } while (PortStopBits < 2 || PortStopBits > 4);
                    COM.SetPortStopBits(PortStopBits);
                    GetStateConfigurate(4);

                    //3.4(5) SetHandshake
                    TextColor.GreenColor("\nУстановите протокол управления (если не знаете что это, выберите 1).", true);
                    for (int i = 1; i <= 4; i++)
                    {
                        Console.WriteLine((i) + ".  =>  " + COM.GetHandshakeName(i));
                    }
                    TextColor.GrayColor("Введите номер нужного вам протокола (от 1 до 4): ", false);
                    do
                    {
                        try
                        {
                            PortHandshake = Convert.ToInt32(Console.ReadLine());
                            if (PortHandshake < 1 || PortHandshake > 4)
                            {
                                TextColor.ErrorColor("Неверное число, повторите ввод (число от 1 до 4): ", false);
                            }
                        }
                        catch (ArgumentException)
                        {
                            TextColor.ErrorColor("Неверный формат, введите число (от 1 до 4): ", false);
                        }
                        catch (FormatException)
                        {
                            TextColor.ErrorColor("Неверный формат, введите число (от 1 до 4): ", false);
                        }
                    } while (PortHandshake < 1 || PortHandshake > 4);
                    COM.SetPortHandshake(PortHandshake);
                    GetStateConfigurate(5);
                }

                //4(6) Set ReadType/WriteType function
                TextColor.GreenColor("\nВыберите тип отправляемых данных [Any key - String; I/i - Int]: ", false);
                int WriteTypeBuf = Console.Read();
                Console.ReadLine();
                if (WriteTypeBuf == 'I' || WriteTypeBuf == 'i')
                {
                    TextColor.DarkCyanColor("Тип отправляемых данных: ", false);
                    TextColor.WhiteColor("Число (от 0 до 127)", true);
                    WriteType = true;
                }
                else
                {
                    TextColor.DarkCyanColor("Тип отправляемых данных: ", false);
                    TextColor.WhiteColor("Строка", true);
                    WriteType = false;
                }
                TextColor.GreenColor("\nВыберите тип принимаемых данных [Any key - String; I/i - Int]: ", false);
                int ReadTypeBuf = Console.Read();
                Console.ReadLine();
                if (ReadTypeBuf == 'I' || ReadTypeBuf == 'i')
                {
                    TextColor.DarkCyanColor("Тип принимаемых данных: ", false);
                    TextColor.WhiteColor("Число (от 0 до 127)", true);
                    ReadType = true;
                }
                else
                {
                    TextColor.DarkCyanColor("Тип принимаемых данных: ", false);
                    TextColor.WhiteColor("Строка", true);
                    ReadType = false;
                }

                //5 Connect
                Console.WriteLine("Открытие соединения...");
                while (!COM.OpenCOMport())
                {
                    TextColor.ErrorColor("Ошибка соединения, повторная попытка", true);
                    Thread.Sleep(1000);
                }
                GetStateConfigurate(6);
            }
            ReadThread = new Thread(ReadCOMport);
            ReadThread.Start();
            while (true)
            {
                if (!WriteType)
                {
                    COM.WriteCOMport(Console.ReadLine(), true);
                }
                else
                {
                    try
                    {
                        COM.WriteCOMport(Convert.ToInt32(Console.ReadLine()), false);
                    }
                    catch (FormatException)
                    {
                        TextColor.ErrorColor("Неверный формат, ожидалось число", true);
                    }
                    catch (OverflowException)
                    {
                        TextColor.ErrorColor("Неверный формат, ожидалось число", true);
                    }
                }
            }
        }
예제 #2
0
        public static bool GetStateConfigurate(int Stage)
        {
            Console.Clear();
            if (Stage == 0)
            {
                while (!COM.InitCOMport())
                {
                    TextColor.ErrorColor("Ошибка инициализации, повторная попытка", true);
                    Thread.Sleep(1000);
                }
                TextColor.GreenColor("Порт инициализирован", true);
            }
            if (!COM.SetConfCOMport())
            {
                TextColor.ErrorColor("Ошибка установки настроек", true);
                Console.ReadKey();
            }
            else
            {
                TextColor.GreenColor("Настройки установлены", true);
            }
            for (int i = 0; i <= Stage; i++)
            {
                switch (i)
                {
                case 0:
                {
                    TextColor.DarkCyanColor("Выбран порт ", false);
                    TextColor.WhiteColor(COM.GetCOMportName(), true);
                    break;
                }

                case 1:
                {
                    TextColor.DarkCyanColor("Выбрана скорость ", false);
                    TextColor.WhiteColor("" + COM.GetCOMportBaud(), false);
                    TextColor.DarkCyanColor(" Бод", true);
                    break;
                }

                case 2:
                {
                    TextColor.DarkCyanColor("Выбран контроль четности битов ", false);
                    TextColor.WhiteColor(COM.GetParityName(COM.GetCOMportParity()), true);
                    break;
                }

                case 3:
                {
                    TextColor.DarkCyanColor("Кол-во битов данных в байте ", false);
                    TextColor.WhiteColor("" + COM.GetCOMportDataBits(), true);
                    break;
                }

                case 4:
                {
                    TextColor.DarkCyanColor("Кол-во стопБитов ", false);
                    TextColor.WhiteColor(COM.GetStopBitsName(COM.GetCOMportStopBits()), true);
                    break;
                }

                case 5:
                {
                    TextColor.DarkCyanColor("Выбран протокол управления ", false);
                    TextColor.WhiteColor(COM.GetHandshakeName(COM.GetCOMportHandshake()), true);
                    break;
                }

                case 6:
                {
                    if (WriteType)
                    {
                        TextColor.DarkCyanColor("Тип отправляемых данных: ", false);
                        TextColor.WhiteColor("Число (от 0 до 127)", true);
                    }
                    else
                    {
                        TextColor.DarkCyanColor("Тип отправляемых данных: ", false);
                        TextColor.WhiteColor("Строка", true);
                    }
                    if (ReadType)
                    {
                        TextColor.DarkCyanColor("Тип принимаемых данных: ", false);
                        TextColor.WhiteColor("Число (от 0 до 127)", true);
                    }
                    else
                    {
                        TextColor.DarkCyanColor("Тип принимаемых данных: ", false);
                        TextColor.WhiteColor("Строка", true);
                    }
                    break;
                }
                }
            }
            if (COM.IsOpenCOMport())
            {
                TextColor.GreenColor("Соединение открыто", true);
                return(true);
            }
            else
            {
                TextColor.ErrorColor("Соединение закрыто", true);
                return(false);
            }
        }