Приветствую, сименсоводы!
Спасибо за помощь со считыванием "одометра" через интегрирование скорости, чуть позже внедрю эту фишку в программу. Ну а пока есть более насущный вопрос.
"Мозги" типа CU240E-2, подключение по RS-485, протокол ModBus, на линии несколько частотников. С коммуникацией всё в порядке, циклический опрос статуса и нагрузки - без ошибок. Команды на включение/выключение (управляющее слово STW1 в Modbus-регистре 40100, то бишь №99) посылаются и исполняются чётко.
А вот посылка уставки частоты в Modbus-регистр 40101 (т.е. №100) - срабатывает как-то через раз! Соответственно, периодически возникает ситуация, когда в ответ на команду "Ехать!" частотник радостно сообщает "Ага, поехали!", но всё стоит на месте, ибо заданная частота, с точки зрения привода, равна нулю! Причём, в большинстве-то случаев она срабатывает, а вот иногда и нет.
Более того. Посылка этой уставки в нашей программе вставлена несколько раз: перед проверкой всех датчиков механизма, потом перед сигнальным звонком, после звонка, перед непосредственно пуском, и после успешного запуска. В драйвере протокола Modbus выполнение модбасовской "функции Fn06", то бишь запись в Holding Registers, повторяется несколько раз до получения подтверждающего ответа от слейва. И, как я уже говорил, посылаемые той же самой шестой функцией Modbus команды на старт/стоп проходят исправно. То есть, проблема почти наверняка не в самой коммуникации.
Похоже на то, что сам частотник игнорирует принятое в регистр значение.
Кто-нибудь сталкивался с таким? Может, где-то в каких-то состояниях он и не должен воспринимать выставленную частоту? Или, может, её нужно задавать в пределах одной команды с "пуском", функцией 16 записывать сразу 2 регистра, благо они подряд идут? В документации (переводной на английский с немецкого, ага) как-то всё это очень куцо описано...
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Sinamics G120 не принимает уставку частоты
Модератор: Глоб.модераторы
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Sinamics G120 не принимает уставку частоты
Скорее всего привод находится в режиме идентификации параметров двигателя. В этом режиме игнорится задание скорости, а по команде ON (ПУСК) инициируется автонастройка привода по особому алгоритму, когда привод сам там чего-то делает с двигателем, идентифицирует его. Примерно через полминуты-минуту удержания команды ON автонастройка заканчивается и после этого "автонастроенный" привод работает как миленький.
В чём ваша ошибка? Вам следует после окончания автонастройки (когда всё работает хорошо) сделать аплоад этих настроек. Вместе с этим аплоадом режим идентификации будет окончательно отключен, а оптимальные параметры сохранены в проекте.
Это ещё не всё! Нужно снова зайти в онлайн и загрузить проект с оптимизированными настройками в привод, чтобы всё это было уже прописано раз и навсегда в энергонезависимой памяти частотника!
Сейчас у вас в энергонезависимой памяти прописано - "начинай идентикацию двигателя". Как только отключаете питание модуля управления CU, он сразу забывает о проведённой идентификации.
Отправлено спустя 9 минут 19 секунд:
Важно понимать, что существует три состояния: offline (проект), online (RAM, оперативка), online (ROM, энергонезависимая память). Это главное.
Второе - надо понимать, что когда где-то меняются настройки, то это лишь только в одном из типов памяти. Надо уметь понимать, в какой памяти настройки поменялись, а в какой нет. Далее надо понять, как скопировать настройки из одной памяти в другую.
В чём ваша ошибка? Вам следует после окончания автонастройки (когда всё работает хорошо) сделать аплоад этих настроек. Вместе с этим аплоадом режим идентификации будет окончательно отключен, а оптимальные параметры сохранены в проекте.
Это ещё не всё! Нужно снова зайти в онлайн и загрузить проект с оптимизированными настройками в привод, чтобы всё это было уже прописано раз и навсегда в энергонезависимой памяти частотника!
Сейчас у вас в энергонезависимой памяти прописано - "начинай идентикацию двигателя". Как только отключаете питание модуля управления CU, он сразу забывает о проведённой идентификации.
Отправлено спустя 9 минут 19 секунд:
Важно понимать, что существует три состояния: offline (проект), online (RAM, оперативка), online (ROM, энергонезависимая память). Это главное.
Второе - надо понимать, что когда где-то меняются настройки, то это лишь только в одном из типов памяти. Надо уметь понимать, в какой памяти настройки поменялись, а в какой нет. Далее надо понять, как скопировать настройки из одной памяти в другую.
-
- здесь недавно
- Сообщения: 95
- Зарегистрирован: 25 янв 2018, 10:04
- Имя: Александр
- Страна: Украина
- город/регион: южный
- Благодарил (а): 4 раза
- Поблагодарили: 26 раз
Sinamics G120 не принимает уставку частоты
Нет никакого "проекта".
Есть наша программа, управляющая несколькими частотниками по ModBus.
Программа. Не "среда", не "SCADA", не "OPC" или ещё какие-нибудь страшные слова. Ну, знаете, пишете исходник на C, компилируете, получается исполняемый файл - представляете, сразу в коде процессора! Вся "настройка" частотника - исключительно через панель оператора, BOP-2. Программа даёт частотнику уставку частоты (функцией Fn06 модбаса), и команду на пуск и стоп - с помощью той же функции, но через другой регистр.
Ладно, я уж не стану жаловаться на то, что этот дорогущщий ящик не способен запоминать частоту, выставленную оператором на панели в ручном режиме - после каждого включения или перехода в авто-режим уставка обнуляется! Но, блин, сделать настолько неудобную систему автоповтора кнопок "+"/"-" - это, видимо, фрицы мстят за нашу победу . Жмёшь - оно начинает тикать с тысячных долей, потом как-то без предупреждения глядь - а там уже миллионы прыгают! И вот это вот несколько минут елозишь туда-сюда, пока практически случайно не попадёшь в нужное значение.
И вдобавок ко всему, ещё и вот эта вот проблема с Modbus. Мало того что контроллер ДЕСЯТЬ МИЛЛИСЕКУНД обдумывает ответ на простейший запрос текущего статуса. Да ёлы-палы, в 21 веке копеечные микроконтроллеры отдают десяток регистров за половину миллисекунды!!! А тут металлолом за -надцать тысяч евро - и десять миллисекунд - вечность по меркам электроники. У них там что, реально релейная схема на коммуникационном порту?! Декадно-шаговые искатели?!
Так вдобавок к этому, ещё и по непонятным причинам иногда отказывается принимать команду "записать значение в регистр". Вот только что принимал - и вдруг отказывается. Несколько раз подряд. Пихаешь ещё раз - и о чудо, прошло! Естественно, все "автонастройки двигателя" уже выполнены, при ручных пусках с панельки. И привод запускается по команде с компа, просто не на той частоте которую тот ему говорит! Вот когда не надо - он эту уставку помнит.
С точки зрения драйвера протокола Modbus, это выглядит так: мастер посылает команду с функцией Fn06 - записать значение в регистр №100. По стандарту, слейв обязан либо вообще проигнорировать этот пакет, если CRC не сошлась, либо ответить с кодом ошибки, если было некорректное обращение к регистру, либо, если всё в порядке - вернуть копию исходного пакета. Естественно, если мастер не получает подтверждения от слейва, пытается повторить транзакцию до 8 попыток. На самом деле, проиходит вот что: принимается один-единственный байт - и далее заканчивается тайм-аут коммуникации. Выставлял тайм-ауты 70 мс, 100 мс, 150 мс - это для скорости 115200 уже просто "бесконечность" - ничего не приходит. Дальше мы ждать уже не можем, надо опрашивать остальные частотники на линии. И всё, мы на панельке частотника видим, что уставка не изменилась.
Или изменилась.
Никакой системы в том, будет ли принято значение уставки или нет, обнаружить не удалось.
Вот отсюда и вопрос: кто виноват? Может, нам надо воспользоваться функцией Fn16 и отправлять в едином пакете уставку и команду? Или, может, перед подачей уставки надо ему как-то "мозги прочистить"?
Самое обидное, что на стенде с мелким частотником, который нам предоставили для отладки программ, всё работало отлично, без нареканий. А на реальном объекте вылезли всякие каки.
Типа того, что в документации сказано, что мастеру должны отдаваться текущие значения аналоговых выходов AO0 и AO1 через Modbus-регистры 219 и 220 - и они отдаются частотником на стенде, а вот на объекте - фиг вам, нет таких регистров!
Не того мы ожидали от хвалёного "немецкого" железа...
Есть наша программа, управляющая несколькими частотниками по ModBus.
Программа. Не "среда", не "SCADA", не "OPC" или ещё какие-нибудь страшные слова. Ну, знаете, пишете исходник на C, компилируете, получается исполняемый файл - представляете, сразу в коде процессора! Вся "настройка" частотника - исключительно через панель оператора, BOP-2. Программа даёт частотнику уставку частоты (функцией Fn06 модбаса), и команду на пуск и стоп - с помощью той же функции, но через другой регистр.
Ладно, я уж не стану жаловаться на то, что этот дорогущщий ящик не способен запоминать частоту, выставленную оператором на панели в ручном режиме - после каждого включения или перехода в авто-режим уставка обнуляется! Но, блин, сделать настолько неудобную систему автоповтора кнопок "+"/"-" - это, видимо, фрицы мстят за нашу победу . Жмёшь - оно начинает тикать с тысячных долей, потом как-то без предупреждения глядь - а там уже миллионы прыгают! И вот это вот несколько минут елозишь туда-сюда, пока практически случайно не попадёшь в нужное значение.
И вдобавок ко всему, ещё и вот эта вот проблема с Modbus. Мало того что контроллер ДЕСЯТЬ МИЛЛИСЕКУНД обдумывает ответ на простейший запрос текущего статуса. Да ёлы-палы, в 21 веке копеечные микроконтроллеры отдают десяток регистров за половину миллисекунды!!! А тут металлолом за -надцать тысяч евро - и десять миллисекунд - вечность по меркам электроники. У них там что, реально релейная схема на коммуникационном порту?! Декадно-шаговые искатели?!
Так вдобавок к этому, ещё и по непонятным причинам иногда отказывается принимать команду "записать значение в регистр". Вот только что принимал - и вдруг отказывается. Несколько раз подряд. Пихаешь ещё раз - и о чудо, прошло! Естественно, все "автонастройки двигателя" уже выполнены, при ручных пусках с панельки. И привод запускается по команде с компа, просто не на той частоте которую тот ему говорит! Вот когда не надо - он эту уставку помнит.
С точки зрения драйвера протокола Modbus, это выглядит так: мастер посылает команду с функцией Fn06 - записать значение в регистр №100. По стандарту, слейв обязан либо вообще проигнорировать этот пакет, если CRC не сошлась, либо ответить с кодом ошибки, если было некорректное обращение к регистру, либо, если всё в порядке - вернуть копию исходного пакета. Естественно, если мастер не получает подтверждения от слейва, пытается повторить транзакцию до 8 попыток. На самом деле, проиходит вот что: принимается один-единственный байт - и далее заканчивается тайм-аут коммуникации. Выставлял тайм-ауты 70 мс, 100 мс, 150 мс - это для скорости 115200 уже просто "бесконечность" - ничего не приходит. Дальше мы ждать уже не можем, надо опрашивать остальные частотники на линии. И всё, мы на панельке частотника видим, что уставка не изменилась.
Или изменилась.
Никакой системы в том, будет ли принято значение уставки или нет, обнаружить не удалось.
Вот отсюда и вопрос: кто виноват? Может, нам надо воспользоваться функцией Fn16 и отправлять в едином пакете уставку и команду? Или, может, перед подачей уставки надо ему как-то "мозги прочистить"?
Самое обидное, что на стенде с мелким частотником, который нам предоставили для отладки программ, всё работало отлично, без нареканий. А на реальном объекте вылезли всякие каки.
Типа того, что в документации сказано, что мастеру должны отдаваться текущие значения аналоговых выходов AO0 и AO1 через Modbus-регистры 219 и 220 - и они отдаются частотником на стенде, а вот на объекте - фиг вам, нет таких регистров!
Не того мы ожидали от хвалёного "немецкого" железа...
Gray©at.
-
- здесь недавно
- Сообщения: 95
- Зарегистрирован: 25 янв 2018, 10:04
- Имя: Александр
- Страна: Украина
- город/регион: южный
- Благодарил (а): 4 раза
- Поблагодарили: 26 раз
Sinamics G120 не принимает уставку частоты
Ого, вот это меня пропёрло вчера. Прошу прощения за эмоциональность, но по сути всё написал так как есть.
Gray©at.
-
- здесь недавно
- Сообщения: 95
- Зарегистрирован: 25 янв 2018, 10:04
- Имя: Александр
- Страна: Украина
- город/регион: южный
- Благодарил (а): 4 раза
- Поблагодарили: 26 раз
Sinamics G120 не принимает уставку частоты
Так вон оно чё, Михалыч!...
Получается, в нашей системе безвентиляторный "кирпич" Advantech подключается к линии связи через преобразователь интерфейсов RS-232 < - > RS-485 типа ADAM-4520. Естественно, в "Адаме" переключатель скорости был выставлен на тот baudrate, который используется - 115200.
НО.
У Сименса UART стандартно сконфигурирован на 8-E-1, т.е. с чётностью. А те ADAM-4520, судя о всему, рассчитаны на работу БЕЗ чётности. И они, выходит, при передаче выключают свой драйвер после 10-го бита каждого байта, хотя там следует ещё 11-й (по осциллографу чётко видно) ! Вот и получается, что на некоторых пакетах происходит порча информации, и слейвы, соответственно, такие пакеты игнорят.
Причём, как я уже писал, в основном-то коммуникация идёт вполне нормально, без ошибок всё. И только когда в пакете попадаются байты с несколькими "единицами" подряд, типа, например, 0xFC или 0x3F, стабильно происходит сбой. В "нормальных" командах и в опросе статуса таких не попадалось, а вот при посылке уставки частоты - некоторые конкретные значения приводили к такому вот эффекту.
Перестроили "Адам" на скорость 19200 - он теперь держит передатчик включённым долше положенного на 3 байтовых интервала, но это ведь стандартом Modbus-RTU так и положено. Теперь всё работает чётко.
И всё из-за дебильной проверки чётности, которая, при наличии полноценной CRC-16 в пакетах, ни нафик не нужна!
Получается, в нашей системе безвентиляторный "кирпич" Advantech подключается к линии связи через преобразователь интерфейсов RS-232 < - > RS-485 типа ADAM-4520. Естественно, в "Адаме" переключатель скорости был выставлен на тот baudrate, который используется - 115200.
НО.
У Сименса UART стандартно сконфигурирован на 8-E-1, т.е. с чётностью. А те ADAM-4520, судя о всему, рассчитаны на работу БЕЗ чётности. И они, выходит, при передаче выключают свой драйвер после 10-го бита каждого байта, хотя там следует ещё 11-й (по осциллографу чётко видно) ! Вот и получается, что на некоторых пакетах происходит порча информации, и слейвы, соответственно, такие пакеты игнорят.
Причём, как я уже писал, в основном-то коммуникация идёт вполне нормально, без ошибок всё. И только когда в пакете попадаются байты с несколькими "единицами" подряд, типа, например, 0xFC или 0x3F, стабильно происходит сбой. В "нормальных" командах и в опросе статуса таких не попадалось, а вот при посылке уставки частоты - некоторые конкретные значения приводили к такому вот эффекту.
Перестроили "Адам" на скорость 19200 - он теперь держит передатчик включённым долше положенного на 3 байтовых интервала, но это ведь стандартом Modbus-RTU так и положено. Теперь всё работает чётко.
И всё из-за дебильной проверки чётности, которая, при наличии полноценной CRC-16 в пакетах, ни нафик не нужна!
Gray©at.