Добрый день!
В коммуникаторе поле прописывается как system.byte[]. Качество: good
т.е. на входе никаких значений не было, а вот в табличке Текущие данные КП это поле уже имеет вид : название канала[0] значение 0,000 номер канала.
И в БД уже прописывается со значение 0
Вот тут и проблема что когда приходит 0 то начинается путаница.
Можно как то сменить не 0 а к примеру 99 или в идеале чтоб в настройках КП появилось поле куда можно было бы ввести дефолтное число которое не будет пересекаться с рабочими.
В случае массива получаемое значение не пишется. Скорее всего, приходит 0.
С помощью формулы для входного канала №2088 Вы можете в случае 0 установить любое значение или, например, неопределённый статус.
Пример формулы канала:
Cnl; Cnl > 0 ? CnlStat : 0
На скринах видно в первом случае значение в орс есть и оно передается. Во втором нету, но в канале все равно прописывается 0. Такая формула(Cnl > 0 ? CnlVal : 7) в обоих случаях дает val=7 Видимо нужна формула по сложнее.
Во втором случае, когда значения нет, в Коммуникатор всё равно приходят данные по теги НС? Если да, то судя по всему, они равны 0, т.к. если статус GOOD, то должно же быть какое-то значение.
когда на входе будет 0 чтобы заменить на 9 нужно сделать так?
Может и приходит что то но я вижу только то что показал на скринах во втором сообщении. Как в формуле написать проверку типа: if(empty($a)) или if(!$a)
Надо посмотреть в отладчике, что именно содержится в получаемом массиве. То есть как воспринимает драйвер Rapid SCADA «пустые» данные. Исходя из этого решать, как обрабатывать.
Я могу это сделать на коммерческой основе.