Стартовая страница › Форумы › Понять, как работает ПО › Контроль обновления данных
- В этой теме 5 ответов, 3 участника, последнее обновление 5 месяцев, 2 недели назад сделано
Mikhail.
-
АвторСообщения
-
25.12.2025 в 12:45 #41534
wkdx00
УчастникЗдравствуйте! Не нашел на форуме и не смог самостоятельно придумать как оставлять данные полученные с устройства некоторое время без изменений при перебоях со связью? С контроллеров читаю данные по rs485, далее через moxa nport кидаю их в сеть предприятия, куда цепляюсь через впн с рабочего места. Где проблема в этой цепочке сказать не могу, но 1-3 раза в минуту связь подтормаживает и показания теряются. Вместо показаний вижу «—«. Таймингами играл. Возможно ли менять показания только по изменению значения, оставляя старые при коротких перебоях со связью (не смог прочитать N раз или в течении 5 секунд: рисуем «—«, до этого отображаем старые значения)?
25.12.2025 в 12:54 #41535
manjey73Участник---отправляет драйвер, если была ошибка чтения.По идее можно обойти скриптами, контролируя таймером служебные тег устройства
Statusнапример PrevVal() использовать в скрипте таймера. Ну а вообще лучше разобраться в причинах обрыва связи.
25.12.2025 в 16:00 #41552
MikhailМодераторДобрый день!
В первую очередь нужно стабилизировать связь в Коммуникаторе. Посмотрите журнал линии связи, какие там ошибки. Количество перезапросов при ошибке настраивается в Коммуникаторе.С помощью формул каналов можно на уровне Сервера скрыть проблему, но тогда Вы не узнаете, что связь полностью пропала.
26.12.2025 в 09:14 #41565wkdx00
УчастникДобрый! В журнале линии пишет: «Ошибка связи» очень редко «Ошибка: неверный адрес устройства». Параллельно запущен ping -t до moxa, ошибкам линии предшествует провал связи 100+ мс. В основных параметрах линии выставил «Количество попыток запроса при ошибке» =10, в журнале ошибки по прежнему есть, но в представление они не отображаются. Спасибо!
Можете рассказать подробнее по варианту с формулами? Как минимум для развития, а может и идея какая-то придет.-
Ответ изменён 5 месяцев, 2 недели назад пользователем
wkdx00.
26.12.2025 в 09:37 #41567
manjey73Участникдобавьте канал с кодом тега
Statusна устройство, это служебный тег для драйверов устройств.
он показывает 0 = Норма, 1 = АварияСоответственно данный канал можно использовать как вход IN для таймера.
формулы таймеров (а-ля CodeSys) я тоже выкладывал.
Нужен будет таймер TON.Ну и подумать, как писать предыдущее значение пока выход таймера не станет = 1.
Возможно придется еще сохранять качественное значение в отдельном канале или интегрировать в скрипт.
И в канале писать типа Val(# канала таймера) > 0 ? double.NaN : тут либо Cnl либо предыдущее значение (то есть еще одна формула, которая будет передавать либо от драйвера либо последнее сохраненное значение)26.12.2025 в 18:47 #41583
MikhailМодераторСамый простой, но нерекомендуемый способ — игнорировать плохие данные:
CnlStat > 0 ? Cnl : Val()
Эта формула подставляет предыдущие данные, если связь пропала.По поводу настройки связи — ещё можно таймаут и задержку попробовать увеличить.
-
Ответ изменён 5 месяцев, 2 недели назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.