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

Вопрос о ModBus


Author Message
Written on: 29. 04. 2011 [18:15]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Andry" wrote:

При создании тестового проекта на OpenSCADA столкнулся со следующей проблемой: в контроллер необходимо записывать атрибуты типа int32 и float, причём, изменение в контроллере должно производится сразу всего атрибута, что реализуется с помощью команды ModBus на запись группы регистров.

Добавлена эта функция, совместно с флагом использовать групповые функции записи (16 и 15).

"Andry" wrote:

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

Реализовывать полную асинхронную запись для ModBus мне на данный момент не интересно. Кроме того не считаю синхронную запись для ModBus проблемой.

Learn, learn and learn better than work, work and work.
Written on: 04. 05. 2011 [06:16]
Andry
Андрей Смирнов
registered since: 30.12.2010
Posts: 2
"roman" wrote:

Добавлена эта функция, совместно с флагом использовать групповые функции записи (16 и 15).

Установил последнюю версию OpenSCADA и проверил работу, действительно, запись идёт блоком.:)
"roman" wrote:

Реализовывать полную асинхронную запись для ModBus мне на данный момент не интересно. Кроме того не считаю синхронную запись для ModBus проблемой.

В том и дело, что необходима была синхронная запись (всего DWORD), что и реализовано.
Спасибо, Роман
Written on: 09. 06. 2011 [15:12]
ВладимирВ.
Владимир Васильев
registered since: 31.05.2011
Posts: 33
ModBus TCP расширение

У нас в шлюзе ModBus TCP имеются два дискретных входа сигнализации. Протокол ModBus TCP расширили, а именно если клиент работает со шлюзом, то при изменении состояния дискретного любого входа формируется дополнительный фрейм ModBus TCP и отправляется клиенту для обработки.

Настроил в OpenSCADA ModBus "Сбор данных". Всё нормально работает.

Однако при формировании фрейма, который не ожидает модуль ModBus в OpenSCADA, происходит "торможение" и "сбой" работы модуля ModBus и параметры регистров изменяюся.

Можно ли как нибудь настроить модуль ModBus, чтобы он "отбрасывал" дополнительные фреймы?
Written on: 09. 06. 2011 [15:17]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"ВладимирВ." wrote:

ModBus TCP расширение

У нас в шлюзе ModBus TCP имеются два дискретных входа сигнализации. Протокол ModBus TCP расширили, а именно если клиент работает со шлюзом, то при изменении состояния дискретного любого входа формируется дополнительный фрейм ModBus TCP и отправляется клиенту для обработки.

В таком случае это уже не ModBus, а некий сурогат, а значит этот вопрос не к OpenSCADA. Или пишите свой шлюз.

Learn, learn and learn better than work, work and work.
Written on: 09. 06. 2011 [16:08]
ВладимирВ.
Владимир Васильев
registered since: 31.05.2011
Posts: 33
"roman" wrote:

В таком случае это уже не ModBus, а некий сурогат,


Совершенно с Вами согласен. Будем думку думать.
Written on: 23. 09. 2011 [12:26]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
"Andry" wrote:
команды на запись формируются только для изменившихся значений
В связи с этим столкнулся с трудноуловимой проблемой, ведущей к периодическим сбоям техпроцесса: при ошибках (помехах) в сети в момент записи изменившегося регистра ModBus (или бита) данные не доходят до железки. Если железо было кратковременно обесточено (перезагружено, сработал сторожевой таймер) также данные до неё не дойдут пока их значения не поменяются и на выходах будут значения, установленные по умолчанию.

PS Железо ET-7026 c ModBus TCP, OpenSCADA 0.7.0 LTS

[This article was edited 1 times, at last 23.09.2011 at 12:37.]

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

В связи с этим столкнулся с трудноуловимой проблемой, ведущей к периодическим сбоям техпроцесса: при ошибках (помехах) в сети в момент записи изменившегося регистра ModBus (или бита) данные не доходят до железки. Если железо было кратковременно обесточено (перезагружено, сработал сторожевой таймер) также данные до неё не дойдут пока их значения не поменяются и на выходах будут значения, установленные по умолчанию.

Если регистр/коилс сконфигурирован как только для записи "w", то такое может быть. Если сконфигурировать его на полный доступ "rw", то такого не будет.

Впрочем добавлю откат значения атрибута в случае неудачной записи.

Learn, learn and learn better than work, work and work.
Written on: 23. 09. 2011 [12:51]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Изначально было "w". Думал "rw" поможет, но не помогло. Сложилось ощущение, что фактического чтения выходного регистра/бита с железа не происходит и возвращается значение, установленное в атрибуте.

Если запись изменившегося регистра/бита была удачной, а железо после этого перезапустилось, то не поможет.

[This article was edited 1 times, at last 23.09.2011 at 12:56.]

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

Изначально было "w". Думал "rw" поможет, но не помогло. Сложилось ощущение, что фактического чтения выходного регистра/бита с железа не происходит и возвращается значение, установленное в атрибуте.

Должно помогать поскольку при отсутствии связи туда записывается EVAL, что однозначно не нормально записываемое значение!

"almaz" wrote:

Если запись изменившегося регистра/бита была удачной, а железо после этого перезапустилось, то не поможет.

Тогда будет EVAL писать.

Learn, learn and learn better than work, work and work.
Written on: 23. 09. 2011 [14:25]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"roman" wrote:

Должно помогать поскольку при отсутствии связи туда записывается EVAL, что однозначно не нормально записываемое значение!

Только оно при записи давило.

"roman" wrote:

Тогда будет EVAL писать.

Сделал. Проверяйте.

Learn, learn and learn better than work, work and work.



15685