cbone
@cbone
Серверная инфраструктура

Linux + .sh + RS-232 + RS-485 как всё это подружить?

Всем привет. Имеется ПЛК, на котором крутится linux. К данному ПЛК по интерфейсу RS-485 подключен БПИ с датчиком температуры. Также подключен GPRS/GSM-модем по RS-232. Необходимо принимать значение температуры с БПИ по 485 интерфейсу (на БПИ реализован Modbus) и по 232 интерфейсу передавать АТ-команды на модем и отправлять значения на сервер. В общем необходимо создать телеметрию.

К ПЛК подключены:

1. /dev/ttyS1 -> БПИ с датчиком температуры (RS-485)

2. /dev/ttyS2 -> Модем (RS-232)


Столкнулся с проблемой общения ПЛК с переферийными устройствами. В данной сборке линукса есть терминал microcom (minicom'a нету) и командный интерпретатор sh.

Подключил модем, при помощи microcom подключился к модему и начал его запускать. При запуске он выводит сервисную информацию, всё нормально. Пытаюсь ввести AT, но не получаю от него ответа. Есть предположение что нужно в конце строки добавлять перенос и возврат каретки. Пробовал вставлять из ASCII, не помогло, а в терминале настроек подобных не нашёл, дабы он очень сильно урезан.

Вообще в идеале хочется получить скрипт .sh, который будет исполняться по крону, собирать информацию по RS-485 и передавать её на модем по RS-232.

Предполагаю, что нужно засылать запрос на /dev/ttyS* и полученный ответ уже обрабатывать. Но не могу понять как именно это реализовать. Пробовал так:
stty -F /dev/ttyS0 115200
echo "AT" > /dev/ttyS2
cat /dev/ttyS2


Но cat ничего не выводил. Как реализовать отправку и приём данных в моём случае?
  • Вопрос задан
  • 7631 просмотр
Пригласить эксперта
Ответы на вопрос 5
noonv
@noonv
а написать программу на C не получится? )
Ответ написан
mva
@mva
CEO, CTO, Lua/Gentoo/IPv6 Pioneer
Пытаюсь ввести AT, но не получаю от него ответа.

echo «AT» > /dev/ttyS2
cat /dev/ttyS2


На сколько мне не изменяет память, делается наоборот — сначала cat, чтобы инициализировать потом echo (даже, вроде, первый echo ещё и, AFAIR, с какими-то спецсимволами чтобы инициализировать)
Ответ написан
mva
@mva
CEO, CTO, Lua/Gentoo/IPv6 Pioneer
запускать с амперсандом в фоне, а потом убивать cat отдельно. (ну, либо в другой консоли/вкладке).
А вот если сделать ^Z, то он фризнется и толку от него будет мало, так что не вариант.
Ответ написан
microphone
@microphone
Сломалось - читай логи!
Если бы это была FreeBSD, то всё решилось бы шелом в «cu» и «expect» (второе кстати изначально и создано для общения с модемом, на сколько я помню)
Ответ написан
Комментировать
microphone
@microphone
Сломалось - читай логи!
если интересно про shell скрипт на bash /sh прошу в личку
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы