Имеется такая задачка.
Нужно вести статистику включений/выключений ПЛК и, условно говоря, нажатия какой-либо кнопки.
S7-300 Step7 подключен через профинет.
Статистику нужно вести на компьютере, в каком формате - это уже вторично, т.е. не особо важно.
Никто не сталкивался с подобным вопросом?
Допустим, организуем циклическую запись в датаблок (буфер), ну пускай на 20-50 записей.
Дальше возникают вопросы - как передавать на ПК?
Проблемка в том, что ПК может быть включен гораздо позже после старта ПЛК, может быть перезагружен и тд.
И нужно как-то синхронизировать этот буфер с таблицей на ПК.
СКАДЫ нет и не будет. Но есть рантайм Винфлекс и вообще есть возможность устанавливать что-то самописное.
И еще вопрос - как отследить выключение ПЛК?
Ведение архива в ПЛК
- yur
- Специалист
- Сообщения: 112
- Зарегистрирован: 26 дек 2016, 19:47
- Откуда: Minsk
- Контактная информация:
Ведение архива в ПЛК
Киров репортинг!
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Ведение архива в ПЛК
Собирали статистику с контроллеров по профинет на станцию (компьютер + рантайм Винфлекс).
Если ПЛК и ПК могут независимо друг от друга включаться и выключаться, а архив надо вести, то напрашивается еще одно отдельной устройство слежения.
Не слишком ли? Может надо упростить требования?
Если ПЛК и ПК могут независимо друг от друга включаться и выключаться, а архив надо вести, то напрашивается еще одно отдельной устройство слежения.
Не слишком ли? Может надо упростить требования?
- yur
- Специалист
- Сообщения: 112
- Зарегистрирован: 26 дек 2016, 19:47
- Откуда: Minsk
- Контактная информация:
Re: Ведение архива в ПЛК
Пока хочется думать что не слишком.Автоматизатор писал(а): Не слишком ли? Может надо упростить требования?
а) Контроллер всего один
бэ) комп вроде бы должен всегда работать, но иногда его могут забыть включить сразу, либо перегрузить если чего с ним не так.
вэ)События (статистику которых необходимо вести) в ПЛК будут возникать не так часто, по идее буфер на полста записей должно хватить на пару дней.
Пока не очень понятно как синхронизировать.
Если например на момент старта рантайма, в буфере уже лежит пара новых записей, которые еще не перенесены в архивный файл на ПК
Киров репортинг!
Re: Ведение архива в ПЛК
Контроллер может передавать данные любой сложности и структуры через TCP, для этого надо изучать библиотечные функции TSEND_C, TRCV_C. Можно реализовать передачу в формате файла csv, например. И это было бы логичным и понятным всем.
Можно передавать также в простом формате JSON, многие системы умеют работать с этой штукой, но в конкретной задаче этот формат избыточен, судя по всему.
На TCP-функциях можно реализовать урезанный HTTP-протокол и HTML-контент, тогда в этом случае можно будет тестировать обмен данными в обычном браузере. Поставите себе такую планку - многому научитесь. Я помогу с примерами кода.
Можно передавать также в простом формате JSON, многие системы умеют работать с этой штукой, но в конкретной задаче этот формат избыточен, судя по всему.
На TCP-функциях можно реализовать урезанный HTTP-протокол и HTML-контент, тогда в этом случае можно будет тестировать обмен данными в обычном браузере. Поставите себе такую планку - многому научитесь. Я помогу с примерами кода.
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Ведение архива в ПЛК
Собирать данные штатными средствами поросто. А городить самопальный огород - сплошной геморрой. Разве что наработаться.
- yur
- Специалист
- Сообщения: 112
- Зарегистрирован: 26 дек 2016, 19:47
- Откуда: Minsk
- Контактная информация:
Re: Ведение архива в ПЛК
В Степ7 5.5 нет TSEND_C. Только TSEND.Михайло писал(а):Контроллер может передавать данные любой сложности и структуры через TCP, для этого надо изучать библиотечные функции TSEND_C, TRCV_C. Можно реализовать передачу в формате файла csv, например. И это было бы логичным и понятным всем.
.
А вообще, эта система похоже не работает с динамическими айпи адресами, получаемыми от DHCP
За примеры буду весьма благодарен.
Киров репортинг!
Re: Ведение архива в ПЛК
TSEND_C - это современный вариант TSEND, в которую встроены функции TCON/TDISCON. В вашем случае придётся ещё и эти функции использовать для установления соединения.yur писал(а):В Степ7 5.5 нет TSEND_C. Только TSEND.
Да, но если сильно надо, можете реализовать и DHCP врукопашную на этих функциях.yur писал(а):А вообще, эта система похоже не работает с динамическими айпи адресами, получаемыми от DHCP
Re: Ведение архива в ПЛК
вечером, если не забуду, скину
Re: Ведение архива в ПЛК
S7-1200 TIA Portal V13 SP2 BASIC TSEND_C, TRCV_C
https://my-files.ru/5z6w8y
Удалил из реального проекта лишнее. Все основное действо в блоке TCP.
https://my-files.ru/5z6w8y
Удалил из реального проекта лишнее. Все основное действо в блоке TCP.
- yur
- Специалист
- Сообщения: 112
- Зарегистрирован: 26 дек 2016, 19:47
- Откуда: Minsk
- Контактная информация:
Re: Ведение архива в ПЛК
Спасибо, будем пытаться разобраться.
Пока совсем непонятно как на компе принимать посылки с ПЛК.
И вопрос ( допустим используем TSEND)
Сначала я открываю соединение с помощью TCON
далее передаю информацию программе на ПК.
После этого нужно сразу закрывать соединение - TDISCON?
И как ПЛК будет реагировать если связь с компом отвалится?
запасного ПЛК к сожалению нет, экспериментировать не на чем.
Пока совсем непонятно как на компе принимать посылки с ПЛК.
И вопрос ( допустим используем TSEND)
Сначала я открываю соединение с помощью TCON
далее передаю информацию программе на ПК.
После этого нужно сразу закрывать соединение - TDISCON?
И как ПЛК будет реагировать если связь с компом отвалится?
запасного ПЛК к сожалению нет, экспериментировать не на чем.
Киров репортинг!
Re: Ведение архива в ПЛК
Ах да, на компьютере можно работать прямо в браузере, пишите примерно так:
http://192.168.1.40:2000/?position=300&quantity=2
или
http://192.168.1.40:2000/?position=300& ... &support=1
ПЛК разбирает строку position=300, quantity=2, support=1, проверяет на "вшивость" и переписывает в соответствующие тэги. В ответ выводится маленькая html-страница.
Это самый обычный HTTP-протокол, компьютер из браузера делает запрос GET, передавая параметры в URL. ПЛК получает, парсит запрос, отыскивая там "position=" и остальное. В ответ отсылает
Браузер воспринимает это как обычный ответ веб-сервера и обрабатывает, отображая html-страницу с текущим состоянием оборудования.
Всё это реализовано в этом небольшом проекте, только возможно в результате вырезания остального функционала что-то сломалось.
http://192.168.1.40:2000/?position=300&quantity=2
или
http://192.168.1.40:2000/?position=300& ... &support=1
ПЛК разбирает строку position=300, quantity=2, support=1, проверяет на "вшивость" и переписывает в соответствующие тэги. В ответ выводится маленькая html-страница.
Это самый обычный HTTP-протокол, компьютер из браузера делает запрос GET, передавая параметры в URL. ПЛК получает, парсит запрос, отыскивая там "position=" и остальное. В ответ отсылает
Код: Выделить всё
HTTP/1.1 200 OK
Content-Length: XXXX
Content-Type: text/html
<html>
<head><title>S7-1200 response</title></head>
<body><p>activated=X
ready=X
position=XXXX
left=XXXX
support=X</p>
<h1>[Статус позиционера] [Результат]</h1></body>
</html>
Всё это реализовано в этом небольшом проекте, только возможно в результате вырезания остального функционала что-то сломалось.
Re: Ведение архива в ПЛК
На уровне интернета раньше было именно так: подсоединился, передал данные запрос-ответ, закрыл соединение. Потом консорциум интернета добавил в HTTP-протокол постоянное соединение, точнее Keep-Alive (удерживать соединение) и выдержка времени в секундах, по умолчанию в течение обычно 5 минут. Этот вариант стал навязываться как основной и кажется браузеры так и делают.yur писал(а):Сначала я открываю соединение с помощью TCON
далее передаю информацию программе на ПК.
После этого нужно сразу закрывать соединение - TDISCON?
И как ПЛК будет реагировать если связь с компом отвалится?
ПЛК на уровне операционной системы не контролирует TCP-соединения, это должны делать вы сами в программе, как вам душе угодно.
Вам нужно решить вопрос: кто устанавливает соединение и делает первый запрос - компьютер или ПЛК. В моем проекте инициатором был компьютер. В принципе несложно перевернуть роли, но тогда нельзя будет тестировать из браузера, так как браузер всегда клиент (инициатор).