Непонятки с Com-портом и C#

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Чт дек 23, 2010 19:40:47

Сообщение skader »

Мяу.

Начал писать на С# исразу-же столкнулся с непоняткой: данные на ком перердаются ПОСЛЕ закрытия порта.

Код: Выделить всё

using System;
using System.IO.Ports;
using System.Threading;

public class PortChat
{    
    public static void Main()
    {

        //StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
        
        System.IO.Ports.SerialPort port = new System.IO.Ports.SerialPort(); //далее создаем экземпляр встроенного класса SerialPort
                
        port.PortName = "COM3"; //далее необходимо настроить порт для работы с мобильным телефоном
        port.WriteTimeout = 500;
        port.ReadTimeout = 500;    //Время ожидания записи и чтения с порта
               
        port.BaudRate = 9600;  // скорость обмена 

    //Другие необходимые настройки :
        port.BaudRate = 9600;
        port.Parity = Parity.None;
        port.DataBits = 8;
        port.StopBits = StopBits.One;
        port.Handshake = Handshake.RequestToSend;
        port.DtrEnable = true;
        port.RtsEnable = true;
        port.NewLine = System.Environment.NewLine;  
        port.Open(); //открываем порт

        port.WriteLine("B1111");
        System.Threading.Thread.Sleep(500);
        Console.WriteLine("Отправили данные");
        Console.ReadLine();
     
        port.Close(); // #############Вот после этого данные и передаются############
        Console.WriteLine("CLose");
        Console.ReadLine();
    }
}
кто их "держит"? ))
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 95
Зарегистрирован: Пт ноя 18, 2011 11:49:38
Откуда: Минск, РБ

Сообщение Филипович_Алексей »

skader писал(а):Мяу.

Начал писать на С# исразу-же столкнулся с непоняткой: данные на ком перердаются ПОСЛЕ закрытия порта.

кто их "держит"? ))
C# программа походу. Давно изучал данный вопрос.
Пытался заставить двухъядерный комп 2,0ГГц. комп обрабатывать приходящие от компа байты: элементарно выводить их в TextBox.
Даже на скорости 1200 бод комп не успевал!!! Принимался каждый 3-4 байт, а остальное терялось. При переписании того же кода на С++ всё работало как часы. В результате вышел из положения тем, что стал принимать байты пачками по 10 и только после принятия всех 10 байт выводить в окно.
Выводы:
1. С# глючит при работе с COMом. Хотя я и продолжаю его использовать плавно лавируя между обнаруженными глюками, но всё же подумываю о переходе на С++.
2. Если очень надо передавать быстро - используйте С++.
Лень двигатель прогресса...
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Филипович_Алексей писал(а):2. Если очень надо передавать быстро - используйте С++.
Ну не обязательно сразу C++.
Я с помощью PureBasic принимал и передавал инфу в режиме реального времени через COM порт на скорости 115200 бод и сбоев не было.
Встал на лапы
Аватара пользователя
Сообщения: 127
Зарегистрирован: Пт июн 20, 2008 09:38:05
Откуда: Харьков

Сообщение Shapa »

Здравствуйте, уважаемый skader
кто их "держит"? ))
держит их копипаст...

Код: Выделить всё

port.Handshake = Handshake.RequestToSend;
        port.RtsEnable = true;
        port.WriteLine("B1111");
т.к. Вы активировали RTS, то вместе с ним активировался и CTS-вход, для начала выставите

Код: Выделить всё

port.Handshake = Handshake.none;
        port.RtsEnable = false;
и ваши эксперименты будут иметь успех

Успехов!

ЗЫ: Пользуйтесь MSDN'ом, там ответы практически на все вопросы
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «Интеграция с ПК»