Стартовая страница › Форумы › Разработка и интеграция › Ошибка при отправке команды ТУ
- В этой теме 5 ответов, 2 участника, последнее обновление 3 года, 8 месяцев назад сделано manjey73.
-
АвторСообщения
-
31.07.2020 в 14:36 #16782manjey73Участник
При отправке Бинарной команды, если отправляю неверную длину байт получаю такую ошибку и зависание линии.
2020-07-31 14:27:51 Ошибка при отправке команды ТУ: Длина результирующего массива недостаточна для копирования всех элементов коллекции. Проверьте индекс и длину массива.
Например я отправляю один байт 16h формата вместо 2-х для значения Int16 или Uint16.
в коде используются соответственно BitConverter.ToInt16 или BitConverter.ToUInt16Учитывая ошибку, эту надпись выдает Scada. Но если в catch нет ничего, то никакой надписи об ошибке нет. Если в catch сделать вывод лога «Ошибка бла-бла-бла» то ее мы и получим. А как вывести (перехватить) ошибку, которую формирует Scada ?
31.07.2020 в 17:11 #16785MikhailМодераторЕсли Вы хотите как-то самостоятельно обработать ошибку, то нужно использовать try…catch в своём методе и делать в catch ту обработку, которая необходима.
31.07.2020 в 17:52 #16789manjey73УчастникЕще раз, в try catch завернуто, но если catch пустой, то со стороны Scada ошибки нет, в том числе и ее причин.
Если в catch делаю что-то свое, то это тоже работает.Как в Catch перехватить то, что обрабатывает Scada ?
Если делать иначе, то при сообщении ошибки со стороны Scada происходит зависание линии связи, ну или остановка ее при опросе.
Хочется вывести ошибку, которое формирует Scada как есть, ну как вариант красным подсветить. Но чтобы опрос продолжался дальше.2020-07-31 14:27:51 Ошибка при отправке команды ТУ: — это то ведь Scada сформировала ?
Как это вызвать в обработчике catch а не придумывать то же самое по новому кругу ?02.08.2020 в 11:02 #16801MikhailМодераторно если catch пустой, то со стороны Scada ошибки нет, в том числе и ее причин
Конечно, ведь исключение «проглатывается». Если делаете catch, то нужна обработка ошибки, хотя бы вывод в лог ex.ToString()
Как в Catch перехватить то, что обрабатывает Scada ?
Никак, потому что это более верхний уровень кода.
Можно сделать так:
catch (Exception ex) { // здесь своя обработка throw; // отправить исключение дальше на уровень Коммуникатора }
02.08.2020 в 13:42 #16804manjey73Участникхм, плохо что нельзя перехватить. Там и дата и то, что ошибка при отправке команды и собственно сама ошибка.
Было бы удобно выводить ее в лог как есть, при этом не останавливая опрос.
Пока да, вывел ошибку в лог при помощи catch как исключение, которое вызывает BitConverter, собственно ту же самую ошибку давал и Коммуникатор.
Мне при этом надо было, чтобы опрос не прекратился.
02.08.2020 в 13:45 #16805manjey73УчастникСобственно было бы неплохо, если бы верхний уровень кода спускал текст ошибки в драйвер и было бы как-то достаточно его вывести в лог внутри простого
catch
{
WriteToLog(Ошибка верхнего уровня);
}Вот таким простым способом, а выполнять какие-то действия или нет уже по ситуации.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.