Използва се мултиплексиране или слушане на сериен порт

Имам достъп до моя 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 порт. подобен 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