PDA

Просмотр полной версии : Modbus master



Klik
23.09.2008, 07:04
Modbus master может работать и как slave в случае если master не отправляет запросы (из док. "Универсальное устройство Modbus имеет канал Start/Stop. Если в него записывается значение 0x00FF, то происходит старт работы данного устройства Modbus, если же в канал записано значение 0x00FE, то происходит его остановка и прекращение всех посылок в сеть.)
Ситуация следующая, ПЛК100 необходимо использовать для приема данных от другого контроллера по определенным адресам, преобразование данных и их передача, через другой порт, по другим адресам (для SCADA).
Возник еще вопрос, как установить адрес ПЛК для работы в режиме master/slave, или адрес устанавливается на конкретный порт.

Kirill
23.09.2008, 09:21
Modbus master может работать и как slave в случае если master не отправляет запросы (из док. "Универсальное устройство Modbus имеет канал Start/Stop. Если в него записывается значение 0x00FF, то происходит старт работы данного устройства Modbus, если же в канал записано значение 0x00FE, то происходит его остановка и прекращение всех посылок в сеть.)
Ситуация следующая, ПЛК100 необходимо использовать для приема данных от другого контроллера по определенным адресам, преобразование данных и их передача, через другой порт, по другим адресам (для SCADA).
Возник еще вопрос, как установить адрес ПЛК для работы в режиме master/slave, или адрес устанавливается на конкретный порт.

Не совсем ясна задача: если вы получаете данные по одному порту (485, например) и отправляете через другой, то зачем вам управлять работой мастера и слэйва? поставьте на один порт мастера, на другой слэйва и не морочьте себе голову.
Если же на одном интерфейсе у вас получаются 2 мастера, тогда вам необходимо отключать как один (организованный на ПЛК), так и другой (организованный где-то еще).
Опишите, пожалуйста, яснее, что к чему и как вы хотите подключить.

Klik
23.09.2008, 11:24
В Modbus slave нет возможности положить данные по определенному адресу, например по адресу 32221. А в Modbus master такая возможность есть. Или я ошибаюсь?
Задача следующая. На отправленных установках установлены контроллеры с определенной картой адресов, но для телемеханики требуется другая карта адресов. Для этого необходимо переделывать ПО написанное на Паскале и С++, что трудоёмко, но есть и проблема ограничения по максим. адресу (10000).
Идея состоит в следующем. С помощью ПЛК100 считываем данные с заданных адресов, преобразуем и раскладваем по необходимым адресам для телемеханики.

Kirill
23.09.2008, 13:03
В Modbus slave нет возможности положить данные по определенному адресу, например по адресу 32221. А в Modbus master такая возможность есть. Или я ошибаюсь?
Задача следующая. На отправленных установках установлены контроллеры с определенной картой адресов, но для телемеханики требуется другая карта адресов. Для этого необходимо переделывать ПО написанное на Паскале и С++, что трудоёмко, но есть и проблема ограничения по максим. адресу (10000).
Идея состоит в следующем. С помощью ПЛК100 считываем данные с заданных адресов, преобразуем и раскладваем по необходимым адресам для телемеханики.

яснее не стало.
телемеханика реализована на том же контроллере, где ПО на паскале и си?
у этого контроллера только один доступный интерфейс связи или несколько?
И если интерфейс только один, в "ПО на паскале и си" предусмотрен перевод работы этого контроллера с телемеханикой по данному интерфейсу на работу как в режим мастера, так и в режим слэйва? для ПЛК такой перевод реализуем, но если ПЛК мастер - атот другой контроллер тоже мастер - тогда работать это не будет.

или же все-таки телемеханика и контроллер - это две разные части системы, которые не работают по одному едиственно возможному интерфейсу?

Klik
23.09.2008, 13:17
Телемеханика и контроллер - это две разные части системы.
Контроллер является реализацией нижнего уровня, телемеханика - верхнего, для вывода данных на диспетчерский пункт. К контроллеру мы цепляемся по RS-485, а к телемеханике по RS-232.

Kirill
24.09.2008, 10:29
Телемеханика и контроллер - это две разные части системы.
Контроллер является реализацией нижнего уровня, телемеханика - верхнего, для вывода данных на диспетчерский пункт. К контроллеру мы цепляемся по RS-485, а к телемеханике по RS-232.

Ага, ну тогда все не сложно. По разным интерфейсам ПЛК может быть одновременно мастером и слэйвом.

Посмотрите простой пример. Там на одном интерфейсе ПЛК мастер - на другом подчингенный. А в программе данные, считанные с одного интерфейса, присваиваются переменным на другом.

708

Klik
24.09.2008, 11:27
Как это реализовать я знаю, у меня в другом проблема.
Мне необходимо с контроллера прочитать 2015 регистр, это не составляет проблемы.
А мастер телемеханики должен забрать значение этого регистра из другого регистра, например 3028. Карта адресов телемеханики определена заранее и нам необходимо под неё подстроится.
Как в slave положить значение именно в этот регистр.
И что означает Идент. узла или Node id в параметре элементов modbus slave.

Kirill
24.09.2008, 13:17
Как это реализовать я знаю, у меня в другом проблема.
Мне необходимо с контроллера прочитать 2015 регистр, это не составляет проблемы.
А мастер телемеханики должен забрать значение этого регистра из другого регистра, например 3028. Карта адресов телемеханики определена заранее и нам необходимо под неё подстроится.
Как в slave положить значение именно в этот регистр.
И что означает Идент. узла или Node id в параметре элементов modbus slave.

гм, боюсь в этом случае, вам придется в слэйве создать 3028 переменных 2 byte, тк нумерация адресов регистров в слэйве идет автоматически начиная с 0. Другого механизма не организовано. Либо можно по данному порту читать посылки от мастера, обрабатывать и отвечать на них с помощью библиотеки unm.lib, т.е. поддержать часть (одну две функции) протокола модбас непосредственно в программе контроллера.
Идент. узла - внутренняя информация таргет файла, на пользовательском уровне она не используется.

Klik
24.09.2008, 13:58
Тогда у меня еще вопрос.
Собираетесь ли вы распространять библиотеку Codesys по реализации Modbus вместе со своей продукцией.
И планируется ли в будущем дорабатывать свой модуль Modbus slave.

Николаев Андрей
25.09.2008, 08:50
Библиотека ModBus от CoDeSys и так доступна всем.
Но распространять мы её не можем, так как она платная. А купить её можно, я так думаю в компании Пролог - www.codesys.ru

Сейчас мы делаем свою библиотеку обмена по ModBus. Уже в ней можно будет добавить свой блочек, которй будет получая данные\запрос для определенного регистра переадресовывать его в нужный.
А вообще над данным вопросом мы задумались, но пока законченного решения не принято. А задание случайного адреса в контроллере противоречит особенностям работы с распределением памяти в системе программирования.

Сергей71
25.09.2008, 13:31
Библиотека ModBus от CoDeSys и так доступна всем.
Но распространять мы её не можем, так как она платная. А купить её можно, я так думаю в компании Пролог - www.codesys.ru

Сейчас мы делаем свою библиотеку обмена по ModBus. Уже в ней можно будет добавить свой блочек, которй будет получая данные\запрос для определенного регистра переадресовывать его в нужный.
А вообще над данным вопросом мы задумались, но пока законченного решения не принято. А задание случайного адреса в контроллере противоречит особенностям работы с распределением памяти в системе программирования.

Давно пользуюсь Slave режимом и мучаюсь считая какой это регистр.
В одних мастерах начало с 0 в других с 1. А когда расставишь несколько разных типов, то можно и запутаться.

А теперь у человека проблема. Можно бы использовать ПЛК с буквой L, а надо купить с М.
Потому я у диллеров покупаю только с М - а L почти не кому не нужна.

Klik
26.09.2008, 13:30
В чем сложность у вас не понятно.
Пришлось писать самим, через день работы уже поддерживается 03 READ HOLDING REGISTERS функция.
Работаем через указатели, создав свою карту адресов.

Andy_v
15.02.2016, 22:41
Хотелось бы поднять тему. Как решить аналогичную задачу использовав ПЛК для переконвертации регистров, получаемых от мастера и передавать по другому адрему для слейва? Например, принимаем от частотного преобразователя данные с регистра 2104, а по другому порту его необходимо транслировать с адресом 256? Может кто-нибудь на пальцах рассказать реализацию?