Мультиплексирование или прослушивание используемого последовательного порта

Я получаю доступ к своему COM-порту, используя аппаратную DLL производителя в C# .Net 4. Подключенный к моему COM-порту, у меня есть Управление шаговым двигателем Nanotec SMCI 33.

Производитель предоставляет флаг «SetSendStatusWhenCompleted» для отправки байта состояния, когда движение аппаратного шагового двигателя завершено. К сожалению, нет функции прослушивания этого байта состояния. Я хочу добавить этот функционал.

Цель: отправить команду движения с помощью аппаратного драйвера. Ожидание: прослушайте ответ «байт состояния» перед отправкой следующей команды перемещения.

using System.IO; using System.IO.Ports;
(... access same com Port via driver of hardware manufacturer. ...)
sp = new SerialPort();
    sp.PortName = "COM4";
    sp.BaudRate = 115200;
    sp.DataBits = 8;
    sp.StopBits = System.IO.Ports.StopBits.One;
    sp.Parity = System.IO.Ports.Parity.None;
    sp.Handshake = System.IO.Ports.Handshake.None;
sp.Open();

Очевидно, я получаю UnauthorizedAccessException, потому что мой код запустил драйвер и пытается получить доступ к тому же COM-порту. A аналогичный SO-вопрос относится к COM-доступу из другой программы: Решением является анализатор портов (Portmon). Но мой вопрос требует простого кода.

Я могу остановить аппаратный драйвер. В настоящее время проблема заключается в дорогостоящей повторной инициализации. Есть ли другой способ прослушивания COM-порта, кроме отключения предыдущего аппаратного драйвера?


person Stefan Bischof    schedule 23.11.2012    source источник
comment
Не уверен, но вам, вероятно, понадобится какой-нибудь COM-перенаправитель или мультиплексор. Из коробки не возможно.   -  person leppie    schedule 23.11.2012
comment
Спасибо за ключевое слово мультиплексирования. hub4com из проекта com0com обеспечивает мультиплексирование. Я посмотрю на его источник.   -  person Stefan Bischof    schedule 23.11.2012
comment
Это приложение, о котором я думал :) Надеюсь, оно поможет.   -  person leppie    schedule 23.11.2012
comment
Просто скинь драйвер и пиши все команды сам. Как и любой шаговый контроллер, он использует простой протокол ASCII.   -  person Hans Passant    schedule 23.11.2012
comment
@HansPassant Поскольку у меня уже есть протокол ASCII, я могу писать все команды. Хороший программист - ленивый программист ;)   -  person Stefan Bischof    schedule 23.11.2012


Ответы (1)


Вам следует использовать инструмент мониторинга, чтобы лучше понять, что на самом деле делает ваше другое приложение и что происходит провод. Кроме того, вы можете настроить два виртуальных COM-порта для проверки чтения и записи на одном компьютере (даже в рамках одного приложения). , чтобы лучше контролировать, когда какие данные будут отправлены.

person Oliver    schedule 23.11.2012
comment
У меня есть Руководство по программированию Nanotec, в котором описан протокол ASCII для последовательной связи. - person Stefan Bischof; 23.11.2012