GlukKazan
@GlukKazan

Проблема использования RXTX с виртуальным COM-портом MOXA?

Пытаюсь соединиться с АТС Alcatel S12 через Serial-порт из Java приложения. Для проброса Serial-порта через Internet используется ПО компании MOXA (NPort Management Suite 3.5), создающее виртуальный COM-порт на клиентской стороне. Для работы с Serial-портом из Java SE использую RXTX.


Проблема в следующем:


1. MOXA использует для передачи данных два TCP соединения: управляющее (966 порт) и поток данных (950 порт)


2. RXTX использует следующий код для открытия COM-порта (можно ли открыть порт как-то по другому, не знаю):

void connect ( String portName ) throws Exception
    {
        CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
        if ( portIdentifier.isCurrentlyOwned() )
        {
            System.out.println("Error: Port is currently in use");
        }
        else
        {
            CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
            
            if ( commPort instanceof SerialPort )
            {
                SerialPort serialPort = (SerialPort) commPort;
                serialPort.setSerialPortParams(57600, SerialPort.DATABITS_8, 
                          SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
                
                InputStream in = serialPort.getInputStream();
                OutputStream out = serialPort.getOutputStream();
                
                (new Thread(new SerialReader(in))).start();
                (new Thread(new SerialWriter(out))).start();

            }
            else
            {
                System.out.println("Error: Only serial ports are handled by this example.");
            }
        }     
    }



3. При выполнении getPortIdentifier, RXTX зачем-то открывает Serial-порт и затем закрывает его. Вызов open пытается открыть порт повторно.


4. ПО MOXA закрывает поток данных (950 порт), при закрытии Serial-порта, и не открывает его при последующем open, вследствие чего, работать с Serial-портом, после этого, невозможно.


Если кто-то сталкивался с этой проблемой, прошу помощи. Интересуют следующие варианты:


1. Возможные пути обхода проблемы, с использованием RXTX (возможно с небольшими правками ее Java-кода, но без исправления dll)


2. Библиотеки Java для работы с Serial-портом, отличные от RXTX


Вариант самостоятельной разработки библиотеки, с использованием JNDI, под Windows, рассматривается, но оценивается как чрезмерно трудоемкий.
  • Вопрос задан
  • 6073 просмотра
Пригласить эксперта
Ответы на вопрос 4
ProstoTyoma
@ProstoTyoma
Работал с NPort, но не из Java. Штука действительно глючная, но конкретно такого глюка не встречал. Можно попробовать каким-то образом сделать delay между двумя открытиями. Еще для С++ было что-то типа NPort API, позволяющее работать с девайсом MOXA напрямую без виртуальных портов, но для Java такого не видел.
У меня периодически переставали открываться порты вообще. Помогало удаление\добавление портов в NPort Admin.
Ответ написан
Комментировать
GlukKazan
@GlukKazan Автор вопроса
NPort API в комплекте идет, но пока хочется обойтись без JNDI. Delay попробую, но скорее всего не поможет. Я проходил этот код под отладчиком и делал паузу порядка ~3 секунд
Ответ написан
Комментировать
GlukKazan
@GlukKazan Автор вопроса
Буду пробовать jSSC. Автору большое спасибо
Ответ написан
GlukKazan
@GlukKazan Автор вопроса
Удалось подключиться к станции по TCP
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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