2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Java и COM-порт
Сообщение26.10.2022, 17:32 
Аватара пользователя
Я вот не пойму, Java раньше последовательный порт не поддерживала вообще что ли никак? А то вот пытаюсь загуглить, как прочитать данные с этого интерфейса, а он мне всё выдаёт javax.comm.CommPort или gnu.io.SerialPort. Ни того, не другого в документации к Java SE 8 нет в принципе.

 
 
 
 Re: Java и COM-порт
Сообщение26.10.2022, 18:23 
Открываете файл (для Микрософт с именем например "COM1", для linux с именем например "/dev/ttyS0") и читаете/пишете.
Вот например под C/C++: https://habr.com/ru/sandbox/30635/
Для java должно быть аналогично.

 
 
 
 Re: Java и COM-порт
Сообщение26.10.2022, 20:36 
Аватара пользователя
Не работает такой подход. Даже в командной строке:

D:\>copy COM13 1.txt
Не удается найти указанный файл.

D:\>copy COM1 1.txt
Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения.
Скопировано файлов: 0.


Устройство — USB Serial Port (COM13) — в системе есть, но как к файлу обратиться к нему нельзя.

Плюс у последовательного порта есть куча всяких настроек, типа скорости, числа бит, числа стоповых бит и чётности, которые, вообще говоря, должно приложение конфигурировать.

 
 
 
 Re: Java и COM-порт
Сообщение26.10.2022, 20:52 
B@R5uk в сообщении #1567873 писал(а):
Плюс у последовательного порта есть куча всяких настроек, типа скорости, числа бит,
Под Windows это в командной строке командой "mode" настраивается.
B@R5uk в сообщении #1567873 писал(а):
Не работает такой подход.
Работает.
Недавно летом делал под Windows на C/C++, и читало с порта, и писало обратно в порт (здесь читало до символа "перенос строки").
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <windows.h>
#include <stdio.h>

int main( int argc, char **argv )
{
  HANDLE hSerial = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
  if (hSerial == INVALID_HANDLE_VALUE)
  {
    printf("Error opening port\r\n");
    return -1;
  }

    char c;
    DWORD dwBytesWrite = 0;
    printf("<-: ");
    do
    {
      if(!ReadFile(hSerial, &c, 1, &dwBytesWrite, NULL))
      {
        printf("read error\r\n");
        return 1;
      }
      putc(c, stdout);
    }
    while(c != '\n');
   
    char buf[] = ":r50=1,118,2662,0,155999,313968,824811,1390507,124,0,0,0,31396,3030,\r\n";
    if(!WriteFile(hSerial, buf, sizeof(buf) - 1, &dwBytesWrite, NULL))
    {
      printf("write error\r\n");
      return 2;
    }
    printf("->: %s", buf);

  CloseHandle(hSerial);
  return 0;
}
 

 
 
 
 Re: Java и COM-порт
Сообщение27.10.2022, 02:49 
Аватара пользователя
zykov в сообщении #1567877 писал(а):
Работает.

На моём компьютере не работает. Причём не работает на уровне системы, безотносительно языка. Я открыл командную строку, и попытался скопировать с COM-порта в файл, как это делается при копировании из файла в файл. Результат представлен выше. Железный порт на материнке работает, а интересующий меня юсбишный — нет, выдаёт ошибку.

При этом putty.exe спокойно всё открывает. Но я так понимаю, путти использует вин-апи, а не работу через файлы.

 
 
 
 Re: Java и COM-порт
Сообщение27.10.2022, 10:43 
Работает.
Нужно правильно открывать. Функции CreateFile, ReadFile, WriteFile - это из WinAPI (C-интерфейс операционной системы). Нужно с этимим флажками открывать, что указаны.
Аналогично под Linux функции open, read, write - это тоже C-интерфейс POSIX, т.е. тоже интерфейс ОС.
Под Java тоже можно напрямую испольовать WinAPI.
Ищем в яндекс "java winapi". Выдаёт например JNI.

-- 27.10.2022, 10:47 --

B@R5uk в сообщении #1567901 писал(а):
а интересующий меня юсбишный — нет, выдаёт ошибку
А он вообще работает? Может для этой железки (USB-uart, или какая там) просто драйвера не установлены?
Или COM порт не настроен (baud и прочее).

 
 
 
 Re: Java и COM-порт
Сообщение27.10.2022, 12:17 
Аватара пользователя
zykov в сообщении #1567922 писал(а):
А он вообще работает?

B@R5uk в сообщении #1567901 писал(а):
При этом putty.exe спокойно всё открывает.

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group