Стартовая страница › Форумы › Разработка и интеграция › Ошибка кода драйвера на Linux
- В этой теме 8 ответов, 2 участника, последнее обновление 15 часов, 35 минут назад сделано
Mikhail.
-
АвторЗаписи
-
07.10.2026 в 13:39 #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 из-за этого не может запустить линию.07.10.2026 в 13:46 #45298
manjey73УчастникСверил с DrvModbus в части Logic, все ‘одинаково’ кроме названий драйвера.
В чем может быть причина тогда? Не понимаю.
07.10.2026 в 13:54 #45299
manjey73Участникхм, в NET8 пустая строка определялась как false, если мы ее используем как bool переменную, а в NET10 это уже ошибка, от так вот… Если правильно понимаю, это у меня связано с этим
07.10.2026 в 14:06 #45300
manjey73УчастникДа ну нафик?
У меня в коде Drv есть проверка строки
UseAscii = string.IsNullOrEmpty(options.Level) ? false : Convert.ToBoolean(options.UseAscii);но ранее она была readonly, делал по аналогии с каким-то драйвером.
Убрал readonly о вроде запускается. По крайней мере в логе на Linux нет ошибки.
И перед этим я в Опции линии в переменную вводил False, тоже проскакивало без ошибок.интересное поведение на Linux…
Сейчас попробую запустить драйвер на чтение реального счетчика, посмотрю.
07.10.2026 в 15:22 #45301
manjey73УчастникНет, изменение на private bool вместо readonly не прокатывает.
Нужно именно вписать False вместо пустой строки, тогда запускается.
В чем тут может быть разница на Linux, что такое поведение?
07.10.2026 в 15:22 #45302
MikhailМодераторВ .NET10 некоторые методы ведут себя чуть-чуть иначе. Поищите про этот конкретный метод.
07.10.2026 в 15:24 #45303
manjey73Участниккакой метод? Проверка строки на ПУСТО?
Как он может вести себя иначе?И тут же началась жесть.
2026-10-07 15:23:36 [scada12][root][ERR] Источник данных ScadaServer: Невозможно добавить данные в очередь «Очередь исторических данных». Максимальный размер очереди 1000 превышентолько счетчик и прицепил
07.10.2026 в 15:27 #45304
manjey73Участникstring.IsNullOrEmpty(options.Level)
от же я дебил 🙂08.10.2026 в 14:12 #45326
MikhailМодераторХорошо, что разобрались.
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.