Стартовая страница › Форумы › Разработка и интеграция › Visual Studio Community 2022 и OpenDrivers
- В этой теме 52 ответа, 3 участника, последнее обновление 2 года назад сделано manjey73.
-
АвторСообщения
-
22.03.2022 в 11:44 #22584MikhailМодератор
Может какую-то dll нужно положить в корень коммуникатора?
Требуются следующие магические действия из командной строки:
1. Перейти в папку проекта (где лежит *.csproj)
2. Выполнить команду dotnet publish -c Release
3. В bin и ниже ищите папку publish, которая содержит все dll, от которых зависит проект. Копируете dll, которые указаны в сообщении об ошибке, в папку SCADA\ScadaComm по одной.22.03.2022 в 11:49 #22585MikhailМодераторА DevXXXXLogic и View для чего?
Теперь класс драйвера отдельно Drv***Logic.cs, а класс устройства Dev***Logic.cs отдельно. Это позволяет, например, выполнить действия для драйвера в целом.
Имеет значение только наименование класса драйвера, он должен быть public, и он создаёт класс устройства.BinStopCode = (byte)options.GetValueAsInt(«BinStopCode»)
Код метода. Этот метод является т.н. методом расширения. То есть он написан нами, но может применяться к стандартному классу. Опции являются строками. Метод преобразует значение опции в число в данном случае. Затем преобразуем в тип byte.
22.03.2022 в 11:53 #22586MikhailМодераторКстати, попробуйте драйвер DrvTester в Администраторе — если открыть свойства устройства на линии связи, то демонстрируется универсальная форма для ввода параметров устройства. Её можно применить в своём драйвере.
- Этот ответ был изменен 2 года назад от Mikhail.
22.03.2022 в 12:56 #22588manjey73УчастникВсе равно не понимаю, метод включает словарь string, string
Первая часть ключ, вторая значение парсится в INTА мне нужен массив байт, по которому выполнить остановку а не один байт.
То есть мне не надо выполнять остановку например на байте 0x03 если перед ним нет байта скажем 0x10 а стоит какой-то другой.
Как в данном случае int.Parse может преобразовать строку в массив байт?
22.03.2022 в 14:14 #22589manjey73УчастникScadaCommon
ScadaCommНа рабочем ПК собрал данные библиотеки, но проблемы с зависимостями это не решило, файлы в bin/Release появились…
22.03.2022 в 14:21 #22590manjey73УчастникРаспаковал по новой Scada master и собралось, теперь смог открыть OpenDrivers
22.03.2022 в 16:16 #22592RomirosУчастникТребуются следующие магические действия из командной строки
Спасибо это помогло устранить ошибку с отсутствием файла, однако платформа все-равно не поддерживается. Буду искать дальше.
22.03.2022 в 16:57 #22593manjey73УчастникПредупреждение CS8618 поле «binStopCond», не допускающий значения NULL, должен содержать значение, отличное от NULL, при выходе из конструктора. Возможно, стоит объявить поле как допускающий значения NULL.
Хотя полностью повторил код, но в DevTester подобных предупреждений нет, а у меня есть.
Почему так ? в NET6 периодически про null предупреждения есть, но их нет в подобных же случаях в OpenDrivers
23.03.2022 в 09:01 #22596MikhailМодераторэто помогло устранить ошибку с отсутствием файла, однако платформа все-равно не поддерживается
Не работает на Windows?
Какое сообщение об ошибке?23.03.2022 в 09:05 #22597MikhailМодераторПредупреждение CS8618
Нужно поставить Nullable = disable. Ссылка
мне нужен массив байт, по которому выполнить остановку а не один байт
Попробуйте что-то вроде
ScadaUtils.ParseIntArray(options.GetValueAsString("BinStopCode")
Если нужен массив byte, то потребуется написать свой метод парсинга строки в массив.23.03.2022 в 09:22 #22598manjey73Участник@Mikhail я так понимаю это если использовать массив байт для остановки в настройках ?
То есть если я использую просто в коде, без использования в Options то это не так обязательно?Еще такой момент, это альтернатива Параметры линии — Пользовательские но строго под данный экземпляр драйвера?
Параметры линии — Пользовательские так же остались доступны, если мне необходимо обмениваться информацией между экземплярами в рамках одной линии?
Еще смотрю по поводу доступа к переменным через символьные представления, индексное представление осталось? Имею ввиду по индексу тега.
Пока не разобрался как на лету оперировать через символьное представление. Так же при добавлении на линию?Вот еще раз говорю, ну потратьте часок времени и опишите кратко соответствия и нововведения по каждому узлу (Коммуникатор, Сервер). А то вопросов глупых будет много с моей стороны 🙂
23.03.2022 в 09:48 #22599RomirosУчастникНе работает на 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.
23.03.2022 в 13:59 #22601MikhailМодераторSystem.PlatformNotSupportedException: System.Data.SqlClient is not supported on this platform
Похожая проблема была при работе с COM-портами.
Проверьте, если при сборке появляется папка runtimes, то её содержимое нужно скопировать в директорию, где лежит *.exe. В этой папке находятся платформенно-зависимые файлы.23.03.2022 в 14:03 #22602MikhailМодераторя так понимаю это если использовать массив байт для остановки в настройках ?
Данный пример был именно для получения массива из опций.
Еще такой момент, это альтернатива Параметры линии — Пользовательские но строго под данный экземпляр драйвера?
Теперь произвольные параметры могут быть не только у линии, но и у каждого устройства. Как просили.
Параметры линии — Пользовательские так же остались доступны, если мне необходимо обмениваться информацией между экземплярами в рамках одной линии?
Параметры — это фиксированные значения, конфигурация.
Есть ещё общие данные для обмена во время работы — LineContext.SharedDataЕще смотрю по поводу доступа к переменным через символьные представления, индексное представление осталось?
Да, можно по индексу (быстрее), можно по наименованию (чуть медленнее).
Пока не разобрался как на лету оперировать через символьное представление. Так же при добавлении на линию?
Если речь о работе с тегами, то пример в DrvSimulator.
Вот еще раз говорю, ну потратьте часок времени и опишите кратко соответствия и нововведения по каждому узлу (Коммуникатор, Сервер).
Я бы никогда не догадался, какие вопросы возникнут. Поэтому спрашивайте, ответить не проблема.
23.03.2022 в 14:44 #22603RomirosУчастникПроверьте, если при сборке появляется папка runtimes, то её содержимое нужно скопировать в директорию, где лежит *.exe. В этой папке находятся платформенно-зависимые файлы.
Спасибо большое, помогло. Действительно, файлы нужно копировать из папки конкретной платформы, иначе будет ошибка.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.