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 ничего не выводил. Как реализовать отправку и приём данных в моём случае?
На сколько мне не изменяет память, делается наоборот — сначала cat, чтобы инициализировать потом echo (даже, вроде, первый echo ещё и, AFAIR, с какими-то спецсимволами чтобы инициализировать)
запускать с амперсандом в фоне, а потом убивать cat отдельно. (ну, либо в другой консоли/вкладке).
А вот если сделать ^Z, то он фризнется и толку от него будет мало, так что не вариант.
Понятно, так оно будет работать. А как отправлять запрос с помощью shell-скрипта и полученный ответ записывать в переменную? И ещё интересует, как можно модему сообщить перевод строки и возврат каретки?
Это правильно или нет: echo "AT/0x0A/0x0D" > /dev/ttyS2?
По логике в test.txt должен записаться ответ от модема. Но этого не происходит (файл пустой).
Пробую вкл/выкл модема из сети — происходит инициализация и получаю в файл test.txt следующее: