Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » АСУТП »
Управление VLT 2800 (Danfoss) по протоколу MODBUS RTU? Как? (страница 1)

Версия для печати (настроить)
Страницы: 1 2

Новая тема | Написать ответ

Подписаться

Автор Тема:   Управление VLT 2800 (Danfoss) по протоколу MODBUS RTU? Как?
Efiop
Junior Member

Сообщений: 1
Откуда: РК
Регистрация: Апрель 2006

написано 28 Апреля 2006 14:43ИнфоПравкаОтветитьIP

Здравствуйте. Помогите!!!
Необходимо управлять ПЧ (преобразовател частоты)VLT 2800 фирмы Danfoss по протоколу MODBUS RTU.
Мы можем читать от туда данные по адресам, которые есть в мануале, но вот чтобы управлять им, не нашли таких адресов. У нас есть слово управления для запуска, а вот куда его пихать, в какой адрес?
Управляем через контроллер.
Вся проблема в адресе.В документации такого не нашли.
Может кто встречался с такой проблемой.

ColdFire
Member

Сообщений: 150
Откуда: Россия
Регистрация: Ноябрь 2004

написано 28 Апреля 2006 16:35ИнфоПравкаОтветитьIP

Гм... а у VLT2800 оказывается еще и modbus склепали...
По поводу VLT5000-6000 мануал пишет, что слово состояния размещено по coil-адресам 1..32 для чтения и 33..64 для записи - это может быть то, что вам нужно ? Сейчас скачал новый мануал по всей линейке - смотрите страницу 20. А на странице 32 приведены примеры - судя по всему я все же не ошибся.

Efiop
Junior Member

Сообщений: 2
Откуда: РК
Регистрация: Апрель 2006

написано 29 Апреля 2006 07:22ИнфоПравкаОтветитьIP

ColdFire, это случайно не MG.10.S2.02 ?
У нас есть это, но судя по этим адресам 1-32 это для записи, ведь там master → slave
т.е. это получается с 0 адреса. Но вроде пробовали в 0 писать. И опять таки, их там 16.

1-16 PCD1 Control Word (master → slave)
17-32 PCD2 Reference Value (master →slave)
33-48 PCD1 Status Word (slave → master)
49-64 PCD2 Given output frequency (slave→ master)
65 Write parameters to eeprom (1 = true/ 0 = false)
66-128 Reserved

Наш принцип управление следующий:
LD (Kf102) - 2 адрес устройства;
LD (K2) - 2 байта (слово) на передачу;
LDA (O1400) - Памяти которая содержит слово управления для передачи (47FH вроде так)
WX (v????) - Вот здесь весь стопор, какой адрес должен быть, чтобы туда передать слово управления, не знаем. Читать можем, т.к. адреса есть для этого, а вот писать...увы.

[Это сообщение изменил Efiop (изменение 29 Апреля 2006 08:04).]

ColdFire
Member

Сообщений: 151
Откуда: Россия
Регистрация: Ноябрь 2004

написано 29 Апреля 2006 23:23ИнфоПравкаОтветитьIP

Попробуйте повторить команду как в примерах - там же побайтово приведена команда. Мы возились с приводами Danfoss ну очень давно и каких-то проблем я не припомню.

Efiop
Junior Member

Сообщений: 3
Откуда: РК
Регистрация: Апрель 2006

написано 01 Мая 2006 20:50ИнфоПравкаОтветитьIP

ColdFire так это побайтово показывается пример формирования пакета MODBUS, как я понимаю, т.е.
там идет: "номер устройства+функция (чтение/запись) + адрес области данных на передачу + кол-во данных в байтах + сами данные + контрольное слово" вроде так. Это скорей всего для тех у кого нет MODBUS RTU, а просто голый RS-485. У нас же на контроллере есть MODBUS RTU и как я описал выше принцип работы проще, т.е. адрес, кол-во байт на передачу/получение, адрес памяти откуда или куда будут передоваться данные (контроллера) и адрес области памяти устройства для передачи или получения данных.
Если бы нам надо было управлять с компа, то у нас бы проблем не было, а так надо с контроллера.
Мы управляли с помощью контроллеров преобразователями Altivar 31,58 и Altistar'ами (фирма Schneider Electric), у нас проблем особых не было, там достаточно понятное описание с адресами и управляющими словами, но здесь же не так.

bessonov
Member

Сообщений: 143
Откуда: Россия
Регистрация: Август 2003

написано 02 Мая 2006 15:51ИнфоПравкаОтветитьIP

Дайте ссылку на ваш ПЧ.

Efiop
Junior Member

Сообщений: 4
Откуда: РК
Регистрация: Апрель 2006

написано 03 Мая 2006 06:33ИнфоПравкаОтветитьIP

bessonov ссылка
В теме марка указана. Документация MG.10.S2.02 уже есть.
Вот если что ссылка на ДОКу ссылка

[Это сообщение изменил Efiop (изменение 03 Мая 2006 06:50).]

ColdFire
Member

Сообщений: 152
Откуда: Россия
Регистрация: Ноябрь 2004

написано 03 Мая 2006 10:17ИнфоПравкаОтветитьIP

Ну так выцепите из пакета эти ваши адреса - никто не запрещает. В примерах указан адрес для записи 20h.

Efiop
Junior Member

Сообщений: 5
Откуда: РК
Регистрация: Апрель 2006

написано 03 Мая 2006 12:35ИнфоПравкаОтветитьIP

ColdFire, пробовали и в этот адрес писать (20 Hex -> 40 Oct), только туда не пишет, т.е. туда отправляем, потомо читаем с него, чтобы проверить, что отправлено, но там 0.
Из документации получается, что в нулевой адрес можно писать, но это никаких результатов не дает, хотя данные туда пишутся (слово управление), мы с нулевого читаем, там слово управления остается. Короче полный ступор.

AM74
Junior Member

Сообщений: 5
Откуда: Челябинск
Регистрация: Ноябрь 2005

написано 04 Мая 2006 06:25ИнфоПравкаОтветитьIP

Короче полный ступор.
В этом случае можно предложить решение "в лоб" - использовать внешний шлюз. Например, Anybus-Com АВ7010 (http://www.industrialnets.ru). С одной стороны шлюз Modbus RTU Slave (к контроллеру), а с другой - настраивается на побайтовое формирование посылок (к частотнику).

Efiop
Junior Member

Сообщений: 6
Откуда: РК
Регистрация: Апрель 2006

написано 04 Мая 2006 08:24ИнфоПравкаОтветитьIP

AM74, спасибо конечно за предложение, но зачем нам использовать дополнительное оборудование, когда на нашем контроллере есть Modbus RTU. О побайтовом формировании пакета уже подумывали, но это ни есть гуд, фактически придется писать подобие протокола (так передоваемые данные будут меняться, частота, да и само слово управления), что опят таки займет время и необходимость использования контроллеров др. серии (хоть у нас такие имеются, но это не выход).
И ещё ColdFire, может оно так и твои догатки верны про адрес 20H , но:
1. Почему в документации про него конкретно не указано. "Вот вам ребята 20h адрес для слова управления, а 21h для частоты". А в общем карта памяти с адресами имеется, но там ничего.
2. Возможно здесь принцип другой, т.е. например в этот самый наш адрес необходимо сначало к примеру 0 передать, потом ещё че для инициализации, а потом уже само слово, возможно и такое, но где эта инфа, и почему она так по шагам не описана. Может вся соль в настройках,
но опять таки, связь есть, читать можем, изменять тоже можем те нсатройки которые можно изменять, а вот какой конкретно адрес. Если бы знать точно какой адрес, то мы бы его уже до поетри сознания долбили, перебором и всем подряд, чтобы заработало.

[Это сообщение изменил Efiop (изменение 04 Мая 2006 08:41).]

bessonov
Member

Сообщений: 145
Откуда: Россия
Регистрация: Август 2003

написано 04 Мая 2006 11:43ИнфоПравкаОтветитьIP

Почитал доку. Стр 20-21 это не то что вам нужно? Функции 1, 5, 15 срабатывают по этим адресам? Какую ошибку возращает частотник?

Efiop
Junior Member

Сообщений: 7
Откуда: РК
Регистрация: Апрель 2006

написано 04 Мая 2006 12:59ИнфоПравкаОтветитьIP

bessonov, Нам ПЧ (преобразователь чатоты), не возвращает никакой ошибки, т.к. мы с ним общаемся по MODBUS RTU, мы не читаем никаких ошибок, потому что все манипуляции осуществляются на уровне протокола.
Выписка из протокола модбас по поводу ошибок:
"Методы контроля ошибок.
Стандартная MODBUS сеть использует два метода контроля ошибок. Контроль паритета (even/odd) и контрольная сумма. Обе эти проверки генерируются в головном устройстве. Подчиненное устройство проверяет каждый байт и все сообщение в процессе приема.
Пользователь может устанавливать продолжительность интервала таймаута в течении которого головное устройство будет ожидать ответа от подчиненного. Если подчиненный обнаружил ошибку передачи, то он не формирует ответ главному."

Так что всю основную работу по передаче данных выполняет протокол, мы лишь указываем адрес устройства, кол-во байт на передачу, данные на передачу и адрес памяти в устройстве куда эти данные передаем, так что нет надобности в контроле на ошибки. Связь она или есть или её нет.
Управление осуществляется с контроллера по средствам протокола MODBUS RTU, который поддерживает и контроллер и ПЧ. Так что я не совсем понимаю какие ошибки мы должны получать, на этапе передачи данных они нас не интересуют. Данные или передаются или нет и все.
Если ты имеешь ввиду ошибки при передачи, то с ними разбирается сам протокол.
На счет функций 1,5,15 я тебя не понял, что имел ввиду я там таких функций не нашел, или ты про биты 1,5,15. Собственно и проблема не в функциях, а в том что нам надо знать контретный адрес куда передать слово управления, чтобы запустить ПЧ.

bessonov
Member

Сообщений: 146
Откуда: Россия
Регистрация: Август 2003

написано 04 Мая 2006 14:15ИнфоПравкаОтветитьIP

2Efiop
Протокол modbus поддерживает совершенно конкретные типы ошибок, их несколько и в конце доки на ПЧ они перечислены, по моему в разделе error code. Как правило, большинство драйверов возращают код ошибки. Код ошибки нужен - без него нельзя определить причину сбоя связи. Может вы не правильной функцией пишете в не ту область памяти, ПЧ возращает код ошибки и вы об этом даже не знаете. Поэтому всё не работает.

Насколько я понял по доке, адреса управления ПЧ описаны на стр 20-21. С помощью функци 1 (и 2, но ПЧ её не поддерживает) можно прочитать состояние массива дискретных переменных, функцией 15 можно записать массив дискретных переменных, функцией 5 записать значение одной дискретной переменной.

Если вы не задумываетесь о номерах функций, то вероятно в вашем контроллере modbus драйвер использует адресацию 1-65535, 100000-165535 для дискретников, 300000-365635, 400000-465535 для регистров. В доке на ПЧ тоже хорошо написано о разных типах записи адреса и карте памяти.

Стандартно в modbus поддерживает два типа данных: дискретники(coils) и 16 битные регистры. coils и регистры обычно не пересекаютмся в карте памяти.

Насколько я понял ПЧ можно сконфигурить записью значений регистров в память, а активизировать эти значения записью дискретных данных.

Efiop
Junior Member

Сообщений: 8
Откуда: РК
Регистрация: Апрель 2006

написано 04 Мая 2006 16:20ИнфоПравкаОтветитьIP

bessonov Ты ориентируешся на ДОКу MG.10.S2.02? Просто я не совсем понимаю какие именно
функции ты имеешь ввиду, Функции самого пакета, который формирует MODBUS или почему. Если ты об этом, то мы не пишим функции и данные передаем не покадрово, я же уже писал об этом выше.
Наш принцип адрес-значение, где адрес это адрес памяти в ПЧ, а значение это уже слово управление или частота или другое что-то, также и с чтением. Нам нет необходимости писать функции, что мы хотим читать/писать и т.д. Если ты не про них, то поправь.
На счет адресации. При работе с другими устройствами мы используем прямую адресацию на необходиму область памяти определенного устройства. А если же работаем с такими же контроллерами, то и дискреты и память и т.п.
На счет адресации 1-65535, 100000-165535 для дискретников, 300000-365635, 400000-465535
в нашем контроллере адресация точно не такая. И в других устройствах и контроллерах, она у каждого своя, не думаю что это обязательный стандарт. По крайней мере у нас таких диапозонов нет.
На примере используемых нами контроллеров можно прочитать каждую дискрету по отдельности, но можно и полностью прочитать ту память, где записаны эти дискреты, то есть могу каждую в отдельности x0,x1,x2 и т.д., а могу просто v40000 и все 16 дискрет оптом, в зависимости от того сколько байт буду читать. Также и здесь, те же самые дискреты храняться в какой-то памяти. Принцип того же слова управления, оно сосотит из 16 битов, каждый из которых является определнной дискретой и который несет определеную функциональность, можно каждый по отдельности мутозить, но можно и просто одним словом управления (47с), которое и приведет к жедаемому результату.
ВОТ НАМ И НЕОБХОДИМ ЭТО Ч..... АДРЕС!!!

ColdFire
Member

Сообщений: 153
Откуда: Россия
Регистрация: Ноябрь 2004

написано 04 Мая 2006 16:29ИнфоПравкаОтветитьIP

2Efiop: Че-то вы странное делаете. Я понятия не имею, как в вашем контроллере программируется посылка данных Modbus, может вы неправильно параметры блока передаете. С этим вы уж как-нибудь сами разберитесь - посмотрите на худой конец что именно в линию валится, подцепившись на линию терминалом. По постам я пока не могу понять, какие именно байты вы шлете в линию, а именно этот момент существенен.

Все-таки я напутал, запись идет по ячейкам с нулевого адреса, а с 0x20 оно же читается.

Должно быть как написано в мануале на странице 32: b8:address (адрес привода), b8:0x0F (функция 15 - force multiple coils), b8:0, b8:0 (два байта младшего адреса - 00), b8:0, b8:0x20 (два байта - количество 32 бита), b8: 0x04 (количество байтов), b8:0x7C, b8:0x04 (2 байта - ваше управляющее слово, что данное означает не помню), b8:0x99, b8:0x19 (2 байта задания частоты - 100%), b16: CRC

Попробуйте слать не 2 байта, а 4 - я не знаю как на запись двух байтов отреагирует привод.

2bessonov: вы правы

bessonov
Member

Сообщений: 147
Откуда: Россия
Регистрация: Август 2003

написано 04 Мая 2006 17:31ИнфоПравкаОтветитьIP

2Efiop

Я вас не понимаю. Мы явно говорим на разных языках.

Вы уверены, что у вас в принцепе корректная связь по modbus с ПЧ?

Efiop
Junior Member

Сообщений: 9
Откуда: РК
Регистрация: Апрель 2006

написано 04 Мая 2006 23:22ИнфоПравкаОтветитьIP

ColdFire ...может вы неправильно параметры блока передаете нет, данные правильно передаем, в этом я уверен на 100%, но туда ли мы их передаем, в этом я не уверен.
По постам я пока не могу понять, какие именно байты вы шлете в линию, а именно этот момент существенен.
В линию мы шлем 47C, 47F, вообще здесь можно слать весь диапозон 47C-47F, т.к. из двух первых битов формируется 1 из 4-х параметров 215-218.
Должно быть как написано в мануале на странице У нас нет такого формирования, весь запрос формируется из 4-х функций, ещё раз повторюсь:
LD(Kf102) - "2" - сетевой номер устройства;
LD(K2) - 2 байта;
LDA(V1400) - в адресе V1400 (можно любой др.) находится передоваемое значение, в нашем случае слово управления (47f);
WX(v1234) - здесь адрес необходимой памяти в ПЧ;
Вот и все, часть работы протокол берет на себя, т.е. функцию например: "функция 15 - force multiple coils" или др. , CRC и др.
bessonov Возможно, что-то я не так понял из того, что ты написал и поэтому написал, как понял, про память и адресацию. И говорим на разных языках. Может здесь прнцип другой, хоть и MODBUS RTU. Может я и заблуждаюсь, опираясь на тот же принцип управления, что и с ПЧ Altivar, хотя в случае с ним тот же протокол MODBUS RTU. Но все таки думаю дело здесь не в протоколе и разнице адресации протокола, MODBUS RTU это стандартный промышленный протокол, а значит и устройства поддерживающие его должны его одинаково воспринимать.
Да кстати, а ты bessonov с ним работал, с этим протоколом?
Вы уверены, что у вас в принцепе корректная связь по modbus с ПЧ?
Уверен, если была некорректной, то её бы вообще не было. Думаю трудно в 2-х проводах ошибиться. Если бы не было связи, то мы не смогли бы читать данные с ПЧ. Тем более, что у контроллера есть спец. так называемые реле, которые отвечают за связь, т.е. занят или нет порт, и проверки ошибок связи. Думаю это исключено.

ColdFire
Member

Сообщений: 154
Откуда: Россия
Регистрация: Ноябрь 2004

написано 05 Мая 2006 09:53ИнфоПравкаОтветитьIP

цитата:
Efiop писал:
В линию мы шлем 47C, 47F, вообще здесь можно слать весь диапозон 47C-47F, т.к. из двух первых битов формируется 1 из 4-х параметров 215-218.
Должно быть как написано в мануале на странице У нас нет такого формирования, весь запрос формируется из 4-х функций, ещё раз повторюсь:
LD(Kf102) - "2" - сетевой номер устройства;
LD(K2) - 2 байта;
LDA(V1400) - в адресе V1400 (можно любой др.) находится передоваемое значение, в нашем случае слово управления (47f);
WX(v1234) - здесь адрес необходимой памяти в ПЧ;
Вот и все, часть работы протокол берет на себя, т.е. функцию например: "функция 15 - force multiple coils" или др. , CRC и др.

Я понятия не имею что именно означают ваши LD*(...) и как ваш контроллер берет на себя обработку !!! Формат пакета указан в мануале. Как это выглядит в вашем контроллере - еще раз повторюсь, сверяйтесь с мануалом.

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

Efiop
Junior Member

Сообщений: 10
Откуда: РК
Регистрация: Апрель 2006

написано 05 Мая 2006 10:17ИнфоПравкаОтветитьIP

bessonov, на счет функций (1,5,15(F))я понял, про какие ты функции говоришь, но как и писал выше мы не отправляем даннын на таком уровне. Это и есть стандартные функции протокола.

MODBUS Function Code
01 Read a group of coils
02 Read a group of inputs
05 Set / Reset a single coil (slave only)
15 Set / Reset a group of coils
03, 04 Read a value from one or more registers
06 Write a value into a single register (slave only)
07 Read Exception Status
08 Diagnostics
16 Write a value into a group of registers

Я теперь понимаю про что ты. Видишь ли когда мы отправляем данные, то возможно функция в пакете, выставляемая самим протоколом, не 5 или 15(F) для Coil, как ты и писал выше, а 06, т.е. на запись но как Registers и возможно по этому её не воспринимает ПЧ или же воспринимает, но не правильно, да и адресуется она не туда куда надо, тогда это другой вопрос. Но опять таки, те данные которые являются Coil я имею возможность поменять через Registers, тогда только необходимо знать правильный адрес. Может и ошибаюсь, но судя по работе с нашими контроллерами такое возможно делать, по крайней мере у меня никаких проблем не было.

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики
Страницы: 1 2

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика