Стартовая страница › Форумы › Разработка и интеграция › Драйвер счетчика Меркурий 230, 231, 232, 233, 236
- В этой теме 359 ответов, 19 участников, последнее обновление 1 неделя, 4 дня назад сделано manjey73.
-
АвторСообщения
-
20.06.2024 в 09:05 #33113MikhailМодератор
В журнале видно, что ошибка возникает внутри метода драйвера
DevMercury23xLogic.Session
при попытке извлечь элемент из Dictionary. В первую очередь, нужно с помощью отладчика определить точное место возникновения ошибки в исходном коде драйвера.20.06.2024 в 09:15 #33114manjey73Участникну очевидно что это .Session 🙂
Проблема то в том, что код Status служебный со стороны Коммуникатора.
1. Как он добавляется к словарю тегов, которые я формирую в драйвере?
2. В какой момент Коммуникатор его передает в Сервер? до моих тегов, после моих тегов ?Вторая проблема, я не могу отловить его, вчера вечером запустил дома на Windows (у меня тоже такая ошибка на моей Orange была в логах) и как назло одна ошибка запроса (не сессии даже) за всю ночь. Пойди ее поймай, эту заразу 🙂
20.06.2024 в 09:45 #33116baurУчастник[15] РП15 Ввод-1 Яч.#7 — вот этот вот счетчик, точная его модификация ?
[15] РП15 Ввод-1 Яч.#7
20.06.2024 в 09:46 #33117MikhailМодераторЯ даже не знаю, о каком конкретно словаре идёт речь. Если бы исходники были на GitHub, можно было бы посмотреть.
Вторая проблема, я не могу отловить его
Нужно воспроизвести ошибку, чтобы её исправить. Может быть, специально неправильные данные вернуть драйверу.
20.06.2024 в 09:48 #3311820.06.2024 в 10:03 #33119manjey73Участник[15] РП15 Ввод-1 Яч.#7 — для данного счетчика сделайте копию шаблона и деактивируйте в нем Профиль мощностей. На вкладке Profile в верхней таблице снимите галку Active
Похоже он без профилей — нет буквы P и он вроде честно об этом сообщает.
Буду смотреть как это обойти.Да эти исходники
@Mikhail исходник есть на GIT https://github.com/Manjey73/OpenDrivers/tree/main/DrvMercury23xСудя по ошибке драйвер пытается передать Статус устройства Normal-Error но фокус в том, что у меня нет такого тега Status — он явно формируется Коммуникатором, я только не совсем понимаю каким образом он лезет в мой словарь активных тегов ?
20.06.2024 в 10:05 #33120manjey73УчастникИли Коммуникатор оборачивает созданные теги в Драйвере и поверх накладывает еще и Status ?
Тогда предположу, что когда происходит ошибка на один из запросов происходит смещение индексации тегов как-то и потом Коммуникатор пытается передать Status, а его упс и нет… Хотя не совсем представляю, что к этому может приводить.
20.06.2024 в 10:06 #33121manjey73УчастникПолучается служебный тег Status из Коммуникатора передается по индексу, а не по имени ?
20.06.2024 в 10:13 #33122manjey73Участник[16] РП15 Ввод-1 Яч.#2: — такая же ошибка на запрос Профилей мощности
20.06.2024 в 12:09 #33125MikhailМодераторНужно найти строку, в которой возникает ошибка, тогда будет что обсуждать.
Рекомендую изменить код следующим образом:
1. В методе Session выделить блоки кода в виде отдельных методов.
2. Переменную tag сделать локальной. Насколько это возможно поля класса Logic сделать локальными переменными методов.
Вышеперечисленное позволит локализовать проблему.20.06.2024 в 12:59 #33126manjey73Участник1. не совсем понял, там собственно всегда вызов Request идет с подменой запроса в цикле.
2. tag вроде и есть локальная переменная, или это имя воспринимает Коммуникатор? типа изменить на myTag ?
Еще один тестовый. Одну штуку подправил, а вдруг?
20.06.2024 в 13:05 #33127manjey73Участникprivate int tag = 0; собственно. Абсолютно локальная переменная, собственная индексация переменных из привязанного шаблона
20.06.2024 в 13:16 #33128manjey73УчастникЯ сравнивал логи, которые выложил @baur
в начале было все красиво, исключение с именем тега Status шло строго после одного запроса. А потом бац, и пошло после других запросов…
Четкой привязки пока не обнаружил..
21.06.2024 в 08:24 #33147baurУчастникТест 6.0.0.3
поставил, но к сожалению связь отвалился, ждем …
PS: со следующей недели я в отпуске …
21.06.2024 в 08:34 #33148 -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.