Удалённый доступ к контроллеру Siemens S7-1200 через веб-интерфейс

Удалённый доступ к контроллеру Siemens S7-1200 через веб-интерфейс

Контроллеры Siemens серии S7-1200 имеют встроенный веб-сервер, на котором крутится встроенный веб-интерфейс. Штука очень полезная, можно даже писать свои странички, использовать CSS и JavaScript, но особенно радует возможность чтения и изменения переменных.

Web-интерфейс S7-1200

Web-интерфейс S7-1200

Однако по умолчанию переменные необходимо вносить каждый раз при новом посещении страницы, для изменения переменных необходимо авторизоваться, что жутко неудобно, ибо сессия слетает достаточно быстро. Исправим это.

Рассказывать буду на своём примере, контроллер Siemens используется у меня для управления освещением в частном доме. Всего 40 групп освещения, т.е. участвует 40 входов и 40 выходов контроллера. Каждому входу соответствует выход. В самом контроллере написан простой код на SCL; при подаче кратковременного сигнала на вход выход замыкает/размыкает реле:

Переменные такие:

Переменные

Переменные

В контроллер загружена одна единственная страничка get.html, которая возвращает состояние всех 40 выходов в формате JSON.

Больше страничек в памяти контроллера у меня нет.

Про настройку и написание страниц для веб-сервера контроллера можно почитать здесь (на английском).

Для удобства хочется иметь под рукой приложение, через которое легким движением руки можно включать/выключать любую лампочку в доме, а также иметь возможность управлять группами света, например, выключать свет поэтажно.

Так как встроенный веб-сервер не позволяет без авторизации изменять переменные даже самописным страничкам, я разместил всё на отдельном сервере. Имея небольшие познания программирования на PHP, писать буду на нём.

Для авторизации на контроллере напишем функцию:

Необходимо знать состояние выходов, как определнной группы, так и одного:

Cчитывать состояние выходов через встроенную страничку также можно, но проще будет воспользоваться своей. Чего не скажешь об изменении их состояния. Осталась последняя функция, которая как раз будет изменять состояние выходов:

Строка запроса на страничке изменения переменных у контроллера имеет следующий вид:

http://192.168.1.2/VarStateRedirect.mwsl?PriNav=PriNav&v1=q1.0&modifyvalue_t1=true&gobutton_t1=Go

Она может быть сколь угодно длинной, чем мы и воспользовались. Вот и всё, при помощи данных функций можно управлять выходами контроллера:

Можно пойти дальше и написать удобный интерфейс:

Управление светом

Управление светом

Теперь свой ленивый зад можно не отрывать от дивана :). Такой же подход можно использовать для управления другим оборудованием при помощи контроллера, а не только светом. Автополив, насосы, откатные ворота и прочее.

Спасибо за внимание.

8 комментариев

Theodore

about 4 года назад

Доброго времени суток! Подскажите пожалуйста как удаленно можно задавать переменные? К примеру указать температуру в помещение

Ответить

memtew

about 4 года назад

Если в скриптах, то при помощи данной ссылки, предварительно авторизовавшись как Администратор: http://192.168.1.2/VarStateRedirect.mwsl?PriNav=PriNav&v1=q1.0&modifyvalue_t1=true&gobutton_t1=Go Выхода по сути те же самые переменные, поэтому вместо q1.0 вам необходимо указать переменную, которую вы используется в DB-шке. modifyvalue_t1 - это значение, которое вам необходимо задать. Через веб-браузер страница доступна по адресу: http://192.168.1.2/Portal/Portal.mwsl?PriNav=Varstate Также можно написать свою страничку, ссылку на статью об этом я давал в статье.

Ответить

Theodore

about 4 года назад

Подскажите пожалуйста! Как к примеру реализовать для переменных длина и количество? Пример: есть длина "$length" и количество "$number", тогда чтобы мне передать переменные нужена такая ссылка: http://192.168.1.2/VarStateRedirect.mwsl?PriNav=PriNav&length1=$length&number1=$number&modifyvalue_t1=true&gobutton_t1=Go Правильно я Вас понял?

Ответить

memtew

about 4 года назад

Не совсем верно. Разберем ссылку: http://192.168.1.2/VarStateRedirect.mwsl?PriNav=PriNav&v1=q1.0&modifyvalue_t1=true&gobutton_t1=Go Здесь: v1=q1.0 - это переменная q1.0 modifyvalue_t1=true - это значение переменной q1.0 gobutton_t1=Go - это подтверждение изменения переменной q1.0. Для нескольких переменных необходимо изменять цифру у v1, modifyvalue_t1, gobutton_t1. Например, с вашими переменными ссылка будет такой (допустим $length=60, $number=20): http://192.168.1.2/VarStateRedirect.mwsl?PriNav=PriNav&v1=length&modifyvalue_t1=60&gobutton_t1=Go&v2=number&modifyvalue_t2=20&gobutton_t2=Go

Tomas

about 4 года назад

Добрый день! А что находится в get.html файле? http://".$ip."/awp/".$programName."/get.html Исходный файлы не могли бы выложить?

Ответить

memtew

about 4 года назад

Исходный код данной страницы я выложил в статье, но забыл подписать, что это за страница. Сейчас поправил.

Ответить

Антон

about 2 года назад

Привет! Не получается отобразить полученные данные в формате JSON ни в каком виде, не в виде строки ни в виде элементов массива. Пытается перебросить на страницу http://localhost/Portal/Portal.mwsl?PriNav=Awp Тестирую на локальном хосте.

Ответить

memtew

about 2 года назад

Привет, а необходимые страницы были загружены в контроллер? DB-шки сгенерировал? Нужную строку для того, чтобы загруженные странички работали, в Cyclic interrupt записал?

Ответить

Leave a Comment

Please be polite. We appreciate that.
Your email address will not be published and required fields are marked