Здравствуйте.
Все кнопки, независимо от типа, всегда отображают состояние, которое соответствует значению переменной. Если кнопка осталась в нажатом состоянии, значит бит с которым связана переменная остался в значении = 1 и не сбросился на 0. Для кнопок без фиксации при нажатии на кнопку в бит записывается 1, при отпускании 0. Можно предположить, что по каким-то причинам запись 0 не выполнилась (из-за разрыва связи с OPC-сервером в момент присвоения, из-за перезаписи переменной в программе ПЛК и т.п.). Мы всегда рекомендуем полностью исключить использование кнопок без фиксации во всех проектах, т.к. они никогда не будут полностью безопасными, всегда есть вероятность сбоя ПК (или сбоя связи) после нажатия на кнопку и отпускание уже не выполнится.
Второй вариант: значение бита перезаписалось другой кнопкой, которая работает с другим битом той же переменной. Процесс присвоения значений значительно усложняется, когда несколько кнопок работают с битами одной переменной, ведь со стороны скады нельзя изменить в переменной только один бит. Т.к. переменная одна, нужно всегда взять все биты (например, 00000000), изменить нужный бит (например, второй: 00000100) и отправить все биты на запись. В результате такого присвоения можно "затереть" значения других битов. И эта проблема является нерешаемой, так как скада и ПЛК работают в разных циклах (не синхронно). Со стороны скады можно только значительно уменьшить вероятность каких-либо проблем с перезаписью битов, выставив частоту опроса переменной равной 100 мс., чтобы циклы скады и ПЛК приблизились друг к другу.
Ещё одно решение: вместо работы с битами одной переменной, сделать отдельные Boolean переменные на ПЛК и импортировать их в скаду, чтобы в скаде также каждый бит был отдельной Boolean-переменной.