PDA

Просмотр полной версии : Два ПЛК100



Женя84
07.03.2015, 20:49
Вчера поступили два ПЛК100 впервые с ними сталкиваюсь и до этого не разу не программировал на CODESYS, вот сижу с ними разбираюсь, но что то совсем трудно всё даётся.
Для начала знакомство с этой программой при создании программы выбираю язык реализации CFC.
Пробывал писать примитивные программки на один ПЛК получается.
Но дали задания чтоб один ПЛК был в режиме slave а другой в режиме Master.
И они через Ethernet передавали сигналы друг другу.
К примеру чтоб на "ПЛК slave" замкнули контакт а реле сработало на "ПЛК Master"
Но это не как не получается сделать.
Настройки IP адреса как я понял необходимо менять в программе во вкладке "ПЛК-Браузер"
С компьютера пинги проходят значит адреса вроде поменял правильно.
Вот картинки
17020
17021
А дальше уже идут танцы с бубном :( связать их не получается вместе
17022
17023

Может кто подскажет в каком направлении двигаться.

petera
07.03.2015, 21:10
Вчера поступили два ПЛК100 впервые с ними сталкиваюсь и до этого не разу не программировал на CODESYS, вот сижу с ними разбираюсь, но что то совсем трудно всё даётся.
Для начала знакомство с этой программой при создании программы выбираю язык реализации CFC.
Пробывал писать примитивные программки на один ПЛК получается.
Но дали задания чтоб один ПЛК был в режиме slave а другой в режиме Master.
И они через Ethernet передавали сигналы друг другу.
К примеру чтоб на "ПЛК slave" замкнули контакт а реле сработало на "ПЛК Master"
Но это не как не получается сделать.
Настройки IP адреса как я понял необходимо менять в программе во вкладке "ПЛК-Браузер"
С компьютера пинги проходят значит адреса вроде поменял правильно.
Поменял вот картинки
17020
17021
А дальше уже идут танцы с бубном :( связать их не получается вместе
17022
17023

Может кто подскажет в каком направлении двигаться.
Для начала пример посмотрите http://kipshop.ru/Primeri/Samples_plc1xx/Communication/02_Modbus%20TCP.zip он так же есть на диске ПЛК.
Далее почитайте про конфигурацию ПЛК, а то у Вас все модули UMD имеют один и тот же адрес регистра "0", а должны соответствовать адресам регистров в слейве второго контроллера. Кроме того, IP контроллера, который Slave, 10.162.137.130. Вот этот IP и нужно прописать в настройках UMD в мастере второго контроллера, а у Вас там стоит 10.162.137.131.

Женя84
08.03.2015, 20:54
Для начала пример посмотрите http://kipshop.ru/Primeri/Samples_plc1xx/Communication/02_Modbus%20TCP.zip он так же есть на диске ПЛК.
Далее почитайте про конфигурацию ПЛК, а то у Вас все модули UMD имеют один и тот же адрес регистра "0", а должны соответствовать адресам регистров в слейве второго контроллера. Кроме того, IP контроллера, который Slave, 10.162.137.130. Вот этот IP и нужно прописать в настройках UMD в мастере второго контроллера, а у Вас там стоит 10.162.137.131.

Прочитал про конфигурацию ПЛК, выходит во вкладке POU нечего не надо делать. Только необходимо настроить во вкладке Ресурсы в Конфигурации ПЛК ? Чтоб реле передавались от slave к Master ?

smk1635
08.03.2015, 21:44
Прочитал про конфигурацию ПЛК, выходит во вкладке POU нечего не надо делать. Только необходимо настроить во вкладке Ресурсы в Конфигурации ПЛК ? Чтоб реле передавались от slave к Master ?
В принципе, да.
Скажем так, конфигуратор решает за Вас кучу проблем по организации связи. Но как любой универсальный инструмент он не идеален. Хотя для большинства задач более чем достаточен.
ИМХО Своим ребятам советую сразу паковать биты в WORD. Modbus изначально заточен для работы с переменными WORD. За одно возможных ошибок в выравнивании регистров избежите.
Добавьте библиотеку Util и используйте функциональные блоки PACK и UNPACK.

petera
09.03.2015, 03:37
Прочитал про конфигурацию ПЛК, выходит во вкладке POU нечего не надо делать. Только необходимо настроить во вкладке Ресурсы в Конфигурации ПЛК ? Чтоб реле передавались от slave к Master ?
Правильно, сначала нужно создать конфигурацию в Slave. В зависимости от формата используемых переменных, использовать соответствующие модули 8bits, 2byte, 4byte или Float. Затем определить адреса, руководствоваться нужно картинкой из руководства по конфигурации ПЛК.
http://www.owen.ru/forum/attachment.php?attachmentid=12345&d=1395648726
Предположим, что в Slave такое распределение регистров
17043
Обратите внимание на разрыв в номерах бит, это следствие "выравнивания" адресов
Тогда в мастере для чтения этих регистров нужна такая конфигурация
17047
В параметрах UMD в этом случае нужно выбрать режим Work mode - By poll time.
Адреса регистров для модулей
17044
17045
17046
Если же нужно записывать в регистры в Slave, то нужно добавить в мастере еще один UMD, для него режим Work mode - By value change. В этом случае вместо модулей input, нужно выбирать модули output, адресация регистров -аналогичная.

petera
09.03.2015, 04:50
ИМХО Своим ребятам советую сразу паковать биты в WORD. Modbus изначально заточен для работы с переменными WORD. За одно возможных ошибок в выравнивании регистров избежите.
Добавьте библиотеку Util и используйте функциональные блоки PACK и UNPACK.
С чего это Modbus изначально заточен для работы с переменными WORD?
Во первых операции чтения регистров (4х, 3х) и бит (0х, 1х) оперируют байтами, и практически совпадают по структуре.
Минимальное количество байт в запросе и ответе для 4х, 3х -два байта, а для 0х и 1х -один байт (8 подряд идущих бит упакованы в один байт).
И при записи 4х используются байты, по два байта на один регистр.
Тогда уж Modbus изначально заточен для работы с переменными BYTE:rolleyes:
Это только при записи бит 0х на каждый бит расходуется целых два байта.

Для ПЛК ОВЕН использование всяких PACK и UNPACK для замены в Slave нескольких модулей 8bits на 2byte, 4byte бессмысленно. Потому, что в конфигурации области 0х, 1х и 4х, 3х находятся в общем адресном пространстве физической памяти.
С точки зрения Мастера, при использовании в UMD Register input(output) module, совершенно не важно, что прописано в конфигурации Slave или два подряд 8bits или один 2byte, результат будет одинаковым -16 бит идущих по порядку, которые будут получены одним запросом. А как интерпретировать содержимое Register input(output) module или как упакованные в один WORD 16 бит или как один регистр WORD уже Ваше дело.
А вот в ПЛК мастере, при использовании конфигуратора, вполне оправдано замена нескольких,подряд идущих, 8 bit input(output) module на Register input(output) module и даже на 32bit input(output) module. Это нужно для уменьшения трафик по шине Modbus.
Только вот незадача, PACK и UNPACK работают с BYTE, а нужен WORD или DWORD. Не проще ли обращаться к отдельным битам через точку?
Если не нравится обезличенное CMD_Panel.11, то
Объявить в глобальных переменных константы
17048
И использовать их имена для обращения к отдельным битам регистров
17049
17050

smk1635
09.03.2015, 09:52
petera вот всё правильно написали, но учитывайте что человек первый раз работает с КДС. :)
Сперва по проще, потом сам начнет разбираться. Тем более, видно что документацию читает внимательно.
Да и судя по выбору языка, человеку удобней работать с ФБ.

Своих приучаю работать с WORD по двум причинам:
1. Как Вы правильно заметили, для уменьшения трафика обмена.
2. Для избежания ошибок с адресацией. Если в Slave все регистры типа Word, то с адресацией в Mastere, как правило у
новичков проблем не бывает.

И да, забыл что PACK и UNPACK работают с BYTE. Своими ФБ пользуемся. :)

Sergey666
09.03.2015, 10:46
petera вот всё правильно написали, но учитывайте что человек первый раз работает с КДС. :)
Сперва по проще, потом сам начнет разбираться. Тем более, видно что документацию читает внимательно.
Да и судя по выбору языка, человеку удобней работать с ФБ.

Своих приучаю работать с WORD по двум причинам:
1. Как Вы правильно заметили, для уменьшения трафика обмена.
2. Для избежания ошибок с адресацией. Если в Slave все регистры типа Word, то с адресацией в Mastere, как правило у
новичков проблем не бывает.

И да, забыл что PACK и UNPACK работают с BYTE. Своими ФБ пользуемся. :)

Каждый блочек-место на холсте , нафиг оно надо распаковывать-запаковывать , если в синтаксисе предусмотрено
Ну почему не сделать хоть так:
1. Экшн на St
2 Any_swith:=In_word_mv110.0;(*In_word_mv110.0 - маска входов МВшки , ну или ПЛКшк, да хоть чего*)

smk1635
09.03.2015, 11:21
Каждый блочек-место на холсте , нафиг оно надо распаковывать-запаковывать , если в синтаксисе предусмотрено
Ну почему не сделать хоть так:
1. Экшн на St
2 Any_swith:=In_word_mv110.0;(*In_word_mv110.0 - маска входов МВшки , ну или ПЛКшк, да хоть чего*)

Да можно, конечно же можно. :)
Только прога у человека на СFC, а не на ST. И человек первый раз работает с КДС.
И самая первая, основная ошибка у новичков (по моему опыту), это выравнивание регистров и их адресация.
Вторая - это гонять по сети кучу битов.
С блоками нагляднее и биты не гоняют.
Ну если Женя84 знаком с языком ST, знает как работает конфигуратор, изучил дополнительные библиотеки, то может и по проще сделать, как советуют.
А то и вовсе на прямую с портами работать, без конфигуратора.

Я то давал совет из расчета что человек только начинает изучение КДС. :)

Sergey666
09.03.2015, 12:23
Да можно, конечно же можно. :)
Только прога у человека на СFC, а не на ST. И человек первый раз работает с КДС.
И самая первая, основная ошибка у новичков (по моему опыту), это выравнивание регистров и их адресация.
Вторая - это гонять по сети кучу битов.
С блоками нагляднее и биты не гоняют.
Ну если Женя84 знаком с языком ST, знает как работает конфигуратор, изучил дополнительные библиотеки, то может и по проще сделать, как советуют.
А то и вовсе на прямую с портами работать, без конфигуратора.

Я то давал совет из расчета что человек только начинает изучение КДС. :)

Акшн присобачивается к Любой программе на Любом языке , надо только правым кнопарем ткнуть.
Ну и потренироваться канэээчно , а куды без ентого.

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

Женя84
10.03.2015, 09:23
Да можно, конечно же можно. :)
Только прога у человека на СFC, а не на ST. И человек первый раз работает с КДС.
И самая первая, основная ошибка у новичков (по моему опыту), это выравнивание регистров и их адресация.
Вторая - это гонять по сети кучу битов.
С блоками нагляднее и биты не гоняют.
Ну если Женя84 знаком с языком ST, знает как работает конфигуратор, изучил дополнительные библиотеки, то может и по проще сделать, как советуют.
А то и вовсе на прямую с портами работать, без конфигуратора.

Я то давал совет из расчета что человек только начинает изучение КДС. :)

Я впервые сталкиваюсь с этой программой :) Уже повторно перечитываю про конфигурацию ПЛК трудновато даётся но просветы есть :D

Сегодня буду целый день мучить контроллеры.

Женя84
10.03.2015, 12:53
Всё разобрался :p сделал один контроллер чтоб работал как Master так и Slave, и также сделал второй и назначил по три контакта чтоб передавалась туда и обратно.
17076
17077

17078
17079

17080
17081

Огромное вам спасибо за вашу помощь !!!!!

petera
10.03.2015, 13:19
Всё разобрался :p сделал один контроллер чтоб работал как Master так и Slave, и также сделал второй и назначил по три контакта чтоб передавалась туда и обратно.
17076
17077

17078
17079

17080
17081

Огромное вам спасибо за вашу помощь !!!!!
А теперь, все таки, попробуйте сделать один контроллер только Мастер, второй только Слейв, но чтобы по три контакта передавались и туда и обратно

Женя84
10.03.2015, 14:29
Появилась проблема. Загружаю программу всё работает хорошо.
Но стоит отключить питания от сети ( полностью обесточить контроллер минут на 5 ) то при подаче напряжения на контроллер программа пропадает.
Это так и должно быть ?

_Mikhail
10.03.2015, 14:39
Появилась проблема. Загружаю программу всё работает хорошо.
Но стоит отключить питания от сети ( полностью обесточить контроллер минут на 5 ) то при подаче напряжения на контроллер программа пропадает.
Это так и должно быть ?

После загрузки проекта в ПЛК зайди в меню Онлайн и выбери Создание загрузочного проекта

Женя84
10.03.2015, 15:23
После загрузки проекта в ПЛК зайди в меню Онлайн и выбери Создание загрузочного проекта

Спасибо большое теперь всё работает.