Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.

Autor Téma: seriova linka v jave  (Přečteno 3861 krát)

oraf

  • Člen
  • **
  • Příspěvků: 203
  • Karma: +6/-2
    • Zobrazit profil
seriova linka v jave
« kdy: 10 Říjen 2012, 09:35:53 »
Zdravim ,
resim ted takovy problem a nejak se s tim nemuzu poprat, mam MCU ktery mi po seriove lince posila data, dal jsem dokupy ze se k datum na seriove lince da pristupovat jako k souboru v /dev/ttyS3  kdyz pustim vypis v terminalu tak to odpovida hodnotam ktere ma cidlo posilat, ovsem kdyz v jave  pustim program tak ty hodnoty jsou nejake jine,  a kazdopadne spatne pouzivam
Citace
   FileInputStream fis = new FileInputStream("/dev/ttyS3");
    int i;
    while ((i = fis.read()) != -1)
       System.out.println(i);
    fis.close();

casem bych to rad dostal do do stavu s GUI kde mi bude menit label pouze aktialni hodnotou na lince a nebude mi vypisovat neskutecne mnozstvi dat ,
nevite nekdo kudy do toho ?
diky
« Poslední změna: 10 Říjen 2012, 10:09:32 od Martin - ViPEr*CZ* »

Zerog

  • Člen
  • **
  • Příspěvků: 473
  • Karma: +15/-2
    • Zobrazit profil
    • Zerog blog
Re:seriova linka v jave
« Odpověď #1 kdy: 10 Říjen 2012, 12:17:27 »
Cau,

moc nerozumim tomu co pises. Asi jsem dnes malo chapavej :)

1. Serial port by mel byt na /dev/ttyS0 (win  COM1). Jestli ho mas na trojce, tak by to teoreticky melo znamenat, ze mas serial portu v pc 4 (/dev/ttyS0,/dev/ttyS1,/dev/ttyS2,/dev/ttyS3).

Ale to je jedno, jestli to na /dev/ttyS3 komunikuje je to ok.

2. vzhledem k tomu, ze uz asi v Jave z toho data cist muzes, predpakladam, ze jsi rozchodil nejakou Java serial port knihovnu ... jako treba RxTx viz. http://rxtx.qbang.org/wiki/index.php/Main_Page

3. k tomu se vaze ze jsi spravne nastavil parametry komunikace (rychlost, paritu, stopbit, atd)

Distro:  Debian
WM:      Awesome
NT:       Latitude D620

mka

  • Závislák
  • ****
  • Příspěvků: 1907
  • Karma: +119/-78
  • Chybovat je moje.
    • Zobrazit profil
    • Příložany Cé Zet
Re:seriova linka v jave
« Odpověď #2 kdy: 10 Říjen 2012, 12:55:06 »
Jak vidíš, tak nejede přes knihovnu, ale přes
Citace
FileInputStream fis = new FileInputStream("/dev/ttyS3");
WTFDM "ovsem kdyz v jave  pustim program tak ty hodnoty jsou nejake jine"?

Předpokládám, že jakmile ti dojdou data (ve smyslu "zrovna už žádná nová nejsou"), tak ti ten cyklus skončí. Asi by to mělo běžet v nějaké asyc tasku jako "while furt".
« Poslední změna: 10 Říjen 2012, 12:59:11 od mka »

Zerog

  • Člen
  • **
  • Příspěvků: 473
  • Karma: +15/-2
    • Zobrazit profil
    • Zerog blog
Re:seriova linka v jave
« Odpověď #3 kdy: 10 Říjen 2012, 13:03:54 »
Prave ze to vidim, a to vubec nevim, co z toho poleze. Nemam to odzkousene. Nejpis musi nastavit parametry pres stty a pak by to teoretycky melo jit pouzit i tak.

Edit: Ale defakto nevidim duvod, proc to neudelat pres RxTx
Edit2: o stty je pekny clanek tu http://www.abclinuxu.cz/clanky/hardware/seriova-komunikace-pod-linuxem-i
« Poslední změna: 10 Říjen 2012, 13:21:17 od Zerog »
Distro:  Debian
WM:      Awesome
NT:       Latitude D620

oraf

  • Člen
  • **
  • Příspěvků: 203
  • Karma: +6/-2
    • Zobrazit profil
Re:seriova linka v jave
« Odpověď #4 kdy: 10 Říjen 2012, 13:46:30 »
uplen se mi nepodarilo rozcodit RXTX , a nemam tusnei jak se s tim pracuje

Zerog

  • Člen
  • **
  • Příspěvků: 473
  • Karma: +15/-2
    • Zobrazit profil
    • Zerog blog
Re:seriova linka v jave
« Odpověď #5 kdy: 10 Říjen 2012, 13:50:02 »
Pro rozchozeni RxTx mrkni treba sem http://forum.ubuntu.cz/index.php?topic=61926.0

Nechces trosku vic rict o co ze se to snazis ?
Distro:  Debian
WM:      Awesome
NT:       Latitude D620

oraf

  • Člen
  • **
  • Příspěvků: 203
  • Karma: +6/-2
    • Zobrazit profil
Re:seriova linka v jave
« Odpověď #6 kdy: 10 Říjen 2012, 13:55:06 »
jasny , mam MCU ATmega8 na ni IR senzor na mereni vzdalenosti , hodnotu v MCU prepocitavam a posilam po UART do PC kde mam Prevodnik Uart -> USB, v pocitaci pak prez par prikazu pripojim prevodnik na zmineny ttyS3 a z toho chci v jave ukazovat tu hodnotu v nejakem Labelu , casem chtel treba z PC ovladat otacky motoru na MCU, jde mi o komunikaci mikrokontroleru a PC

Zerog

  • Člen
  • **
  • Příspěvků: 473
  • Karma: +15/-2
    • Zobrazit profil
    • Zerog blog
Re:seriova linka v jave
« Odpověď #7 kdy: 10 Říjen 2012, 14:02:36 »
Ok chapu, snad tam nedela neplechu ten prevodni USB, no tak ja bych postupoval takto :

1. overil bych ze to komunikuje ok i bez javy  = A) pres konzolu B) pres minicom (linuxovej telnet)

viz http://wiki.pvfree.net/index.php/Minicom

2. rozchodil RxTx

3. tvuj program v jave

RxTx by nemel byt nejak extra problem. Staci jen prekopirovat ty knihovny na spravna mista. Viz install soubor nebo ta diskuze.

Edit me funguje vzdy toto:
    download rxtx lib
    copy RXTXcomm.jar to {JVM}/jre/lib/ext or add jar as a project lib
    copy librxtxSerial.so into /usr/lib
« Poslední změna: 10 Říjen 2012, 14:04:59 od Zerog »
Distro:  Debian
WM:      Awesome
NT:       Latitude D620

oraf

  • Člen
  • **
  • Příspěvků: 203
  • Karma: +6/-2
    • Zobrazit profil
Re:seriova linka v jave
« Odpověď #8 kdy: 10 Říjen 2012, 14:06:51 »
po pod 3 je to v pohode , RXTX zkusim

Myrmica

  • Závislák
  • ****
  • Příspěvků: 1700
  • Karma: +161/-9
    • Zobrazit profil
    • MYRMICA
Re:seriova linka v jave
« Odpověď #9 kdy: 10 Říjen 2012, 16:11:02 »
Jen drobná poznámka, mě se seriová linka z převodníku RS232ToUSB mapuje na
Kód: [Vybrat]
/dev/ttyUSB0 nemůže být problém tady?

EDIT1: Ještě jsem si uvědomil, že pro přístup k seriovému portu musí být uživatel členem skupiny dialout. Bez toho dostanete přístup k portům jen jako root.
« Poslední změna: 10 Říjen 2012, 16:34:41 od Myrmica »
Stolní strojek: OS– UBUNTU 16.04 x86_64, MB ASUS P8 Z68-V/GEN3, Intel® Core™ i5-3470 CPU @ 3.20GHz × 4 , 16GiB DDR3, GeForce GTX 670...
Notebook: ASUS U53Jc OS– UBUNTU 16.04 x86_64, Windows 7, Processor – Intel Core i5-460M (2,53 GHz), Graphics – switchable NVIDIA GeForce 310M and Intel GMA HD

oraf

  • Člen
  • **
  • Příspěvků: 203
  • Karma: +6/-2
    • Zobrazit profil
Re:seriova linka v jave
« Odpověď #10 kdy: 10 Říjen 2012, 21:56:00 »
ja si nastavim mapovani jak je treba
Citace
lsmod | grep cdc
dmesg | grep ttyACM
ls /dev/ttyACM*
sudo ln -sf /dev/ttyACM0 /dev/ttyS3
sudo stty -F /dev/ttyS3 19200

Zerog

  • Člen
  • **
  • Příspěvků: 473
  • Karma: +15/-2
    • Zobrazit profil
    • Zerog blog
Re:seriova linka v jave
« Odpověď #11 kdy: 10 Říjen 2012, 22:26:02 »
Ses si jistej s tou rychlosti?
Jak jsi s RxTx pokrocil?
Distro:  Debian
WM:      Awesome
NT:       Latitude D620

oraf

  • Člen
  • **
  • Příspěvků: 203
  • Karma: +6/-2
    • Zobrazit profil
Re:seriova linka v jave
« Odpověď #12 kdy: 10 Říjen 2012, 22:27:57 »
ta rychost by mela byt OK , na RXTX jsem moc nepokrocil dotal jsem knihovnu do Netbeansu ale nevim jak se s tim pracuje... tak snad na to brzy prijdu

Zerog

  • Člen
  • **
  • Příspěvků: 473
  • Karma: +15/-2
    • Zobrazit profil
    • Zerog blog
Re:seriova linka v jave
« Odpověď #13 kdy: 10 Říjen 2012, 22:32:17 »
Hlavne nezapomen na ty *.so soubory. Jestli budu mit zitra cas, tak ti poslu nejake testovaci miniaplikace.

Nektere jsou i na RxTx strankach.
Distro:  Debian
WM:      Awesome
NT:       Latitude D620

oraf

  • Člen
  • **
  • Příspěvků: 203
  • Karma: +6/-2
    • Zobrazit profil
Re:seriova linka v jave
« Odpověď #14 kdy: 10 Říjen 2012, 22:33:24 »
ty jsem tam taky nahral , to by bylo super, nejak to nespecha , tak az bude cas tak bych byl vdecny ;-)

Myrmica

  • Závislák
  • ****
  • Příspěvků: 1700
  • Karma: +161/-9
    • Zobrazit profil
    • MYRMICA
Re:seriova linka v jave
« Odpověď #15 kdy: 11 Říjen 2012, 09:15:50 »
ja si nastavim mapovani jak je treba
Citace
lsmod | grep cdc
dmesg | grep ttyACM
ls /dev/ttyACM*
sudo ln -sf /dev/ttyACM0 /dev/ttyS3
sudo stty -F /dev/ttyS3 19200
Jen mi přijde, že to přemapování je zbytečné, podle mě je jen pro programy, co neumí používat jiné porty než /dev/ttySx.
Já osobně bych u nového software nechal nativní port, se kterým jím používané zařízení pracuje. Nevím jak RxTx, ale knihovna, se kterou jsem pracoval v Lazarusu, měla funkci vracející seznam aktivních portů. Z nich jsem vybral ten, který potřebuji, a s ním dále pracoval.
Nastavení parametrů seriové linky bych raději nechal na programu, který s ní pracuje. Ať na "tvrdo" nebo pomocí nějakého dialogu uživatelem.
Jen zopakuji, největší problém při odlaďování seriové komunikace v Linuxu, jsem měl s právy přístupu k seriovému portu.
Stolní strojek: OS– UBUNTU 16.04 x86_64, MB ASUS P8 Z68-V/GEN3, Intel® Core™ i5-3470 CPU @ 3.20GHz × 4 , 16GiB DDR3, GeForce GTX 670...
Notebook: ASUS U53Jc OS– UBUNTU 16.04 x86_64, Windows 7, Processor – Intel Core i5-460M (2,53 GHz), Graphics – switchable NVIDIA GeForce 310M and Intel GMA HD