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
-
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
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
-
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)
-
Jak vidíš, tak nejede přes knihovnu, ale přes
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".
-
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
-
uplen se mi nepodarilo rozcodit RXTX , a nemam tusnei jak se s tim pracuje
-
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 ?
-
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
-
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
-
po pod 3 je to v pohode , RXTX zkusim
-
Jen drobná poznámka, mě se seriová linka z převodníku RS232ToUSB mapuje na
/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.
-
ja si nastavim mapovani jak je treba
lsmod | grep cdc
dmesg | grep ttyACM
ls /dev/ttyACM*
sudo ln -sf /dev/ttyACM0 /dev/ttyS3
sudo stty -F /dev/ttyS3 19200
-
Ses si jistej s tou rychlosti?
Jak jsi s RxTx pokrocil?
-
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
-
Hlavne nezapomen na ty *.so soubory. Jestli budu mit zitra cas, tak ti poslu nejake testovaci miniaplikace.
Nektere jsou i na RxTx strankach.
-
ty jsem tam taky nahral , to by bylo super, nejak to nespecha , tak az bude cas tak bych byl vdecny ;-)
-
ja si nastavim mapovani jak je treba
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.