Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2015, 12:22   #1
MaxMIG
Новичок
Джуниор
 
Регистрация: 15.07.2015
Сообщений: 1
Печаль получаю каляки маляки с Com porta от контроллера в свою программу

Всем доброго времени суток. Извиняюсь если подобная тема уже создавалась, честно, не нашел. Очень нужна помощь знающих спецов.
В общем пишу программу на С# для общения микроконтроллера с ПК через com port. Общение происходит в формате запрос с ПК ответ с МК. Интересно, что два ответа приходит хорошо, а остальные каляки маляки.
ниже код нормальным ответом:
Код:
System.IO.Ports.SerialPort port;
private void button1_Click(object sender, EventArgs e)
        {
            string command = "##101\r\n";

            /////// Настройки портра, открие
            port = new System.IO.Ports.SerialPort(((string)comName.SelectedItem), 38400, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.Two);
            port.RtsEnable = false;
            port.DtrEnable = false;
            port.ReadTimeout = 1000;
            port.WriteTimeout = 1000;
            //port.Encoding = Encoding.GetEncoding(ASCIIEncoding);
            //port.Encoding = ASCIIEncoding.ASCII;
           
            port.Open();
            port.DiscardInBuffer();//на всякий случай чищу буффер
            if (port.IsOpen == true)//если открыт порт послать команду
            {
                try
                {
                    port.WriteLine(command);//команда

                }
                catch (TimeoutException)
                {
                }

                Thread.Sleep(500);//задержка

                int size = (int)port.BytesToRead;//колво принятых байт
                byte[] answer = new byte[size];//массив дляответа


                //ответ
                if (size > 0)
                {
                    //  Читаем буфер для анализа ответа на команду управления
                    port.Read(answer, 0, port.BytesToRead);

                }
                 ///декодирую в аски символы
                Encoding win1251 = Encoding.GetEncoding(1251);
                string text = win1251.GetString(answer);
///остальное уже для формирования визуально внятной строки
                string ID="";
                for (int i = 1; i < text.Length-2; i++) ID += text[i];

                LbId.Text = ID;
                LbCon.Text = "Connected";
                port.DiscardInBuffer();
                bt_con.Enabled = false;
                bt_discon.Enabled = true;
                bt_SetCurTime.Enabled = true;
            }
            else
                MessageBox.Show("Close");
            
        }
если же менять строку команды. приходит такая каляка (вложенная картинка kalayka). интересно, что проверял все команды на терминале Terminal1_9_b, все ответы вменяемые, так что грешить на работу контроллера не приходится. Что еще, ответ в мою программу приходит без двух первых символов, но это думаю связано с временем задержки.
Неделю бодаюсь с этой ерундой, надеюсь на Вашу помощь! заранее спасибо!
Изображения
Тип файла: jpg kalayka.JPG (14.2 Кб, 47 просмотров)

Последний раз редактировалось Stilet; 15.07.2015 в 13:02.
MaxMIG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пароль в свою программу qpuTuJlb Общие вопросы Delphi 1 04.05.2012 19:18
через API получаю полный путь и название процесса, а получаю только название процесса Den7656 Win Api 5 12.09.2011 09:03
График потока с COM porta Slavast C++ Builder 0 01.03.2011 12:24
Каляки-маляки в DBGrid chekanoff БД в Delphi 14 04.03.2008 06:15
Защищаем свою программу паролем ben95 Помощь студентам 11 02.01.2008 13:34