PDA

Просмотр полной версии : Не понятно с адресами ввода-вывода Modbus в памяти ПЛК



JIexa21
13.02.2012, 11:32
Всем привет!
Читаю документацию OWEN PLC-Configuration.
Пункт 3.1.3.2. Отображение устройства в области памяти
Не совсем понятно как что и куда попадает.
Может объясните поподробнее?
Если поточнее, то ситуация такая: из двух плк-слейв читаю из каждого массивы из 20 word и надо записать в третий плк-слейв. Как разместить все это, чтобы не надо было копировать переменные в программе?
Конфигурация:
Modbus (Master)
Universal Modbus Device (адрес 1)
Universal Modbus Device (адрес 2)
Universal Modbus Device (адрес 3)

Yegor
13.02.2012, 11:59
С конфигуратором получится только делать вручную три одинаковых набора переменных-регистров, описывать эти три набора на мастере и вручную на мастере же копировать.

JIexa21
14.02.2012, 10:51
Ну вот набросал приблизительный конфиг. Гляньте, плз, и скажите правильно ли я думаю:
1. С плк1 (Модбас адрес 1) читаем регистры (String input) с 0 до 19
2. С плк2 (Модбас адрес 2) читаем регистры (String input) с 20 до 39
3. На плк3 (Модбас адрес 5) они попадают автоматом (String output), т.к. они находятся на одном Модбас мастер и адреса регистров такие же с 0 до 39.

Еще один момент: как только я Stringам присваиваю какие-либо имена, то при компиляции появляется ошибка 3729: неверный тип String[79] по адресу ххх... ххх - адреса переименованных стрингов, исключая первый.
Как мне к ним обращаться?

JIexa21
20.02.2012, 09:32
Что-то представители Овена упорно игнорируют тему... :)

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

1. Как узнать идет ли работа с Modbus (в конфигурации плк)?
2. Как включить или выключить работу этого самого "аппаратного modbus"?

capzap
20.02.2012, 16:16
Это штука или это Вы напоследок возмущаетесь таким образом? Проверяется просто, нужно на подключенном устройстве изменить регистр и в конфигураторе посмотреть соответствие. Удалите модбас из конфигуратора и таким образом отключите его

JIexa21
20.02.2012, 16:25
У меня 3 устройства модбас и два не модбас. Если я хочу опросить "не модбас", то мне надо быть уверенным что контроллер в данный момент не занимает порт. И если я его занял опросом "не модбас" устройств, то мне надо отключить этот аппаратный модбас программно, чтобы пока я не закончил опрос "не модбас", контроллер не полез его дергать.
Теперь смешнее и похоже на шутку?

Пробую программировать с использованием UNM.lib, но это такая муть, что вообще не известно как это будет работать... Контроллер постоянно отлетает от отладчика или вообще самопроизовольно встает в стоп. БАТТОН ПОДКЛЮЧЕН!!! - специально выделяю, чтобы не начали мне втирать что у меня из-за него ничего не работает.
Да, и пока не встал, в статистике все нормально и красиво...

capzap
20.02.2012, 17:15
для того чтоб модбас работал по команде через конфигуратор есть описание в документации. Не знаю про UNM.lib не приходилось использовать, с протоколом модбас есть библиотека modbus.lib, к ней есть примеры на форуме

JIexa21
20.02.2012, 23:13
capzap, вот когда поработаешь с UNM и тем набором устройств (даже хотя бы с двумя разнотипными), то милости просим, а пока спасибо за абсолютно бесполезный комментарий. ;)

Походу такой задачи еще никто не решал.
И, кстати, в примере с UNM уже нашел глюк - Read Holding Register независимо от результата, всегда возвращает в Error код 11.

capzap
21.02.2012, 09:08
организация этапной передачи данных не зависит от библиотек и протоколов,жаль что Вы этого не поняли, успехов

JIexa21
21.02.2012, 09:13
Примеры в студию! А то болтать все горазды. :)
Насчет понял или нет, это как бэ не вам судить. И тем более, судя по тому что вы тут мне писали, вы даже не понимаете про что я. :)

capzap
21.02.2012, 09:23
В один момент Вам надо чтоб ПЛК опрашивал свои устройства, в другой момент надо чтоб не ПЛК опрашивал свои устройства по своему протоколу но по той же сети. На примеры я не подписывался, а теперь и подсказки смотрю не сильно Вам нужны, занимайтесь своими делами

JIexa21
21.02.2012, 09:28
Ну ответы типа "сам дурак" обычно подразумевают то что оппонент сам ничего не понимает в теме... :)
Кстати перерыл я документацию - нет там ничего про программное определение и включение/выключение Modbus конфигуратора.
И не правильно поняли.
Расшифрую окончательно: надо чтобы он прочитал два устройства модбас, прочитал два устройства "не модбас" и запихал обработанные данные по модбас в третье устройство и все это по одному порту RS485.

capzap
21.02.2012, 09:53
повторю тогда еще раз свою наводку, в один цикл Вы обращаетесь к устройствам поддерживающим один протокол, получаете от них требуемые ответы, переходите к опросу по другому протоколу, после получения ответов ну или как вариант ошибок, переходите к работе с третьим устройством, закончили с третьим переходите к первому. Ну и где здесь жесткая привязка к библиотеке, к протоколу, к конфигуратору наконец, хотя можно и с ним используя Universal Modbus Device его параметр Work Mode поставить в состояние By Command

JIexa21
21.02.2012, 10:24
Спасибо за наводку, только я давно уже так и сделал. Причем спасибо за наводку на документацию по конфигуратору - нашел там что нужно, пишу n-й вариант проги.
Как опрашивать по очереди я все прекрасно знаю - мне это можно и не объяснять. Еще вчера был готов вариант полностью через UNM. Кстати кроме опроса по очереди там еще есть куча "подводных камней" и простым перечислением не обойдешься...

Валенок
21.02.2012, 10:32
Ну хоть пару камней ?

JIexa21
21.02.2012, 10:48
пришлось писать опрос по очереди типа шагового блока:
case n of
1: опрос модуля 1; условие перехода на 2
2: опрос модуля 2; условие перехода на 3
и т.д.
...
end_case
Иначе контроллер уходил в стоп и постоянно терялась с ним связь.
Ну и условия переходов: опрос удачный, нет ответа, ошибка.

Валенок
21.02.2012, 11:05
Какой же это камень ? Обычная очередь. Других вариантов в serial быть не может.

JIexa21
21.02.2012, 11:09
Ну в документации не описано, поэтому пришлось сделать сначала без очереди, потом с очередью. Тем более что после разбора библиотек это было не очень то и очевидно - программа то по сути линейна и пока не закончилась работа с одним модулем, на другой переходить не должно.

Валенок
21.02.2012, 11:21
в документации не описано
В какой ? И чего ? Что serial - нужно очередью ?
В документации не описано что такое интеграл. Но про ПИД что-то есть.

программа то по сути линейна
Ваша ?

capzap
21.02.2012, 11:23
Ну в документации не описано, поэтому пришлось сделать сначала без очереди, потом с очередью. Тем более что после разбора библиотек это было не очень то и очевидно - программа то по сути линейна и пока не закончилась работа с одним модулем, на другой переходить не должно.CASE может переходить и при каждом новом цикле, а ответы приходят по времени значительно больше одного цикла, поэтому многое зависит от условий перехода

JIexa21
21.02.2012, 11:32
Ваша ?
Моя, моя... Что так нервничать то? :)
Чисто логически: я что-то опрашиваю, жду пока придет ответ или ошибка. Линейно? Линейно!

CASE может переходить и при каждом новом цикле, а ответы приходят по времени значительно больше одного цикла, поэтому многое зависит от условий перехода
А вот это как раз не линейно. Поэтому окончательный вывод об использовании условий был сделан после заливки в контроллер и просмотра что там и как переходит.

Там файл для заливки больше 90 килобайт и из них 90% чужие либы. Или все за 5 минут разбираются с таким количеством информации и в коде чужих модулей??? Не сильно ошибусь, если предположу, что многие программируют подобным образом: предположил, написал, залил, проверил, не пошло - копаешься дальше, пошло - не трогай.

Валенок
21.02.2012, 11:42
я что-то опрашиваю, жду пока придет ответ или ошибка. Линейно? Линейно!
Поглядывая на приход ответа, другую работу делаю. Нелинейно :)

JIexa21
21.02.2012, 11:44
Кстати разобрался почему сразу не нашел про работу с аппаратным модбас. Есть два документа: один OWEN PLC-Configuration.pdf длиной в полтора мегабайта и в нем нет, а второй PLC_Configuration_OWEN.pdf длиной 2,4 мегабайта - в нем есть.
Короче вопросов больше нет. Всем спасибо. :)

JIexa21
21.02.2012, 11:45
Поглядывая на приход ответа, другую работу делаю. Нелинейно :)
Зависит от ситуации. :)

capzap
21.02.2012, 11:47
Кстати разобрался почему сразу не нашел про работу с аппаратным модбас. Есть два документа: один OWEN PLC-Configuration.pdf длиной в полтора мегабайта и в нем нет, а второй PLC_Configuration_OWEN.pdf длиной 2,4 мегабайта - в нем есть.
Короче вопросов больше нет. Всем спасибо. :)это означает, что Вы останетесь пользователем продукции ОВЕН? :D

JIexa21
22.02.2012, 08:56
это означает, что Вы останетесь пользователем продукции ОВЕН? :D
Я вообще сторонник сименсов, но они не всегда подходят по категории цена/качество. Думаю не открою америку если скажу, что если не нужна особая надежность, то можно обойтись и овеном. :D
Ну и писать на "псевдопаскале" в кодесисе, несравнимо проще, чем на STL в сименсе. :)

Кстати команда групповой записи то работает? 10h которая. Или это очередные оставленные разработчиками "грабли"? Пока ни в какую не удается принять пакет.

capzap
22.02.2012, 09:04
не замечал проблем у контроллеров с модбасом ни через конфигуратор и тем боле написанный в ручную, есть некоторые особенности только у модулей, ради сокращения памяти группа это не больше двух регистров, но повторюсь с плк таких проблем нет
И по поводу сименса, зря Вы STL обижаете, если уж сравнивать то с IL-ом надо, а ST тогда уж с SCL и разницы получается особо то ни какой

JIexa21
22.02.2012, 09:12
С приемом пока разбираюсь... Надеюсь что заработает.

STL я не обижаю! Как раз наоборот: после бурного детства с синклером и кодирования на нем же на асме, я просто фанатею от него. :)
Поэтому на сименсе в большинстве случаев использую STL в функциях и функциональных блоках, в оби и прочих логических модулях LAD, ну а шаговые классически GRAPH. Ну и FBD практически не использую - достаточно всего вышеперечисленного. :)
Да, и забыл, SCL не использую совсем - он даже не установлен. :)

JIexa21
24.02.2012, 15:34
Всем привет!
Есть вопрос по библиотеке UNM.lib.
Читаю и пишу через нее. Для эксперимента стоит второй ПЛК100, который по двум адресам передает и по одному принимает (типа эмулятор).
Этот второй ПЛК100 работает через конфигурацию Modbus Slave - т.е. отдает данные "аппаратно".
Проблема в том что контроллер через библиотеку UNM принимает и передает, переставляя старший и младший байт.
Т.е. аппаратно передаем 40,41,42,43 (и т.д.) получаем через UNM 41, 40, 43, 42...
Передаем через эту же UNM ту же последовательность 41, 40, 43, 42 и получаем через аппаратный Modbus вообще какую-то фигню: 43, 40, 45, 42... :(
Причем в буфере приема ответ от контроллера что принято без ошибок - т.е. что-то эта UNM вообще косячит по-черному.
Сама библиотека для редактирования закрыта. Может есть вариант с возможностью ее редактирования? Или может есть другая библиотека с другой последовательностью приема-передачи? А то ерунда какая-то получается...

Кстати, так и не удалось подключить через эту же UNM счетчики меркурий - висит на авторизации. С этим же паролем без проблем заходит через конфигуратор.