Добрый день.

Подскажите пожалуйста - некая проблема взаимодействия.

Ситуация: имеет на двух машинах OPC сервера Universal Modbus OPC Server (демо версия 32 тега, 3.0.0.8). Один работает в режиме Master, другой - режим Slave. Связываются через ethernet - MODBUS TCP.

У слэйва есть два регистра (32 разряда или 4 байта). Мастер в один из них пишет (в слейв), в другом читает. В слейве регистры настроены read/write.

Если из мастер прописать регистр ручками, то все путем (данные пишутся в слейв). Если в ответном регистре в слейве прописать значение ручками - тоже все путем (изменения отражаются в соответствующем регистре в мастере).

Моя проблема возникла при использовании скриптов OPC сервера.
Создал серверный тег, он принимает данные со SCADA системы (этих тегов должно быть несколько, но пока один для простоты). Эти серверные теги должны записать разные значения в разные регистры реального тега. Для этого в реальном теге, через который мастер работает со слейвом на стороне мастера создан упаковывающий значения скрипт по событию OnRead() - что обозначается, как "выполнение скрипта после чтения". Этот скрипт опрашивает серверные теги, собирает у них значения распределяет их по разрядам, превращает это в десятичное число а дальше пишет по идее функцией Server.WriteCurrentTag(), а также Server.WriteCurrentTagToDevice() (кстати отдельный вопрос эти две функции) в текущий тег. Так вот - со стороны мастера новое значение вычисляется и отображается в этом теге, но в слейв (в сопряженный тег) оно не передается. (как уже писал выше, если ручками вбить значение со стороны мастера, то придет.

Можете ли объяснить такую специфику работы системы, в чем может быть ошибка, и как сделать правильно (так чтобы в слейв это вычисленное значение все таки приходило).

Спасибо.