Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: oraf 10 Října 2012, 09:35:53

Název: seriova linka v jave
Přispěvatel: oraf 10 Října 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
Název: Re:seriova linka v jave
Přispěvatel: Zerog 10 Října 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 (http://rxtx.qbang.org/wiki/index.php/Main_Page)

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

Název: Re:seriova linka v jave
Přispěvatel: mka 10 Října 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".
Název: Re:seriova linka v jave
Přispěvatel: Zerog 10 Října 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
Název: Re:seriova linka v jave
Přispěvatel: oraf 10 Října 2012, 13:46:30
uplen se mi nepodarilo rozcodit RXTX , a nemam tusnei jak se s tim pracuje
Název: Re:seriova linka v jave
Přispěvatel: Zerog 10 Října 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 ?
Název: Re:seriova linka v jave
Přispěvatel: oraf 10 Října 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
Název: Re:seriova linka v jave
Přispěvatel: Zerog 10 Října 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
Název: Re:seriova linka v jave
Přispěvatel: oraf 10 Října 2012, 14:06:51
po pod 3 je to v pohode , RXTX zkusim
Název: Re:seriova linka v jave
Přispěvatel: Myrmica 10 Října 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.
Název: Re:seriova linka v jave
Přispěvatel: oraf 10 Října 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
Název: Re:seriova linka v jave
Přispěvatel: Zerog 10 Října 2012, 22:26:02
Ses si jistej s tou rychlosti?
Jak jsi s RxTx pokrocil?
Název: Re:seriova linka v jave
Přispěvatel: oraf 10 Října 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
Název: Re:seriova linka v jave
Přispěvatel: Zerog 10 Října 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.
Název: Re:seriova linka v jave
Přispěvatel: oraf 10 Října 2012, 22:33:24
ty jsem tam taky nahral , to by bylo super, nejak to nespecha , tak az bude cas tak bych byl vdecny ;-)
Název: Re:seriova linka v jave
Přispěvatel: Myrmica 11 Října 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.