ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: RS-485, tty, ECHO  (Прочитано 5307 раз)

0 Пользователей и 1 Гость просматривают эту тему.

KDM

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 46
RS-485, tty, ECHO
« : 10 Август, 2012, 19:35:55 »

Здраствуйте.

Во время работы в linux, qt с платой тион270 и Сириус270 по протоколу RS-485 при записи данных в /dev/ttyS1 передаваемые данные возвращаются для чтения (получаю эхо).

Режим работы: скорость=115200, 8 битов данных, 1 стоп бит, без паритета.
Работаю следующим образом:
Настройка:
struct termios options;
fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY);
fcntl(fd, F_SETFL, O_NONBLOCK);
tcgetattr(fd, &options);
options.c_cflag     = B115200 | CS8 | CLOCAL | CREAD;
options.c_iflag = 0;
options.c_oflag  = 0;
options.c_lflag     = 0;
options.c_cc[VTIME] = 0;
options.c_cc[VMIN] = 0;
tcsetattr(fd, TCSANOW, &options);

Чтение
read(fd, Mesg, MaxKBytes);
Запись
write(fd, Mesg, KBytes);
Текущие настройки порта (после запуска программы):
# stty -F /dev/ttyS1 -a
speed 115200 baud; rows 24; columns 80;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 0; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel
-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


Пробовал:
1) Выставить флаг ECHO. Эффект - пока данных нет, все нормально. Как только отправляю команду один раз, получаю ее многократное повторение (эхо-эхо, возникает петля обратной связи).
2) Отсоединить устройство, передаю данные "в воздух" - все равно получаю на входе их же.
3) #1 + #2 = возникает петля обратной связи.
4) Дописал установку флага ~TIOCM_RTS.
int status2;
ioctl(fd, TIOCMGET, &status2);
status2&=~TIOCM_RTS;
ioctl(fd, TIOCMSET, &status2);
Итог: эхо отсутствует, как и передача данных.


Просьба подсказать:
- в каком месте возникает эхо и как его можно убрать?
- какую функцию выполняет перемычка J48 (в каких случаях и как ее использовать)?
« Последнее редактирование: 10 Август, 2012, 19:40:35 от KDM »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: RS-485, tty, ECHO
« Ответ #1 : 10 Август, 2012, 21:10:41 »

> все равно получаю на входе их же.

Это аппаратно.

См.
http://www.zao-zeo.ru/forum/index.php?topic=488.0
http://www.zao-zeo.ru/forum/index.php?topic=401.0

J48 см. http://www.zao-zeo.ru/media/files/docs/sirius270_rev1.2_circuit.pdf
Если поставить в 1-2, то есть "шанс" отключать аппаратное эхо сигналом BT_CTS (как GPIO).
Записан

KDM

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 46
Re: RS-485, tty, ECHO
« Ответ #2 : 13 Август, 2012, 11:31:56 »

> Это аппаратно.
ADM485 ?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: RS-485, tty, ECHO
« Ответ #3 : 13 Август, 2012, 13:33:11 »

> ADM485 ?

Если включён RE, то она принимает то что передаёт.
Записан