PDA

Просмотр полной версии : МВ210-101 + ПЛК-150-А-М



Алексеu
25.01.2019, 14:21
Здравствуйте уважаемые форумчане.
Подскажите, пожалуйста, где и что не так делаю...
В одной подсети имеется настроенный МВ210-101 с подключенными 8 датчиками, и ПЛК-150-А-М с подключенными 2 датчиками и одним клапаном с AI и AO. Они опрашиваются и управляются через OWENCLOUD, т.е. заданное через OWENCLOUD, обработанное ПЛК и ушедшее на клапан через AO, я вижу на аналоговом входе ПЛК опять таки в OWENCLOUD.
Теперь надо организовать обмен между МВ210-101 и ПЛК150 по локальной сети.
Что сделано:
1. В конфигурации ПЛК создан элемент "Modbus (Master)"
2. Добавлен подэлемент "Universal Modbus Device" с настройками:
IP: 192.168.11.51
Max timeout : 150 ms
TCPPort: 502
NetMode (режим работы в сети): TCP
ModuleSlaveAddress (Адрес подчиненного устройства): 1
WorkMode (режим работы): by poll time (по времени)
PollingTime (): по умолчанию 100
Visibility (Видимость): no
Amount Repeat (число повторов): 3
Byte Secuence (Порядок передачи байтов посылки): native.

Порт и "ModuleSlaveAddress" посмотрел в OWENCONFIGURATOR

3. Пытаюсь опросить 1 и 2 входы МВ210-101, и прочитать из них переменные типа FLOAT и Integer.
Для этого в "Universal Modbus Device" добавлен несколько подэлементов типа "real input module" со следующими настройками:
Real Input Module (VAR)_0: Registr Address=4000, Command=Read Holding Registers (0x03)
Real Input Module (VAR)_1: Registr Address=4001, Command=Read Input Registers (0x04)
Real Input Module (VAR)_2: Registr Address=4002, Command=Read bytes (0x70)
Real Input Module (VAR)_3: Registr Address=4003, Command=Read Holding Registers (0x03)
Real Input Module (VAR)_0: Registr Address=4064, Command=Read Holding Registers (0x03)

Соответственно созданы глобальные переменные для каждого из подэлементов, программа прогружена в контроллер и запущена.

Вопрос в том, что модуль не опрашивается, и ни одна из этих переменных не изменяется.
Что я делаю не так?

melky
25.01.2019, 14:23
Real Input Module (VAR)_1: Registr Address=4001, Command=Read Input Registers (0x04)
Real Input Module (VAR)_2: Registr Address=4002, Command=Read bytes (0x70)
Real Input Module (VAR)_3: Registr Address=4003, Command=Read Holding Registers (0x03)

Вот откуда вы это все взяли ???????

Алексеu
25.01.2019, 14:40
Адреса взял из РЭ МВ210-101, табл. 6.2
А вот откуда брать команды, я не знаю.

melky
25.01.2019, 14:42
внимательнее читайте РЭ, а то вы тут начали читать 4001 регистр, когда он же используется в 4000-м так как это вторая половина флоата.
А 4002 что ?

А если это в конфигураторе групповой запрос и получилась каша.

Алексеu
25.01.2019, 14:57
4001 я начал читать, когда в 4000 получил "пусто". 4002 это Float на втором входе.
Я ж написал, что создали несколько real input в universal modbus.
И приложил скрин куска табл. 6.2
Яж поэтому и попросил объяснить, что делаю не так.
Нормального мануала для чайников я не нашел. А в примере обмена между МВ210-310 и ПлК110 только дискретный модуль.

melky
25.01.2019, 15:10
Мне вот хочется спросить тех, кто делал этот прибор, Куда делись регистры между двумя значаниями float ??????

Евгений Багаев
25.01.2019, 15:24
Куда делись регистры между двумя значаниями float ??????

Они есть и содержат циклическое время измерения. РЭ находится на правке, скоро регистры будут указаны в таблице.
Ранее писал об этом тут (http://www.owen.ru/forum/showthread.php?t=30395&p=296265&viewfull=1#post296265).

Алексеu
25.01.2019, 15:47
"Мне вот хочется спросить идиотов" ну пока идиотом себя чувствую я.
Всё-таки подскажет кто нибудь, как их сконектить, и правильно ли я поставил "real input" для значения float?

Алексеu
25.01.2019, 16:34
я бы предложил спрашивающему поиграться порядком расположения байт или оставить в конфигураторе плк только целочисленные регистры

Целочисленные я тоже прописал. Данные с первого канала. Тип - INT16, адрес регистра - 4064. Но непонятно, какую команду прописывать далее - тех, которые, вроде, подходят по смыслу несколько штук:
Read Holding Registers (0x03)
Read Input Registers (0x04)
Read bytes (0x70)40908

Алексеu
25.01.2019, 21:28
ну наконец то даже скрины появились, сразу же смотреть дальше не буду, убирайте шаблоны, нормальной работы у контроллера не будет, это только для процесса самообучения/привыкания

Зря не посмотрели.
Они просто так стоят. Я их прописал, чтобы было от чего отталкиваться в выборе типов, и в отросах они не участвуют. Не хочу 1000 лишних раз прогрудать контроллер. То, что нужно находится над этим шаблоном.
В правой части выделен первый канал с чтением типа integer.

Алексеu
25.01.2019, 21:30
И, если так критично, могу его удалить, и предоставить нужный скрин, или саму программу.

Алексеu
25.01.2019, 21:57
REAl это FLOAT? Я для уточнения.
Чтение одиночных регистров, это Вы имеете ввиду, что надо удалить все "real input", оставив один, и в нем экспериментировать с адресами регистров?
Если да, то с какого адреса начать (4000, как в мануале?), и с каким шагом?

Алексеu
26.01.2019, 11:42
я бы единственным регистром выбрал в начале 900(0x384), если он покажет хоть какое то значение, то можно добавить второй регистр и снимать информацию с регистров 4000 и 4001, если из них можно на ПК будет получить флоат/реал то можно попытаться использовать input real

Уважаемый capzap. Не могли бы Вы объяснить чайнику как сделать следующее:
1. "я бы единственным регистром выбрал в начале 900(0x384)," - где это сделать? Я
40915
2. думал, что этот регистр выбирается в "Real Input Module (VAR)", который я прописал в "Universal Modbus Device".
40916

Возможно, в чем нибудь , поможет этот снимок:
40917
40918
40919

Алексеu
26.01.2019, 12:30
внизу таблицы регистров, 900 определяет время архивирования, его тип слово(регистр), а не флоат.
Ну пусть будет Real Input Module с 4000, если в режиме онлайн Вы видите число близкое к нулю, попробуйте поменять 10 пункт из первого скрина Trace на Native

40920
40921

Забыл опрос периода архивирования добавить
40922

Ну и еще одно редактирование - посмотрел статус канала "Last error" модуля "Modbus (Мастер)", а там ошибка "85" - Ошибка при приеме/передаче по сети TCP/IP.

40923

Теперь уже другой вопрос - почему она может возникать?

Алексеu
26.01.2019, 14:12
В общем получается так:
Добавляю "Modbus (Мастер) (VAR)" и прогружаю, с запуском "Онлайн" - все нормально: Last error=0
Добавляю "Universal Modbus Device" с настройками по умолчанию (NetMode=serial) и прогружаю, с запуском "Онлайн" - все нормально: Last error=0
Меняю настройки на данные моего модуля и прогружаю, с запуском "Онлайн" - все нормально: Last error=0
40924
Добавляю "Register input module" для чтения 900 адреса - Last error=85 (Ошибка при приеме/передаче по сети TCP/IP)
40925

Алексеu
26.01.2019, 14:15
4092640927

Алексеu
26.01.2019, 14:30
ну раз сокеты закончились, наверное стоит сделать на плк сброс
Холодный сброс или заводской сброс через CODESYS или как то по другому?

помимо конфигуратора в проекте есть какое нибудь управление сокетами?
Да вроде нигде ничего не прописывал, программа видна на экране: задействованы только глобальные перем

Прошивку делали, после этого таргеты переустанавливали?
Прошивка v.2.17.0_PLC100 (с поддержкой OwenCloud).
Таргет - v2.12_for_PLC100_PLC150_PLC154 (с поддержкой OwenCloud). Но в ПЛКИНФО пишет, что 2.10 - это мне непонятно.
Сначала делал прошивку, потом скачал и установил таргет и запустил CODESYS для создания нового проекта. Сделал правильно?

Алексеu
26.01.2019, 14:52
Нет. Что нибудь можете посоветовать?

Алексеu
26.01.2019, 15:47
Установил
409294093040931

попробовал
40932409334093440935

Результаты не порадовали - что это может быть?

Алексеu
26.01.2019, 16:17
А косяк, то пока получается в адресах регистров. Потому, что чтение регистра float - херня какая то, а integer показывает правильно.

реальное значение температуры - около 30 градусов.

40937


установил еще и owen opc server.

Алексеu
26.01.2019, 16:29
Но в CODESYS все равно не работает.
поигрался с режимами Trace mode <=> Native
В очередной раз прописал "Real input module" с адресов читаемого регистра 4071 (Значение (integer) на входе 8 в формате int16).

Но сразу же ошибка 85!

Алексеu
26.01.2019, 16:33
нет не в адресах, надо изменить порядок байт то что в запросе 786041А6 получается 30 градусов на скрине

А можно попонятнее это объяснить.
Во первых, что за data monitor? И в нем ли надо изменить порядок опроса?

Алексеu
26.01.2019, 16:44
Да, при этом изменении

40939

В MasterOPC все заработало

40940

Осталось с ПЛК разобраться!

Алексеu
26.01.2019, 16:59
В ОвенOPC Изменил значения
40941

И он тоже заработал

40942

Ну и остался сущий пустяк - разобраться со связкой МВ210 - ПЛК150 по TCP!

Алексеu
26.01.2019, 19:12
Попробовал - не работает. Float пока даже не трогаю. Пробую int16.
409444094540946
409474094840949

Ильнур Гибадуллин
26.01.2019, 23:37
Попробовал - не работает. Float пока даже не трогаю. Пробую int16.
409444094540946
409474094840949

Здравствуйте!

Обратите внимание на IP адрес в Конфигурации ПЛК - он выставляется с двоеточиями между числами, а не точками. Например, 192:168:11:51. У Вас же стоят точки.
Также, если Вы считываете один регистр, то следует использовать Register Input Module, если float (real), то, соответственно, Real Input Module.

Алексеu
27.01.2019, 12:17
ДА ТВОЮЖ ......


Например, 192:168:11:51

40955

Ильнур, спасибо ОГРОМНОЕ!!! Две недели мучаюсь, зат..... техподдержку, здесь всех зат... ну тоже самое сделал, а оказывается дело в моем зрении!!!

Все заработало!!!

40954

ВСЕМ ОГРОМНОЕ СПАСИБО!!!

Алексеu
27.01.2019, 12:24
Еще раз здравствуйте.

Остался последний вопрос


если Вы считываете один регистр, то следует использовать Register Input Module, если float (real), то, соответственно, Real Input Module.

с int16 все нормально, а если возможность в CODESYS сделать перестановку байт в пакете, что бы получить значение "float" с устройства?
Или это делается как то по другому, например с помощью какой то биб-ки?

Ильнур Гибадуллин
27.01.2019, 13:25
Еще раз здравствуйте.

Остался последний вопрос



с int16 все нормально, а если возможность в CODESYS сделать перестановку байт в пакете, что бы получить значение "float" с устройства?
Или это делается как то по другому, например с помощью какой то биб-ки?

Получение значения типа float аналогичен считыванию показаний типа int16. Как я ранее упомянул, достаточно выбрать Real Input module и указать адрес регистра, например, 4000. Если полученное значение будет слишком мало или слишком высоко, в параметре Byte Sequence в Universal Modbus device следует выбрать Native или Trace_Mode.

Алексеu
27.01.2019, 14:33
Получение значения типа float аналогичен считыванию показаний типа int16. Как я ранее упомянул, достаточно выбрать Real Input module и указать адрес регистра, например, 4000. Если полученное значение будет слишком мало или слишком высоко, в параметре Byte Sequence в Universal Modbus device следует выбрать Native или Trace_Mode.

Спасибо.

Забыл его поменять - все работает.

Алексеu
27.01.2019, 20:46
ОГРОМНОЕ спасибо уважаемым capzap и Ильнуру Гибадуллину за помощь в решении моего вопроса.

Все работает.

Тему можно закрыть

PS А флеш контроллера я, все таки, кажется угробил!