![]() |
|
Модераторы: xvr |
![]()
|
|
| plica98 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
Добрый день, уважаемые Коллеги.
Возникли проблемы при работе с RS485 (плата PCI-1602B - двухголовая). При приеме идет какой-то мусор из порта. Может кто- нибудь что подскажет или какие-нибудь исходники скинет. Может не совсем корректно проинициализировал плату ? Заранее благодарю за помощь и внимание. |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Напишыте минимальный пример, который демонстрирует проблемы, и покажыте. Возможно, кто-нибудь что-нибудь в нём поймёт и объяснит, что не так.
PS Да, проблемы с приёмом на подобных каналах -- это обычно несоответствие скорости или битности. Но таки всякое можэт быть. |
|||
|
||||
| plica98 |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
Добрый день, уважаемые Коллеги.
ПЕРЕДАЧА
ПРИЕМ
Передающая пишет в порт по 5 байт с интервалом в 1сек. Приемная должна читать по 5 байт, а читает мусор. Может FIFO не задано ? Как задать ? Это сообщение отредактировал(а) plica98 - 21.12.2012, 11:33 |
||||||||
|
|||||||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
1) У Вас, я смотрю, какой-то юникс? Почему бы тогда для начальной приладки не вопсользоваться простыми написанными средствами -- stty+cat или там cu -l или minicom.
2) Выглядят программы вроде нормально, собирать не пробовал. ожыдание через FIONREAD немного странное, но для пяти байт буферов должно хватить (там 8k вроде стандартно). 3) Проверьте физику. + должэн быть к +, - к -. Терминаторы по 120 ом (с обоих сторон по-моему). |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Посмотрите в документацию на плату (и/или на ее драйвера) - не надо ли каких либо явных манипуляций по управлению направлением передачи информации, т.к. RS485 - это полудуплекс, и одновременно принимать и передавать оно не может физически
|
|||
|
||||
| plica98 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
Плата сама управляет переключением прием-передача.
У платы две головы. Я соединил выход одной с входом другой и наоборот. Иногда удается что-то принять. Причем, для этого надо запустить вначале программу приема, а потом передачу. Такое впечатление, что как бы синхронизация нарушается. Добавлено через 5 минут и 2 секунды Без операционки на физическом уровне я работаю с этой платой нормально. А вот хотел сделать под Linux (у меня Fedora стоит). Документации на драйвера нет. Через IOCTL тоже нет документации. Может кто-то уже с ней работал под Linux. Тем более я хотел ее использовать на не стандартных скоростях (192000). |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Вот это как раз неудивительно. Добавлено через 39 секунд А, да, чуть не забыл. Все системные вызовы надо проверять на ошыбки, и если есть -- информировать. Часто всплывают очень любопытные вещи. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
plica98, исправь свой пост с кодом оформив сам код в теги [code=cpp] [/code]
|
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Зато, наверняка, есть исходники. Если нет -- ну, даташыт с описанием регистров у тебя вроде есть -- драйвер serial порта -- это в районе тысячи-полутора строк, из которых половину можно взять из существующего обычного. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Это не про нее? http://www.fccps.cz/download/adv/frr/pci-1...E.pci-16xx.html
|
|||
|
||||
| plica98 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
Да, это она. Большое спасибо за участие. Пока сдвигов нет, надо разбираться. |
|||
|
||||
| rsm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: 3 Всего: 62 |
Доводилось работать с разными платами этой серии, их нормальная инициализация действительно проблема
Вот кусок из старых исходников (проверки на ошибки убраны для уменьшения кода):
В данном примере порт открывается только для чтения. Для записи нужно: поменять флаги open (строка 7), добавить cfsetospeed(&tio, PORT_SPEED) после строки 10 и всё остальное оставить без изменений. И таки да: использование ioctl(FIONREAD), причём ещё и в цикле - это очень плохая идея. Данная серия плат славится своими глюками в части передачи данных пакетами фиксированной длины, поэтому ioctl лучше оставить в покое и формировать пакеты программно, внутри select'а набивая массив и уже его разбивая по пакетам. Хотя это крайняя мера, лично у меня приведённый выше код делил данные по пакетам без всякого шаманства (см. PACKET_SIZE). И ещё: "очищать" порт попытками вычитать из него все данные - это ещё более худшая идея. Для этого есть вызов tcflush(3). Общие рекомендации: - настройки портов должны быть полностью идентичны (скорость, разрядность, чётность, контроль потока и пр.); - размеры пакетов желательно делать полностью идентичными (отправляется 16 байт и принимается 16 байт); |
|||
|
||||
| plica98 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
RSM, спасибо за помощь.
Но, как я уже говорил, без операционки на физическом уровне я работаю с этой платой нормально. Причем работаю даже на максимальных скоростях и дуплексном режиме. Проблем нет ни с приемом, ни с передачей пакетов любой длины. Плата отлично работает, нареканий никаких нет. Думаю, что проблема не в плате, а в софте. Вот и хотелось бы разобраться. Можно же с ней работать, наверное, и на низком уровне (через IOCTL). Вот и хочу сделать под Linux (у меня Fedora стоит). Плохо что документации никакой нет. |
|||
|
||||
| rsm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: 3 Всего: 62 |
Очень может быть
tc[gs]etattr - это обёртка над ioctl. Проблема скорее в том, что единственные (?) имеющиеся дрова врубают в ядро нехилый костыль, что запросто может приводить к феерическим багам. По видимому, разработчик не нашёл иного пути Какой именно документации - по платам? Не думаю, что Advantech внезапно откроет все спецификации... |
|||
|
||||
| plica98 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 12.3.2012 Репутация: нет Всего: нет |
RSM. Документации ADVANTECH IOCTL |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |