PDA

Просмотр полной версии : Программно считать параметры модуля Modbus (slave)



Ovtia
15.02.2022, 11:21
Здравствуйте!
Имеется ПЛК150. Можно ли в Codesys 2 программно считать параметр Address модуля Modbus (slave) из конфигуратора?
Спасибо.

In_Da_Cher_A
15.02.2022, 12:55
Можно ли в Codesys 2 программно считать параметр Address модуля Modbus (slave) из конфигуратора?ээээээ так Мастер как бы и читает параметр Адрес модуля слейва и если не получает ответ на свой запрос по этому адресу, то выдаёт ошибку. Ну это грубо говоря.
если же вы хотите "обратным ходом" вычислить адрес слейва, то хотелось бы, чтобы вы поняли - для конфигурации ПЛК нет слейва как "хардварного" компонента, который он конфигурирует. Есть Мастер, который вы настраиваете на опрос определённых регистров по определённым адресам. К конфигурированию слейва как такового - адрес, скорость и прочее - Мастер не имеет никакого отношения
А для такого считывания как вы хотите, в КДС должен быть встроен механизм "широковещательного" опроса по всему диапазону адресов по всему диапазону скоростей (скорость же тоже важный параметр Модбас, да?)
Есть в КДС такой механизм опроса? посмотрите документацию

Ovtia
15.02.2022, 13:11
Уточню: Есть программа на Codesys, в ней в "Конфигурации ПЛК" добавлем модуль "Modbus (slave):". У него на вкладке "Параметры" есть параметр "Address", заданый при конфигурировании вручную. Мне из это же программы нужно считать значение параметра "Address". Все внутри одной программы одного ПЛК.

A.Simonov
15.02.2022, 14:30
Уточню: Есть программа на Codesys, в ней в "Конфигурации ПЛК" добавлем модуль "Modbus (slave):". У него на вкладке "Параметры" есть параметр "Address", заданый при конфигурировании вручную. Мне из это же программы нужно считать значение параметра "Address". Все внутри одной программы одного ПЛК.

Добрый день.

Очень экзотический запрос.
Можете описать реальный кейс, как вы планируете это использовать?

По существу вопроса. Считать из программы ПЛК адрес слейв устройства, добавленного в конфигурацию ПЛК - не получится.
Однако, опрос можно проводить и через библиотеки, напрямую из кода ПЛК, в этом случае адрес можно задавать с помощью переменной.

In_Da_Cher_A
15.02.2022, 15:39
есть еще третий вариант и его как раз спрашивают в названии темыпостою послушаю.
Третий вариант для чего? когда есть прибор, настройки которого ты не знаешь и не можешь изменить, но тебе надо его опросить? я понял условия задачи так.
он же, видимо, собирается какую-то логику привязывать к номеру адреса слейва

Ovtia
16.02.2022, 04:37
Для чего мне это нужно: система состоит из нескольких однотипных, но не идентичных объектов, опрашиваемых по шине одним мастером. Мне бы хотелось иметь общую "базу кода" для этих объектов, т.к. различие в их поведении можно определить в паре ключевых мест в программе, остальные 95% кода идентичны для всех слейвов. Сделав предположение, что программно изменять конфигурацию нельзя, т.к. скорее всего конфигурация применяется один раз после старта ПЛК, я скромно надеялся на возможность хотя бы считать значение параметра Address слейвов. Адрес modbus - это то, что точно будет отличать эти объекты друг от друга и по его значению можно было бы определять логику в этих ключевых местах.
Конечно можно без проблем определить для этого специальную константу, но это уже нужно не забыть изменять и ее тоже.

Ovtia
16.02.2022, 10:30
можно ведь просто отвести специально регистр, который будет отвечать что же за слейв используется, его можно и в программе использовать

Не совсем понял. То есть если у меня 4 ПЛК, то мне в конфигураторе объявить 4 Modbus (slave) одинаковых ветки, а потом по этому специальному регистру определять по какому слейву конкретный ПЛК отвечает? Можно поподробнее или пример?

capzap
16.02.2022, 10:38
определять по какому слейву конкретный ПЛК отвечает

это Вас уже стало сложно понять, так кому нужна информация о номере слейва мастеру теперь что ли?

Если для Вас сложно перейти на библиотеки а в конфигураторе нельзя взять заданный адрес, то мастеру остается писать в конкретный слейв, адрес(UnitID) этого слейва в специально созданный регистр, чтобы его можно использовать в подчиненном контроллере

A.Simonov
16.02.2022, 10:50
Для чего мне это нужно: система состоит из нескольких однотипных, но не идентичных объектов, опрашиваемых по шине одним мастером. Мне бы хотелось иметь общую "базу кода" для этих объектов, т.к. различие в их поведении можно определить в паре ключевых мест в программе, остальные 95% кода идентичны для всех слейвов. Сделав предположение, что программно изменять конфигурацию нельзя, т.к. скорее всего конфигурация применяется один раз после старта ПЛК, я скромно надеялся на возможность хотя бы считать значение параметра Address слейвов. Адрес modbus - это то, что точно будет отличать эти объекты друг от друга и по его значению можно было бы определять логику в этих ключевых местах.
Конечно можно без проблем определить для этого специальную константу, но это уже нужно не забыть изменять и ее тоже.

Если я правильно понял, то вы хотите сделать универсальную конфигурацию для разных слейвов.
Так делать однозначно не стоит.
Так как ПЛК (Мастер) будет пытаться опрашивать все устройства и регистры, не зависимо от того есть ли они в сети.

Если вам нужно чтобы мастер "прощупал" сеть слейвов, и на этом основании как-то поменял свою логику, то тут только через библиотеки писать сетевой обмен.

Ovtia
16.02.2022, 10:57
это Вас уже стало сложно понять, так кому нужна информация о номере слейва мастеру теперь что ли?

Нет нужно мне вот это:


Уточню: Есть программа на Codesys, в ней в "Конфигурации ПЛК" добавлем модуль "Modbus (slave):". У него на вкладке "Параметры" есть параметр "Address", заданый при конфигурировании вручную. Мне из это же программы нужно считать значение параметра "Address". Все внутри одной программы одного ПЛК.


Если для Вас сложно перейти на библиотеки а в конфигураторе нельзя взять заданный адрес, то мастеру остается писать в конкретный слейв, адрес(UnitID) этого слейва в специально созданный регистр, чтобы его можно использовать в подчиненном контроллере

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

Ovtia
16.02.2022, 11:02
Если я правильно понял, то вы хотите сделать универсальную конфигурацию для разных слейвов.
Так делать однозначно не стоит.
Так как ПЛК (Мастер) будет пытаться опрашивать все устройства и регистры, не зависимо от того есть ли они в сети.

Если вам нужно чтобы мастер "прощупал" сеть слейвов, и на этом основании как-то поменял свою логику, то тут только через библиотеки писать сетевой обмен.

Нет конфигурация ПЛК, включая модуль Modbus (slave) как раз будет у всех одинаковая. Разнится слегка именно логика поведения каждого из слейвов и только modbus-адрес в модуле Modbus (slave).
Мастер логику менять не должен.

capzap
16.02.2022, 11:12
Теперь идею понял, к сожалению, такой вариант не подходит, потому, что подчиненный ПЛК должен работать и без мастера.

если в слейв ни кто не пишет значит информация и не изменится, ни кто не помешает при ПНР для проверки связи записать в этот регистр актуальный UnitID

Ovtia
16.02.2022, 11:32
если в слейв ни кто не пишет значит информация и не изменится, ни кто не помешает при ПНР для проверки связи записать в этот регистр актуальный UnitID

Да, ведь modbus регистры на этом ПЛК сохраняются. Изящное решение, подумаю, может быть так и сделаю.