Strona 1 z 1
Odczyt / zapis portu /dev/ttyS0
: 22 lut 2011, 14:10
autor: 2n3055
Witam wszystkich.
Chciałbym napisać prosty skrypt uruchamiany co jakiś czas z cron'a wysyłający i odbierający dane z urządzenia podpiętego do portu rs232 (/dev/ttyS0).
Zadanie udało mi się częściowo rozwiązać:
Kod: Zaznacz cały
#!/bin/bash
echo -en "1\r" > /dev/ttyS0
cat /dev/ttyS0 > ./plik.txt
Dane są wysyłane poprawnie. Odbierana odpowiedź jest zapisywana do pliku, jednak po odczycie danych cat nie zamyka się i skrypt cały czas pozostaje uruchomiony.
Jak można wymusić zakończenie cat po odczycie danych z urządzenia?
Z góry dziękuję za pomoc.
Odp: Odczyt / zapis portu /dev/ttyS0
: 22 lut 2011, 18:21
autor: Chmiela2121
Możliwe, że to co napiszę jest bzdurą, ale wydaje mi się, że cat zakończy swoje działanie, gdy odbierze EOF. Jeżeli jest to prawdą, a to urządzenie nie wysyła tego sygnału po zakończeniu swojej pracy, to może być problem. Najprościej byłoby napisać program, który zrobi to samo co cat, a zakończy swoje działanie nie czekając na EOF a na sygnał kończący od urządzenia. Pytanie zatem, co jest ostatnim znakiem wysyłanym przez urządzenie?
Odp: Odczyt / zapis portu /dev/ttyS0
: 23 lut 2011, 09:17
autor: beluosus
Użyj dd albo zabij cat np po sekundzie.
Odp: Odczyt / zapis portu /dev/ttyS0
: 23 lut 2011, 19:30
autor: 2n3055
Witam!
Dziękuję Wam za odpowiedzi.
dd z parametrem count rozwiązało sprawę:
i wszystko zaczęło działać.
Do Chmiela2121 - jestem w tej komfortowej sytuacji, że to co wysyła urządzenie do komputera zależy ode mnie, ale nie udało mi się dojść w jaki sposób mogę nadać EOF.
Wie ktoś może jaką sekwencję znaków ascii programy nasłuchujące odbiorą jako znak EOF?
Pozdrawiam!
Odp: Odczyt / zapis portu /dev/ttyS0
: 23 lut 2011, 19:38
autor: Dwimenor
Kod: Zaznacz cały
Wie ktoś może jaką sekwencję znaków ascii programy nasłuchujące odbiorą jako znak EOF?
Zajrzyj do man ascii
Odp: Odczyt / zapis portu /dev/ttyS0
: 23 lut 2011, 20:37
autor: Chmiela2121
"The actual value of EOF is system-dependent (but is commonly -1, such as in glibc[1]) and is unequal to any valid character code." (Wikipedia).
Skoro masz możliwość ustalenia sygnału wyjściowego z urządzenia to możesz wydać na koniec sygnał EOT (4 dziesiętnie). I użyć programu o kodzie, na kształt:
Kod: Zaznacz cały
#include <iostream>
#include <cstdio>
int main(){
char c;
while((c = fgetc(stdin)) != 4){ //EOT = 4 (dec.)
std::cout << c;
}
return 0;
}
Ale nie wiem czy jest sens, skoro dd działa jak należy.
Re: Odczyt / zapis portu /dev/ttyS0
: 22 kwie 2013, 12:12
autor: szaro102
2n3055 w jaki sposób ustawiasz parametry (prędkość, parzystość, bity ....) transmisji w swoim skrypcie?