Стартовая страница › Форумы › Разработка и интеграция › влияние исчезновения связи на значение дорасчетного канала
- В этой теме 29 ответов, 5 участников, последнее обновление 7 лет, 3 месяца назад сделано
to0freak.
-
АвторЗаписи
-
27.03.2018 в 08:33 #8786
a93911
УчастникЗдравствуйте. У меня дорасчетный канал используется для получения значения отдельного бита из слова другого канала функцией GetBit(). Так вот, если бит установлен, даже при кратковременном исчезновении связи генерируется событие дорасчетного канала, то есть вычисляемое значение меняется с 1 на 0. Наверное, нужно доработать функцию GetBit()
public double GetBit(double val, int n)
{
UInt64 uintVal = (UInt64)val;
return (uintVal >> n) & 1;
}Подскажите решение
27.03.2018 в 09:30 #8787
manjey73УчастникВопрос для чего это необходимо ? Можно использовать дополнительный канал с таймером TOF от дребезга.
GetBit тут как бы и ни при чем, он свою функцию выполняет правильно.-
Ответ изменён 8 лет, 4 месяца назад пользователем
manjey73.
27.03.2018 в 12:01 #8789a93911
УчастникПриведите пожалуйста пример использования таймера TOF (в функции)
27.03.2018 в 13:48 #8791
manjey73УчастникЕсли вы ловите 0 для сообщения об ошибке то просто примените таймер на отключение.
Например в 5 канале у вас GetBit на нужный бит переменной
в 6 канале используете в формуле Tof(Val(5), 5000) — 5 секунд и отслеживаете для контроля ошибки уже 6-ой канал.
для работы Tof еще нужна формула Ticks.Простая защита от дребезга. Время задается в миллисекундах.
Формула Tickspublic static long Ticks() { DateTime now = DateTime.Now; long time = now.Ticks/10000; return time; }Формула Tof
int[] TofNum = new int[1]; long[] TofST = new long[1]; bool[] TofFlag = new bool[1]; public double Tof(double TofIn, double TofPT) { long ET = 0L; long tof_pt = Convert.ToInt64(TofPT); bool q = Val(CnlNum) > 0; bool tof_in = TofIn > 0; int res = Array.IndexOf(TofNum, CnlNum); if (res == -1) { res = TofNum.Length; Array.Resize(ref TofNum, res+1); Array.Resize(ref TofST, res+1); Array.Resize(ref TofFlag, res+1); TofNum[res] = CnlNum; } if (tof_in) { q = true; TofFlag[res] = true; TofST[res] = 0L; ET = 0L; } else { if (TofFlag[res]) { TofFlag[res] = false; TofST[res] = Ticks(); ET = 0L; } else { if (q) ET = Ticks() - TofST[res]; } if (ET >= tof_pt) q = false; } return Convert.ToDouble(q); }Надеюсь при выкладывании в виде кода web не добавит ошибок в формулы.
27.03.2018 в 13:52 #8792
manjey73УчастникКстати можно попробовать записать так в одном канале.
Tof(GetBit(Val(xxx),3),10000) если не ошибся со скобками…27.03.2018 в 18:46 #8804
MikhailМодераторПопробуйте такую формулу: GetBit(Val(1), 0); Stat(1)
То есть статус канала будет не определён при пропадании исходного канала30.04.2018 в 08:08 #9054a93911
УчастникДоработал Getbit. Сейчас после исчезновения связи сохраняется старое значение пока связь не будет восстановлена
public double Getbit_2(int nCnl, int n)
{
UInt64 uintVal = (UInt64)Val(nCnl);
UInt64 temp = (UInt64)Cnl;
if (Stat(nCnl)!=0) temp = ((uintVal >> n) & 1);
return temp;
}30.04.2018 в 18:23 #9056
MikhailМодераторСпасибо.
Не введет ли такой подход оператора в заблуждение?02.05.2018 в 07:26 #9067a93911
УчастникСделал по аналогии с панелями оператора Samkoon. При исчезновении связи последние параметры фиксируются, при этом выдается сообщение об отсутствии связи. Себе на представление хочу добавить мигающую пиктограмму «Нет связи». Плюс отображаемые каналы телеизмерения будут принимать неопределенное состояние (прочерки).
Думаю, всё таки такой подход повышает надежность реагирования персонала на возникновение аварийной ситуации. Ведь даже в случае обрыва связи в системе будет сохраняться аварийный сигнал, привязанный к звуковой сигнализации. Можно в принципе позволить вручную квитировать данный сигнал в скаде02.05.2018 в 10:25 #9071
MikhailМодераторПри условии, когда будет явно видно, что связь оборвалась, последние доступные значения действительно могут быть полезны. Зависит от той сферы, которая автоматизируется.
05.07.2018 в 08:53 #9865ValeraMar
УчастникУ меня обратная проблема, при обрыве датчика, коммуникатор продолжает писать последнее значение. Хотя на приборе (ТРМ, прочерки) обрыв показывает. С чем связано не пойму.
05.07.2018 в 09:26 #9866
manjey73УчастникValeraMar Возможно сам ТРМ передает из регистра последнее значение, а ошибку он может передавать в другом регистре. Посмотрите документацию на прибор.
05.07.2018 в 19:22 #9876
MikhailМодераторНадо проверить, что при обрыве связи в журнале линии связи и на странице Данные КП.
09.07.2018 в 08:55 #9895ValeraMar
УчастникПри обрыве нет никаких изменений в логе, пробовал статус вывести не выходит, настройки прибора разбирал, вроде все норм.
-
Ответ изменён 8 лет, 1 месяц назад пользователем
Mikhail.
09.07.2018 в 08:56 #9896ValeraMar
Участник
-
Ответ изменён 8 лет, 4 месяца назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.