Вопрос по МАУ

Помечено: 

Просмотр 13 сообщений - с 31 по 43 (из 43 всего)
  • Автор
    Записи
  • #32672
    Mikhail
    Модератор

    Модуль срабатывает на изменение значения канала. А на графике нет изменения, только 0 или отсутствие данных.

    Статус устройства и статус подключения Коммуникатора к Серверу — это не одно и то же. Единственный способ определения подключения Коммуникатора, который приходит на ум, это получение новых данных в канал в течение последних N секунд.

    #32673
    manjey73
    Участник

    Модуль срабатывает на изменение значения канала. А на графике нет изменения, только 0 или отсутствие данных.

    Я знаю, по этому приходится делать костыль в виде расчетных каналов.
    1. Stat(номер канала Status устройства) > 0? 1:0
    2. TP(Val(1), 10) // импульс для МАУ Val = 0

    Но это не отменяет задержку в МАУ, просто она становится меньше, но без задержки Сервер упорно отправляет команду в пустоту, хотя канал 1 записывает у себя 1 только когда канал Статуса имеет значение Normal — Вот тут логика нифига не понятна, почему статус Norma = 0 а Ошибка = 1 а не наоборот?

    Проблема в том, что Сервер не дожидается корректного статуса, будь то Коммуникатор или Устройство и отправляет команду непонятно куда и кому?… А по логике должен поставить в очередь, дождаться когда связь с Коммуникатором и Устройством есть и только тогда самостоятельно отправить команду, а не требовать устраивать костыли с расчетными каналами и задержками. А так же сообщить о выполнении операции для обратной связи.

    #32674
    manjey73
    Участник

    И кстати периодически это все не помогает. Перезагружаю устройство, команд НОЛЬ, логи Сервера и Модуля просто пустые.

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

    логи Сервера и Модуля просто пустые

    Это связано с RAM-диском?

    #32678
    manjey73
    Участник

    Не знаю с чем связано, но на Arm железке на Linux после запуска файлы пустые, если смотреть редактором. Администратор тоже показывает пустоту.

    Потом если сделать какую-то сработку, например я специально меняю температуру, чтобы произошла сработка, то логи Сервера и Модуля появляются.

    При этом сработка происходит при загрузке ПК, хоть логи и пустые.
    Такое ощущение, что что-то еще не готово при запуске Linux в /var/log/scada и писать некуда.
    Как только это проверить? Возможно эта же причина приводит к отправке команд в пустоту. Ведь тоже через папку Cmd происходит запись команд?

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

    Сервер отправляет команды по протоколу TCP.
    Используя RAM-диск не разу не видел описанную картину с пустыми логами. Файлы исчезают при перезагрузке, но при старте служб Rapid SCADA она появляются опять.

    #32852
    manjey73
    Участник

    То, что они появляются после загрузки это нормально. Но они появляются на ВТОРОМ срабатывании.

    на ARM ПК логи пишутся в пустоту при ПЕРВОМ запуске, что-то не успевает отработать в системе. Например tmpfs на /var/log/scada

    Как заставить загрузиться Сервер строго после создания tmpfs на папку логов пока не придумал. Был один вариант, но через раз логи пустые при первом запуске.
    Потом происходит вторая сработка МАУ и логи появляются.

    #32857
    manjey73
    Участник

    все мои попытки заставить загружаться сервисы после var-log-scada.mount ни к чему не приводят.
    Мало того, так перезагрузка сервисов после передачи конфигурации тоже может потерять логи. То есть ПК в данном случае не перегружается, а только сервисы scada.

    Что и удивляет, почему? на виртуалках не проверял еще, а вот на ARM ПК файлы логов пустые.

    Может тут dotnet косячит каким-то образом?

    • Ответ изменён 2 года, 2 месяца назад пользователем manjey73.
    #32865
    Mikhail
    Модератор

    все мои попытки заставить загружаться сервисы после var-log-scada.mount ни к чему не приводят

    Какими способами пробовали?

    Мало того, так перезагрузка сервисов после передачи конфигурации тоже может потерять логи.

    Почему?

    Может тут dotnet косячит каким-то образом?

    На tempfs он вряд ли как-то влияет.

    #32868
    manjey73
    Участник

    Вот и я думаю, что ни на tmpfs ни на /var/log/scada при простом перезапуске сервера влиять не должно, но???

    добавил в скрипты запуска в секцию Unit

    [Unit]
    Description=Rapid SCADA Agent
    Requires=var-log-scada.mount
    After=var-log-scada.mount

    [Unit]
    Description=Rapid SCADA Webstation
    Requires=var-log-scada.mount
    After=var-log-scada.mount

    [Unit]
    Description=Rapid SCADA Server
    Requires=scadaagent6.service var-log-scada.mount
    After=scadaagent6.service var-log-scada.mount

    [Unit]
    Description=Rapid SCADA Communicator
    Requires=scadaserver6.service var-log-scada.mount
    After=scadaserver6.service var-log-scada.mount

    Единственное, что помогло вроде, это запуск scadacomm6.service после Сервера, по крайней мере ушли ошибки что Коммуникатор не может подключиться.
    Если нет Requires и After то сервисы стартуют параллельно, если верить описаниям systemd
    Может немного неправильно прописываю?, сейчас поищу еще по этой теме.

    Кстати почему нельзя применить в [Service]
    Type=forking ???? связанно с dotnet?

    #32869
    manjey73
    Участник

    Да, учитывая, что Коммуникатор может быть сам по себе, то ждать на локальной машине Сервера он не должен, а то вероятно никогда не запустится 🙂
    Это больше для случая, когда Сервер и Коммуникатор на одном ПК

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

    Да, учитывая, что Коммуникатор может быть сам по себе, то ждать на локальной машине Сервера он не должен

    Поэтому изменения в скрипт можно внести в частном случае, но в общем скрипте это было бы не правильно.

    Кстати почему нельзя применить в [Service]
    Type=forking ???? связанно с dotnet?

    Не сталкивался с этим, не могу сказать.

    #32878
    manjey73
    Участник

    Не сталкивался с этим, не могу сказать.

    я пробовал, вроде scadacomm6.service запускается и начинает опрос, но при попытке проверить его статус его как бы и нет 🙂 Ну и Администратор его видеть не будет, что он запущен.
    Была попытка создать PID файл и чтобы systemd сам контролировал зависание сервиса.
    Пришлось писать скрипт проверки is-failed и помещать его в crontab с штатным Type=notify

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