EnglishУкраїнськаmRussian
Login/New
Topic with many replies

Вопрос о ModBus


Author Message
Written on: 23. 09. 2011 [15:07]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Искусственно воспроизвести проблему не смог. Возникает раз-два в сутки на работающем техпроцессе. Переведём часть алгоритма на отдельный контроллер для устранения неполадки и проверки ModBus... И в 0.7.0 LTS исправлено... Спасибо.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 27. 09. 2011 [10:15]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Исправление не помогло. Данные также изредка не доходят до железа. Поставил пока "костыль" в ява-программе, чтобы периодически передёргивало значения выходных регистров/битов... Так доходят данные нормально.

Идеально было бы, конечно, производить запись в сеть (регистры/биты) безусловно в соответствии с заданным в контроллере ModBus периодом. Всё равно запись только изменившихся значений не даёт экономии трафика, так как вместо записи идёт ещё и чтение с выходных регистров/битов (режим rw), а режим w не гарантирует доставки данных.

[This article was edited 1 times, at last 27.09.2011 at 10:24.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 27. 09. 2011 [10:50]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"almaz" wrote:

Исправление не помогло. Данные также изредка не доходят до железа. Поставил пока "костыль" в ява-программе, чтобы периодически передёргивало значения выходных регистров/битов... Так доходят данные нормально.

Исходя из текущего алгоритма такого быть не должно.
Скрипт записи где находится?
Разбирайтесь!

"almaz" wrote:

Идеально было бы, конечно, производить запись в сеть (регистры/биты) безусловно в соответствии с заданным в контроллере ModBus периодом.

Нет проблем. Реализуйте ассинхронную запись, как в DAQ.Siemens.

Learn, learn and learn better than work, work and work.
Written on: 27. 09. 2011 [11:45]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Такого быть не должно, но факт есть факт. После сбоя на дискретном выходе железки висит 0, в то время как в модуле ModBus бит показывает 1 (в режиме rw), дополнительно введённый бит с тем же адресом в режиме r также показывает 1. Соответственно, запись в устройство не происходит пока не передёрнуть значение этого бита. После передёргивания бит, наконец, доходит до выхода железа. Возможно, глюк ET-7026 и он не всегда корректно отдаёт выходные данные при чтении, хоть и меняли железку на другую. Попробуем использовать дискретные выходы другого модуля ET-7066 в тех же условиях...

Скрипта записи нет. В блоке блочного вычислителя формируются значения (период вычисления блока 100 мсек) и передаются через связь "Параметр выход" в модуль ModBus для передачи на железо. В контроллере ModBus задано значение периода 250 мсек.

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

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 27. 09. 2011 [13:53]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"almaz" wrote:

Такого быть не должно, но факт есть факт. После сбоя на дискретном выходе железки висит 0, в то время как в модуле ModBus бит показывает 1 (в режиме rw),

Тогда это он и читает, в лог запросов ModBus смотрите для контроля.

Learn, learn and learn better than work, work and work.
Written on: 03. 10. 2011 [08:22]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Изредка железо при чтении выходных регистров/битов выдаёт не те данные, которые фактически установлены на выходе, что и приводит к сбоям. Но при постоянной записи (режим w, чтение выходов в принципе не нужно) работает отлично. Только для периодической записи приходится постоянно менять значения в скаде (биты кратковременно инвертировать, чтобы техпроцесс не успел это почувствовать, аналоговые значения должны случайно плавать на 0,1%)...

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 03. 10. 2011 [09:08]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"almaz" wrote:

Только для периодической записи приходится постоянно менять значения в скаде (биты кратковременно инвертировать, чтобы техпроцесс не успел это почувствовать, аналоговые значения должны случайно плавать на 0,1%)...

Зачем? Изменения сейчас должны писаться нормально, а повторять тоже значение нет необходимости.

Learn, learn and learn better than work, work and work.
Written on: 03. 10. 2011 [09:35]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Глюк железки. "Обманывает" модуль ModBus, что записало на физический выход (в своём регистре/бите железка фиксирует изменившееся значение, а до физического вывода не доводит). В общем, до физических выходов иногда доходит не за одну процедуру записи, а со второй-третей. Из-за чего надо или изменившееся значение записывать несколько раз, или (что лучше) писать постоянно.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 04. 10. 2011 [10:22]
s-s-n
s-s-n
registered since: 16.08.2011
Posts: 83
Подскажите как в ModBus прочитать-записать один байт
Written on: 04. 10. 2011 [10:36]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
В ModBUS регистры двухбайтные. Поэтому считывать-записывать байт надо в составе двухбайтного регистра.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.



11136