Visual Studio Community 2022 и OpenDrivers

  • В этой теме 52 ответа, 3 участника, последнее обновление 2 года назад сделано manjey73.
Просмотр 15 сообщений - с 16 по 30 (из 53 всего)
  • Автор
    Сообщения
  • #22584
    Mikhail
    Модератор

    Может какую-то dll нужно положить в корень коммуникатора?

    Требуются следующие магические действия из командной строки:
    1. Перейти в папку проекта (где лежит *.csproj)
    2. Выполнить команду dotnet publish -c Release
    3. В bin и ниже ищите папку publish, которая содержит все dll, от которых зависит проект. Копируете dll, которые указаны в сообщении об ошибке, в папку SCADA\ScadaComm по одной.

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

    А DevXXXXLogic и View для чего?

    Теперь класс драйвера отдельно Drv***Logic.cs, а класс устройства Dev***Logic.cs отдельно. Это позволяет, например, выполнить действия для драйвера в целом.
    Имеет значение только наименование класса драйвера, он должен быть public, и он создаёт класс устройства.

    BinStopCode = (byte)options.GetValueAsInt(«BinStopCode»)

    Код метода. Этот метод является т.н. методом расширения. То есть он написан нами, но может применяться к стандартному классу. Опции являются строками. Метод преобразует значение опции в число в данном случае. Затем преобразуем в тип byte.

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

    Кстати, попробуйте драйвер DrvTester в Администраторе — если открыть свойства устройства на линии связи, то демонстрируется универсальная форма для ввода параметров устройства. Её можно применить в своём драйвере.

    • Этот ответ был изменен 2 года назад от Mikhail.
    #22588
    manjey73
    Участник

    Все равно не понимаю, метод включает словарь string, string
    Первая часть ключ, вторая значение парсится в INT

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

    То есть мне не надо выполнять остановку например на байте 0x03 если перед ним нет байта скажем 0x10 а стоит какой-то другой.

    Как в данном случае int.Parse может преобразовать строку в массив байт?

    #22589
    manjey73
    Участник

    ScadaCommon
    ScadaComm

    На рабочем ПК собрал данные библиотеки, но проблемы с зависимостями это не решило, файлы в bin/Release появились…

    #22590
    manjey73
    Участник

    Распаковал по новой Scada master и собралось, теперь смог открыть OpenDrivers

    #22592
    Romiros
    Участник

    Требуются следующие магические действия из командной строки

    Спасибо это помогло устранить ошибку с отсутствием файла, однако платформа все-равно не поддерживается. Буду искать дальше.

    #22593
    manjey73
    Участник

    Предупреждение CS8618 поле «binStopCond», не допускающий значения NULL, должен содержать значение, отличное от NULL, при выходе из конструктора. Возможно, стоит объявить поле как допускающий значения NULL.

    Хотя полностью повторил код, но в DevTester подобных предупреждений нет, а у меня есть.

    Почему так ? в NET6 периодически про null предупреждения есть, но их нет в подобных же случаях в OpenDrivers

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

    это помогло устранить ошибку с отсутствием файла, однако платформа все-равно не поддерживается

    Не работает на Windows?
    Какое сообщение об ошибке?

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

    Предупреждение CS8618

    Нужно поставить Nullable = disable. Ссылка

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

    Попробуйте что-то вроде
    ScadaUtils.ParseIntArray(options.GetValueAsString("BinStopCode")
    Если нужен массив byte, то потребуется написать свой метод парсинга строки в массив.

    #22598
    manjey73
    Участник

    @Mikhail я так понимаю это если использовать массив байт для остановки в настройках ?
    То есть если я использую просто в коде, без использования в Options то это не так обязательно?

    Еще такой момент, это альтернатива Параметры линии — Пользовательские но строго под данный экземпляр драйвера?

    Параметры линии — Пользовательские так же остались доступны, если мне необходимо обмениваться информацией между экземплярами в рамках одной линии?

    Еще смотрю по поводу доступа к переменным через символьные представления, индексное представление осталось? Имею ввиду по индексу тега.
    Пока не разобрался как на лету оперировать через символьное представление. Так же при добавлении на линию?

    Вот еще раз говорю, ну потратьте часок времени и опишите кратко соответствия и нововведения по каждому узлу (Коммуникатор, Сервер). А то вопросов глупых будет много с моей стороны 🙂

    #22599
    Romiros
    Участник

    Не работает на Windows?
    Какое сообщение об ошибке?

    Да не работает на Windows
    Ошибка следующая:
    System.PlatformNotSupportedException: System.Data.SqlClient is not supported on this platform.

    И теперь после публикации NuGet пакет подсвечивается желтым треугольником в студии. Т.е. видимо предупреждение о том что не поддерживается. Я тогда не понимаю что нужно в Net6 для связи с MS SQL Server?

    Вот настройки проекта:

    <Project Sdk=»Microsoft.NET.Sdk»>

    <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <RootNamespace>Scada.Comm.Drivers.DrvMonitoring.Logic</RootNamespace>
    </PropertyGroup>

    <ItemGroup>
    <PackageReference Include=»Npgsql» Version=»6.0.3″ />
    <PackageReference Include=»System.Data.SqlClient» Version=»4.8.3″ />
    </ItemGroup>

    <ItemGroup>
    <Reference Include=»ScadaCommCommon»>
    <HintPath>C:\Program Files\SCADA\ScadaComm\ScadaCommCommon.dll</HintPath>
    </Reference>
    <Reference Include=»ScadaCommon»>
    <HintPath>C:\Program Files\SCADA\ScadaComm\ScadaCommon.dll</HintPath>
    </Reference>
    <Reference Include=»ScadaCommon.Log»>
    <HintPath>C:\Program Files\SCADA\ScadaComm\ScadaCommon.Log.dll</HintPath>
    </Reference>
    </ItemGroup>

    </Project>

    • Этот ответ был изменен 2 года назад от Romiros.
    #22601
    Mikhail
    Модератор

    System.PlatformNotSupportedException: System.Data.SqlClient is not supported on this platform

    Похожая проблема была при работе с COM-портами.
    Проверьте, если при сборке появляется папка runtimes, то её содержимое нужно скопировать в директорию, где лежит *.exe. В этой папке находятся платформенно-зависимые файлы.

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

    я так понимаю это если использовать массив байт для остановки в настройках ?

    Данный пример был именно для получения массива из опций.

    Еще такой момент, это альтернатива Параметры линии — Пользовательские но строго под данный экземпляр драйвера?

    Теперь произвольные параметры могут быть не только у линии, но и у каждого устройства. Как просили.

    Параметры линии — Пользовательские так же остались доступны, если мне необходимо обмениваться информацией между экземплярами в рамках одной линии?

    Параметры — это фиксированные значения, конфигурация.
    Есть ещё общие данные для обмена во время работы — LineContext.SharedData

    Еще смотрю по поводу доступа к переменным через символьные представления, индексное представление осталось?

    Да, можно по индексу (быстрее), можно по наименованию (чуть медленнее).

    Пока не разобрался как на лету оперировать через символьное представление. Так же при добавлении на линию?

    Если речь о работе с тегами, то пример в DrvSimulator.

    Вот еще раз говорю, ну потратьте часок времени и опишите кратко соответствия и нововведения по каждому узлу (Коммуникатор, Сервер).

    Я бы никогда не догадался, какие вопросы возникнут. Поэтому спрашивайте, ответить не проблема.

    #22603
    Romiros
    Участник

    Проверьте, если при сборке появляется папка runtimes, то её содержимое нужно скопировать в директорию, где лежит *.exe. В этой папке находятся платформенно-зависимые файлы.

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

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