View previous topic :: View next topic |
Author |
Message |
bartmarian Guru
Joined: 28 Nov 2005 Posts: 557
|
Posted: Sat Oct 04, 2014 10:52 am Post subject: rs485 i kity avt |
|
|
Witam,
kupiłem kilka zestawów avt - 530usb, 531, 535 http://serwis.avt.pl/manuals/AVT531.pdf
pojawia mi się /dev/ttyUSB0, mogę zmienić prędkość portu na 1200, ale nie bardzo wiem jak wysłać
znaki ASCII do urządzenia, tzn w teorii wiem, poszukałem i znalazłem, tylko u mnie nie działa, to co znalazłem
nie dotyczy ww układów tylko ogólne informacje, nie wiem czy to co robię jest ok.
Zmiana na prędkość 1200:
Code: | stty -F /dev/ttyUSB0 1200 |
otrzymuję:
Code: | # stty -F /dev/ttyUSB0
speed 1200 baud; line = 0;
-brkint -imaxbel |
próbuję odczytać stan z 535
Code: | echo -en "\x1B\x20\x35\x20\x72\x20\x31" > /dev/ttyUSB0 |
czyli o ile dobrze rozumiem odpowiednik "ESC 5 r 1"
Nie zwraca żadnego wyniku, proszę o jakieś wskazówki.
--edit--
znalazłem błąd, na końcu nie mam enter'a ale nie wiem jak go wysłać.
--edit--
enter o ile dobrze znalazłem to \x0a - całość nadal milczy. _________________ Człowiek bez religii jest jak ryba bez roweru.
Albercik się pomylił, prędkość światła to prędkość, wszechświat nie ma punktu odniesienia.
Perpetuum mobile - np. jowisz + jego księżyc, siły pływowe. Proste i niepraktyczne. |
|
Back to top |
|
|
sebas86 Guru
Joined: 01 May 2005 Posts: 568 Location: Szczecinek / Szczecin
|
Posted: Sat Oct 04, 2014 3:55 pm Post subject: |
|
|
A próbowałeś kończyć linię CRLF (\r\n)? _________________ Nieważne jaka dystrybucja, ważne, że Linux! |
|
Back to top |
|
|
bartmarian Guru
Joined: 28 Nov 2005 Posts: 557
|
Posted: Sun Oct 05, 2014 12:47 am Post subject: |
|
|
Wcześniej nie, próbowałem na wszystkie - jakie znalazłem - w sieci, nic.
Jeżeli dobrze zrozumiałem chodzi o:
Code: | echo -en "\x1B\x20\x35\x20\x72\x20\x31\x0A\r\n" > /dev/ttyUSB0 |
milczy.
Spróbuję jutro z php, widziałem przykład w sieci, komuś działało. _________________ Człowiek bez religii jest jak ryba bez roweru.
Albercik się pomylił, prędkość światła to prędkość, wszechświat nie ma punktu odniesienia.
Perpetuum mobile - np. jowisz + jego księżyc, siły pływowe. Proste i niepraktyczne. |
|
Back to top |
|
|
sebas86 Guru
Joined: 01 May 2005 Posts: 568 Location: Szczecinek / Szczecin
|
Posted: Sun Oct 05, 2014 8:49 am Post subject: |
|
|
Jeśli wysyłasz CRLF 0x0a jest zbędne (a nawet błędne, jeśli druga strona oczekuje konkretnego kodu końca).
I nie jestem pewien czy stosowanie spacji jest w ogóle potrzebne i czy nie to jest właśnie problemem (0x20) - z dokumentacji nie wynika jednoznacznie czy znak spacji powinien się tam znaleźć czy też nie, enter jest zaznaczony wyraźnie ale najlepiej gdyby podawali przykłady kodów zapisanych bajtami (albo z akcentowanymi spacjami).
Spróbowałbym kilku wariantów, np.:
Code: | echo -en "\x1b1wn1\r\n"
echo -en "\x1b1wn1\n"
echo -en "\x1b 1 w n 1\r\n"
echo -en "\x1b 1 w n 1 \r\n"
echo -en "\x1b 1 w n 1\n"
echo -en "\x1b 1 w n 1 \n" |
_________________ Nieważne jaka dystrybucja, ważne, że Linux! |
|
Back to top |
|
|
gexcite Tux's lil' helper
Joined: 24 Sep 2005 Posts: 116
|
Posted: Mon Oct 06, 2014 1:56 pm Post subject: |
|
|
Jeśli dobrze zrozumiałem instrukcję polecenie powinno wyglądać mniej więcej tak:
Code: | echo -en "\x1b1w11\n" > /dev/ttyUSB0 |
|
|
Back to top |
|
|
bartmarian Guru
Joined: 28 Nov 2005 Posts: 557
|
Posted: Fri Oct 10, 2014 12:05 am Post subject: |
|
|
Karta 531 ruszyła - gexcite dokładnie tak jak napisałeś, część robiłem zdalnie, nie widząc co się dzieje,
męczyłem 535, bo ta powinna odpowiedzieć, jednak tak się nie dzieje, zmyliło mnie też to, że po próbie odczytu
położenia przekaźnika też otrzymuję ciszę, wygląda na to, że nie wyświetla odpowiedzi, gdy jest pytany ale
wykonuje polecenia.
--edit--
Przyniosłem do domu całość. 530usb posiada dwie diody sygnalizujące komunikację, gdy wł/wył przekaźnik(i)
widać tylko nadawanie, gdy odczytuję stan, 530usb sygnalizuje nadawanie i odbiór, ale nie widzę odpowiedzi
w konsoli. _________________ Człowiek bez religii jest jak ryba bez roweru.
Albercik się pomylił, prędkość światła to prędkość, wszechświat nie ma punktu odniesienia.
Perpetuum mobile - np. jowisz + jego księżyc, siły pływowe. Proste i niepraktyczne. |
|
Back to top |
|
|
gexcite Tux's lil' helper
Joined: 24 Sep 2005 Posts: 116
|
Posted: Fri Oct 10, 2014 9:54 am Post subject: |
|
|
Sugeruję użyć najpierw Minicoma. Do testów zmacznie lepszy. Jak już ogarniesz to jakaś prosta apka w C. Ewentualnie bash. |
|
Back to top |
|
|
bartmarian Guru
Joined: 28 Nov 2005 Posts: 557
|
Posted: Mon Oct 13, 2014 5:41 am Post subject: |
|
|
Spróbowałem z putty, wyników/odpowiedzi terminal nie wyświetla ale wykonuje to co dostanie,
jedyny terminal jaki wyświetlał wszystko poprawnie to Bray+ (ten próbowałem z windy).
Przy wysyłaniu polecenia "włącz 1 przekaźnik" na 530usb widzę, że komunikacja jest w jedną
stronę, zapala się tylko dioda TX, przy odczycie zapala się TX a za ułamek sek RX, więc odpowiada
(bo i Bray+ pokazuje), prawdopodobnie mam złe ustawienia portu...
Code: | # stty -F /dev/ttyUSB0 -a
speed 1200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke |
tylko nie wiem co mógłbym przestawić, do tej porty udawało mi się (zmianami) tylko utracić komunikację _________________ Człowiek bez religii jest jak ryba bez roweru.
Albercik się pomylił, prędkość światła to prędkość, wszechświat nie ma punktu odniesienia.
Perpetuum mobile - np. jowisz + jego księżyc, siły pływowe. Proste i niepraktyczne. |
|
Back to top |
|
|
bartmarian Guru
Joined: 28 Nov 2005 Posts: 557
|
Posted: Fri Oct 17, 2014 12:11 am Post subject: |
|
|
Jak się okazuje, klocki odpowiadają, nie jest to wyświetlane, python jednak odbiera bdb.
Znalazłem w sieci jak odczytać stan: Code: |
#!/usr/bin/env python
import serial
port =serial.Serial(
"/dev/ttyUSB0",
baudrate=1200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
writeTimeout = 0,
timeout = .1,
rtscts=False,
dsrdtr=False,
xonxoff=False)
port.write('\x1b5r3\x0d')
while True:
response=port.read(8)
print(response)
break |
nie wiem jak podać "port.write('\x1b5r3\x0d')" jako argument do skryptu, (idealnie) np: # stan.py 5r3
proszę o wskazówkę.
Pozdrawiam _________________ Człowiek bez religii jest jak ryba bez roweru.
Albercik się pomylił, prędkość światła to prędkość, wszechświat nie ma punktu odniesienia.
Perpetuum mobile - np. jowisz + jego księżyc, siły pływowe. Proste i niepraktyczne. |
|
Back to top |
|
|
sebas86 Guru
Joined: 01 May 2005 Posts: 568 Location: Szczecinek / Szczecin
|
|
Back to top |
|
|
bartmarian Guru
Joined: 28 Nov 2005 Posts: 557
|
Posted: Mon Oct 27, 2014 1:04 am Post subject: |
|
|
Nie znam języków jak python, wewnętrznie czułem jednak, że to musi być proste - nie wytrzymałem i napisałem @ do
znajomego dev'a jak to rozwiązać, przeczucie mnie nie myliło, że wystarczy jedna linijka przy okazji powstał inny problem,
który tymczasowo obszedłem sprawdzeniem czy port nie jest w użyciu i odczekaniem chwili.
Na dłuższą metę jednak to nie wystarczy, szczególnie gdy uruchomię czujniki które będą odpytywane nie z cron'a raz na
minutę a w pętki co np 2sek, pomyślałem więc o serial-proxy, nie wiem czy coś takiego istnieje, ale wiem jak chciałbym by
działało, program tworzy wirtualne porty, dla różnych skryptów i tylko on odwołuje się do portu, nie wiem tylko czy coś takiego
istnieje. Jak ktoś wie, oprócz napisania sobie samemu w C a najlepiej w asemblerze, to z góry dzięki za info.
Nie wiem czy wszystko w skrypcie jest zgodne z sztuką, ale działa i może komuś się przyda.
Code: | #!/usr/bin/env python
import serial, string, time, getopt, sys
rs485 = '/dev/ttyUSB0'
baud = 1200
sendText = '\x1b' + sys.argv[1] + '\x0d'
while True:
try:
ser = serial.Serial(rs485, baud, timeout=.1)
break
except serial.SerialException:
print 'rs485 not available. Wait...'
time.sleep(1.5)
ser.write(sendText)
while True:
response=ser.read(8)
print(response)
break |
_________________ Człowiek bez religii jest jak ryba bez roweru.
Albercik się pomylił, prędkość światła to prędkość, wszechświat nie ma punktu odniesienia.
Perpetuum mobile - np. jowisz + jego księżyc, siły pływowe. Proste i niepraktyczne. |
|
Back to top |
|
|
gexcite Tux's lil' helper
Joined: 24 Sep 2005 Posts: 116
|
Posted: Mon Oct 27, 2014 4:59 am Post subject: |
|
|
Nigdzie nie zamykasz portu po użyciu. Peenie to jest przyczyna że się blokuje po użyciu na jakiś czas. |
|
Back to top |
|
|
bartmarian Guru
Joined: 28 Nov 2005 Posts: 557
|
Posted: Mon Oct 27, 2014 12:21 pm Post subject: |
|
|
Zmieniłem w nocy całość, zamknięcie portu też ma już miejsce. Teraz pętla czyta/pisze z/do plików tekstowych
a powłoka wykonuje kiedy chce resztę, tak działa o wiele lepiej, jedyny kłopot jaki występuje to odczyt avt535,
co 10-15 odczytów w pliku nie ma niczego, sporadycznie otrzymuję dwa puste wyniki jeden po drugin, to nie jest
specjalnie uciążliwe, zwraca 0 na które nie reaguję, 1 gdzie jest część dalsza i nic, gdzie też nie ma reakcji,
więc co najwyżej grozi to 1-2 sek opuźnieniem, tylko niefajnie wyglądają takie szczerby, może jest na to rada ? _________________ Człowiek bez religii jest jak ryba bez roweru.
Albercik się pomylił, prędkość światła to prędkość, wszechświat nie ma punktu odniesienia.
Perpetuum mobile - np. jowisz + jego księżyc, siły pływowe. Proste i niepraktyczne. |
|
Back to top |
|
|
bartmarian Guru
Joined: 28 Nov 2005 Posts: 557
|
Posted: Mon Nov 03, 2014 12:07 am Post subject: |
|
|
Rozwiązaniem jest odczyt do temp'a i zmiana nazw pliku, problemem był czas odczytu, dodatkowo przy starcie
całość kopiowana jest na ramdysk poza bazą rrd - teraz jest ok.
Nie wiem jak na stronie www, bez odświerzania umieścić status (sposób dowolny) w html/php/javascript/java, no może nie flash,
czyli ciągły odczyt nastu pliku(ów), w którym(ch) mam 0/1 + zamiana 0/1 na ikonę lub chociaż okrąg/kwadrat
zależnie od stanu zielony/czerwony. Pomocy
Pozdrawiam _________________ Człowiek bez religii jest jak ryba bez roweru.
Albercik się pomylił, prędkość światła to prędkość, wszechświat nie ma punktu odniesienia.
Perpetuum mobile - np. jowisz + jego księżyc, siły pływowe. Proste i niepraktyczne. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|