Понимание RS-485 в Linux - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь изучить интерфейс RS-485, отправляя данные между двумя компьютерами Linux. На главном компьютере установлена ​​Ubuntu16.04, а на другом запущена система на основе Debian с ядром 4.19.

Основной ПК имеет адаптер USB-RS-485, а другой ПК имеет интерфейс RS-485.

Первоначально я предполагал, что могу просто отобразить данные на интерфейсе, но не смог. Если бы я подключился к Picocom, я мог бы ввести данные, но не отправлять их. Оглядевшись, я понял, что это потому, что оба компьютера ждут RTS, которую нужно как-то переключить.

Затем я пришел к выводу, что мне нужна какая-то программа на C для инициализации интерфейса (пожалуйста, исправьте меня, если я ошибаюсь).

Я пошел https://www.kernel.org/doc/Documentation/serial/serial-rs485.txt Где это пример кода для настройки RS-485.

Тем не менее, когда я пытаюсь запустить, он всегда терпит неудачу в:

status = ioctl(fd,TIOCSRS485, &ctrl485);
  if (status) {
    printf("ERROR PORT 1! TIOCSERSETRS485 failed %i", status);
    return -1;
  }

Я погуглил каждую комбинацию RS-485, о которой могу подумать, но большая часть информации касается Modbus и датчиков. Я также читал о ioctls, но я все еще застрял.

Если у кого-то есть опыт или советы, я был бы очень благодарен.

С наилучшими пожеланиями, W

1 Ответ

0 голосов
/ 24 мая 2019

Я не могу быть полностью уверен, но я не думаю, что вам вообще нужно играть с переключением RTS, поскольку кажется, что ваши устройства поддерживают аппаратный полудуплекс по умолчанию.

Проверьте следующее, чтобы убедиться, чтоправильная настройка оборудования:

В соответствии с инструкцией к вашему Cincoze вы должны выбрать режим работы каждого порта на уровне BIOS:

BIOS settings for COM2

Затем убедитесь, что ваш USB-кабель также работает в полудуплексном режиме с микропереключателями (по умолчанию все должно быть в порядке):

USB Cable settings

И, наконец, выполните командуубедитесь, что ваши устройства подключены правильно, следуя этим схемам:

Wiring diagrams

Если ваш кабель не слишком длинный (может быть, менее 50 метров?)Вам не нужно слишком сильно беспокоиться о нагрузке или обрыве, иначе вам может понадобиться добавить сопротивление на компьютер DB9 и переместить переключатели на USB-кабеле.

В качестве последнего комментария учтите, что ваши устройства также поддерживают полнодуплексный режим;если вы измените настройки согласно приведенным выше инструкциям, но вместо этого выберите RS422 и выполните 4-проводную настройку, вы сможете открыть терминал на обоих компьютерах и одновременно отправлять и получать, если вам это нужно.

РЕДАКТИРОВАТЬ 1: Для полноты я добавляю сюда несколько ссылок для тех, кто работает с устройствами, которые не поддерживают аппаратное управление направлением:

RS485: Неподходящий ioctl для устройства

Pymodbus - считывать регистр ввода счетчика энергии через rs485 на бородавке малины pi3

EDIT 2: Как обсуждалось в комментариях ниже, для этого конкретного оборудования, где вы можете выбирать различные режимы работы в BIOS, следует помнить, что при выборе нового режима работы наименование портов (на уровне ОС) может измениться.,Используйте $cat /proc/tty/driver/serial, чтобы узнать подробности о вашем оборудовании.

...