PDA

Просмотр полной версии : Возможно ли RS-485 свяать два ПЛК150-220-И-М?



Станислав Жабинский
01.07.2009, 18:02
Есть два ПЛК150-220-И-М.
1. Возможно ли их связать по RS-485 один в качестве Модбас Мастер, другой в качестве слейва?
2. Если (1-да), то, пожалуйста, объясните, как обратиться в программе Мастера к выходу контроллера-слейва. Т .е. как корректно указать адрес выхода Слейва.
3. Конфигурирование Мастера и Слейва в одном проекте делается или каждому контроллеру свой проект?
Уж простите новичка за глупые вопросы.

Николаев Андрей
01.07.2009, 23:49
1/ В проекте для первого ПЛК Вы добавляете ModBus Slave (как регистры получают свои адреса четко прописано в документе по работе с PLC Configuration).
2/ Во втором проекте для второго контроллера добавляете ModBus Master, и опрашиваете регистры, сформированные в первом проекте.

Станислав Жабинский
02.07.2009, 11:40
Простите, но не получается.
1. В проекте для первого ПЛК Вы добавляю ModBus Slave.
Добавляю RS485.
Добавляю подэлемент 8bits.
Первый бит в нем получает автоматом адрес %QX9.1.0.0.
Как его привязать к первому физическому дискр. выходу Слейва не знаю, поэтому в программе этого же проекта слейва пишу %QX9.1.0.0=%QX1.0 (на языке LD).
2. В проекте для второго контроллера добавляю ModBus Master.
В программе проекта упоминаю адрес %QX9.1.0.0.
При компиляции выдается ошибка 3728: "Неверный адрес %QX9.1.0.0".

Вот такая беда.
Люди добрые, памажите, кто чем может!

Николаев Андрей
02.07.2009, 16:46
В общем это никакая и не беда.
Нельзя пытаться использовать МЭК адреса одного контроллера для обмена по внешним протоколам в проекте для другого.

И если в Slave Вы все сделали (надеюсь) правильно. Хотя лучше с адресами не работать, а присваивать им имена и работать с именами.

При настройке ModBus Slave формируется карта регистров ModBus. Как это правильно делается - читайте документ работа с PLC Configuration.
Далее Вы имеете набор регистров, которые Вам нужно опрашивать контроллером - мастером сети.

Настраиваете Мастер. Опять же описание в документации. Добавляете Universal ModBus Device, указываете ModBus адрес ПЛК-Slave и добавляете соответствующие переменные.

То есть при обмене по ModBus обращение идет не к МЭК адресам, а к номерам регистров Slave устройств.

Станислав Жабинский
06.07.2009, 12:34
Прошу прощения, за беспокойство.
Видимо, один работающий пример лучше сотни расспросов и теоретических пояснений.
Вам, Николай не очень сложно было бы такой проектик скинуть: где один такой контроллер (мастер) включает первый выход другого контроллера.
Например.
Заранее благодарен, и еще раз очень извиняюсь.

Станислав Жабинский
14.07.2009, 09:46
Где-то пропал Супермодератор наш. Ни ответа ни привета. :(

Филоненко Владислав
14.07.2009, 12:40
В славе добавьт е1 регист, в мастере 1 регистр, настройте адреса и скорости.
БОЛЬШЕ ничего не делайте, в программе ;
Все заработает, потом пишите программу

Станислав Жабинский
14.07.2009, 15:14
А как проверить, что оно "все заработает", и уже можно писать программу?

Филоненко Владислав
14.07.2009, 15:35
Проверкой является изменение данных в переменной в slave и отображение этих изменений на мастере

Станислав Жабинский
15.07.2009, 10:39
Получилось!!!
Yes!
Выражается личная благодарность Филоненко Владиславу и Николаеву Андрею, за подсказки :)

Станислав Жабинский
16.07.2009, 12:52
Гм.
Еще такая проблема.
Когда, в Проекте для Слейва, добавляю один подэлемент 8bits,
а в Проекте для Мастера добавляю Universal ModBus Device, где добавляю тоже один подэлемент 8bits-inputs, все Ок-работает.
Но!
Когда в Проекте для Слейва, добавляю ДВА (например) подэлемента 8bits,
а в Проекте для Мастера в тот же Universal ModBus Device добавляю уже два подэлемента 8bits-inputs. То, эти, уже два, 8битных подэлемента, отражают состояние первого 8-бита Слейва оба, а ко второму 8-биту слейва достучаться не могу.
Что не так?

Николаев Андрей
16.07.2009, 13:14
В ModBus Master адрес вторых 8 бит какой ставите?

lara197a
16.07.2009, 13:17
В слейве идет считывание не по битам а регистр целиком. Используйте вторые 8 бит для выравнивания адресного пространства. Новые 8 бит пишите в следующий регистр. Или для чтения вторых 8 бит (старшего байта) используйте сдвиг влево но 8.
Я не очень понял Вас, но один из советов поможет точно.

Станислав Жабинский
16.07.2009, 13:30
Адрес...
Шут его знает, в явной форме этого слова (адрес) не вижу.Есть такое:

Идентификатор модуля: 2001 (недоступно к редактированию)
Идент. узла: 1 (доступно к редактироованию)

И в Параметрах модуля:
Regster: 0
Comand и Visibility к делу не относится.

(все параметры второго 8-битного модуля в проекте для Мастера)

lara197a
16.07.2009, 13:43
Регистр 0 -это и есть адрес вашего регистра.
В нем два байта по 8 бит.
Следующий регистр №1 ит.д.
В зависимости от команды, которой вы считываете или записывыете данные происходит считывание и запись по битам или регистрам целиком.

Николаев Андрей
16.07.2009, 13:48
Вот тебе здрасьте, приехали...
В MB Master при добавлении в UMD новых параметров записи\считывания указывается адрес регистра Slave устройства в\из которого будет происходить запись\опрос...

Станислав Жабинский
16.07.2009, 14:08
1. Андрею Николаеву: последнюю Вашу фразу правильно ли понимать так: "В MB Master при добавлении в UMD нового подэлемента, в частности 8-битного входного модуля, указывай в "Параметрах модуля" в графе "Регистр" адрес твоего модуля"??????
Тогда: было в строчке "регистр" второго 8бита "0", изменил я на "1", а все осталось по-прежнему(как я включит бит в первом 8-бите слейва, так этот же бит наблюдаю включенным в UMD как в первом 8-битном входном модуле, так и во втором). Что не так? Кстати на изменения регистра вообще реакции нет, хоть "25" туда ставлю, хоть "0", хоть "1". Один бит как горел, так и горит.

Николаев Андрей
16.07.2009, 14:10
Выкладывайте оба проекта...

Станислав Жабинский
16.07.2009, 14:54
Вот, заливаю это счастье в железо, устанавливаю в слейве 1 бит, и в мастере наблюдаю этот бит в двух 8-битных модулях одновременно :(

Станислав Жабинский
16.07.2009, 15:21
В слейве идет считывание не по битам а регистр целиком. Используйте вторые 8 бит для выравнивания адресного пространства. Новые 8 бит пишите в следующий регистр. Или для чтения вторых 8 бит (старшего байта) используйте сдвиг влево но 8.
Я не очень понял Вас, но один из советов поможет точно.

1. Спасибо за желание помочь.
2. Не знаю, правильно ли я понял, но сделал вот что:
с целью "выравнивания адресного пространства" в проекте для Слейва, я второй 8-битник оставил для выравнивения, а добавил третий 8-битный подэлемент. (Если я верно понял, первые два байта - нулевой регистр, а третий байт - первый регистр).
Затем в проекте мастера исправил регистр второго восьмибитника на "1".
По идее он теперь должен опрашивать третий 8битник Слейва.
Слил все это в железо, включил первый бит на Слейве, подключился к Мастеру и увидел этот первый бит, опять и на первом 8битнике и на втором. :(
Не помогло, или что-то я делал не так.

Филоненко Владислав
16.07.2009, 15:46
Что-то сделали не так. Осталась старая программа в slave или в мастере.

lara197a
16.07.2009, 15:48
В приложенном к ПЛК диске в разделе документация есть файл с описанием ПЛК-конфигуратора. На 52стр описано, как размещать и выравнивать переменные в слайве. В выложенных вами программах в слеве два по 8 бит формируют нулевой регистр. В мастере 1 регистр опрашивает пустоту. Испоьзуйте команду для записи 0 или 1 -по байтно и 3или4 для регистров.

Станислав Жабинский
16.07.2009, 15:54
Что-то сделали не так. Осталась старая программа в slave или в мастере.

Не может быть.
Codesys же, когда подключаюсь, не находит разницы между открытым проектом и проектом залитым в контроллер. Так что, заливаю правильно - я считаю.

Станислав Жабинский
16.07.2009, 16:06
В приложенном к ПЛК диске в разделе документация есть файл с описанием ПЛК-конфигуратора. На 52стр описано, как размещать и выравнивать переменные в слайве. В выложенных вами программах в слеве два по 8 бит формируют нулевой регистр. В мастере 1 регистр опрашивает пустоту. Испоьзуйте команду для записи 0 или 1 -по байтно и 3или4 для регистров.

Согласен "В мастере 1 регистр опрашивает пустоту".
Но, когда все это залито в железо, этот первый регистр видит почему-то не пустоту, а первый байт нулевого регистра Слейва, причем, для смеха нумеровал его даже 25-м (регистр) - эффект тот же. Понимаю, железа у Вас нет, а на слово не поверите, но - клянусь!
Если бы он "мертвым" лежал (первый регистр этот), мне бы это понятно было, а так - просто барабашка какой-то!

Николаев Андрей
16.07.2009, 16:10
Согласен "В мастере 1 регистр опрашивает пустоту".
Но, когда все это залито в железо, этот первый регистр видит почему-то не пустоту, а первый байт нулевого регистра Слейва, причем, для смеха нумеровал его даже 25-м (регистр) - эффект тот же. Понимаю, железа у Вас нет, а на слово не поверите, но - клянусь!
Если бы он "мертвым" лежал (первый регистр этот), мне бы это понятно было, а так - просто барабашка какой-то!

Вы не можете назначать адреса в MB Slave. Они назначаются АВТОМАТИЧЕСКИ. и 25 регистр у Вас появится, если Вы добавите 26 двухбайтных переменных...
Попробуйте все-таки написать проекты заново, и залить новые проекты в контроллеры, не забыв сделать команду из меню Онлайн сброс заводской...

Станислав Жабинский
16.07.2009, 16:11
В приложенном к ПЛК диске в разделе документация есть файл с описанием ПЛК-конфигуратора. На 52стр описано, как размещать и выравнивать переменные в слайве. В выложенных вами программах в слеве два по 8 бит формируют нулевой регистр. В мастере 1 регистр опрашивает пустоту. Испоьзуйте команду для записи 0 или 1 -по байтно и 3или4 для регистров.

А на странице 52 у меня о Подмодуле "Модем" говорится, разные книги читаем? :)

Николаев Андрей
16.07.2009, 16:14
Ну да, с модемом все сложнее - там мы планировали заложить функцию сдвига адреса регистра...

Станислав Жабинский
16.07.2009, 16:22
Вы не можете назначать адреса в MB Slave. Они назначаются АВТОМАТИЧЕСКИ. и 25 регистр у Вас появится, если Вы добавите 26 двухбайтных переменных...
Попробуйте все-таки написать проекты заново, и залить новые проекты в контроллеры, не забыв сделать команду из меню Онлайн сброс заводской...

Сейчас займусь.
А где можно почиталь про "Холодный сброс" и в каких случаях им пользоваться?

Николаев Андрей
16.07.2009, 16:26
Заводской - возвращает контроллер в первозданное состояние, стирая программу как с ОЗУ, так и с FLASH

lara197a
16.07.2009, 16:43
Посмотрите по оглавлению на 50 стр. я как раз и говорил о распределенииадресного пространства и его выравнивании.
Попробуйте дополнительно сделать ресет ПЛК.

Станислав Жабинский
16.07.2009, 17:31
То же самое.
Возможно, в самих контроллерах глюки?
У меня "украинская" версия.
Попробовать хочу по Ethernetу связь.
Но тут в документации вообще голяк, похоже.
Какие подмодули куда добавлять, 8битных подмодулей вообще не нашел.
Где это почитать можно?

Станислав Жабинский
16.07.2009, 18:22
Хочу узнать IP-адрес Слейва.
Где искать этот PLC-Browser?
Кстати, столь большое число обращений на форуме свидетельствует о "недружелюбной" документации. Стоит продолжить ее "вылизывать". Чтобы не превратить Ваши ПЛК в маргинальные приборы, с узким кругом потребителей. Все же потенциальные покупатели в Москву на курсы не поедут. Проще будет найти импортный аналог.
Поймите меня правильно, это не претензия, это доброжелательный совет.

Станислав Жабинский
16.07.2009, 18:27
ПЛК-Барузер нашел.
Но как увидеть IP-адрес из него не ясно.

magirus
16.07.2009, 20:43
filedir

на внутреннем диске ПЛК есть файл local_adress.dat
В нем все настройки Ethernet.
Через CoDeSys - Login - Read File From PLC и Write File To PLC
когда то сам проходил через это...
файл текстовый.

Николаев Андрей
17.07.2009, 09:22
К сожалению было такое упущение.
В документации мы добавили работу с PLC Browser.
Работает только если установлена связь CoDeSys-ПЛК.
Открываете PLC Browser и в верхнем меню пишете ? и нажимаете Enter
Контроллер выдает все возможные команды - как считывание так и запись.

Станислав Жабинский
17.07.2009, 09:23
Сорри-сорри, сам нашел описания ПЛК-Браузера.
Все ясно.

Станислав Жабинский
17.07.2009, 10:55
Та же фигня и по Ethernetу:
Когда дело ограничивается одним 8-битником все Ок.
Если добавить второй, то, в проекте Мастера, второй 8битный модуль входов точно отражает состояние первого (т. е. в результате отражает состояние битов первого байта нулегово регистра Слейва).
При добавлении 8битников далее, в обоих проектах (для Слейва и для Мастера), на изменения битов первого регистра Слейва, биты в Мастере, соответствующие первому регистру, не реагируют.
:(

Станислав Жабинский
17.07.2009, 10:58
имеется ввиду, когда заливаю это в железо и начинаю включать на Слейве биты для проверки, и проверять реакцию на Мастере.

lara197a
17.07.2009, 11:02
Станислав извините, я в курсе только части диалога, Вы не пробовали загружать какой либо проект из опробованных ранее. К примеру с этого же форума? Или проблема остается с любым проектом?
У меня к сожалению только 1 контроллер, нет возможности соединить между собой именно контроллеры, но с любыми другими устройствами таких проблем не замечал.

Станислав Жабинский
17.07.2009, 11:25
У меня в железе только эти два ПЛК150-220.И-М.
Мне их нужно понять и наловчиться настраивать сетку, перед тем как закладывать этот ОВЕН в свои проекты.
Полагаю, что найти "какой либо проект из опробованных ранее" на сеть из двух таких приборов мне не удастся, потому что просто на практике нет смысла два одинаковых ПЛК сеткой соединять. Логичнее в таком случае взять ПЛК+МДВВ.

Станислав Жабинский
17.07.2009, 11:48
Дублирую свой пост, т. к. ситуация та же:
Та же фигня и по Ethernetу:
Когда дело ограничивается одним 8-битником все Ок.
Если добавить второй, то, в проекте Мастера, второй 8битный модуль входов точно отражает состояние первого (т. е. в результате отражает состояние битов первого байта нулегово регистра Слейва).
При добавлении 8битников далее, в обоих проектах (для Слейва и для Мастера), на изменения битов первого регистра Слейва, биты в Мастере, соответствующие первому регистру, не реагируют.

lara197a
17.07.2009, 11:56
Станислав, попробуйте упаковывать данные и передавать в формате слова(2byte), а затем раскладывать их в программе побитно.(библиотека утил.либ PACK, UNPACK )

Станислав Жабинский
17.07.2009, 12:10
Станислав, попробуйте упаковывать данные и передавать в формате слова(2byte), а затем раскладывать их в программе побитно.(библиотека утил.либ PACK, UNPACK )

Супер-совет! Спасибо! Поставил в проекте матера 32-битный модуль входов и он отражает картину верно! По меньшей мере два регистра входов есть.
А ну сейчас накидаю еще регистра 4, если там будет результат - то это выход.

Станислав Жабинский
17.07.2009, 12:25
Но не тут-то было.
Теперь второй 32битный модуль входов не дышит. Поставил ему разряд "2".
Вроде бы все правильно. Почему-то работает корректно только первый модуль входов в мастере, не важно 8битный или 32битный, но - только первый. Остальные лежат, не дышат.

lara197a
17.07.2009, 12:57
Станислав выложите проект, посмотрю.

Станислав Жабинский
17.07.2009, 13:08
Вот это счастье:

lara197a
17.07.2009, 13:37
Станислав Вам нужно читать переменные из слейва или записывать в них?

Станислав Жабинский
17.07.2009, 13:45
Читать из Слейва

lara197a
17.07.2009, 13:54
Поставьте в слейве переменные 2 байта-2 шт. Это будет 0 и 1 регистр.
В мастере, поставьте подмодуль "регистр инпут модуль" с адресом в параметрах "Регистр" 0 и 1 соответственно.
Проверьте должно работать. Если не получится, то я Вам подправлю вышевыложенное и брошу.

Станислав Жабинский
17.07.2009, 16:03
Поставьте в слейве переменные 2 байта-2 шт. Это будет 0 и 1 регистр.
В мастере, поставьте подмодуль "регистр инпут модуль" с адресом в параметрах "Регистр" 0 и 1 соответственно.
Проверьте должно работать. Если не получится, то я Вам подправлю вышевыложенное и брошу.

Лучше второй вариант (подправить вышевыложенное и бросить), если Вам не сложно. Чтобы эксперимент был чистым. Я это чесно позаливаю в слейв и мастер, и посмотрим, что будет.

lara197a
17.07.2009, 16:40
Пробуйте. Работа заканчивается, прощаюсь до понедельника.1424

lara197a
17.07.2009, 16:43
1426

1427
Извиняюсь, вот эти грузите.

Станислав Жабинский
21.07.2009, 16:52
:)
Ваша прога работает.
Сам тож еще поэкспериментировал в Ethernete - работает.
Но своей ошибки так и не понял, что не так раньше было.
А по RS-485 так и глючит. Мож, дело в кабеле.
Но в принципе устойчивого эзернета мне, как разработчику достаточно. :)
Спасибо.

Станислав Жабинский
21.07.2009, 17:29
Точно!
Кривая витая пара+высокая скорость (11520) и вот результат.
Снизил скорость и все ОК и по RS-485.
Моя проблема в том, что я раньше с RS-485 не работал, и специфических заморочек не знаю. Вообще-говоря странно, что, производитель в документации настаивает на скорости 11520. Отдали бы на откуп потребителю, он один знает что у него там за провод и т. д.
:) а в целом, всем очень большое спасибо!

Станислав Жабинский
21.07.2009, 17:30
115200 :) :) :)

Николаев Андрей
21.07.2009, 18:06
На 115200 у меня лично гарантированно работало все оборудование... По этому и рекомендуем...
Понятно, что если линия длинная, или помех много - скорость надо снижать - но это уже не к ПЛК вопросы...