2014-02-04 2 views
0

Я создал приложение, которое отправляет/принимает сообщения с помощью COM-порта. Для этой цели я использую rxtx lib. Когда приложение запускается, я открываю COM-порт как:Является COM-портом, открытым в эксклюзивном режиме

String comportidentifier = "/dev/ttyS0"; 

      CommPortIdentifier portIdentifier = null; 
      portIdentifier = CommPortIdentifier.getPortIdentifier(comportidentifier); 

      if (portIdentifier.isCurrentlyOwned()) { 
       JOptionPane.showMessageDialog(null, "port in use"); 
      } else { 

       SerialPort serialPort = (SerialPort) portIdentifier.open("ReadComPort", 200); 
} 

И закрываю его, когда программа заканчивает работу.

Неожиданно я обнаружил, что мой состав (тот, который я открыл) передает какую-то странную команду, которую мой код не отправляет. Я использую несколько библиотек в своем коде, и я не передаю им переменную com port. Единственное описание состоит в том, что что-то в системе alsow открыло порт и отправляет команду. Но возможно ли это, если я уже открыл COM-порт? Я полагаю, что, когда я открыл порт, никто не может этого сделать, пока я его не закрою. Как описать эту ситуацию?

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

ответ

0

Rxtx может быть немного ошибкой, особенно если вы используете запасные файлы, а не одну из исправленных ошибок, таких как nrserial. Я не думаю, что isCurrentlyOwned действительно работает на каждой платформе, и блокировка порта несовместима. Также есть проблемы с закрытием порта. Тем не менее, я никогда не видел, чтобы он генерировал случайные данные в порту.

Возможно, вам захочется взглянуть на одну из новых вилок, они содержат много исправлений. Кроме того, архив списка рассылки rxtx может оказаться полезным для поиска других экземпляров, похожих на проблему, которую вы видите.

Смежные вопросы