PDA

Просмотр полной версии : ПЛК+ПК через Ethernet



Змий
11.03.2009, 00:13
Подскажите новичку.
Пишу программку на ПК для опроса ПЛК через Ethernet. Задача: по запросу от ПК ПЛК должен передать массив значений. Начну с простого :)
1) Как в ПЛК установить нужный IP адрес, если ПЛК выступает в роли slave?
2) Какие библиотеки лучше использовать для передачи данных?

Kirill
11.03.2009, 10:24
Подскажите новичку.
Пишу программку на ПК для опроса ПЛК через Ethernet. Задача: по запросу от ПК ПЛК должен передать массив значений. Начну с простого :)
1) Как в ПЛК установить нужный IP адрес, если ПЛК выступает в роли slave?
2) Какие библиотеки лучше использовать для передачи данных?

IP задается при наличии связи с ПЛК (например по rs232). Заходите в браузер ПЛК (на вкладке ресурсы), выбираете команды setip, setgate, setmask и задаете нужные вам значения.

Змий
25.03.2009, 21:02
Существуют ли готовые функции способные прочитать из Ethernet-порта либо записать в него данные напрямую? Если да, то какие? Подскажите плиз

Kirill
27.03.2009, 10:47
Существуют ли готовые функции способные прочитать из Ethernet-порта либо записать в него данные напрямую? Если да, то какие? Подскажите плиз

Как-то не понятно, что и как вы хотите передать. Какие данные и откуда? И по какому протоколу?

lunyov_i
07.04.2009, 11:51
Существуют ли готовые функции способные прочитать из Ethernet-порта либо записать в него данные напрямую? Если да, то какие? Подскажите плиз
OPC серверы применяй, например OPC Fastwel Modbus... Работает нормально... (http://www.fastwel.ru
Чтобы все нормально работало:
1. Контроллер и компьютер желательно чтобы были в одной сетке адресов
( хотя при работе через шлюз и этого не обязательно - но для новичка
делайте как указано:
Например у контроллера IP - адрес 192.168.1.2, а у компьютера
192.168.1.1
Тогда контроллер и компьютер можно соединять напрямую или
через коммутатор.

2. Нужно в контроллер добавить модуль MODBUS SLAVE для которого
ModBus FIX - должен быть TCP
3. К модулю MODBUS SLAVE добавить переменные - именно они будут
видны во "внешнем мире"

4. Чтобы проверить виден ли контроллер в сети пропинговать его c
компьютера :
ping <IP адрес контроллера>
Если будет ответ что-то наподобии:
Ответ........число байт 32 время 3 мс TTL=128
это говорит о том что компьютер и контроллер друг друга
видят... Можно идти дальше.

5. Установить OPC сервер на компьютер с поддержкой TCP.
В настройка OPC сервера указать IP-адрес контроллера
и если необходимо порт TCP то 502.
В дальнейшем завести переменные которые бы ссылались
на переменные контроллера - то есть переменным внутри
OPC-сервера присваивать адреса по которым нужно обращаться
к переменным контроллера.
Нужно прочитать относительно особенностей адресации
в руководстве на Овен и используемый OPC-сервер.
( Чтобы это все стыковалось )

У меня без проблем управляются по TCP - два ОВНА...

fLegmatik
10.04.2009, 12:38
Здравствуйте. В настоящий момент я изучаю OpenSCADA. Наилучшим вариантом связи с ПЛК для меня является интерфейс Ethernet. Как я понимаю, наиболее разумен тут протокол Modbus/TCP. Однако, как я ни стучался на 502-й порт, коммуникация не происходит.
По подключению в Codesys модулей ввода/вывода по протоколам Овен, Modbus/ASCII, Modbus/RTU написаны подробные инструкции, а вот как именно в Codesys научить ПЛК работать с Modbus/TCP -- нет ни одной. А ведь, судя по http://www.owen.ru , это третий по важности протокол.
Поскольку, на мой взгляд, этот топик наиболее близок к решаемой задаче, позвольте задать уточняющие вопросы тут.
3. К модулю MODBUS SLAVE добавить переменные - именно они будут видны во "внешнем мире" Поподробнее, пожалуйста. Куда нажать и какой кнопкой мыши, что выбрать, как сделать существующую переменную доступной тут? Куда бы я ни тыкался в PLC Configuration, самое большее, что нашёл -- это добавить к структуре "Modbus (slave)[VAR] -> Modbus[FIX] -> TCP[VAR]" ещё один подэлемент во втором уровне из списка "Statistic, Button, Universal network module, ..., Float). Но это, полагаю, совсем не то.

Филоненко Владислав
10.04.2009, 12:59
"Modbus (slave)[VAR] -> Modbus[FIX] -> TCP[VAR]" - именно так, а потом настроить адрес slave в "Modbus (slave)[VAR] и правильно настроить мастер, опрашивающий ПЛК.

lunyov_i
10.04.2009, 13:23
Здравствуйте. В настоящий момент я изучаю OpenSCADA. Наилучшим вариантом связи с ПЛК для меня является интерфейс Ethernet. Как я понимаю, наиболее разумен тут протокол Modbus/TCP. Однако, как я ни стучался на 502-й порт, коммуникация не происходит.

А что значить стучался?
Контроллер с компа пингуется?
Вот например я пингую с компа контроллер Owen
Овен сидит на адресе 192.168.1.66:
ping -n 4 192.168.1.66
Получаю:
---------------------------------------------
Обмен пакетами с 192.168.1.66 по 32 байт:

Ответ от 192.168.1.66: число байт=32 время=6мс TTL=128
Ответ от 192.168.1.66: число байт=32 время=8мс TTL=128
Ответ от 192.168.1.66: число байт=32 время=9мс TTL=128
Ответ от 192.168.1.66: число байт=32 время=5мс TTL=128

Статистика Ping для 192.168.1.66:
Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время приема-передачи в мс:
Минимальное = 5мсек, Максимальное = 9 мсек, Среднее = 7 мсек
-------------------------------------------------
Это говорит о том что компьютер и контроллер друг-друга видят.


По подключению в Codesys модулей ввода/вывода по протоколам Овен, Modbus/ASCII, Modbus/RTU написаны подробные инструкции, а вот как именно в Codesys научить ПЛК работать с Modbus/TCP -- нет ни одной. А ведь, судя по http://www.owen.ru , это третий по важности протокол.

Нет инструкции там есть.


Поскольку, на мой взгляд, этот топик наиболее близок к решаемой задаче, позвольте задать уточняющие вопросы тут.Поподробнее, пожалуйста. Куда нажать и какой кнопкой мыши, что выбрать, как сделать существующую переменную доступной тут? Куда бы я ни тыкался в PLC Configuration, самое большее, что нашёл -- это добавить к структуре "Modbus (slave)[VAR] -> Modbus[FIX] -> TCP[VAR]" ещё один подэлемент во втором уровне из списка "Statistic, Button, Universal network module, ..., Float). Но это, полагаю, совсем не то.

Cначала делаем "Modbus (slave)[VAR] -> Modbus[FIX] -> TCP[VAR]
Опять встаем на Modbus (slave)[VAR] жмем правую кнопку мыши
Append Subelement -> (внизу выбирайте ) 2 byte, 8-bit, 4-byte....
Например нажимаете 2 byte, появляется 2 byte (VAR)
Присваиваете ей имя под которым она будет видна в программе.
Ну а в Modbus она будет читаться по адресу 040001 для IP-адреса
который имеет ВАШ контроллер....

fLegmatik
10.04.2009, 14:00
Нет инструкции там есть.Вполне возможно, но я не нашёл.
А что значить стучался?
Контроллер с компа пингуется?Раньше было так: контроллер пинговался, но на банальный telnet 192.168.0.101 502 выходил "Сбой подключения". Теперь, после выполнения ваших рекомендаций в этом топике, какое-то подключение производится. Спасибо. Буду тестировать работу всякими утилитами, работающими с modbus.
Сразу возник ещё один вопрос. Можно ли не создавать новую переменную, а использовать уже имеющуюся в проекте? Например, мне сейчас для вывода на tcp-порт информации о состоянии дискретного выхода пришлось в каждый блок sfc-диаграммы пришлось добавить строчку "mb_mvu1:=mvu1;". Возможно, есть какое-то более изящное решение по связыванию переменных между собой в нашем случае? Приемлю ответ "ищи в форуме по сочетанию таких-то слов".

lunyov_i
10.04.2009, 14:34
Сразу возник ещё один вопрос. Можно ли не создавать новую переменную, а использовать уже имеющуюся в проекте?
Можно если этой переменной присвоить адрес соответствующий переменной в разделе Modbus Slave
Там видел для каждой добавляемой в Modbus Slave переменной идет что-то типа AT %Q....
Так вот в разделе глобальный переменных - если там есть у тебя
уже какая то переменная которую ты желаешь отобразить на Modbus Slave
то после нее введи вот это AT %Q...
--------------------------
Пример:
У тебя есть некоторая переменная beispiel которую ты предназначил того чтобы выводить в сеть по TCP, но которая в разделе глобальных
переменных (по историческим причинам )
выглядит на начальном этапе так:
beispiel : DWORD:=0;

Теперь ты знаешь как заводить переменные в Modbus Slave,
и завел там 4-байтовую переменную - но пока без имени
просто там отображается что-то типа:
AT %QD10.1.0

Теперь чтобы связать эту четырехбайтовую переменную
к beispiel переменной производим редактирование
в разделе глобальных переменных и получаем:

beispiel AT %QD10.1.0: DWORD:=0;

Все, теперь все что будет из сети Modbus копироваться в
AT %QD10.1.0
будет сразу попадать в beispiel и наоборот...

Филоненко Владислав
10.04.2009, 17:04
telnet? Это ModBusTCP. Нужна спец. утилита

lunyov_i
10.04.2009, 21:22
telnet? Это ModBusTCP. Нужна спец. утилита
Если на telnet указываешь номер порта TCP, то будет происходить
подключение к этому порту, независимо от того что это команда telnet.
По 80 подключимся к любому Web серверу по 25 к любому SMTP
серверу, они выдают сообщения соответствующие правилам обмена того
или иного протокола (можно вводить команды соответствующие спецификации протоколов), так что ничего тут такого и нет, сетевые администраторы бывает что так поступают.
Под Windows я правда никогда не подключался таким способом с сервакам, а под Unix, сколько угодно
когда искал проблемы.
--------------------------------
Например набрал на соседнем freeBSD
telnet www.owen.ru 80
Получаю:
Trying 217.106.225.146...
Connected to www.owen.ru.
Escape character is '^]'.
--------------------------------
Поэтому если по Modbus на 502 порту если что-то должно выдатся то оно выдастся и по
telnet IP_OWEN 502....

Филоненко Владислав
11.04.2009, 07:27
так запустилось или нет?

lunyov_i
13.04.2009, 09:05
Поэтому если по Modbus на 502 порту если что-то должно выдатся то оно выдастся и по
telnet IP_OWEN 502....
Соединяется по telnet IP_OWEN 502....
правда никакого приглашения не выводит.

fLegmatik
05.05.2009, 14:40
lunyov_i, Владислав, большое спасибо за помощь, всё заработало: переменные идут с помощью modbus/tcp в openscada и обратно.

Можно, если этой переменной присвоить адрес, соответствующий переменной в разделе Modbus Slave
--------------------------
Пример:
beispiel AT %QD10.1.0: DWORD:=0;

Все, теперь все, что будет из сети Modbus копироваться в AT %QD10.1.0 , будет сразу попадать в beispiel и наоборот...
А что делать, если этой переменной уже присвоен адрес вида %QD9.1.0? Например, эта переменная отображает состояние дискретных входов или выходов ПЛК, МДВВ, МВУ или МВА? В проект она добавлена двойным щелчком на строке %QD9.1.0 во вкладке PLC Configuration. Ну а я хочу отображать состояние этих входов/выходов в скада-системе и управлять ими. Пробовал записать глобальную переменную в виде
beispiel AT %QD9.1.0 AT %QD10.1.0: DWORD:=0;
проект не компилируется.
Пока остановился на том, что сам в программе присваиваю одно и то же значение двум переменным после каждого изменения.

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

Филоненко Владислав
05.05.2009, 16:15
в программе надо копировать значения из одной переменной в другую.

lunyov_i
06.05.2009, 12:21
lunyov_i, Владислав,
Прошу простить за поздний ответ. В глубинке, где я живу интернеты раздают по карточкам. Единственный провайдер ограничивает юридические лица десятью гигабайтами трафика в месяц, которые завод поглощает в первые десять дней.
Проблемы с Интернетом - подключайся через Спутник+Gprs,
я тоже в сельской местности и долго работал в таком режиме.
От силы 250 рублей в месяц уходило...
Смотри как все сделать на форуме в http://www.tele-sat.info