IamKarlson
@IamKarlson
ASP(?).NET, SQL-разработчик

Надо ли постоянно держать открытым com-порт?

У нас с коллегой разгорелся яркий спор. Мы пилим юзероустойчивую систему, где есть пачка девайсов работающих на com-портах. Юзероустойчивую я имею ввиду, что они с легкостью могут вместо одного порта указать другой, ну и нам нужно эти железки найти. Соответственно я сделал DeviceSeeker, который принимает какой-то тест метод (что-то в духе послать пачку байт на выходе дождаться другую), с помощью которого если пройтись по всем портам/скоростям можно найти нужное устройство. Для реализации опрашивателя порта я взял GenericComDevice, типа такого:
public class GenericComDevice{

    public string Port {get;set;}

    public string BaudRate {get;set;}

    private MySerialPort comPort = new MySerialPort();

    public GenericComDevice(string port, string baudRate){
        this.Port = port;
        this.BaudRate=baudRate;
    }
    
    public string SendCommand(string command){
        try{
            if(!comPort.IsOpen){
                comPort.Open();
            }

            string answer = comPort.WriteDataWithAnswer(command);
            comPort.Close();
            return answer;
        }
        catch{
            return "";
        }
    }
}


И собственно вопрос в чем. Вот мой коллега утверждает, что обычная практика держать COM-порт всегда открытым, и поэтому твой искатель нужно запихнуть в само устройство и назвать AutoConnect. А я же утверждаю, что это излишне, и что достаточно найдя порт и скорость передать устройству, и оно уже будет работать конкретно с один портом и скоростью. Загвоздка в том, что у моего коллеги нашлось на аргумент больше. Если мы захотим сделать переинициализацию устройства во время работы приложения, то мы есть риск что DeviceFinder вместо устройства вернет NotFound, т.к. порт занят другим объектом. Беглый гуглинг по нашим и не нашим интернетам ничего толкового насчет правильной работы с com-портами не дал. Я понимаю что это безусловно прошлый век, но все же хотелось понять каким образом лучше организовать работу подсистемы устройств нормальным образом. И, конечно, вопрос, который меня очень волнует, неужто такой большой оверхед на открытие порта что его все время надо держать открытым? На мой взгляд это абсолютно не логично, ведь столько проблем это порождает потенциальных.
  • Вопрос задан
  • 521 просмотр
Решения вопроса 1
Applez
@Applez
Разраб
Занимать ресурс без необходимости - плохой тон.
Открытие порта по времени и ресурсам сравнимо с открытием маленького файла, если вы делаете это 1000 раз в секунду, то оверхед, если раз в минуту, то я думаю ничего серьезного.
Решайте сами.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы