Ошибка при отправке команды ТУ

Стартовая страница Форумы Разработка и интеграция Ошибка при отправке команды ТУ

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

    При отправке Бинарной команды, если отправляю неверную длину байт получаю такую ошибку и зависание линии.

    2020-07-31 14:27:51 Ошибка при отправке команды ТУ: Длина результирующего массива недостаточна для копирования всех элементов коллекции. Проверьте индекс и длину массива.

    Например я отправляю один байт 16h формата вместо 2-х для значения Int16 или Uint16.
    в коде используются соответственно BitConverter.ToInt16 или BitConverter.ToUInt16

    Учитывая ошибку, эту надпись выдает Scada. Но если в catch нет ничего, то никакой надписи об ошибке нет. Если в catch сделать вывод лога «Ошибка бла-бла-бла» то ее мы и получим. А как вывести (перехватить) ошибку, которую формирует Scada ?

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

    Если Вы хотите как-то самостоятельно обработать ошибку, то нужно использовать try…catch в своём методе и делать в catch ту обработку, которая необходима.

    #16789
    manjey73
    Участник

    Еще раз, в try catch завернуто, но если catch пустой, то со стороны Scada ошибки нет, в том числе и ее причин.
    Если в catch делаю что-то свое, то это тоже работает.

    Как в Catch перехватить то, что обрабатывает Scada ?
    Если делать иначе, то при сообщении ошибки со стороны Scada происходит зависание линии связи, ну или остановка ее при опросе.
    Хочется вывести ошибку, которое формирует Scada как есть, ну как вариант красным подсветить. Но чтобы опрос продолжался дальше.

    2020-07-31 14:27:51 Ошибка при отправке команды ТУ: — это то ведь Scada сформировала ?
    Как это вызвать в обработчике catch а не придумывать то же самое по новому кругу ?

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

    но если catch пустой, то со стороны Scada ошибки нет, в том числе и ее причин

    Конечно, ведь исключение «проглатывается». Если делаете catch, то нужна обработка ошибки, хотя бы вывод в лог ex.ToString()

    Как в Catch перехватить то, что обрабатывает Scada ?

    Никак, потому что это более верхний уровень кода.

    Можно сделать так:

    catch (Exception ex)
    {
      // здесь своя обработка
      throw; // отправить исключение дальше на уровень Коммуникатора
    }
    #16804
    manjey73
    Участник

    хм, плохо что нельзя перехватить. Там и дата и то, что ошибка при отправке команды и собственно сама ошибка.

    Было бы удобно выводить ее в лог как есть, при этом не останавливая опрос.

    Пока да, вывел ошибку в лог при помощи catch как исключение, которое вызывает BitConverter, собственно ту же самую ошибку давал и Коммуникатор.

    Мне при этом надо было, чтобы опрос не прекратился.

    #16805
    manjey73
    Участник

    Собственно было бы неплохо, если бы верхний уровень кода спускал текст ошибки в драйвер и было бы как-то достаточно его вывести в лог внутри простого

    catch
    {
    WriteToLog(Ошибка верхнего уровня);
    }

    Вот таким простым способом, а выполнять какие-то действия или нет уже по ситуации.

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