Уважаемые знатоки Siemens. Помогите разобраться.
У меня есть сторонний девайс который по ModBus-протоколу завязан на PXC001-E.D.
Я настроил прямую и обратную адресацию согласно методичке в приложении (т.е. для FbAddr я ставлю адрес девайса +1000).
В этом случае, блок АО один раз перезаписывает на стороннем девайсе значение Modbus-переменной, при изменении PrVal (всё как и положено), однако при изменении этой переменной непосредственно в самом девайсе, в блоке АО не меняется ни PrVal ни FbVal (см.скриншот ниже).
Я пробовал использовать и другие коды доступа (03,06), но это не помогает.
Единственный выход, который я нашёл - это создать отдельный блок (как это сделано для аналогичной BOOL-евой переменной справа). Но это не решение.
Подскажите, пожалуйста, как сделать так, чтобы эта переменная перезаписывалась в блоке АО при её изменении на стороннем девайсе, а не только передавалась в стороннее устройство при её изменении на PXC001?
Почему для чтения, вы используете 16 функцию? Я бы сказал, что нужно 04 функцию (Read Input Registers). В стороннем устройстве вы пишите, что регистр 01 чтение/запись, а сами читаете с 1001 регистра? тоже не понятно, нужно так же и читать с 01, используя функцию 04. На запись я бы использовал 03 функцию.
Signet, согласен с Вашими замечениями, но так написано в документации. Это очень странно. Может попробовать для фитбэка указать корректные данные (адрес устройства, функция, регистр)?
Как бы да, вы отчасти правы. Если я делаю адресацию блока АО как показано на скриншоте ниже, то FbVal выдаёт правильное значение
Вот только с аналогичной конструкцией ВО у меня почему-то нестыковки. Если её разделить на два блока (как на скриншоте слева) то она функционирует нормально, а если объединить в один блок (как на скриншоте справа) то он выдаёт ошибку "Feedback error".
Но самая главная загвоздка в другом.
Дело в том, что когда эту переменную выводят на DesigoInsight (или на пульт PXM20), то там показано значение PrVal блока AO.
Но если значение этой переменной изменилось на стороне подчинённого устройства (а не через контроллер PXC001), то получится так, что PrVal имеет одно значение, а реальное (FbVal) другое (как на скриншоте https://i.imgur.com/QxLCwRv.png ).
И такая ситуация будет дезинформировать пользователя.
Может быть можно как-то сделать чтобы при изменении FbVal менялось и PrVal ?
>>Может быть можно как-то сделать чтобы при изменении 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 - установка запускается. Получается вроде самопроизвольный запуск установки (для кого-то неожиданный).
Русская версия Invision Power Board (http://nulled.ws)
© Invision Power Services (http://nulled.ws)