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 век - век повсеместной автоматизации. Главное - во благо всем людям.
|