PDA

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



Flomaster
10.08.2007, 05:07
Приветсвую всех!
Продолжая работу над проектом, дошел до места, где нужно организовать взаимодействие контроллера ПЛК-150 и ЧП E2-8300. Встроенный контроллер частотника использоваться не будет. Частотником будет полностью управлять ПЛК, посылая различные команды. По требованию заказчика организовать работу предпочтительнее по протоколу Modbus.
Поскольку внешним устройством будет управлять ПЛК, в его конфигураторе я добавил Modbus master и указал соединение через интерфейс RS-485. У ЧП можно задать в настройках внешнее управление. Но вот куда двигаться дальше? Где можно найти документацию по Modbus, как установить соединение у ЧП и отправлять команды? Может у кого-нибудь есть примеры программок?

Василий Куц
10.08.2007, 05:33
Могу дать для ПЧ Дельта - серия VFD-E, если нужно...
В принципе у всех частотников делается это примерно одинаково. ПЧ настраивается на задание скорости по RS485 и задание команд по RS485, настраиваются параметры порта, далее создаете modbus master, добавляете туда universal device (это и есть ПЧ, не забудьте прописать адрес), далее из документации ПЧ берете список регистров, по которым идет управление. Как правило регистры даны в HEX формате, поэтому следует перевести их в DEC и вставить в конфигурацию...

У большинства ПЧ можно получить доступ и к самим настроечным регистрам.

Flomaster
10.08.2007, 10:51
Могу дать для ПЧ Дельта - серия VFD-E, если нужно...
В принципе у всех частотников делается это примерно одинаково. ПЧ настраивается на задание скорости по RS485 и задание команд по RS485, настраиваются параметры порта, далее создаете modbus master, добавляете туда universal device (это и есть ПЧ, не забудьте прописать адрес), далее из документации ПЧ берете список регистров, по которым идет управление. Как правило регистры даны в HEX формате, поэтому следует перевести их в DEC и вставить в конфигурацию...

У большинства ПЧ можно получить доступ и к самим настроечным регистрам.

Буду премного благодарен.

Василий Куц
10.08.2007, 11:48
Для частотника VDF-E от Дельты158

Flomaster
11.08.2007, 17:55
А нужно ли для работы с этим протоколом подключать какие-либо дополнительные библиотеки?

Василий Куц
11.08.2007, 18:59
Нет, там обычный Modbus, дополнительных библиотек не требуется....
Единственное, что бы я посоветовал - использовать не периодическую запись, а запись по команде или изменению. Хоть я и не добился от производителя параметра количества циклов перезаписи при работе по ModBus, но думаю что все же оно - не ограничего...

Flomaster
12.08.2007, 15:54
Если я правильно понял, то в Вашем примерчике COMMAND и SPEED - это как раз регистры, по которым производится управление?
Т.е. добавили Modbus Master, затем Universal Modbus Device, а у последнего определили 2 регистра, которым присвоили имена COMMAND и SPEED. Так?

Василий Куц
12.08.2007, 21:17
Да, именно так.

Flomaster
13.08.2007, 08:09
Ага! ну тогда всё становится просто и понятно. И еще вопрос. Нужно ли как-то обрабатывать контрольную сумму при работе по modbus?

Василий Куц
13.08.2007, 08:20
Нет, все само обрабатывается. Если не совпадает контрольная сумма или превышен тайм-аут ответа выдается соответствующая ошибка в LastError. Почитайте документ PLC_Configuration, там это все расписано, в т.ч. и ошибки.

Контрольная сумма, формировка пакетов и тд нужна, если Вы будете сами пакеты создавать и отправлять/получать через библиотеку syslibcom, но поверьте, оно того не стоит ;)

Flomaster
13.08.2007, 08:32
Согласен, изобретать велосипед не к чему:-)

Flomaster
21.08.2007, 17:48
Ну вот, сегодня, значится, былf попытка соединения ПЛК-150-I.M. с частотником от ВЕСПЕРа. Попытка успехом не увенчалась.
Для соединения использовался интерфейс RS-232 и кабель (Rx,Tx,GND).
В конфигураторе был добавлен Modbus master с интерфейсом связи RS-232. А дальше начались чудеса. При попытке логина из Codesys вылетае непонятное сообщение об ошибке.
http://owen.ru/forum/attachment.php?attachmentid=164&stc=1&d=1187703359
Причем так и не удалось выяснить закономерность появления этого сообщения. Иногда после ресета ПЛК оно не выдается. Прошивка ПЛК и таргеты версии 2.
Затем в Modbus Master был добавлен Universal Modbus Device (NetMode = Serial). Проводилось считывание Last Error. При этом, в некоторых случаях она равнялась 0 (т.е. соединение установлено), а в некоторых 81 (таймаут ожидания - например, не подключен кабель к частотнику). Иногда после повторного логина выдается указанное выше сообщение и ПЛК словно подвисает - Last Error равен 0 или 81 и на ее значение не влияет, подключен ли кабель к частотнику или нет. Вывести его ступора иногда получается, выполнив ресет. Но какой-либо точной взаимосвязи тоже установить не удалось.
Что это может быть? Как решить проблему?

Малышев Олег
22.08.2007, 07:30
Данная проблема заключатся в том что если верхний (DBGU ) порт используется в программе необходимо выставить его режим как не CoDeSys. Это возможно двумя путями 1) Исп кабель без перемычки 2) Установить на верхней плате джампик и исп. стандартный кабель. А теперь главное - после указанной ранее установки нужно перезагрузить контроллер resetом. Т.к. режим использования порта определяется ТОЛЬКО при загрузке контроллера. Проверить режим DBGU можно просмотрев лог загрузки гипертерминалом. Строк в конце:
Special cable detected...
Switch top RS to CoDeSys mode...
не должно быть

Василий Куц
22.08.2007, 08:42
С ПЧ я бы все же соединялся через RS-485... помехи еще никому жить не помогали, это ж частотник....

Flomaster
22.08.2007, 10:03
Да, по поводу кабеля уже прочел соседний топик. вот еще теперь вопрос: например, есть у частотника, с которым я соединяюсь, регистр 0123H, в котором хранится текщее значение выдаваемой частоты. Судя по всему, значение real, т.к. на дисплее отображается чило с плавающей точкой. Мне нужно получить это значение в программу ПЛК.
1. Какой именно подэлемент Universal modbus device нужно добавить? (Я так понимаю, что это должен быть input)
2. Какое значение указывать у параметра Command?

Василий Куц
22.08.2007, 10:24
там не число с плавающей точкой, а обычное uint ;)
Поэтому смело берете register input module, далее делите на 100 иприсваиваете real переменной, получаете значение частоты с точность 0.01 Гц ;)

Command - 0x03

если сумбурно рассказал, то вот так:
real_out:=int_register/100;
Где int_register - это Register input module (word)
real_out - Частота на ПЧ в формате Real с двумя знаками после запятой.

Малышев Олег
22.08.2007, 10:32
Было бы чудесно, если бы Вы выложили примеры для ваших частотников (достаточно описания PLC Configuration) в форуме ПЛК-Примеры - народ бы смотрел и пользовал.

Василий Куц
22.08.2007, 11:05
Да, кстати, забыл сказать.... в регистре 0123H хранится не значение выдаваемой частоты, а задание на частоту, это немного разные вещи.
Задание - это то, что вы видите в простейшем случае на дисплее, даже в режиме стоп.
Частота на выходе (она хранится в 0124Н) это.... частота на выходе ;) Т.е. в режиме СТОП/ПАУЗА там будет 0, после подачи СТАРТ значение будет увеличиваться до значения задания.

Flomaster
22.08.2007, 17:02
Да, кстати, забыл сказать.... в регистре 0123H хранится не значение выдаваемой частоты, а задание на частоту, это немного разные вещи.
Задание - это то, что вы видите в простейшем случае на дисплее, даже в режиме стоп.
Частота на выходе (она хранится в 0124Н) это.... частота на выходе ;) Т.е. в режиме СТОП/ПАУЗА там будет 0, после подачи СТАРТ значение будет увеличиваться до значения задания.
Ой, :o , прошу прощения! Действительно, выходная частота хранится по адресу 124H. А задание частоты производится в регистр по адресу 123H.

А задание значенией регистрам, если я правильно понял, производится командой 0x06H?

Василий Куц
23.08.2007, 05:51
Советую ознакомиться с данной документацией.
03 - чтение
06 - запись
170

Flomaster
23.08.2007, 16:03
Спасибо за ссылку! Очень пригодится!

Flomaster
08.09.2007, 16:49
И снова здравствуйте!
Наконец-то от поставщиков пришел переходник для RS-485, и появилась возможность подключить частотник E2-8300 к ПЛК-150 по 485-му интерфейсу. Вся ранее полученная на этом форуме информация была использована по назначению. В результате получилось запустить частотник, а от него и двигатель, через ПЛК-150.
Но есть одно НО. Такие параметры, как время разгона, томожения, установка частоты и т.п. задаются без проблем. А при подаче команды ПУСК частотнику, ПЛК с периодичностью ~5сек начинает выдвывть ошибку 81 - таймаут. Причем, частотник запускает подключенный к нему двигатель и разгоняет до заданной частоты за заданное время.
Одновременно с ошибкой 81 на ПЛК, на дисплее частотника отображается ошибка Err6 (ошибка контрольной суммы или некорректный протокол обмена).
Команды управления ЧП Е2-8300 задются посредством регистра 0101Н. В этом регистре содержится 16 бит, 3 бита из которых зарезервированы (так сказано в документации частотника; "данные в зарезирвированные регистры не записывать").
Для запуска двигателя, подключенного к ЧП, в бит №0 нужно подать значение 1. В конфигураторе ПЛК создан регистр, в который я записываю значение 1. После чего двигатель начинает разгоняться.

Теперь, собственно, вопрос. Следствием чего может стать указанная ошибка и как от нее избавиться?

Василий Куц
08.09.2007, 17:47
Наводки в кабельной линии, некорректная работа преобразователя, погода на п. Марс.

Flomaster
09.09.2007, 14:27
И еще заметил одну странность. В документации к ПЛК-150 сказано, что для запуска протокола нужно в спец.регистр Universal Modbus Device записать значение 0х00FF. Я записываю это значение в регистр, например, в блоке Init программы. В конфигураторе (при пошаговой отладке) я вижу, что в регистр записано записано значение 255. Но после выхода из блока Init в регистре уже отображается значение 0. :confused:
Это нормальное явление?

Василий Куц
09.09.2007, 20:39
уху, все так и должно быть

Филоненко Владислав
10.09.2007, 09:58
И снова здравствуйте!
Наконец-то от поставщиков пришел переходник для RS-485, и появилась возможность подключить частотник E2-8300 к ПЛК-150 по 485-му интерфейсу. Вся ранее полученная на этом форуме информация была использована по назначению. В результате получилось запустить частотник, а от него и двигатель, через ПЛК-150.
Но есть одно НО. Такие параметры, как время разгона, томожения, установка частоты и т.п. задаются без проблем. А при подаче команды ПУСК частотнику, ПЛК с периодичностью ~5сек начинает выдвывть ошибку 81 - таймаут. Причем, частотник запускает подключенный к нему двигатель и разгоняет до заданной частоты за заданное время.
Одновременно с ошибкой 81 на ПЛК, на дисплее частотника отображается ошибка Err6 (ошибка контрольной суммы или некорректный протокол обмена).
Команды управления ЧП Е2-8300 задются посредством регистра 0101Н. В этом регистре содержится 16 бит, 3 бита из которых зарезервированы (так сказано в документации частотника; "данные в зарезирвированные регистры не записывать").
Для запуска двигателя, подключенного к ЧП, в бит №0 нужно подать значение 1. В конфигураторе ПЛК создан регистр, в который я записываю значение 1. После чего двигатель начинает разгоняться.

Теперь, собственно, вопрос. Следствием чего может стать указанная ошибка и как от нее избавиться?

Возможно, вам надо попытаться записать не 16 бит 1 командой, а 8 первых бит. Возможно частотник воспринимает запись 0 в 3 спец. бита как какую-то команду и начинает ее обрабатывать, и в это время обмен тормозится и появляются ошибки. Запись 0 - тоже запись!

Flomaster
11.09.2007, 04:57
Возможно, вам надо попытаться записать не 16 бит 1 командой, а 8 первых бит. Возможно частотник воспринимает запись 0 в 3 спец. бита как какую-то команду и начинает ее обрабатывать, и в это время обмен тормозится и появляются ошибки. Запись 0 - тоже запись!

Вот и у меня такое же предположение возникло! Чтобы обрабатывать первые 8 бит, я так понимаю, нужно добавить в Device 8 bit output module. И, соответственно, каждому биту присвоить нужное значение. А если мне нужно будет что-либо записать в остальные 8 бит, как поступить в этом случае?

Flomaster
15.09.2007, 12:52
Ну ответьте же кто нибудь!)))
Ксли мне, напиример, нужно изменить только 6 бит 16-битного регистра, как это сделать?

Филоненко Владислав
15.09.2007, 13:11
ModBus master не может обрабатывать отдельные биты. Эту функцию можно добавить, но очень уж редко она кому бывает нужна.
Если не трудно, вышлите на plc_prog@owen.ru описание регистров управления частотником, а то не смог найти на их сайте - может что и подскажу.

Василий Куц
17.09.2007, 09:50
Чуть выше в этой ветке форума я скидывал список modBus регистров для Веспер E2-8300

Филоненко Владислав
17.09.2007, 15:32
Список - это хорошо, но хотелось бы доку от фирмы почитать...

Василий Куц
18.09.2007, 05:30
Дак это и есть фирменная документация, куда уж фирменней ;)

http://owen.ru/forum/attachment.php?attachmentid=170&d=1187833877

Flomaster
18.09.2007, 08:18
да, это то же самое, что идет в поставке с оборудованием.

Филоненко Владислав
18.09.2007, 10:51
И снова здравствуйте!
Наконец-то от поставщиков пришел переходник для RS-485, и появилась возможность подключить частотник E2-8300 к ПЛК-150 по 485-му интерфейсу. Вся ранее полученная на этом форуме информация была использована по назначению. В результате получилось запустить частотник, а от него и двигатель, через ПЛК-150.
Но есть одно НО. Такие параметры, как время разгона, томожения, установка частоты и т.п. задаются без проблем. А при подаче команды ПУСК частотнику, ПЛК с периодичностью ~5сек начинает выдвывть ошибку 81 - таймаут. Причем, частотник запускает подключенный к нему двигатель и разгоняет до заданной частоты за заданное время.
Одновременно с ошибкой 81 на ПЛК, на дисплее частотника отображается ошибка Err6 (ошибка контрольной суммы или некорректный протокол обмена).
Команды управления ЧП Е2-8300 задются посредством регистра 0101Н. В этом регистре содержится 16 бит, 3 бита из которых зарезервированы (так сказано в документации частотника; "данные в зарезирвированные регистры не записывать").
Для запуска двигателя, подключенного к ЧП, в бит №0 нужно подать значение 1. В конфигураторе ПЛК создан регистр, в который я записываю значение 1. После чего двигатель начинает разгоняться.

Теперь, собственно, вопрос. Следствием чего может стать указанная ошибка и как от нее избавиться?
Прочитал описание, оно не соответствует описанной проблеме.
1. В регистр 101H можно писать без ограничений! только в 2 последних выхода писать надо всегда нули.
Запрещена запись в регистры 0103~011FH.
2. Частотник не поддерживает (как и большинство приборов) функции записей битов, поэтому обужд. этой темы прекращаем.
3. По видимому, при подаче команду ПУСК частотник задумывается и если посылать эту команду несколько раз, будет наблюдаться описанная картина. Рекомендую эту команду посылать однократно (с помощью переменной с каналом управления) и проверять результат чтением статуса.

Capiton
12.05.2011, 13:30
А где можно посмотреть регистры ПЧВ101 не как не могу найти и в описании нет

Николай Суриков
12.05.2011, 13:42
http://www.owen.ru/uploads/rp_pchv_ver_01.pdf
стр. 76