Ошибка кода драйвера на Linux

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

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

    Получаю такую ошибку

    2026-10-07 13:34:52 [scada12][root][ERR] Ошибка при вызове метода CreateDevice драйвера DrvMercury23x:
    System.FormatException: String '' was not recognized as a valid Boolean.
       at System.Convert.ToBoolean(String value)
       at Scada.Comm.Drivers.DrvMercury23x.Logic.DevMercury23xLogic..ctor(ICommContext commContext, ILineContext lineContext, DeviceConfig deviceConfig)
       at Scada.Comm.Drivers.DrvMercury23x.Logic.DrvMercury23xLogic.CreateDevice(ILineContext lineContext, DeviceConfig deviceConfig)
       at Scada.Comm.Engine.DriverWrapper.CreateDevice(ILineContext lineContext, DeviceConfig deviceConfig, DeviceLogic& deviceLogic)

    В коде Dev вроде простое, что и было ранее

            /// <summary>
            /// Creates a new device.
            /// </summary>
            public override DeviceLogic CreateDevice(ILineContext lineContext, DeviceConfig deviceConfig)
            {
                return new DevMercury23xLogic(CommContext, lineContext, deviceConfig);
            }

    При этом на Windows драйвер запускается без проблем.
    Пересобирал на NET10, ошибок не выдает. На Linux из-за этого не может запустить линию.

    #45298
    manjey73
    Участник

    Сверил с DrvModbus в части Logic, все ‘одинаково’ кроме названий драйвера.

    В чем может быть причина тогда? Не понимаю.

    #45299
    manjey73
    Участник

    хм, в NET8 пустая строка определялась как false, если мы ее используем как bool переменную, а в NET10 это уже ошибка, от так вот… Если правильно понимаю, это у меня связано с этим

    #45300
    manjey73
    Участник

    Да ну нафик?

    У меня в коде Drv есть проверка строки
    UseAscii = string.IsNullOrEmpty(options.Level) ? false : Convert.ToBoolean(options.UseAscii);

    но ранее она была readonly, делал по аналогии с каким-то драйвером.
    Убрал readonly о вроде запускается. По крайней мере в логе на Linux нет ошибки.
    И перед этим я в Опции линии в переменную вводил False, тоже проскакивало без ошибок.

    интересное поведение на Linux…

    Сейчас попробую запустить драйвер на чтение реального счетчика, посмотрю.

    #45301
    manjey73
    Участник

    Нет, изменение на private bool вместо readonly не прокатывает.

    Нужно именно вписать False вместо пустой строки, тогда запускается.

    В чем тут может быть разница на Linux, что такое поведение?

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

    В .NET10 некоторые методы ведут себя чуть-чуть иначе. Поищите про этот конкретный метод.

    #45303
    manjey73
    Участник

    какой метод? Проверка строки на ПУСТО?
    Как он может вести себя иначе?

    И тут же началась жесть.
    2026-10-07 15:23:36 [scada12][root][ERR] Источник данных ScadaServer: Невозможно добавить данные в очередь «Очередь исторических данных». Максимальный размер очереди 1000 превышен

    только счетчик и прицепил

    #45304
    manjey73
    Участник

    string.IsNullOrEmpty(options.Level)
    от же я дебил 🙂

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

    Хорошо, что разобрались.

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