Существуют ли готовые функции способные прочитать из Ethernet-порта либо записать в него данные напрямую? Если да, то какие? Подскажите плиз
Существуют ли готовые функции способные прочитать из 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 - два ОВНА...
Здравствуйте. В настоящий момент я изучаю OpenSCADA. Наилучшим вариантом связи с ПЛК для меня является интерфейс Ethernet. Как я понимаю, наиболее разумен тут протокол Modbus/TCP. Однако, как я ни стучался на 502-й порт, коммуникация не происходит.
По подключению в 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). Но это, полагаю, совсем не то.
Последний раз редактировалось Andrey V; 19.12.2016 в 13:01.
А что значить стучался?
Контроллер с компа пингуется?
Вот например я пингую с компа контроллер 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 мсек
-------------------------------------------------
Это говорит о том что компьютер и контроллер друг-друга видят.
Нет инструкции там есть.
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-адреса
который имеет ВАШ контроллер....
Последний раз редактировалось Andrey V; 19.12.2016 в 13:01.
Вполне возможно, но я не нашёл.Раньше было так: контроллер пинговался, но на банальный telnet 192.168.0.101 502 выходил "Сбой подключения". Теперь, после выполнения ваших рекомендаций в этом топике, какое-то подключение производится. Спасибо. Буду тестировать работу всякими утилитами, работающими с modbus.
Сразу возник ещё один вопрос. Можно ли не создавать новую переменную, а использовать уже имеющуюся в проекте? Например, мне сейчас для вывода на tcp-порт информации о состоянии дискретного выхода пришлось в каждый блок sfc-диаграммы пришлось добавить строчку "mb_mvu1:=mvu1;". Возможно, есть какое-то более изящное решение по связыванию переменных между собой в нашем случае? Приемлю ответ "ищи в форуме по сочетанию таких-то слов".
Можно если этой переменной присвоить адрес соответствующий переменной в разделе 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 и наоборот...
lunyov_i, Владислав, большое спасибо за помощь, всё заработало: переменные идут с помощью modbus/tcp в openscada и обратно.
А что делать, если этой переменной уже присвоен адрес вида %QD9.1.0? Например, эта переменная отображает состояние дискретных входов или выходов ПЛК, МДВВ, МВУ или МВА? В проект она добавлена двойным щелчком на строке %QD9.1.0 во вкладке PLC Configuration. Ну а я хочу отображать состояние этих входов/выходов в скада-системе и управлять ими. Пробовал записать глобальную переменную в виде
beispiel AT %QD9.1.0 AT %QD10.1.0: DWORD:=0;
проект не компилируется.
Пока остановился на том, что сам в программе присваиваю одно и то же значение двум переменным после каждого изменения.
Прошу простить за поздний ответ. В глубинке, где я живу интернеты раздают по карточкам. Единственный провайдер ограничивает юридические лица десятью гигабайтами трафика в месяц, которые завод поглощает в первые десять дней.