УкраїнськаEnglishmRussian
Вхід/Новий
У темі багато повідомлень

Вопрос о ModBus


Автор Повідомлення
Повідомлення створено: 24. 10. 2012 [14:25]
almaz
Almaz Karimov
Contributor
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
Последовательный интерфейс в местах скопления мощных частотников - очень ненадёжное решение. Поэтому используем модуль ET-7026 с Modbus/TCP, который имеет все необходимые аналоговые и дискретные входы-выходы для управления частотником и его контроля (управление частотой, измерение тока, пуск/стоп, реверс, ошибка, сброс ошибки). Причём модуль встраиваем прямо в частотник и запитываем его от блока питания частотника, так как были случаи выгорания модулей при управлении несколькими частотниками от одного модуля. Один модуль на частотник плюс управление по езернет - работает чудесно.
Это о старых моделях частотников danfoss. Новые модели имеют фирменный модуль Modbus/TCP. Один заказали - посмотрим.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Повідомлення створено: 24. 10. 2012 [15:30]
Vorgehen
Артём Корниевский
Зареєстрован(а) с: 08.07.2012
Повідомлення: 20
Алмаз спасибо.Видно с этим и связана моя проблема смены адрессов. Иногда это /dev/ttyUSB0, а иногда неожиданно в процессе работы перескакивает на /dev/ttyUSB1. Думаю как решить.
ET-7026 с Modbus/TCP
Посмотрел. Не по силам пока нам ICP_DAS. Но со временем может быть. Поищу более дешёвые варианты.

[Повідомлення редагувалось 1 раз(ів), останній раз 24.10.2012 в 16:09.]
Повідомлення створено: 24. 10. 2012 [16:52]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3747
"Vorgehen" wrote:

Алмаз спасибо.Видно с этим и связана моя проблема смены адрессов. Иногда это /dev/ttyUSB0, а иногда неожиданно в процессе работы перескакивает на /dev/ttyUSB1. Думаю как решить.

Сталкивался уже с подобным хотя у меня имя устройства не менялось, а только пакеты в открытый порт переставали реально идти причём без выдачи ошибок. Для обхода этого добавил в исходящий транспорт KeepAlive.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 24. 10. 2012 [23:43]
almaz
Almaz Karimov
Contributor
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
"Vorgehen" wrote:
Не по силам пока нам ICP_DAS. Но со временем может быть. Поищу более дешёвые варианты.
Странно, что используете danfoss, а на icpdas средств нет.
"roman" wrote:
Сталкивался уже с подобным хотя у меня имя устройства не менялось, а только пакеты в открытый порт переставали реально идти причём без выдачи ошибок. Для обхода этого добавил в исходящий транспорт KeepAlive.
Бороться можно по-разному. Мы чего только не пробовали (экранирование,терминаторы, подтягивание к минусам и плюсам), но стоит энергетикам поменять фазы, отключить электричество, моргнуть электричеством или чего ещё - тут же работа нарушается. Бороться с последствиями, конечно, можно, но незачем. Лучше устранить причину. Ethernet и есть дальнейшее развитие последовательных линий связи (4 линии, изолирующие трансформаторы, высокая частота, протоколы связи), устойчивые к любым видам помех. Поставил и забыл.

[Повідомлення редагувалось 1 раз(ів), останній раз 24.10.2012 в 23:46.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Повідомлення створено: 25. 10. 2012 [07:47]
Alexx
Александр Иванов
Зареєстрован(а) с: 16.07.2012
Повідомлення: 64
Здравствуйте, у меня такой вопрос. Есть прибор "ТЕРМОДАТ" в нем текущее значение температуры и уставок хранится в виде ЗНАЧЕНИЕ *10 (например 123,5 градуса хранится как 1235). Соответственно, когда я читаю значение температуры я в логическом уровне делю показания на 10 и получаю реальное значение температуры. У меня проблема с записью уставок: очень неудобно задавать уставку с компьютера умноженную на 10. Хотелось бы чтобы вводя уставку, число, перед записью в "ТЕРМОДАТ" по модбасу, сначала умножалось на 10. Иными словами, как обрабатывать значение атрибута ПЕРЕД передачей его по модбасу. Подскажите как это сделать. Спасибо.
Повідомлення створено: 25. 10. 2012 [08:29]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3747
"Alexx" wrote:

У меня проблема с записью уставок: очень неудобно задавать уставку с компьютера умноженную на 10. Хотелось бы чтобы вводя уставку, число, перед записью в "ТЕРМОДАТ" по модбасу, сначала умножалось на 10. Иными словами, как обрабатывать значение атрибута ПЕРЕД передачей его по модбасу. Подскажите как это сделать.

Там-же, в логическом уровне. Или прямо шаблон подключать к параметру DAQ.ModBus, а в шаблоне реализовать нужный интерфейс параметра в реальные данные ModBus, для чего он и предназначен. Ссылки чуть выше я уже давал.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 25. 10. 2012 [15:40]
Vorgehen
Артём Корниевский
Зареєстрован(а) с: 08.07.2012
Повідомлення: 20
Странно, что используете danfoss, а на icpdas средств нет.
Не danfoss используем, а Holip - китайскую копию. Поставлялся вместе с оборудованием прямо из Китая.

Сталкивался уже с подобным хотя у меня имя устройства не менялось, а только пакеты в открытый порт переставали реально идти причём без выдачи ошибок. Для обхода этого добавил в исходящий транспорт KeepAlive.

Поставил ещё одного потребителя на /dev/ttyUSB1, стало реже уходить, но всё же иногда улетает на /dev/ttyUSB2.

Здравствуйте, у меня такой вопрос. Есть прибор "ТЕРМОДАТ" в нем текущее значение температуры и уставок хранится в виде ЗНАЧЕНИЕ *10 (например 123,5 градуса хранится как 1235). Соответственно, когда я читаю значение температуры я в логическом уровне делю показания на 10 и получаю реальное значение температуры. У меня проблема с записью уставок: очень неудобно задавать уставку с компьютера умноженную на 10. Хотелось бы чтобы вводя уставку, число, перед записью в "ТЕРМОДАТ" по модбасу, сначала умножалось на 10. Иными словами, как обрабатывать значение атрибута ПЕРЕД передачей его по модбасу. Подскажите как это сделать. Спасибо.


Ваш пример канонический и рассматривается в руководстве по быстрому старту по полочкам,присмотритесь, советую, мне помогло:
http://wiki.oscada.org/Doc/QuickStart?v=rg2#h988-11
В моём случае подобную уставку нужно менять функцией 06 modbus. Поэтому атрибуту я поставил :w: -только запись без чтения. А чтение этого же регистра вывел на отдельный атрибут под другим именем. Имеет место отставание на несколько кадров но для температурной уставки это не всегда принципиально.


[Повідомлення редагувалось 2 раз(ів), останній раз 25.10.2012 в 16:00.]
Повідомлення створено: 26. 10. 2012 [11:45]
Alexx
Александр Иванов
Зареєстрован(а) с: 16.07.2012
Повідомлення: 64
Спасибо, уже разобрался. Кстати у меня тоже иногда улетает преобразователь 485-USB то на /dev/ttyUSB1 то на /dev/ttyUSB0. Если получится победить-сообщите как вы это сделали.

Еще вопрос: каким образом можно посчитать время нахождения атрибута в определенном диапазоне? мне необходимо считать время нахождения температуры в диапазоне уставки, причем если температура вышла из диапазона то подсчет времени приостанавливается, а если вернулась-то продолжается.

[Повідомлення редагувалось 1 раз(ів), останній раз 26.10.2012 в 11:48.]
Повідомлення створено: 26. 10. 2012 [12:27]
almaz
Almaz Karimov
Contributor
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
Победить перескакивающие устройства просто. Указывайте вместо /dev/ttyUSBx на точное устройство /dev/serial/by-id/xxxxx или usb-слот /dev/serial/by-path/yyyyy (чтобы не указывать постоянно длинное имя обычно создавал в корне диска короткую символическую ссылку на устройство). Но это может не оказаться полным решением проблемы. Возможно не хватает питания с порта usb или нужна оптоизоляция преобразователя от линии связи.

if ((atr>atrmin)&&(atr<atrmax)) time=time+dt;

[Повідомлення редагувалось 3 раз(ів), останній раз 26.10.2012 в 14:29.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Повідомлення створено: 26. 10. 2012 [15:44]
Alexx
Александр Иванов
Зареєстрован(а) с: 16.07.2012
Повідомлення: 64
Спасибо, с преобразователями попробую, хотя у него есть развязка между USB и линией 485.
По поводу счетчика времени- алгоритм подсчета не проблема, проблема в том, что я не пойму где взять время (в вашем примере dt)



10876