ЗАО «ЗЭО»

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

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

Новости:

Автор Тема: RS-485 под Linux в Тионе-28  (Прочитано 17720 раз)

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

SU

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 6
RS-485 под Linux в Тионе-28
« : 17 Апреля, 2013, 15:55:35 »

При попытке передаче из ttySP2 было установлено, что на выходном разъеме сигнал отсутствует.
Начал смотреть осциллографом и обнаружил, что на входе передатчика (конт. 4 микросхем DA10 и DA12) сигнал есть. Сигнал PORT2_RS485_OFF находится постоянно в высоком уровне, соответственно на входе разрешения передатчика (конт. 3) – низкий уровень, который запирает передатчик. Поэтому на выходе ничего не может быть.
Пошивка Linux – та, которая была при поставке. Из лога загрузки:

Linux version 2.6.35.3-571-gcca29a0 (danila@debian) (gcc version 4.4.4 (4.4.4_09
.06.2010) ) #1 Wed Aug 22 04:26:44 MSK 2012

Пробовал зашивать образы с сайта  tion-pro28_linux_svn2127.zip и tion-pro28_linux_svn2203.zip. Результат – тот же.
Сроки сдачи системы подпирают. Пока аппаратно переключил этот порт в режим RS-232 и работаю через преобразователь RS-232 / RS-485. Но это годится только для отладки, перед поставкой надо сделать по-нормальному.
Записан

Danila

  • Administrator
  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 703
Re: RS-485 под Linux в Тионе-28
« Ответ #1 : 17 Апреля, 2013, 22:08:12 »

Проверьте осциллографом сигнал на ножке 2 микросхемы DD12. Должен меняться. А также, все ли в порядке с резистором R76.
Записан

SU

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 6
Re: RS-485 под Linux в Тионе-28
« Ответ #2 : 18 Апреля, 2013, 08:39:34 »

   На ножке 2 микросхемы DD12  - это  сигнал PORT2_RS485_OFF, про который я написал, что
он постоянно в высоком уровне. Резистор R76 - исправный. Все это проверял на двух экземплярах
платы.
Записан

Danila

  • Administrator
  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 703
Re: RS-485 под Linux в Тионе-28
« Ответ #3 : 19 Апреля, 2013, 14:15:03 »

В образе от 2012/12/10 управление сигналом PORT2_RS485_OFF реализовано.
При выполнении команды "echo Hello > /dev/ttySP2" сигнал меняется.

Возможно у Вас аппаратная проблема, но на 2-х платах - маловероятно.

Это не последняя версия, обновите ее:
Linux version 2.6.35.3-571-gcca29a0 (danila@debian) (gcc version 4.4.4 (4.4.4_09.06.2010) ) #1 Wed Aug 22 04:26:44 MSK 2012
Записан

SU

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 6
Re: RS-485 под Linux в Тионе-28
« Ответ #4 : 22 Апреля, 2013, 15:47:00 »

  Зашил образ от 2012/12/10.
  Ваш пример с команды с терминала работает, сигнал PORT2_RS485_OFF переключается,
сигнал проходит на выходной разъем.
  Запустил свою программу, переключения нет. Работа с последовательным портом простейшая,
убрал все наcтройки termios остались две строчки:
    fd2 = open ("/dev/ttySP2", O_RDWR | O_NOCTTY | O_NDELAY );
    write (fd2, cmd, dwToWrite2);
  На Тионе-Про2 все работало без проблем.

  Завершаю свою программу, посылаю команду с терминала - сигнал переключается.
  Пытаюсь разобраться в чем отличие, но пока ничего не получается.
Записан

Setekh

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 12
Re: RS-485 под Linux в Тионе-28
« Ответ #5 : 22 Апреля, 2013, 17:02:19 »

Тоже начал разбираться с RS-485, работает как то странно. если посылать до 16 символов, то шлется какая фигня, если больше 16 тогда получаем следующее (первая колонка что посылаем, вторая что приходит):
0FEDCBA9876543210 876543210
10FEDCBA9876543210 9876543210
210FEDCBA9876543210 A9876543210
3210FEDCBA9876543210 BA9876543210
43210FEDCBA9876543210 CBA9876543210
543210FEDCBA9876543210 DCBA9876543210
6543210FEDCBA9876543210 EDCBA9876543210
76543210FEDCBA9876543210 FEDCBA9876543210
876543210FEDCBA9876543210 876543210
9876543210FEDCBA9876543210 9876543210
A9876543210FEDCBA9876543210 A9876543210
BA9876543210FEDCBA9876543210 BA9876543210
CBA9876543210FEDCBA9876543210 CBA9876543210
DCBA9876543210FEDCBA9876543210 DCBA9876543210
EDCBA9876543210FEDCBA9876543210 EDCBA9876543210
FEDCBA9876543210FEDCBA9876543210 FEDCBA9876543210
Посылаю просто через терминал например: echo CBA9876543210FEDCBA9876543210 > /dev/ttySP2
Так же при посылке до 16 символов получаю в терминале ошибку "mxs-auart mxs-auart.2: Unhandled status 520080"
Например для посылки A9876543210 получаю PNœ“SÓ&¦LL… в Hex: 50 4E 9C 93 53 13 D3 26 A6 4C 4C 85
Что я делаю не так?

Записан

SU

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 6
Re: RS-485 под Linux в Тионе-28
« Ответ #6 : 23 Апреля, 2013, 16:17:40 »

   Написал маленькую тестовую программку и начал экспериментировать.
   Дошел до следующего. Сделал бесконечный цикл, в котором:
     1. Открывается ttySP2 без флага O_NDELAY;
     2. Выводится несколько байт (с ожиданием конца вывода);
     3. Закрывается ttySP2.
   В таком варианте переключение заработало, на разъеме - правильные данные.
   Однако практической пользы от такого режима не вижу. Не понятно, как
принимать ответные данные с этого порта, да еще с учетом того, что присутствует
эхо от передаваемых данных.
Записан

Danila

  • Administrator
  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 703
Re: RS-485 под Linux в Тионе-28
« Ответ #7 : 24 Апреля, 2013, 21:17:38 »

Будем разбираться.
О результатах сообщим.
Записан

aborilov

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 90
Re: RS-485 под Linux в Тионе-28
« Ответ #8 : 03 Июня, 2013, 11:37:22 »

Добрый день!
Есть ли какие-нибудь сдвиги?
Уже в производство почти запустили, а тут вылезла это проблема...
Записан

lman

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: RS-485 под Linux в Тионе-28
« Ответ #9 : 03 Июня, 2013, 12:37:23 »

   Написал маленькую тестовую программку и начал экспериментировать.
   Дошел до следующего. Сделал бесконечный цикл, в котором:
     1. Открывается ttySP2 без флага O_NDELAY;
     2. Выводится несколько байт (с ожиданием конца вывода);
     3. Закрывается ttySP2.
   В таком варианте переключение заработало, на разъеме - правильные данные.
   Однако практической пользы от такого режима не вижу. Не понятно, как
принимать ответные данные с этого порта, да еще с учетом того, что присутствует
эхо от передаваемых данных.

Не совсем понятно зачем циклически открывать порт и закрывать его? это же не сокет.
Если у вас приложение однопоточное, то один раз открыли и в конце программы закрыли.
Сколько работаем нет проблем с 485 интерфейсом.
Записан

aborilov

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 90
Re: RS-485 под Linux в Тионе-28
« Ответ #10 : 03 Июня, 2013, 13:35:42 »

можно кусок кода, где выработаете с портом? открытие, чтения, запись.
Я столкнулся с проблемой описанной выше
echo "Hello" > /dev/ttySP2
работает, а из программы нет.
Записан

lman

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: RS-485 под Linux в Тионе-28
« Ответ #11 : 03 Июня, 2013, 14:24:39 »

<=========== ОТКРЫТИЕ ПОРТА ======================>

  port = ::open(sPort, O_RDWR | O_NOCTTY | O_NDELAY);
  if(port == -1)
  {
    prn_error("невозможно открыть");

    return 1;
  }

   .......

  if(error==-1)
  {
    ::close(port);
    prn_error("невозможно изменить настройки ");

    return1;
  }

  new_port_settings.c_cflag = baudr | CS8 | CLOCAL | CREAD;
  new_port_settings.c_iflag = IGNPAR;
  new_port_settings.c_oflag = 0;
  new_port_settings.c_lflag = 0;
  new_port_settings.c_cc[VMIN] = 0; 
  new_port_settings.c_cc[VTIME] = 0;
  error = tcsetattr(port, TCSANOW, &new_port_settings);
  if(error==-1)
  {
    close(port);
    prn_error("невозможно применить параметры ");

    return 1;
  }

  if(ioctl(port, TIOCMGET, &status) == -1)
  {
    perror("невозможно получить статус порта");

    return 1;
  }

   ......

  if(ioctl(port, TIOCMSET, &status) == -1)
  {
   .........
    return 1;
  }


<======= чтение из порта ==========>

int n = ::read(port, buf, size);

<======= запись в порт ==========>

int = ::write(port, &bytes, size);
Записан

aborilov

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 90
Re: RS-485 под Linux в Тионе-28
« Ответ #12 : 03 Июня, 2013, 16:05:56 »

не работает.
Если просто сделать write и после этого завершить программу, то данные пошлются, а если
после write, программа продолжает работать, то ни чего не шлется.
Записан

lman

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: RS-485 под Linux в Тионе-28
« Ответ #13 : 03 Июня, 2013, 16:51:48 »

не работает.
Если просто сделать write и после этого завершить программу, то данные пошлются, а если
после write, программа продолжает работать, то ни чего не шлется.

можно посмотреть на Ваш конечный код окрытия порта, приёма и отправки, надеюсь, что он не в бесконечном цикле?
И, кстати, у Вас правильно настроены флаги DTR, RTS?
« Последнее редактирование: 03 Июня, 2013, 16:54:33 от lman »
Записан

aborilov

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 90
Re: RS-485 под Linux в Тионе-28
« Ответ #14 : 04 Июня, 2013, 10:22:35 »

https://gist.github.com/aborilov/5703954
а почему в бесконечном цикле не должно работать?
Записан