Страница 1 из 1

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

Добавлено: Чт дек 01, 2011 13:05:07
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();
    }
}
кто их "держит"? ))

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

Добавлено: Пт дек 09, 2011 15:38:32
Филипович_Алексей
skader писал(а):Мяу.

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

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

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

Добавлено: Пт дек 09, 2011 16:03:00
Мурик
Филипович_Алексей писал(а):2. Если очень надо передавать быстро - используйте С++.
Ну не обязательно сразу C++.
Я с помощью PureBasic принимал и передавал инфу в режиме реального времени через COM порт на скорости 115200 бод и сбоев не было.

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

Добавлено: Сб дек 10, 2011 01:27:25
Shapa
Здравствуйте, уважаемый skader
кто их "держит"? ))
держит их копипаст...

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

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

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

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

Успехов!

ЗЫ: Пользуйтесь MSDN'ом, там ответы практически на все вопросы