PDA

Просмотр полной версии : Пример modbus slave



Туман
13.07.2014, 02:56
День добрый!

Может есть у кого пример или нормальный мануал по настройке через конфигуратор СПКххх как slave в modbus? Как пример передача/прием нескольких регистров ПЛКххх-мастер/СПКххх-слэйв.
Пока попробовал сам через конфигуратор связать ПЛК100 (мастер) и СПК107 (slave) - что-то ничего не заработало в железе, а документация ну очень скудная.

Хотя и за пример не через конфигуратор тоже буду признателен.

IVM
13.07.2014, 14:10
А с каких это пор ПЛК100 стал программироваться в среде CoDeSys V3 ?

Туман
13.07.2014, 14:36
А с каких это пор ПЛК100 стал программироваться в среде CoDeSys V3 ?
А причем тут ПЛК100 и codesys V3? Пример я ведь прошу на СПК :)
ПЛК100 само собой в codesys 2.3, но с ним с настройкой через конфигуратор никаких вопросов не возникает.
Но проверять то связь надо на железе, и для этого я использую связку ПЛК100 + СПК107.
И c настройкой modbus slave в Codesys 3.5 пока ничего не вышло.

Туман
14.07.2014, 01:30
Поэкспериментировал немного сам. В принципе результат получился, но есть вопросы.
Для начала, если верить стр. 29 ModBus_VS_CODESYS_V35.pdf. то там есть "Регистры временного хранения" - Holding registers, которые "доступны только для чтения функцией 04" и "Входные регистры" - Input registers, которые "доступны для чтения функцией 03 и записи функцией 16". Вот только сразу же в кодесисе регистры, доступные только для чтения именуются как %IW, а другие как %QW. Т.е. все получается наоборот. Или эти функции из мануала имелись в виду не как команды от внешнего мастера в сети, а внутри программы? Т.е. по факту все работает наоборот. Если отключить кабель RS-485 то все "Регистры временного хранения" - Holding registers, которые "доступны только для чтения функцией 04" сразу обнуляются. Ну это ладно. Может ошиблись.

Возник вопрос по адресации. Изначально я решил, что адресация формируется аналогично примеру работы с СП270, когда ПЛК slave. Добавил 4 "Holding registers" и 4 "Input registers". Если учитывать, что в мануале все перепутано, то получается регистры 0-3 выходные для ПЛК (мастера), 4-7 входные. Однако все заработало только при формировании конфигуратором в ПЛК как считывание так и запись по адресу 0-3. При этом в СПК присваивания нету, и раз адресация одна и та же логично было бы предположить, что изменив выходной регистр 0 в ПЛК на новое значение, увидив его по адресу %IW0 мы его же должны прочитать из %Q0, регистра 0, тоже самое значение. Т.е. получаются параллельные адреса регистров... Или я что-то не так понимаю в работе modbus...
В общем хотелось бы пояснения как точно оно работает, если кто подскажет, буду признателен.
13613

13614

capzap
14.07.2014, 06:14
Непробовали "включать мозг", разве само за себя слово input не говорит, что это во первых %IW, во вторых во входа ни где не пишется,включая и плк100. Кроме того есть википедия,где даны основы модбас, чтоб незаблуждатся из-за не корректной или неправильно понятой документации.
Используйте во всех случаях регистры хранения,чтоб небыло заморочек с записью, в доках на теже трмки написано какие параметры только для чтения и какой функцией их читать, а Вам то это зачем

Туман
15.07.2014, 02:42
Непробовали "включать мозг", разве само за себя слово input не говорит, что это во первых %IW, во вторых во входа ни где не пишется,включая и плк100. Кроме того есть википедия,где даны основы модбас, чтоб незаблуждатся из-за не корректной или неправильно понятой документации.
Используйте во всех случаях регистры хранения,чтоб небыло заморочек с записью, в доках на теже трмки написано какие параметры только для чтения и какой функцией их читать, а Вам то это зачем
"Непробовали" уменьшать ЧСВ что бы не советовать первым делом "включать мозг"? В вопросе я и так указал, что могу что-то не так понимать в работе modbus, и просил в том числе документацию. До википедии и прочего уже и так добрался, мозг как-то обычно не выключается.