Контроль обновления данных

Стартовая страница Форумы Понять, как работает ПО Контроль обновления данных

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Автор
    Сообщения
  • #41534
    wkdx00
    Участник

    Здравствуйте! Не нашел на форуме и не смог самостоятельно придумать как оставлять данные полученные с устройства некоторое время без изменений при перебоях со связью? С контроллеров читаю данные по rs485, далее через moxa nport кидаю их в сеть предприятия, куда цепляюсь через впн с рабочего места. Где проблема в этой цепочке сказать не могу, но 1-3 раза в минуту связь подтормаживает и показания теряются. Вместо показаний вижу «—«. Таймингами играл. Возможно ли менять показания только по изменению значения, оставляя старые при коротких перебоях со связью (не смог прочитать N раз или в течении 5 секунд: рисуем «—«, до этого отображаем старые значения)?

    #41535
    manjey73
    Участник

    --- отправляет драйвер, если была ошибка чтения.

    По идее можно обойти скриптами, контролируя таймером служебные тег устройства Status

    например PrevVal() использовать в скрипте таймера. Ну а вообще лучше разобраться в причинах обрыва связи.

    #41552
    Mikhail
    Модератор

    Добрый день!
    В первую очередь нужно стабилизировать связь в Коммуникаторе. Посмотрите журнал линии связи, какие там ошибки. Количество перезапросов при ошибке настраивается в Коммуникаторе.

    С помощью формул каналов можно на уровне Сервера скрыть проблему, но тогда Вы не узнаете, что связь полностью пропала.

    #41565
    wkdx00
    Участник

    Добрый! В журнале линии пишет: «Ошибка связи» очень редко «Ошибка: неверный адрес устройства». Параллельно запущен ping -t до moxa, ошибкам линии предшествует провал связи 100+ мс. В основных параметрах линии выставил «Количество попыток запроса при ошибке» =10, в журнале ошибки по прежнему есть, но в представление они не отображаются. Спасибо!
    Можете рассказать подробнее по варианту с формулами? Как минимум для развития, а может и идея какая-то придет.

    • Ответ изменён 5 месяцев, 2 недели назад пользователем wkdx00.
    #41567
    manjey73
    Участник

    добавьте канал с кодом тега Status на устройство, это служебный тег для драйверов устройств.
    он показывает 0 = Норма, 1 = Авария

    Соответственно данный канал можно использовать как вход IN для таймера.
    формулы таймеров (а-ля CodeSys) я тоже выкладывал.
    Нужен будет таймер TON.

    Ну и подумать, как писать предыдущее значение пока выход таймера не станет = 1.
    Возможно придется еще сохранять качественное значение в отдельном канале или интегрировать в скрипт.
    И в канале писать типа Val(# канала таймера) > 0 ? double.NaN : тут либо Cnl либо предыдущее значение (то есть еще одна формула, которая будет передавать либо от драйвера либо последнее сохраненное значение)

    #41583
    Mikhail
    Модератор

    Самый простой, но нерекомендуемый способ — игнорировать плохие данные:
    CnlStat > 0 ? Cnl : Val()
    Эта формула подставляет предыдущие данные, если связь пропала.

    По поводу настройки связи — ещё можно таймаут и задержку попробовать увеличить.

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Для ответа в этой теме необходимо авторизоваться.