SIEMENS, DF&PD

Предыдущее посещение: Чт июл 07, 2016 17:58 Текущее время: Чт июл 07, 2016 17:58

Часовой пояс: UTC + 3 часа




 [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Получение данных по TCP
СообщениеДобавлено: Вт ноя 08, 2011 11:24 
Не в сети

Зарегистрирован: Вт ноя 08, 2011 10:57
Сообщения: 5
Сразу скажу, что не имел опыта стыковки с siemens, поэтому не судите строго.
Есть задача связи верхнего и нижнего уровня по "чистому" TCP. Мне необходимо написать приложение на C++, которое будет подключаться и обмениваться данными с контроллером (верхний уровень).
Железо: СPU414-3DP в паре с CP4443-1. По пути есть Scalance 204.
Протокольная часть: "Для обмена используются S7-соединения с использованием протокола TCP/IP c применением функций блочной передачи AG_LSEND / AG_LRECV" (вырезка из ТЗ протокола обмена)

Так как не удалось выудить информацию собственно вопросы:
1. Люди, которые делали нижний уровень заверяют, что связь можно реализовать на чистом TCP или UDP без использования ПО Siemens или сторонних библиотек. Так ли это?
2. В протокольной части (см. выше) указано "S7-соединения с использованием протокола TCP/IP". Правильно ли я понял, что используется закрытый (S7) протокол прикладного уровня поверх TCP, который делает невозможным реализацию связи на чистом TCP/UDP?
3. Допустим, предыдущий вопрос решается (ошибка в ТЗ или возможность реконфигурации нижнего уровня под "чистый TCP"), как реализуется подобная связь по TCP/UDP? Т.е. банальные вопросы системного программиста:
a) Кто клиент, кто сервер?
b) Какой базовый алгоритм работы в данном случае (с учетом того, что моя программа реализует как чтение, так и управление)?
с) Какой собственный протокол прикладного уровня лучше использовать (и надо ли)? Может быть, со стороны контроллера (точнее его ПО) уже есть какой-то базовый протокол, от которого стоит отталкиваться?

Если не трудно, ткните, пожалуйста, в конкретный документ, а то уже глаза пухнут от прочтения документации по 200-300 страниц. И совсем здорово будет заполучить исходник какой-нибудь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 11:38 
Не в сети
Известный Писатель

Зарегистрирован: Пт июн 25, 2010 13:15
Сообщения: 229
используйте библиотеку LibNodave
http://libnodave.sourceforge.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 11:50 
Не в сети

Зарегистрирован: Вт ноя 08, 2011 10:57
Сообщения: 5
Худанов Егор писал(а):
используйте библиотеку LibNodave
http://libnodave.sourceforge.net/


Спасибо за совет, но я указал, что нужно без использования стороннего ПО, включая эту библиотеку, т.к. за ее работу поручиться никто не может (она то может и работает).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 11:55 
Не в сети
Известный Писатель

Зарегистрирован: Пт июн 25, 2010 13:15
Сообщения: 229
Это не стороннее ПО - это библиотеки. Вызываете функции в своем С++ приложении и будет вам счастье.
Prodave - платные сименовские, Nodave - бесплатные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 12:05 
Не в сети

Зарегистрирован: Вт ноя 08, 2011 10:57
Сообщения: 5
Худанов Егор писал(а):
Это не стороннее ПО - это библиотеки. Вызываете функции в своем С++ приложении и будет вам счастье.
Prodave - платные сименовские, Nodave - бесплатные.


Да это понятно, вопрос был не в этом, посмотрите повнимательнее все 3 пункта. Интересует возможность обмена по чистому TCP/UDP. S7 - закрытый протокол, поэтому реализация в libnodave - это благо (все-таки человек кропотливо снифил трафик и пытался разобраться в закрытом протоколе). Но никто не пропустит ПО, которое будет управлять опасным объектом, если программист скажет: "Ну, вроде как-то так оно должно работать".
Да, с гарантией я могу использовать ProDave, но вопрос:
Возможно ли реализовать связь по TCP/UDP (транспортный уровень) с использованием собственного (прикладной уровень) протокола? Вообще это реализуемо со стороны ПО контроллера (step7 программа для CP)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 12:15 
Не в сети
Известный Писатель

Зарегистрирован: Пт июн 25, 2010 13:15
Сообщения: 229
По сути вы можете сами организовать свой протокол или использовать существующие(104 или ModBus TCP к примеру).
Со стороны контроллера организуете отправку данных определлного формата в сеть(*_SEND) или прием и разборку этих данных(*_RCV). Предварительно устанавливаете соединение (TCON) с системой где стоит ваше приложение на определенный порт и общайтесь.

В теории как то так - тут двухсторонний обмен и структуру пакетов вы определяете сами.
Плюс библиотек в том что обмен данными осуществляется только со стороны приложения и в контроллере ничего дописывать не надо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 12:37 
Не в сети

Зарегистрирован: Вт ноя 08, 2011 10:57
Сообщения: 5
Ага, спасибо, значит возможность есть. Тогда может просветите:
1. Кто будет Socket-клиент, а кто - Socket-сервер, решается уже на уровне договоренности между программистами? Или со стороны ПО контроллера есть какие-то ограничения типа: "В настройках соединения для CP можно указать только socket-сервер/клиент".
2. Как обычно реализуется блочное (AG_SEND/AG_RECIVE) чтение/запись со стороны контроллера? Видел пример один, там чтение и запись были реализованы на разных соединениях (т.е. разные порты указаны), или это все дается на усмотрение программиста и выбор есть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 13:01 
Не в сети
Известный Писатель

Зарегистрирован: Пт июн 25, 2010 13:15
Сообщения: 229
Прошу прошения, может немного ввел в заблуждение, так как прочитал невнимательно первый пост.

на самом деле все даже намного проще.
1)В NetPro конфигурируете в CPU TCP/UDP соединение например с Other Station. (Указываете порты и адреса).
Там же указываете является ли контроллер инициатором установки соединения. если нет то установка возлагается на ваше ПО.
Данное соединение внутри контроллера по сути S7 соединение, а вот обмен будет по тому протоколу который выберете.
2)Соединений может быть несколько, на разные порты и с разными партнерами
3)В программе контроллера для блоков AG_SEND/AG_RECV указываете соединения по которым производить обмен и указываете данные которые засылать(в случае SEND) или куда складывать полученное (в случае RECV).
Структуру данных вы определяете сами.

4)Собираетесь ли вы только читать или писать данные или производить 2х сторонний обмен это вы уже сами договаривайтесь.
Повторюсь что соединений может быть несколько (по одному пишете по второму читаете или по 1му единственному и то и то)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 13:29 
Не в сети

Зарегистрирован: Вт ноя 08, 2011 10:57
Сообщения: 5
Отлично, спасибо большое за разъяснения. Буду пытать партнеров все-таки S7-протокол используется для обмена с внешней средой или нужно договариваться о собственном.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 13:53 
Не в сети
Известный Писатель

Зарегистрирован: Пт июн 25, 2010 13:15
Сообщения: 229
tristis писал(а):
Отлично, спасибо большое за разъяснения. Буду пытать партнеров все-таки S7-протокол используется для обмена с внешней средой или нужно договариваться о собственном.

S7 протокол используется для обмена данными между аппаратами Siemens,он закрытый и для вашей задачи совершенно неинтересен.

Вам остается только создать ТСР соединение и обмениваться через него данными.Нужно определить только структуру данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 17, 2011 9:19 
Не в сети

Зарегистрирован: Чт ноя 17, 2011 9:18
Сообщения: 2
Помогло


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 05, 2013 12:42 
Не в сети

Зарегистрирован: Вт фев 05, 2013 6:45
Сообщения: 4
А есть ли пример готового решения? )

Можно ли по запросу с компьютера начать передачу данных на него с ПЛК?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 10:23 
Не в сети
Известный Писатель

Зарегистрирован: Вт июл 06, 2010 11:44
Сообщения: 315
Откуда: Газ-Система-Сервис Пермь
site.programmer писал(а):
Можно ли по запросу с компьютера начать передачу данных на него с ПЛК?


В случае использования коммуникационника (т.е. обмена через AG_LSEND/AG_RCV) состояние TCP соединения можно контролировать с помощью функции AG_CNTRL. По данным которое вернет функция можно определить что соединение установлено (в вашем случае со стороны ПК открыт сокет) и начать передачу.
В случае UDP протокола, соединение не устанавливается как таковое, и функция AG_CNTRL всегда "говорит" что соединение установлено.
В случае PN (т.е. обмен через TSEND/TRCV), наверно, тоже есть спрособ контролировать состояние соединения, но я не делал.

В любом случае, на мой вкус, было бы правильней ввести управление обменом через протокол, т.е. через заранее оговоренные команды.

То топикастеру:
1) Связь можно реализовать на чистом TCP или UDP. Тип соединения задается в NetPro. При выборе TCP-connection будет "чистый" tcp/ip, при UDP - чистый UDP. Подмена терминов, фирменные аббривиатуры и другая тафталогия присутствует у сименса повсеместно, так что привыкайте.
2) Вы правильно сказали что S7 - протокол прикладного уровня. Необходимости в его использовании нет. Да и смысла скорее всего - тоже.
3а) На стороне контроллера сервер обозначается термином passive, клиент - active. Так же задается в NetPro при настройке соединения. (Или в конфигурации IP_CONF, если используется ран-тайм конфигурирование).
3б) Базовый алгоритм типовой - открыть соединение, читать, слать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 06, 2013 10:56 
Не в сети
Известный Писатель

Зарегистрирован: Вт июл 06, 2010 11:44
Сообщения: 315
Откуда: Газ-Система-Сервис Пермь
То топикастеру:

И еще совет. Если Вы вольны в выборе решений, то мой совет - использовать где это возможно UDP. Так как TCP на стороне контроллера реализован, мягко говоря, не важно.
Во-первых реализуется только блокированное чтение, т.е. функция RCV не признается что уже пришло 90 байт, если размер буфера приема у вас соответствует 100 байтам. В форуме есть соответствующая тема.
Во-вторых происходит "буферизация" принятых данных в коммуникационнике. При определенных обстоятельствах вы можете получать пакеты которые, например, передаются с периодом 100мс с задержкой порядка 5 секунд!
В третьих, в коммуникационнике реализована "странная" логика установки и разрыва соединения. Так, коммуникационник не разрывает соединение даже если ЦПУ переходит в стоп.
Ну и еще кое-что по мелочи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 21, 2013 9:28 
Не в сети

Зарегистрирован: Чт фев 21, 2013 9:20
Сообщения: 8
А как настроить NetPro или HW Config? если необходино связать CPU 412-2 и контроллер другой фирмы, например B&R Automation(в качестве slave)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 21, 2013 10:14 
Не в сети
Начинающий писатель

Зарегистрирован: Ср июл 04, 2012 10:30
Сообщения: 84
A.Stas писал(а):
А как настроить NetPro или HW Config? если необходино связать CPU 412-2 и контроллер другой фирмы, например B&R Automation(в качестве slave)

Добавить Other station к сети в NetPro.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 21, 2013 10:34 
Не в сети

Зарегистрирован: Чт фев 21, 2013 9:20
Сообщения: 8
В Other station мы указываем IP по которому, как я понимаю, и связывается сеть. Но у коммуникационника slave-контроллера адрес ни как не сконфигурировать. В инструкции написано, что IP адресс slave-модулю присваивает контроллер сети.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 21, 2013 10:46 
Не в сети
Начинающий писатель

Зарегистрирован: Ср июл 04, 2012 10:30
Сообщения: 84
A.Stas писал(а):
В Other station мы указываем IP по которому, как я понимаю, и связывается сеть. Но у коммуникационника slave-контроллера адрес ни как не сконфигурировать. В инструкции написано, что IP адресс slave-модулю присваивает контроллер сети.


У коммуникационника slave-контроллера адрес динамический что ли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 21, 2013 10:55 
Не в сети

Зарегистрирован: Чт фев 21, 2013 9:20
Сообщения: 8
LIV писал(а):
У коммуникационника slave-контроллера адрес динамический что ли?


Скорее всего так и есть


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 21, 2013 11:07 
Не в сети
Начинающий писатель

Зарегистрирован: Ср июл 04, 2012 10:30
Сообщения: 84
Проблема. Сименсу нужен статический адрес. Или может какой-нибудь промежуточный шлюз замутить.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 30 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yahoo [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group