PDA

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



Serj_N
06.02.2008, 15:05
Не могли бы вы объяснить, как конфигурируется модуль Modbus Slave. Вставил я переменную "2 байта". Назвал её. Дальше?
Как привязать привязать эту переменную к памяти? Как привязать эту переменную к конкретному адресу Modbus? Как сконфигурировать связь между переменными Modbus Slave и вставленного внутрь него Modbus Master?

Филоненко Владислав
06.02.2008, 19:04
Для начала рекомендую прочитать документацию

Serj_N
07.02.2008, 09:22
Документацию? По поводу неё речь уже заходила…:o
Мне, по работе, приходится программировать контроллеры Siemens S7-200, S7-300, панели оператора Siemens от TP170 Micro до PC477, и за три года я несколько раз заходил на форум к российскому представительству и раз пять звонил в службу тех. поддержки. Больше не потребовалось. Два месяца назад купил пару ПЛК 100 и два месяца не вылезаю с этого форума. Документации не хватает. Поглупел, что ли, так резко?:)

SergeyNG
07.02.2008, 10:05
Документ "PLC_Configuration_OWEN.pdf" на диске с ПЛК.

3.1.3. Настройка данных информационного обмена................49
3.1.3.1. Выравнивание переменных при размещении в области памяти............................................ ..............................51
3.1.3.2. Отображение устройства в области памяти..............52

Если знаете modbus вопросов больше не возникнет

Kirill
07.02.2008, 10:22
Не могли бы вы объяснить, как конфигурируется модуль Modbus Slave. Вставил я переменную "2 байта". Назвал её. Дальше?
Как привязать привязать эту переменную к памяти? Как привязать эту переменную к конкретному адресу Modbus? Как сконфигурировать связь между переменными Modbus Slave и вставленного внутрь него Modbus Master?

После того, как вы добавили в ModBus slave переменную, например 2 байта, она автоматически привязывается к памяти ПЛК. Для протокола Модбас она автоматически получает адрес. Адресация регистров, т.е. 2 байтовых переменных, производится ПЛК следующим образом: первый 2 byte получает адрес 0, второй - 1 и т.д. Эти адреса заданы для данного интерфейса связи и для данного слэйва. Если у вас ПЛК выступает в роли слэйва на разных интерфейсах, то для каждого интерфейса адресация регистров будет своя. При этом сам ПЛК условно становится несколькими Модбас-устройствами по разным интерфейсам.

Надеюсь, не запутал:)

Serj_N
07.02.2008, 12:01
От Kirill >> Надеюсь, не запутал:)
«Нас атомной бомбой запугаешь едва ли …»©:)

Странно как то получается. Взаимосвязь переменной и адреса Modbus идёт неформально. Эта переменная выше в списке, значит адрес у неё меньше, эта переменная ниже в списке, значит адрес у неё больше. :( А само значение адреса можно узнать только пересчитав все переменные с начала. Очень неудобно. Причём в модуле Modbus Master это же сделано по уму – у каждой переменной в свойствах можно посмотреть (и поменять) её Modbus адрес. Почему для Modbus Slave не сделали так же?

А как объяснить это?
Если сделать так, то первая переменная по адресу Modbus 40000 не видна! Считывание происходит, начиная со второй.

http://www.owen.ru/forum/attachment.php?attachmentid=328&stc=1&d=1202374735


А если вставить однобайтовую переменную, то первая (двухбайтовая) переменная начинает читаться.

http://www.owen.ru/forum/attachment.php?attachmentid=329&stc=1&d=1202374763

Kirill
07.02.2008, 12:20
А можно на проект в целом взглянуть?
Откуда взялся адрес 40000? И адрес чего это, slave-a или регистра в нем?

Филоненко Владислав
07.02.2008, 12:20
Прошейте 2.02.8 и используйте CoDeSys 2.3.8.1

Kirill
07.02.2008, 12:32
Странно как то получается. Взаимосвязь переменной и адреса Modbus идёт неформально. Эта переменная выше в списке, значит адрес у неё меньше, эта переменная ниже в списке, значит адрес у неё больше. :( А само значение адреса можно узнать только пересчитав все переменные с начала. Очень неудобно. Причём в модуле Modbus Master это же сделано по уму – у каждой переменной в свойствах можно посмотреть (и поменять) её Modbus адрес. Почему для Modbus Slave не сделали так же?


Определенное неудобство конечно есть, но тут на вкус и цвет у каждого свой фломастер. Для каждого регистра вы можете в комментарии подписать адрес - это не сложнее, чем задать его в свойствах. Мастер оперирует чужими адресами регистров, вы меняете адрес и получаете другие данные.

Вы можете поменять имя переменной, связанной с конкретным регистром Слэйва.

Serj_N
07.02.2008, 15:55
Проект, по сути, простой. ПЛК работает как протокольный шлюз между Modbus RTU и Modbus ASCII. Такое решение потребовалось по той простой причине, что радиомодем "Невод-5" практически не способен работать в режиме RTU. Постоянно возникают тайм-ауты (ориентировочно до 200..300 мс) между байтами в кадре. Придется использовать ASCII. И роль ПЛК – организация Modbus ASCII моста через эти радиомодемы.
Схема сети:
http://www.owen.ru/forum/attachment.php?attachmentid=330&stc=1&d=1202388465

По поводу адреса – команда 0x03 автоматически использует адреса из пространства 04xxxx. Например, в Modbus Master мы задаём адрес ‘0’, и он конвертируется модулем в адрес 40000. А адресом slave-a число 40000 (в Modbus протоколе) не может быть в принципе.:confused:

>> Для каждого регистра вы можете в комментарии подписать адрес - это не сложнее, чем задать его в свойствах.
Это здорово. Нужно тебе вставить новую переменную в середину имеющегося списка – и понесся программист перебивать комментарии. Да смотри – не ошибись! Потом заново выполнить тестирование этого участка коммуникаций. Изменил настройки – будь добр, проверь работу этого участка по всем пунктам теста… А если адрес в свойствах – это жесткая привязка. Я могу быть уверен, что по запросу на адрес ’3’ вернётся содержимое переменной, у которой в свойствах прописана привязка к адресу ‘3’. И никак иначе!
Другой вариант – если реализовать такую схему, когда Modbus адрес для переменной Modbus Slave задаётся самим программистом сложно, то обязательно нужно добавить в свойства переменной строку, в которой будет показываться Modbus адрес, присвоенный данной переменной модулем Modbus Slave. Это позволит избежать ошибок при определении адреса переменной и абсолютно глупой трате времени на это.

Проекты:
331
332

Serj_N
07.02.2008, 16:02
При тестировании связи двух ПЛК 100 через Modbus, команда 0x03, выяснилось, мастер ведёт опрос по одному регистру за запрос. Как это изменить и сделать так, что бы запрашивалась группа регистров за запрос (ведь для этой команды это естественно)?

Филоненко Владислав
07.02.2008, 18:12
В мастере используйте string input module

Serj_N
08.02.2008, 08:34
В мастере используйте string input module

Насколько я понимаю, при использовании string input module о такой вкусности, как передача float можно забыть?:(