Серийный порт писать и читать на окнах не работает - PullRequest
7 голосов
/ 20 июня 2011


Сначала я попытался использовать javax.comm для подключения к последовательному порту (COM4).Он даже не открыл последовательный порт.

Затем я попытался использовать библиотеки rxtx (rxtx-2.2pre2) для подключения.Он соединяет и записывает данные, но не читает данные с последовательного порта.

Существует ли зависимость JDK / платформы для использования библиотек javax.comm или rxtx?

Я являюсьиспользуя :
Windows XP SP3,
JDK 1.6.0_22,
rxtx-2.2pre2,
Адаптер USB-Serial,
Portmon (от Microsoft) - для мониторинга активности на последовательном портуports
Hyperterminal - для проверки работоспособности COM-порта.
http://goo.gl/mNLNE - пример кода, используемого для проверки чтения и записи

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

Любая помощьоценил!

Спасибо, J

Ответы [ 3 ]

1 голос
/ 28 мая 2012

Я попробовал этот код и был успешным. Вам необходимо иметь при себе три файла:

comm.jar
javax.comm.properties
win32com.dll

и вам нужно поместить эти файлы в определенные каталоги:

comm.jar
in /java/jre6/lib/ext ,  /java/jdk_1.6.0.20/jre6/lib/ext , java/jdk_1.6.0.20/lib

win32com.dll
in /java/jre6/bin, /java/jdk_1.6.0.20/bin,  /windwos/System32

javax.comm.properties
in /java/jdk_1.6.0.20/lib, java/jre/lib , /java/jdk_1.6.0.20/jre/lib
1 голос
/ 29 мая 2012

Я бы порекомендовал попробовать purejavacomm: http://www.sparetimelabs.com/purejavacomm/index.html

Это реализация javax.comm, написанная на чистом java + JNA, которая полностью решила для меня проблему переносимости между Windows и Linux. Он также должен работать на OSX или FreeBSD (еще не пробовал) и должен легко переноситься на другие ОС, которые поддерживает JNA, такие как Solaris.

Еще одним преимуществом является то, что вам не нужно устанавливать DLL, как это делается с rxtx, и что у нее, похоже, нет определенной ошибки загрузки процессора на 100%, которую rxtx иногда имеет в Windows.

1 голос
/ 22 мая 2012

После некоторого копания я смог решить это сам, явно установив режим управления потоком.Даже если вам не требуется управление потоком, явно указывается FLOWCONTROL_NONE.

Такой же вызов не требовался в Linux.

Если вы устанавливаете управление потоком на аппаратное обеспечение,Я думаю, что также необходимо явно установить RTS для получения уведомлений в этом режиме.(Не проверено).

...