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