Я пытаюсь изучить интерфейс 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;
}
Я искал в Google все возможные комбинации RS-485, но большая часть информации касается Modbus и датчиков. Я также читал об ioctls, но все еще застрял.
Если у кого-то есть опыт или советы, я был бы очень благодарен.
С уважением, W
ctrl485
. Покажи, как ты открываешьfd
. Какой типstatus
? - person KamilCuk   schedule 24.05.2019status:-1,fd:3, content of ctrl485:0,1,0,1
. - person wild_w   schedule 24.05.2019errno
? - person KamilCuk   schedule 24.05.2019struct serial_rs485 rs485conf;
, если это автоматическая переменная, ее полеflags
может содержать мусор (выполните инициализацию с помощью struct .. rs485conf = {0}). Also, some ioctls may return a positive int on success -- better to check with
if (статус ‹0) ...` - person mosvy   schedule 24.05.2019