Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: переходника USB-COM BM 8050, программа не передает данные, С# 2010  (Прочитано 12101 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
sabbatazh
Помогающий

ua
Offline Offline

« : 03-06-2013 12:57 » 

Здравствуйте уважаемые Знатоки!
Прошу Вашей помощи!
Есть переходника USB-COM BM 8050, на С# делаю программку для передачи и приема данных с СОМ устройства, в ХР или 7 определяю как СОМ 9...
в программе открываю устройство СОМ9, не вопрос - открывается и ошибки об открытии нет!!!! а вот передача данных происходит но данные на переходника USB-COM не приходят, использовал несколько дивайсов, думал что поломка, оказалось что где-то у меня в программе поломка!
Настройку порта в программе произвожу согласно настроек порта в системе...
Запись в порт делаю через:
Код: (C#)
         try
                    {
                        //convert the message to byte array
                        byte[] newMsg = HexToByte(msg);
                        //send the message to the port
                        comPort.Write(newMsg, 0, newMsg.Length);                        
                    }
                    catch (FormatException ex)
                    {
                        //display error message
                        DisplayData(MessageType.Error, ex.Message);
                    }                  
//....
 private byte[] HexToByte(string msg)
        {
            //remove any spaces from the string
            msg = msg.Replace(" ", "");
            //create a byte array the length of the
            //divided by 2 (Hex is 2 characters in length)
            byte[] comBuffer = new byte[msg.Length / 2];
            //loop through the length of the provided string
            for (int i = 0; i < msg.Length; i += 2)
                //convert each set of 2 characters to a byte
                //and add to the array
                comBuffer[i / 2] = (byte)Convert.ToByte(msg.Substring(i, 2), 16);
            //return the array
            return comBuffer;
        }
В результате на выходе тишина (отлавливаю осциллографом)!!!
Кто работал с таким или подобным устройством, подскажите, как с ним бороться!
Спасибо !!!
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 03-06-2013 17:01 » 

Ну и где настройки?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #2 : 03-06-2013 19:47 » 

Код: (C#)
SerialPort comPort = new SerialPort("COM9",
                                        19200,
                                        Parity.None,
                                        8,
                                        StopBits.One);
comPort.Open();
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 03-06-2013 20:44 » 

Мухи отдельно, котлеты отдельно.

1) Запиши в порт просто байты без всяких функций.
2) Покажи результат работы функции hextobyte: какая строка передана внутрь, что получено в результате.
3) Покажи список доступных портов
Код:
foreach (string s in SerialPort.GetPortNames())
{
    Console.WriteLine("   {0}", s);
}
4) Покажи свойства порта после открытия: состояния всех pin-ов, свойства IsOpen, Handshake, NewLine, WriteBufferSize, WriteTimeout.
Цитата: MSDN
By default, SerialPort uses ASCIIEncoding to encode the characters. ASCIIEncoding encodes all characters greater then 127 as (char)63 or '?'.
Где гарантии, что в порт пишутся нужные байты, и где гарантии, что они вообще доходят до порта, а не накапливаются в буфере?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #4 : 04-06-2013 12:51 » 

Цитата
Где гарантии, что в порт пишутся нужные байты, и где гарантии, что они вообще доходят до порта, а не накапливаются в буфере?
Это скорее всего так и происходит - запись в буфер!(  По какой причине это может происходить?!

Цитата
1) Запиши в порт просто байты без всяких функций.
не доходит!
Цитата
2) Покажи результат работы функции hextobyte: какая строка передана внутрь, что получено в результате.
ввожу 1111 получаю на выходе 17 17...
Цитата
3) Покажи список доступных портов
использую данную конструкцию... COM1; COM9... больше СОМ портов нет!
Цитата
4) Покажи свойства порта после открытия: состояния всех pin-ов, свойства IsOpen, Handshake, NewLine, WriteBufferSize, WriteTimeout.
а вот данных свойств не читаю! ((
« Последнее редактирование: 04-06-2013 14:45 от sabbatazh » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 04-06-2013 21:36 » 

Цитата: sabbatazh
По какой причине это может происходить?!
Странный вопрос. Порт отродясь работал либо в автоматическом режиме пересылки байтов - с буфером, либо программист вручную pin-ы выставлял. Ты вообще с портом-то работал ранее? Если нет, то это тема не .NET, а общего раздела: "Как работать с COM-портом"
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #6 : 05-06-2013 08:59 » 

Цитата: sabbatazh
По какой причине это может происходить?!
Странный вопрос. Порт отродясь работал либо в автоматическом режиме пересылки байтов - с буфером, либо программист вручную pin-ы выставлял. Ты вообще с портом-то работал ранее? Если нет, то это тема не .NET, а общего раздела: "Как работать с COM-портом"
работал, но только на Delphi! но вот не могу понять... по какой причине я на выходе не вижу данных!((( Delphi программа работает, а на С# не работает...
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 05-06-2013 10:52 » 

sabbatazh, так ты размер буфера посмотрел и сопоставил с количеством записываемых байтов? Ты буферу flush делаешь, чтобы запись пошла? Причём тут Delphi?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
sabbatazh
Помогающий

ua
Offline Offline

« Ответ #8 : 06-06-2013 10:36 » new

sabbatazh, так ты размер буфера посмотрел и сопоставил с количеством записываемых байтов? Ты буферу flush делаешь, чтобы запись пошла? Причём тут Delphi?
Спасибо, Вопрос решил!
нашел ошибку в настройках доступа к порту ... и все равно не заработало... и потом нашел инфу ->
работал под Net 2.0 установил Net 3.5 (по советам буржуйских форумов) и все заработало!

Но все равно не понятно, по какой причине, это произошло, ведь MSDN утверждает, что СОМ порт поддерживается на Net 2.0...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines