Два модема, два объекта SerialPort в C # - PullRequest
0 голосов
/ 29 января 2009

У меня есть два факс-модема Conexant и приложение C # с двумя объектами serialPort, настроенными для прослушивания входящих данных на оба коммуникационных порта.

Вот как я инициализирую каждый модем:

m_SerialPort = new SerialPort("COM3", 2400);
m_SerialPort.DataReceived += new SerialDataReceivedEventHandler(this.ReceiveChars);

try
{
    m_SerialPort.Open();
    m_SerialPort.DiscardInBuffer();
    m_SerialPort.DiscardOutBuffer();    
}
catch (Exception e)
{
    // die gracefully
}
finally
{
    m_SerialPort.DtrEnable = true;
}

И второй модем инициализируется другим объектом SerialPort, но с "COM4".

Какой бы COM-порт я ни инициализировал первым, он может получать данные, но второй COM-порт не будет принимать данные.

Это проблема с моей инициализацией, классом SerialPort в C # или Windows XP, отказывающимся разрешить одновременную работу двух модемов?

Любые советы или предложения приветствуются.

UPDATE

Вы проверили в «Диспетчере устройств», что оба порта настроены, включены и работают?

Да, они оба с отдельными портами.

Вы пробовали что-то вроде Hyperterm, чтобы попытаться отправить данные в порты?

Попытка открытия обоих портов связи в отдельных гипертерминалах, и не удалось открыть второй порт связи.

Ответы [ 4 ]

1 голос
/ 29 января 2009

Совет: используйте этот инструмент для тестирования вашего приложения, оно создает виртуальные ком-порты.
http://sourceforge.net/projects/com0com/

1 голос
/ 29 января 2009

Похоже, проблема в том, что два модема Conexant не могут работать на одном компьютере одновременно. Я вставил другой модем от другого производителя и смог открыть оба com-порта.

1 голос
/ 29 января 2009

Вы проверили в «Диспетчере устройств», что оба порта настроены, включены и работают?

Вы пробовали что-то вроде SysInternals PortMon для мониторинга портов?

Вы пробовали что-то вроде Hyperterm, чтобы попытаться отправить данные в порты?

0 голосов
/ 29 января 2009

Я собираюсь догадаться (что еще я могу сделать?), Что вы делаете что-то непослушное в своем методе ReceiveChars (возможно, вы обновляете графический интерфейс без использования Invoke), и что это препятствует методу ReceiveChars от повторного вызова.

...