Реклама / ООО «ИЗОЛПРОЕКТ» / ИНН: 7725566484 | ERID: 2Vtzqx6kV7S
IPB IPB
Проектирование, монтаж, наладка, сервис


Здравствуйте, гость ( Вход | Регистрация )

- Стандарт НП «АВОК» 7.11-2024
«Рекомендации по проектированию инженерных систем
дошкольных образовательных организаций»

АВОК в соц. сетях
ИНН: 7714824045 | erid: 2VtzqwzKQiU
 
Добавить ответ в эту темуОткрыть тему
> Modbus "Holding Registers" на PXC001, Как правильно завязать ModBus-переменную "Holding Registers" н
PuzanZero
сообщение 29.4.2020, 14:36
Сообщение #1





Группа: Участники форума
Сообщений: 115
Регистрация: 19.1.2015
Пользователь №: 256733



Уважаемые знатоки Siemens. Помогите разобраться.
У меня есть сторонний девайс который по ModBus-протоколу завязан на PXC001-E.D.
Я настроил прямую и обратную адресацию согласно методичке в приложении (т.е. для FbAddr я ставлю адрес девайса +1000).

В этом случае, блок АО один раз перезаписывает на стороннем девайсе значение Modbus-переменной, при изменении PrVal (всё как и положено), однако при изменении этой переменной непосредственно в самом девайсе, в блоке АО не меняется ни PrVal ни FbVal (см.скриншот ниже).

Я пробовал использовать и другие коды доступа (03,06), но это не помогает.
Единственный выход, который я нашёл - это создать отдельный блок (как это сделано для аналогичной BOOL-евой переменной справа). Но это не решение.

Подскажите, пожалуйста, как сделать так, чтобы эта переменная перезаписывалась в блоке АО при её изменении на стороннем девайсе, а не только передавалась в стороннее устройство при её изменении на PXC001?



Сообщение отредактировал PuzanZero - 29.4.2020, 14:42
Прикрепленные файлы
Прикрепленный файл  CA2Y9772en_06.pdf ( 913,7 килобайт ) Кол-во скачиваний: 19
Прикрепленный файл  Untitled.png ( 61,24 килобайт ) Кол-во скачиваний: 17
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
signet
сообщение 1.5.2020, 0:05
Сообщение #2





Группа: Участники форума
Сообщений: 49
Регистрация: 6.7.2013
Пользователь №: 198125



Почему для чтения, вы используете 16 функцию? Я бы сказал, что нужно 04 функцию (Read Input Registers). В стороннем устройстве вы пишите, что регистр 01 чтение/запись, а сами читаете с 1001 регистра? тоже не понятно, нужно так же и читать с 01, используя функцию 04. На запись я бы использовал 03 функцию.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sigezmund
сообщение 1.5.2020, 16:00
Сообщение #3





Группа: Участники форума
Сообщений: 198
Регистрация: 29.12.2011
Пользователь №: 134796



Signet, согласен с Вашими замечениями, но так написано в документации. Это очень странно. Может попробовать для фитбэка указать корректные данные (адрес устройства, функция, регистр)?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
PuzanZero
сообщение 5.5.2020, 9:30
Сообщение #4





Группа: Участники форума
Сообщений: 115
Регистрация: 19.1.2015
Пользователь №: 256733



Как бы да, вы отчасти правы. Если я делаю адресацию блока АО как показано на скриншоте ниже, то FbVal выдаёт правильное значение



Вот только с аналогичной конструкцией ВО у меня почему-то нестыковки. Если её разделить на два блока (как на скриншоте слева) то она функционирует нормально, а если объединить в один блок (как на скриншоте справа) то он выдаёт ошибку "Feedback error".




Сообщение отредактировал PuzanZero - 5.5.2020, 9:31
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
PuzanZero
сообщение 5.5.2020, 9:54
Сообщение #5





Группа: Участники форума
Сообщений: 115
Регистрация: 19.1.2015
Пользователь №: 256733



Но самая главная загвоздка в другом.
Дело в том, что когда эту переменную выводят на DesigoInsight (или на пульт PXM20), то там показано значение PrVal блока AO.
Но если значение этой переменной изменилось на стороне подчинённого устройства (а не через контроллер PXC001), то получится так, что PrVal имеет одно значение, а реальное (FbVal) другое (как на скриншоте https://i.imgur.com/QxLCwRv.png ).
И такая ситуация будет дезинформировать пользователя.
Может быть можно как-то сделать чтобы при изменении FbVal менялось и PrVal ?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Andrew123
сообщение 5.5.2020, 14:07
Сообщение #6





Группа: New
Сообщений: 4
Регистрация: 12.9.2012
Пользователь №: 163026



>>Может быть можно как-то сделать чтобы при изменении FbVal менялось и PrVal ?
Попробовать блоки NOT+CMP_R, т.е.
AO.EnPgm = NOT(CMP_R(PrVal, FbVal).Eq); AO.ValPgm=FbVal; AO.SwiKind=Trigger.

P.S. С PXC001 и блоками AO (BO) была особенность - перезапись при обрыве-восстановлении связи.
Например, BO это пуск установки по Modbus. Исходное состояние - установка запущена BO=1. Вытыкаем кабель связи. Останавливаем установку с локального пульта. PXC об этом не знает. Втыкаем кабель связи. PXC перезапишет свое значение BO=1 - установка запускается. Получается вроде самопроизвольный запуск установки (для кого-то неожиданный).
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
signet
сообщение 11.5.2020, 22:30
Сообщение #7





Группа: Участники форума
Сообщений: 49
Регистрация: 6.7.2013
Пользователь №: 198125



Цитата(PuzanZero @ 5.5.2020, 9:54) *
Но самая главная загвоздка в другом.
Дело в том, что когда эту переменную выводят на DesigoInsight (или на пульт PXM20), то там показано значение PrVal блока AO.
Но если значение этой переменной изменилось на стороне подчинённого устройства (а не через контроллер PXC001), то получится так, что PrVal имеет одно значение, а реальное (FbVal) другое (как на скриншоте https://i.imgur.com/QxLCwRv.png ).
И такая ситуация будет дезинформировать пользователя.
Может быть можно как-то сделать чтобы при изменении FbVal менялось и PrVal ?


Настроить это ни как нельзя, идиотская особенность Сименса. Я делаю пометку "запись" или "чтение", чтоб пользователь видел, если чтение отличается от записи, значит кто-то по месту менял уставку.
Можно конечно FbVal замкнуть на вход более высокого приоритета (например SwEn) и с помощью импульсного счетчика записывать FbVal, но это шиза.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
PuzanZero
сообщение 12.5.2020, 9:53
Сообщение #8





Группа: Участники форума
Сообщений: 115
Регистрация: 19.1.2015
Пользователь №: 256733



Цитата(signet @ 12.5.2020, 0:30) *
Настроить это ни как нельзя, идиотская особенность Сименса. Я делаю пометку "запись" или "чтение", чтоб пользователь видел, если чтение отличается от записи, значит кто-то по месту менял уставку.
Можно конечно FbVal замкнуть на вход более высокого приоритета (например SwEn) и с помощью импульсного счетчика записывать FbVal, но это шиза.


в общем я сделал вот такую конструкцию, как предложил Andrew123:

задержка, как оказалось, там тоже необходима. оно как-бы худо-бедно, но работает приемлемо.

Но вот проблема которую мне так и не удалось решить, связана с тем, что при перебоях связи или питания, контроллер PXC001 перезаписывает в сторонний девайс значение DefVal блока АО.
Причём, DefVal в ПЗУ контроллера PXC001 не сохраняется и получается так, что при сбое питания контроллер всегда будет сбрасывает переменную SpTSu в 22 (значение забитое мной в программе).

Вы не знаете, можно ли как-то решить эту проблему?

Сообщение отредактировал PuzanZero - 12.5.2020, 9:57
Прикрепленные файлы
Прикрепленный файл  1.png ( 43,55 килобайт ) Кол-во скачиваний: 7
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Добавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Реклама
ООО «Арктика групп» ИНН: 7713634274



ООО "Русич" ИНН 9721068883 / ЕРИД 2VtzqvMjLF8


ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqxXgvJi

Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqwyM2dc

Последние сообщения Форума






RSS Текстовая версия Сейчас: 16.7.2025, 11:03
Политика ООО ИИП «АВОК-ПРЕСС» в отношении обработки персональных данных