From 858ce94bbb9cb6f44ab7504c875763bd2b95eb54 Mon Sep 17 00:00:00 2001 From: iioter <535915157@qq.com> Date: Wed, 10 Aug 2022 16:55:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8D=8E=E4=B8=BARoma?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20220810063014_mqttClientId.Designer.cs | 856 ++++++++ .../Migrations/20220810063014_mqttClientId.cs | 25 + .../Migrations/DataContextModelSnapshot.cs | 3 + IoTGateway.Model/SystemConfig.cs | 4 + .../DeviceConfigVMs/DeviceConfigListVM.cs | 4 +- .../BasicData/DeviceVMs/DeviceVM.cs | 18 +- .../DeviceVariableVMs/DeviceVariableListVM.cs | 6 +- .../BasicData/DeviceVariableVMs/SetValueVM.cs | 4 +- .../SystemConfigVMs/SystemConfigListVM.cs | 2 + .../Config/Views/SystemConfig/Edit.cshtml | 1 + IoTGateway/Controllers/HomeController.cs | 12 +- IoTGateway/iotgateway.db | Bin 311296 -> 311296 bytes Plugins/Plugin/ConnnectSettingsMode.cs | 17 +- Plugins/Plugin/DeviceService.cs | 124 +- Plugins/Plugin/DeviceThread.cs | 174 +- Plugins/Plugin/DriverInfo.cs | 11 +- Plugins/Plugin/DrvierService.cs | 164 +- Plugins/Plugin/IoTBackgroundService.cs | 26 +- Plugins/Plugin/ModbusSlaveService.cs | 49 +- Plugins/Plugin/MyMqttClient.cs | 828 +++++--- .../Plugin/UA.Server/ReferenceNodeManager.cs | 1786 ++++++++++++----- Plugins/Plugin/UAService.cs | 10 +- .../HuaWeiRoma/HwAddDeviceDto.cs | 49 + .../HuaWeiRoma/HwDeleteDeviceDto.cs | 52 + .../HuaWeiRoma/HwDeviceOnOffLine.cs | 34 + .../PluginInterface/HuaWeiRoma/HwTelemetry.cs | 27 + Plugins/PluginInterface/IDriver.cs | 2 +- Plugins/PluginInterface/RpcRequest.cs | 2 +- 28 files changed, 3129 insertions(+), 1161 deletions(-) create mode 100644 IoTGateway.DataAccess/Migrations/20220810063014_mqttClientId.Designer.cs create mode 100644 IoTGateway.DataAccess/Migrations/20220810063014_mqttClientId.cs create mode 100644 Plugins/PluginInterface/HuaWeiRoma/HwAddDeviceDto.cs create mode 100644 Plugins/PluginInterface/HuaWeiRoma/HwDeleteDeviceDto.cs create mode 100644 Plugins/PluginInterface/HuaWeiRoma/HwDeviceOnOffLine.cs create mode 100644 Plugins/PluginInterface/HuaWeiRoma/HwTelemetry.cs diff --git a/IoTGateway.DataAccess/Migrations/20220810063014_mqttClientId.Designer.cs b/IoTGateway.DataAccess/Migrations/20220810063014_mqttClientId.Designer.cs new file mode 100644 index 0000000..3296825 --- /dev/null +++ b/IoTGateway.DataAccess/Migrations/20220810063014_mqttClientId.Designer.cs @@ -0,0 +1,856 @@ +// +using System; +using IoTGateway.DataAccess; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace IoTGateway.DataAccess.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20220810063014_mqttClientId")] + partial class mqttClientId + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "6.0.1"); + + modelBuilder.Entity("IoTGateway.Model.Device", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AutoStart") + .HasColumnType("INTEGER"); + + b.Property("CgUpload") + .HasColumnType("INTEGER"); + + b.Property("CreateBy") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("DeviceName") + .HasColumnType("TEXT"); + + b.Property("DeviceTypeEnum") + .HasColumnType("INTEGER"); + + b.Property("DriverId") + .HasColumnType("TEXT"); + + b.Property("EnforcePeriod") + .HasColumnType("INTEGER"); + + b.Property("Index") + .HasColumnType("INTEGER"); + + b.Property("ParentId") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("DriverId"); + + b.HasIndex("ParentId"); + + b.ToTable("Devices"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceConfig", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("DataSide") + .HasColumnType("INTEGER"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("DeviceConfigName") + .HasColumnType("TEXT"); + + b.Property("DeviceId") + .HasColumnType("TEXT"); + + b.Property("EnumInfo") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("Value") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("DeviceId"); + + b.ToTable("DeviceConfigs"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceVariable", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DataType") + .HasColumnType("INTEGER"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("DeviceAddress") + .HasColumnType("TEXT"); + + b.Property("DeviceId") + .HasColumnType("TEXT"); + + b.Property("Expressions") + .HasColumnType("TEXT"); + + b.Property("Method") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ProtectType") + .HasColumnType("INTEGER"); + + b.HasKey("ID"); + + b.HasIndex("DeviceId"); + + b.ToTable("DeviceVariables"); + }); + + modelBuilder.Entity("IoTGateway.Model.Driver", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AssembleName") + .HasColumnType("TEXT"); + + b.Property("AuthorizesNum") + .HasColumnType("INTEGER"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("DriverName") + .HasColumnType("TEXT"); + + b.Property("FileName") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("Drivers"); + }); + + modelBuilder.Entity("IoTGateway.Model.RpcLog", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("DeviceId") + .HasColumnType("TEXT"); + + b.Property("EndTime") + .HasColumnType("TEXT"); + + b.Property("IsSuccess") + .HasColumnType("INTEGER"); + + b.Property("Method") + .HasColumnType("TEXT"); + + b.Property("Params") + .HasColumnType("TEXT"); + + b.Property("RpcSide") + .HasColumnType("INTEGER"); + + b.Property("StartTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("DeviceId"); + + b.ToTable("RpcLogs"); + }); + + modelBuilder.Entity("IoTGateway.Model.SystemConfig", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ClientId") + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("GatewayName") + .HasColumnType("TEXT"); + + b.Property("IoTPlatformType") + .HasColumnType("INTEGER"); + + b.Property("MqttIp") + .HasColumnType("TEXT"); + + b.Property("MqttPort") + .HasColumnType("INTEGER"); + + b.Property("MqttUName") + .HasColumnType("TEXT"); + + b.Property("MqttUPwd") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("SystemConfig"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.ActionLog", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ActionName") + .HasMaxLength(255) + .HasColumnType("TEXT"); + + b.Property("ActionTime") + .HasColumnType("TEXT"); + + b.Property("ActionUrl") + .HasMaxLength(250) + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Duration") + .HasColumnType("REAL"); + + b.Property("IP") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("ITCode") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("LogType") + .HasColumnType("INTEGER"); + + b.Property("ModuleName") + .HasMaxLength(255) + .HasColumnType("TEXT"); + + b.Property("Remark") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("ActionLogs"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.DataPrivilege", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Domain") + .HasColumnType("TEXT"); + + b.Property("GroupCode") + .HasColumnType("TEXT"); + + b.Property("RelateId") + .HasColumnType("TEXT"); + + b.Property("TableName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UserCode") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("DataPrivileges"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FileAttachment", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ExtraInfo") + .HasColumnType("TEXT"); + + b.Property("FileData") + .HasColumnType("BLOB"); + + b.Property("FileExt") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("TEXT"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HandlerInfo") + .HasColumnType("TEXT"); + + b.Property("Length") + .HasColumnType("INTEGER"); + + b.Property("Path") + .HasColumnType("TEXT"); + + b.Property("SaveMode") + .HasColumnType("TEXT"); + + b.Property("UploadTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FileAttachments"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkGroup", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("GroupCode") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("GroupRemark") + .HasColumnType("TEXT"); + + b.Property("TenantCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkGroups"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkMenu", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ActionName") + .HasColumnType("TEXT"); + + b.Property("ClassName") + .HasColumnType("TEXT"); + + b.Property("DisplayOrder") + .IsRequired() + .HasColumnType("INTEGER"); + + b.Property("Domain") + .HasColumnType("TEXT"); + + b.Property("FolderOnly") + .HasColumnType("INTEGER"); + + b.Property("Icon") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("IsInherit") + .HasColumnType("INTEGER"); + + b.Property("IsInside") + .IsRequired() + .HasColumnType("INTEGER"); + + b.Property("IsPublic") + .HasColumnType("INTEGER"); + + b.Property("MethodName") + .HasColumnType("TEXT"); + + b.Property("ModuleName") + .HasColumnType("TEXT"); + + b.Property("PageName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("ParentId") + .HasColumnType("TEXT"); + + b.Property("ShowOnMenu") + .HasColumnType("INTEGER"); + + b.Property("Url") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("ParentId"); + + b.ToTable("FrameworkMenus"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkRole", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("RoleCode") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("RoleRemark") + .HasColumnType("TEXT"); + + b.Property("TenantCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkRoles"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUser", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Address") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("CellPhone") + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Email") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Gender") + .HasColumnType("INTEGER"); + + b.Property("HomePhone") + .HasMaxLength(30) + .HasColumnType("TEXT"); + + b.Property("ITCode") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("IsValid") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("TEXT"); + + b.Property("PhotoId") + .HasColumnType("TEXT"); + + b.Property("TenantCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("ZipCode") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("PhotoId"); + + b.ToTable("FrameworkUsers"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUserGroup", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("GroupCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkUserGroups"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUserRole", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("RoleCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkUserRoles"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FunctionPrivilege", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Allowed") + .IsRequired() + .HasColumnType("INTEGER"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("MenuItemId") + .HasColumnType("TEXT"); + + b.Property("RoleCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("MenuItemId"); + + b.ToTable("FunctionPrivileges"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.PersistedGrant", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreationTime") + .HasColumnType("TEXT"); + + b.Property("Expiration") + .HasColumnType("TEXT"); + + b.Property("RefreshToken") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UserCode") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("PersistedGrants"); + }); + + modelBuilder.Entity("IoTGateway.Model.Device", b => + { + b.HasOne("IoTGateway.Model.Driver", "Driver") + .WithMany() + .HasForeignKey("DriverId"); + + b.HasOne("IoTGateway.Model.Device", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId"); + + b.Navigation("Driver"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceConfig", b => + { + b.HasOne("IoTGateway.Model.Device", "Device") + .WithMany("DeviceConfigs") + .HasForeignKey("DeviceId"); + + b.Navigation("Device"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceVariable", b => + { + b.HasOne("IoTGateway.Model.Device", "Device") + .WithMany("DeviceVariables") + .HasForeignKey("DeviceId"); + + b.Navigation("Device"); + }); + + modelBuilder.Entity("IoTGateway.Model.RpcLog", b => + { + b.HasOne("IoTGateway.Model.Device", "Device") + .WithMany() + .HasForeignKey("DeviceId"); + + b.Navigation("Device"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkMenu", b => + { + b.HasOne("WalkingTec.Mvvm.Core.FrameworkMenu", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUser", b => + { + b.HasOne("WalkingTec.Mvvm.Core.FileAttachment", "Photo") + .WithMany() + .HasForeignKey("PhotoId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Photo"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FunctionPrivilege", b => + { + b.HasOne("WalkingTec.Mvvm.Core.FrameworkMenu", "MenuItem") + .WithMany("Privileges") + .HasForeignKey("MenuItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MenuItem"); + }); + + modelBuilder.Entity("IoTGateway.Model.Device", b => + { + b.Navigation("Children"); + + b.Navigation("DeviceConfigs"); + + b.Navigation("DeviceVariables"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkMenu", b => + { + b.Navigation("Children"); + + b.Navigation("Privileges"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/IoTGateway.DataAccess/Migrations/20220810063014_mqttClientId.cs b/IoTGateway.DataAccess/Migrations/20220810063014_mqttClientId.cs new file mode 100644 index 0000000..24cea47 --- /dev/null +++ b/IoTGateway.DataAccess/Migrations/20220810063014_mqttClientId.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace IoTGateway.DataAccess.Migrations +{ + public partial class mqttClientId : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "ClientId", + table: "SystemConfig", + type: "TEXT", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "ClientId", + table: "SystemConfig"); + } + } +} diff --git a/IoTGateway.DataAccess/Migrations/DataContextModelSnapshot.cs b/IoTGateway.DataAccess/Migrations/DataContextModelSnapshot.cs index 38d417e..b1a73d3 100644 --- a/IoTGateway.DataAccess/Migrations/DataContextModelSnapshot.cs +++ b/IoTGateway.DataAccess/Migrations/DataContextModelSnapshot.cs @@ -233,6 +233,9 @@ namespace IoTGateway.DataAccess.Migrations .ValueGeneratedOnAdd() .HasColumnType("TEXT"); + b.Property("ClientId") + .HasColumnType("TEXT"); + b.Property("CreateBy") .HasMaxLength(50) .HasColumnType("TEXT"); diff --git a/IoTGateway.Model/SystemConfig.cs b/IoTGateway.Model/SystemConfig.cs index b6e3dad..bc7b767 100644 --- a/IoTGateway.Model/SystemConfig.cs +++ b/IoTGateway.Model/SystemConfig.cs @@ -7,6 +7,8 @@ namespace IoTGateway.Model { [Display(Name = "网关名称")] public string GatewayName { get; set; } + [Display(Name = "ClientId")] + public string ClientId { get; set; } [Display(Name = "Mqtt服务器")] public string MqttIp { get; set; } [Display(Name = "Mqtt端口")] @@ -34,6 +36,8 @@ namespace IoTGateway.Model OneNET = 5, [Display(Name = "ThingsCloud")] ThingsCloud = 6, + [Display(Name = "华为云")] + HuaWei = 7, [Display(Name = "IotDB")] IotDB = 99 } diff --git a/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs index b273ad5..26aaab9 100644 --- a/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs +++ b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs @@ -40,9 +40,9 @@ namespace IoTGateway.ViewModel.BasicData.DeviceConfigVMs { foreach (var item in device.Children) { - var deviceThread = deviceService.DeviceThreads.Where(x => x._device.ID.ToString() == (string)item.Value).FirstOrDefault(); + var deviceThread = deviceService.DeviceThreads.Where(x => x.Device.ID.ToString() == (string)item.Value).FirstOrDefault(); if (deviceThread != null) - item.Icon = deviceThread._device.AutoStart ? (deviceThread._driver.IsConnected ? "layui-icon layui-icon-link" : "layui-icon layui-icon-unlink") : "layui-icon layui-icon-pause"; + item.Icon = deviceThread.Device.AutoStart ? (deviceThread.Driver.IsConnected ? "layui-icon layui-icon-link" : "layui-icon layui-icon-unlink") : "layui-icon layui-icon-pause"; item.Text = " "+item.Text; item.Expended = true; diff --git a/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceVM.cs index fb7a6dd..80be40c 100644 --- a/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceVM.cs +++ b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceVM.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; -using System.ComponentModel.DataAnnotations; using WalkingTec.Mvvm.Core; using WalkingTec.Mvvm.Core.Extensions; using IoTGateway.Model; @@ -37,9 +35,12 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVMs if (this.Entity.DeviceTypeEnum == DeviceTypeEnum.Device) { var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; - deviceService._DrvierManager.AddConfigs(this.Entity.ID, this.Entity.DriverId); - var dap = DC.Set().Where(x => x.ID == Entity.ID).Include(x=>x.Parent).Include(x => x.Driver).SingleOrDefault(); - deviceService.CreateDeviceThread(dap); + deviceService.DrvierManager.AddConfigs(this.Entity.ID, this.Entity.DriverId); + var device = DC.Set().Where(x => x.ID == Entity.ID).Include(x=>x.Parent).Include(x => x.Driver).SingleOrDefault(); + deviceService.CreateDeviceThread(device); + + var myMqttClient = Wtm.ServiceProvider.GetService(typeof(MyMqttClient)) as MyMqttClient; + myMqttClient.DeviceAdded(device); } } catch (Exception ex) @@ -63,7 +64,14 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVMs var pluginManager = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; var ret = DeleteDevices.doDelete(pluginManager, DC, Ids); if (!ret.IsSuccess) + { MSD.AddModelError("", ret.Message); + return; + } + + var myMqttClient = Wtm.ServiceProvider.GetService(typeof(MyMqttClient)) as MyMqttClient; + myMqttClient.DeviceDeleted(Entity); + } public override DuplicatedInfo SetDuplicatedCheck() { diff --git a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs index 73146e9..3d655b9 100644 --- a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs +++ b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs @@ -45,9 +45,9 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs { foreach (var item in device.Children) { - var deviceThread = deviceService.DeviceThreads.Where(x => x._device.ID.ToString() == (string)item.Value).FirstOrDefault(); + var deviceThread = deviceService.DeviceThreads.Where(x => x.Device.ID.ToString() == (string)item.Value).FirstOrDefault(); if (deviceThread != null) - item.Icon = deviceThread._device.AutoStart ? (deviceThread._driver.IsConnected ? "layui-icon layui-icon-link" : "layui-icon layui-icon-unlink") : "layui-icon layui-icon-pause"; + item.Icon = deviceThread.Device.AutoStart ? (deviceThread.Driver.IsConnected ? "layui-icon layui-icon-link" : "layui-icon layui-icon-unlink") : "layui-icon layui-icon-pause"; item.Text = " " + item.Text; item.Expended = true; @@ -95,7 +95,7 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; foreach (var item in EntityList) { - var DapThread = deviceService.DeviceThreads.Where(x => x._device.ID == item.DeviceId).FirstOrDefault(); + var DapThread = deviceService.DeviceThreads.Where(x => x.Device.ID == item.DeviceId).FirstOrDefault(); if (DapThread?.DeviceValues != null && DapThread.DeviceValues.ContainsKey(item.ID)) { item.Value = DapThread?.DeviceValues[item.ID]?.Value?.ToString(); diff --git a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/SetValueVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/SetValueVM.cs index 684d541..4724a0d 100644 --- a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/SetValueVM.cs +++ b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/SetValueVM.cs @@ -31,7 +31,7 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs 类型 = variable.DataType.GetEnumDisplayName(); var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; - var dapThread = deviceService.DeviceThreads.Where(x => x._device.ID == variable.DeviceId).FirstOrDefault(); + var dapThread = deviceService.DeviceThreads.Where(x => x.Device.ID == variable.DeviceId).FirstOrDefault(); if (dapThread?.DeviceValues != null && dapThread.DeviceValues.ContainsKey(variable.ID)) { @@ -71,7 +71,7 @@ namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs 类型 = variable.DataType.GetEnumDisplayName(); var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; - var dapThread = deviceService.DeviceThreads.Where(x => x._device.ID == variable.DeviceId).FirstOrDefault(); + var dapThread = deviceService.DeviceThreads.Where(x => x.Device.ID == variable.DeviceId).FirstOrDefault(); if (dapThread?.DeviceValues != null && dapThread.DeviceValues.ContainsKey(variable.ID)) { diff --git a/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigListVM.cs b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigListVM.cs index bbdac64..993b32a 100644 --- a/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigListVM.cs +++ b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigListVM.cs @@ -33,6 +33,7 @@ namespace IoTGateway.ViewModel.Config.SystemConfigVMs { return new List>{ this.MakeGridHeader(x => x.GatewayName), + this.MakeGridHeader(x => x.ClientId), this.MakeGridHeader(x => x.IoTPlatformType), this.MakeGridHeader(x => x.MqttIp), this.MakeGridHeader(x => x.MqttPort), @@ -49,6 +50,7 @@ namespace IoTGateway.ViewModel.Config.SystemConfigVMs { ID = x.ID, GatewayName = x.GatewayName, + ClientId = x.ClientId, MqttIp = x.MqttIp, MqttPort = x.MqttPort, MqttUName = x.MqttUName, diff --git a/IoTGateway/Areas/Config/Views/SystemConfig/Edit.cshtml b/IoTGateway/Areas/Config/Views/SystemConfig/Edit.cshtml index 7715405..5d5e37f 100644 --- a/IoTGateway/Areas/Config/Views/SystemConfig/Edit.cshtml +++ b/IoTGateway/Areas/Config/Views/SystemConfig/Edit.cshtml @@ -5,6 +5,7 @@ 注意:目前实现了iotsharp、thingsboard、thingscloud、iotdb的遥测、属性上传以及RPC功能 + diff --git a/IoTGateway/Controllers/HomeController.cs b/IoTGateway/Controllers/HomeController.cs index a916b0d..5d8a025 100644 --- a/IoTGateway/Controllers/HomeController.cs +++ b/IoTGateway/Controllers/HomeController.cs @@ -53,21 +53,21 @@ namespace IoTGateway.Controllers data.Add(new ChartData { - Value = _deviceService.DeviceThreads.Where(x => !x._device.AutoStart).Count(), + Value = _deviceService.DeviceThreads.Where(x => !x.Device.AutoStart).Count(), Category = "停止", Series = "Device" }); data.Add(new ChartData { - Value = _deviceService.DeviceThreads.Where(x => x._device.AutoStart && x._driver.IsConnected).Count(), + Value = _deviceService.DeviceThreads.Where(x => x.Device.AutoStart && x.Driver.IsConnected).Count(), Category = "运行", Series = "Device", }); data.Add(new ChartData { - Value = _deviceService.DeviceThreads.Where(x => x._device.AutoStart && !x._driver.IsConnected).Count(), + Value = _deviceService.DeviceThreads.Where(x => x.Device.AutoStart && !x.Driver.IsConnected).Count(), Category = "异常", Series = "Device" }); @@ -78,18 +78,18 @@ namespace IoTGateway.Controllers public IActionResult GetDeviceVariableChart() { var data = new List(); - foreach (var deviceThread in _deviceService.DeviceThreads.OrderBy(x => x._device.DeviceName)) + foreach (var deviceThread in _deviceService.DeviceThreads.OrderBy(x => x.Device.DeviceName)) { data.Add(new ChartData { - Category = deviceThread._device.DeviceName, + Category = deviceThread.Device.DeviceName, Value = deviceThread.DeviceValues.Where(x => x.Value.StatusType != VaribaleStatusTypeEnum.Good).Count(), Series = "Others" }); data.Add(new ChartData { - Category = deviceThread._device.DeviceName, + Category = deviceThread.Device.DeviceName, Value = deviceThread.DeviceValues.Where(x => x.Value.StatusType == VaribaleStatusTypeEnum.Good).Count(), Series = "Good" }); diff --git a/IoTGateway/iotgateway.db b/IoTGateway/iotgateway.db index ee2c33f329dcc96d7db6fbe3fac8e4c7ebe1268d..f66e24bd9345e10f51af4782a4e21bf5daace2ae 100644 GIT binary patch delta 325 zcmZo@5N>D?o**r#!N9=a1H|4y%m&1&6LpMPH5l~#Yd5AW;1}WG`^>=qg#RG_0{%Mw zSbjTx3BJ#p6%}stX(@9sJBu3`7#SH@7#bLu85oZY$<-ulOl=F8mn~pX002b?SGWKG delta 224 zcmZo@5N>D?o**r#&cMLn1H|4y%m&0N6LpMP)fx1xKWlO6PBCR@s%2CA}Q;D5z`hJOS9Wd3rXIvb!WHU4HB{p~jT zjHd*|J~Hqh=F8{P;JL{&g*%H|oB0#hCx(yHWgHmyPc~2x+rGkyk%^hpM4Vk*Rh6+# zd;3!d#x;!FSGY39d9lPY@W%p;^W>M@0CXP&G%7IigeuE3=_)#lJBxEnkDJdprELLY P+XAMx1 _logger; - public DriverService _DrvierManager; + public DriverService DrvierManager; public List DeviceThreads = new List(); - private MyMqttClient _MyMqttClient; - private IMqttServer _MqttServer; - private string connnectSetting = IoTBackgroundService.connnectSetting; - private DBTypeEnum DBType = IoTBackgroundService.DBType; - public DeviceService(IConfiguration ConfigRoot, DriverService drvierManager, MyMqttClient myMqttClient, UAService uAService, IMqttServer mqttServer, ILogger logger) + private readonly MyMqttClient _myMqttClient; + private readonly UAService _uAService; + private readonly IMqttServer _mqttServer; + private readonly string _connnectSetting = IoTBackgroundService.connnectSetting; + private readonly DBTypeEnum _dbType = IoTBackgroundService.DbType; + + public DeviceService(IConfiguration configRoot, DriverService drvierManager, MyMqttClient myMqttClient, + UAService uAService, IMqttServer mqttServer, ILogger logger) { + if (mqttServer == null) throw new ArgumentNullException(nameof(mqttServer)); _logger = logger; - _DrvierManager = drvierManager; - _MyMqttClient = myMqttClient; - _MqttServer = mqttServer; + DrvierManager = drvierManager; + _myMqttClient = myMqttClient; + _uAService = uAService; + _mqttServer = mqttServer ?? throw new ArgumentNullException(nameof(mqttServer)); try { - using (var DC = new DataContext(connnectSetting, DBType)) + using (var dc = new DataContext(_connnectSetting, _dbType)) { - var Devices = DC.Set().Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Device).Include(x => x.Parent).Include(x => x.Driver).Include(x => x.DeviceConfigs).Include(x => x.DeviceVariables).AsNoTracking().ToList(); - _logger.LogInformation($"Loaded Devices Count:{Devices.Count()}"); - foreach (var Device in Devices) + var devices = dc.Set().Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Device) + .Include(x => x.Parent).Include(x => x.Driver).Include(x => x.DeviceConfigs) + .Include(x => x.DeviceVariables).AsNoTracking().ToList(); + _logger.LogInformation($"Loaded Devices Count:{devices.Count()}"); + foreach (var device in devices) { - CreateDeviceThread(Device); + CreateDeviceThread(device); } } } catch (Exception ex) { - _logger.LogError($"LoadDevicesError", ex); } } @@ -61,7 +65,6 @@ namespace Plugin { _logger.LogError($"UpdateDevice Error:{device.DeviceName}", ex); } - } public void UpdateDevices(List devices) @@ -70,31 +73,33 @@ namespace Plugin UpdateDevice(device); } - public void CreateDeviceThread(Device Device) + public void CreateDeviceThread(Device device) { try { - _logger.LogInformation($"CreateDeviceThread Start:{Device.DeviceName}"); - using (var DC = new DataContext(connnectSetting, DBType)) + _logger.LogInformation($"CreateDeviceThread Start:{device.DeviceName}"); + using (var dc = new DataContext(_connnectSetting, _dbType)) { - var systemManage = DC.Set().FirstOrDefault(); - var driver = _DrvierManager.DriverInfos.Where(x => x.Type.FullName == Device.Driver.AssembleName).SingleOrDefault(); + var systemManage = dc.Set().FirstOrDefault(); + var driver = DrvierManager.DriverInfos + .SingleOrDefault(x => x.Type.FullName == device.Driver.AssembleName); if (driver == null) - _logger.LogError($"找不到设备:[{Device.DeviceName}]的驱动:[{Device.Driver.AssembleName}]"); + _logger.LogError($"找不到设备:[{device.DeviceName}]的驱动:[{device.Driver.AssembleName}]"); else { - var settings = DC.Set().Where(x => x.DeviceId == Device.ID).AsNoTracking().ToList(); + var settings = dc.Set().Where(x => x.DeviceId == device.ID).AsNoTracking() + .ToList(); - Type[] types = new Type[2] { typeof(string) ,typeof(ILogger) }; - object[] param = new object[2] { Device.DeviceName , _logger }; + Type[] types = new Type[] { typeof(string), typeof(ILogger) }; + object[] param = new object[] { device.DeviceName, _logger }; - ConstructorInfo constructor = driver.Type.GetConstructor(types); - var DeviceObj = constructor.Invoke(param) as IDriver; + ConstructorInfo? constructor = driver.Type.GetConstructor(types); + var deviceObj = constructor?.Invoke(param) as IDriver; foreach (var p in driver.Type.GetProperties()) { var config = p.GetCustomAttribute(typeof(ConfigParameterAttribute)); - var setting = settings.Where(x => x.DeviceConfigName == p.Name).FirstOrDefault(); + var setting = settings.FirstOrDefault(x => x.DeviceConfigName == p.Name); if (config == null || setting == null) continue; @@ -135,24 +140,25 @@ namespace Plugin else if (p.PropertyType.BaseType == typeof(Enum)) value = Enum.Parse(p.PropertyType, setting.Value); - p.SetValue(DeviceObj, value); + p.SetValue(deviceObj, value); } - var deviceThread = new DeviceThread(Device, DeviceObj, systemManage.GatewayName, _MyMqttClient, _MqttServer, _logger); - DeviceThreads.Add(deviceThread); + if (deviceObj != null && systemManage != null) + { + var deviceThread = new DeviceThread(device, deviceObj, systemManage.GatewayName, + _myMqttClient, + _mqttServer, _logger); + DeviceThreads.Add(deviceThread); + } } - - } - _logger.LogInformation($"CreateDeviceThread End:{Device.DeviceName}"); + _logger.LogInformation($"CreateDeviceThread End:{device.DeviceName}"); } catch (Exception ex) { - _logger.LogInformation($"CreateDeviceThread Error:{Device.DeviceName}", ex); - + _logger.LogInformation($"CreateDeviceThread Error:{device.DeviceName}", ex); } - } public void CreateDeviceThreads(List devices) @@ -163,15 +169,12 @@ namespace Plugin public void RemoveDeviceThread(Device devices) { - if (devices != null) + var deviceThread = DeviceThreads.FirstOrDefault(x => x.Device.ID == devices.ID); + if (deviceThread != null) { - var DeviceThread = DeviceThreads.Where(x => x._device.ID == devices.ID).FirstOrDefault(); - if (DeviceThread != null) - { - DeviceThread.StopThread(); - DeviceThread.Dispose(); - DeviceThreads.Remove(DeviceThread); - } + deviceThread.StopThread(); + deviceThread.Dispose(); + DeviceThreads.Remove(deviceThread); } } @@ -187,26 +190,29 @@ namespace Plugin try { _logger.LogInformation($"GetDriverMethods Start:{deviceId}"); - foreach (var method in DeviceThreads.Where(x => x._device.ID == deviceId).FirstOrDefault()?.Methods) - { - var Attribute = method.CustomAttributes.ToList().FirstOrDefault().ConstructorArguments; - var item = new ComboSelectListItem + var methodInfos = DeviceThreads.FirstOrDefault(x => x.Device.ID == deviceId)?.Methods; + if (methodInfos != null) + foreach (var method in methodInfos) { - Text = method.Name, - Value = method.Name, - }; - driverFilesComboSelect.Add(item); - } + var attribute = method.CustomAttributes.ToList().FirstOrDefault()?.ConstructorArguments; + var item = new ComboSelectListItem + { + Text = method.Name, + Value = method.Name, + }; + driverFilesComboSelect.Add(item); + } + _logger.LogInformation($"GetDriverMethods End:{deviceId}"); } catch (Exception ex) { - - _logger.LogInformation($"GetDriverMethods Error:{deviceId}"); + _logger.LogError($"GetDriverMethods Error:{deviceId}", ex); } return driverFilesComboSelect; } + public void Dispose() { _logger.LogInformation("Dispose"); @@ -222,4 +228,4 @@ namespace Plugin return Task.CompletedTask; } } -} +} \ No newline at end of file diff --git a/Plugins/Plugin/DeviceThread.cs b/Plugins/Plugin/DeviceThread.cs index 7c85252..2c99d72 100644 --- a/Plugins/Plugin/DeviceThread.cs +++ b/Plugins/Plugin/DeviceThread.cs @@ -12,51 +12,55 @@ namespace Plugin public class DeviceThread : IDisposable { private readonly ILogger _logger; - public readonly Device _device; - public readonly IDriver _driver; - private readonly MyMqttClient _myMqttClient; - private Interpreter _interpreter ; + public readonly Device Device; + public readonly IDriver Driver; + private readonly string _projectId; + private readonly MyMqttClient? _myMqttClient; + private Interpreter? _interpreter; public Dictionary DeviceValues { get; set; } = new(); - internal List Methods { get; set; } - private Task task { get; set; } = null; - private DateTime TsStartDt = new DateTime(1970, 1, 1); - private CancellationTokenSource tokenSource = new CancellationTokenSource(); - private object _lock = new object(); - private bool lastConnected = false; - public DeviceThread(Device device, IDriver driver, string ProjectId, MyMqttClient myMqttClient, IMqttServer mqttServer, ILogger logger) + internal List? Methods { get; set; } + private Task? _task; + private readonly DateTime _tsStartDt = new(1970, 1, 1); + private readonly CancellationTokenSource _tokenSource = new CancellationTokenSource(); + private readonly object _lock = new(); + private bool _lastConnected; + + public DeviceThread(Device device, IDriver driver, string projectId, MyMqttClient myMqttClient, + IMqttServer mqttServer, ILogger logger) { _myMqttClient = myMqttClient; _myMqttClient.OnExcRpc += MyMqttClient_OnExcRpc; - _device = device; - _driver = driver; + Device = device; + Driver = driver; + _projectId = projectId; _interpreter = new Interpreter(); _logger = logger; - Methods = _driver.GetType().GetMethods().Where(x => x.GetCustomAttribute(typeof(MethodAttribute)) != null).ToList(); - if (_device.AutoStart) + Methods = Driver.GetType().GetMethods().Where(x => x.GetCustomAttribute(typeof(MethodAttribute)) != null) + .ToList(); + if (Device.AutoStart) { - _logger.LogInformation($"线程已启动:{_device.DeviceName}"); + _logger.LogInformation($"线程已启动:{Device.DeviceName}"); - using (var DC = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DBType)) + if (Device.DeviceVariables != null) { - if (_device.DeviceVariables != null) + foreach (var item in Device.DeviceVariables) { - foreach (var item in _device.DeviceVariables) - { - DeviceValues[item.ID] = new() { StatusType = VaribaleStatusTypeEnum.Bad }; - } + DeviceValues[item.ID] = new() { StatusType = VaribaleStatusTypeEnum.Bad }; } } - task = Task.Run(() => + _task = Task.Run(() => { - Thread.Sleep(5000);//上传客户端属性 - myMqttClient.UploadAttributeAsync(device.DeviceName, device.DeviceConfigs.Where(x => x.DataSide == DataSide.ClientSide).ToDictionary(x => x.DeviceConfigName, x => x.Value)); + Thread.Sleep(5000); //上传客户端属性 + myMqttClient.UploadAttributeAsync(device.DeviceName, + device.DeviceConfigs.Where(x => x.DataSide == DataSide.ClientSide) + .ToDictionary(x => x.DeviceConfigName, x => x.Value)); while (true) { - if (tokenSource.IsCancellationRequested) + if (_tokenSource.IsCancellationRequested) { - _logger.LogInformation($"停止线程:{_device.DeviceName}"); + _logger.LogInformation($"停止线程:{Device.DeviceName}"); return; } @@ -64,15 +68,15 @@ namespace Plugin { try { - Dictionary> sendModel = new() { { _device.DeviceName, new() } }; + Dictionary> sendModel = new() { { Device.DeviceName, new() } }; var payLoad = new PayLoad() { Values = new() }; if (driver.IsConnected) { - if (_device.DeviceVariables != null) + if (Device.DeviceVariables != null) { - foreach (var item in _device.DeviceVariables) + foreach (var item in Device.DeviceVariables) { var ret = new DriverReturnValueModel(); var ioarg = new DriverAddressIoArgModel @@ -85,13 +89,16 @@ namespace Plugin if (method == null) ret.StatusType = VaribaleStatusTypeEnum.MethodError; else - ret = (DriverReturnValueModel)method.Invoke(_driver, new object[1] { ioarg }); + ret = (DriverReturnValueModel)method.Invoke(Driver, + new object[] { ioarg })!; - if (ret.StatusType == VaribaleStatusTypeEnum.Good && !string.IsNullOrWhiteSpace(item.Expressions?.Trim())) + if (ret.StatusType == VaribaleStatusTypeEnum.Good && + !string.IsNullOrWhiteSpace(item.Expressions?.Trim())) { try { - ret.CookedValue = _interpreter.Eval(DealMysqlStr(item.Expressions).Replace("raw", ret.Value?.ToString())); + ret.CookedValue = _interpreter.Eval(DealMysqlStr(item.Expressions) + .Replace("raw", ret.Value.ToString())); } catch (Exception) { @@ -106,18 +113,25 @@ namespace Plugin ret.VarId = item.ID; //变化了才推送到mqttserver,用于前端展示 - if (DeviceValues[item.ID].StatusType != ret.StatusType || DeviceValues[item.ID].Value?.ToString() != ret.Value?.ToString() || DeviceValues[item.ID].CookedValue?.ToString() != ret.CookedValue?.ToString()) + if (DeviceValues[item.ID].StatusType != ret.StatusType || + DeviceValues[item.ID].Value?.ToString() != ret.Value.ToString() || + DeviceValues[item.ID].CookedValue.ToString() != + ret.CookedValue.ToString()) { //这是设备变量列表要用的 - mqttServer.PublishAsync($"internal/v1/gateway/telemetry/{_device.DeviceName}/{item.Name}", JsonConvert.SerializeObject(ret)); + mqttServer.PublishAsync( + $"internal/v1/gateway/telemetry/{Device.DeviceName}/{item.Name}", + JsonConvert.SerializeObject(ret)); //这是在线组态要用的 - mqttServer.PublishAsync($"v1/gateway/telemetry/{_device.DeviceName}/{item.Name}", JsonConvert.SerializeObject(ret.CookedValue)); + mqttServer.PublishAsync( + $"v1/gateway/telemetry/{Device.DeviceName}/{item.Name}", + JsonConvert.SerializeObject(ret.CookedValue)); } DeviceValues[item.ID] = ret; - } - payLoad.TS = (long)(DateTime.UtcNow - TsStartDt).TotalMilliseconds; + + payLoad.TS = (long)(DateTime.UtcNow - _tsStartDt).TotalMilliseconds; if (DeviceValues.Any(x => x.Value.Value == null)) { @@ -127,74 +141,75 @@ namespace Plugin else { payLoad.DeviceStatus = DeviceStatusTypeEnum.Good; - sendModel[_device.DeviceName] = new List { payLoad }; - myMqttClient.PublishTelemetry(_device, sendModel); + sendModel[Device.DeviceName] = new List { payLoad }; + myMqttClient.PublishTelemetryAsync(Device, sendModel); } } - } else { if (driver.Connect()) { - lastConnected = true; - _myMqttClient.DeviceConnected(_device.DeviceName); + _lastConnected = true; + _myMqttClient?.DeviceConnected(Device); } - else if (lastConnected) + else if (_lastConnected) { - lastConnected = false; - _myMqttClient.DeviceDisconnected(_device.DeviceName); + _lastConnected = false; + _myMqttClient?.DeviceDisconnected(Device); } } } catch (Exception ex) { - _logger.LogError($"线程循环异常,{_device.DeviceName}", ex); + _logger.LogError($"线程循环异常,{Device.DeviceName}", ex); } } - Thread.Sleep((int)_driver.MinPeriod); + Thread.Sleep((int)Driver.MinPeriod); } }); } else - _myMqttClient.DeviceDisconnected(_device.DeviceName); + _myMqttClient?.DeviceDisconnected(Device); } public void MyMqttClient_OnExcRpc(object? sender, RpcRequest e) { - if (e.DeviceName == _device.DeviceName) + if (e.DeviceName == Device.DeviceName) { RpcLog rpcLog = new RpcLog() { - DeviceId = _device.ID, + DeviceId = Device.ID, StartTime = DateTime.Now, Method = e.Method, RpcSide = RpcSide.ServerSide, Params = JsonConvert.SerializeObject(e.Params) }; - _logger.LogInformation($"{_device.DeviceName}收到RPC,{e}"); - RpcResponse rpcResponse = new() { DeviceName = e.DeviceName, RequestId = e.RequestId, IsSuccess = false }; + _logger.LogInformation($"{Device.DeviceName}收到RPC,{e}"); + RpcResponse rpcResponse = new() + { DeviceName = e.DeviceName, RequestId = e.RequestId, IsSuccess = false }; //执行写入变量RPC if (e.Method.ToLower() == "write") { lock (_lock) { - bool RpcConnected = false; + bool rpcConnected = false; //没连接就连接 - if (!_driver.IsConnected) - if (_driver.Connect()) - RpcConnected = true; + if (!Driver.IsConnected) + if (Driver.Connect()) + rpcConnected = true; //连接成功就尝试一个一个的写入,注意:目前写入地址和读取地址是相同的,对于PLC来说没问题,其他的要自己改........ - if (_driver.IsConnected) + if (Driver.IsConnected) { foreach (var para in e.Params) { //先查配置项,要用到配置的地址、数据类型、方法(方法最主要是用于区分写入数据的辅助判断,比如modbus不同的功能码) - var deviceVariable = _device.DeviceVariables.Where(x => x.Name == para.Key).FirstOrDefault(); + var deviceVariable = Device.DeviceVariables.Where(x => x.Name == para.Key) + .FirstOrDefault(); if (deviceVariable != null) { DriverAddressIoArgModel ioArgModel = new() @@ -203,7 +218,8 @@ namespace Plugin Value = para.Value, ValueType = deviceVariable.DataType }; - var writeResponse = _driver.WriteAsync(e.RequestId, deviceVariable.Method, ioArgModel).Result; + var writeResponse = Driver + .WriteAsync(e.RequestId, deviceVariable.Method, ioArgModel).Result; rpcResponse.IsSuccess = writeResponse.IsSuccess; if (!writeResponse.IsSuccess) { @@ -218,17 +234,16 @@ namespace Plugin break; } } - if (RpcConnected) - _driver.Close(); + if (rpcConnected) + Driver.Close(); } - else//连接失败 + else //连接失败 { rpcResponse.IsSuccess = false; rpcResponse.Description = $"{e.DeviceName} 连接失败"; } } - } //其他RPC TODO else @@ -238,47 +253,46 @@ namespace Plugin } //反馈RPC - _myMqttClient.ResponseRpc(rpcResponse); + _myMqttClient.ResponseRpcAsync(rpcResponse); //纪录入库 rpcLog.IsSuccess = rpcResponse.IsSuccess; rpcLog.Description = rpcResponse.Description; rpcLog.EndTime = DateTime.Now; - using (var DC = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DBType)) + using (var dc = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DbType)) { - DC.Set().Add(rpcLog); - DC.SaveChanges(); + dc.Set().Add(rpcLog); + dc.SaveChanges(); } } } public void StopThread() { - _logger.LogInformation($"线程停止:{_device.DeviceName}"); - _myMqttClient.DeviceDisconnected(_device.DeviceName); - if (task != null) + _logger.LogInformation($"线程停止:{Device.DeviceName}"); + _myMqttClient?.DeviceDisconnected(Device); + if (_task != null) { - _myMqttClient.OnExcRpc -= MyMqttClient_OnExcRpc; - tokenSource.Cancel(); - _driver.Close(); + if (_myMqttClient != null) _myMqttClient.OnExcRpc -= MyMqttClient_OnExcRpc; + _tokenSource.Cancel(); + Driver.Close(); } } public void Dispose() { - _driver.Dispose(); + Driver.Dispose(); _interpreter = null; DeviceValues = null; Methods = null; - _logger.LogInformation($"线程释放,{_device.DeviceName}"); + _logger.LogInformation($"线程释放,{Device.DeviceName}"); } //mysql会把一些符号转义,没找到原因,先临时处理下 - private string DealMysqlStr(string Expression) + private string DealMysqlStr(string expression) { - return Expression.Replace("<", "<").Replace(">", ">").Replace("&", "&").Replace(""", "\""); + return expression.Replace("<", "<").Replace(">", ">").Replace("&", "&").Replace(""", "\""); } } - -} +} \ No newline at end of file diff --git a/Plugins/Plugin/DriverInfo.cs b/Plugins/Plugin/DriverInfo.cs index e54124e..3088213 100644 --- a/Plugins/Plugin/DriverInfo.cs +++ b/Plugins/Plugin/DriverInfo.cs @@ -1,13 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Plugin +namespace Plugin { public class DriverInfo { - public string FileName; - public Type Type; + public string? FileName; + public Type? Type; } } diff --git a/Plugins/Plugin/DrvierService.cs b/Plugins/Plugin/DrvierService.cs index fbbb467..ece892e 100644 --- a/Plugins/Plugin/DrvierService.cs +++ b/Plugins/Plugin/DrvierService.cs @@ -1,13 +1,8 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using PluginInterface; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; using System.Reflection; using System.Text.Json; -using System.Threading.Tasks; using WalkingTec.Mvvm.Core; using IoTGateway.DataAccess; using IoTGateway.Model; @@ -15,110 +10,111 @@ using Microsoft.Extensions.Logging; namespace Plugin { - public class DriverService//: IDependency + public class DriverService { private readonly ILogger _logger; - string DriverPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"drivers/net6.0"); - string[] driverFiles; - public List DriverInfos = new List(); - public DriverService(IConfiguration ConfigRoot, ILogger logger) + readonly string _driverPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"drivers/net6.0"); + readonly string[] _driverFiles; + public List DriverInfos = new(); + + public DriverService(IConfiguration configRoot, ILogger logger) { _logger = logger; try { _logger.LogInformation("LoadDriverFiles Start"); - driverFiles = Directory.GetFiles(DriverPath).Where(x => Path.GetExtension(x) == ".dll").ToArray(); - _logger.LogInformation($"LoadDriverFiles End,Count{driverFiles.Count()}"); + _driverFiles = Directory.GetFiles(_driverPath).Where(x => Path.GetExtension(x) == ".dll").ToArray(); + _logger.LogInformation($"LoadDriverFiles End,Count{_driverFiles.Count()}"); } catch (Exception ex) { _logger.LogError("LoadDriverFiles Error", ex); } + LoadAllDrivers(); } + public List GetAllDrivers() { List driverFilesComboSelect = new List(); - using (var DC = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DBType)) - { - var Drivers = DC.Set().AsNoTracking().ToList(); + using var dc = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DbType); + var drivers = dc.Set().AsNoTracking().ToList(); - foreach (var file in driverFiles) + foreach (var file in _driverFiles) + { + var dll = Assembly.LoadFrom(file); + if (dll.GetTypes().Where(x => typeof(IDriver).IsAssignableFrom(x) && x.IsClass).Any()) { - var dll = Assembly.LoadFrom(file); - if (dll.GetTypes().Where(x => typeof(IDriver).IsAssignableFrom(x) && x.IsClass).Any()) + var fileName = Path.GetFileName(file); + var item = new ComboSelectListItem { - var fileName = Path.GetFileName(file); - var item = new ComboSelectListItem - { - Text = fileName, - Value = fileName, - Disabled = false, - }; - if (Drivers.Where(x => x.FileName == Path.GetFileName(file)).Any()) - item.Disabled = true; - driverFilesComboSelect.Add(item); - } + Text = fileName, + Value = fileName, + Disabled = false, + }; + if (drivers.Where(x => x.FileName == Path.GetFileName(file)).Any()) + item.Disabled = true; + driverFilesComboSelect.Add(item); } } + return driverFilesComboSelect; } - - public string GetAssembleNameByFileName(string fileName) { - var file = driverFiles.Where(f => Path.GetFileName(f) == fileName).SingleOrDefault(); + var file = _driverFiles.SingleOrDefault(f => Path.GetFileName(f) == fileName); var dll = Assembly.LoadFrom(file); - var type = dll.GetTypes().Where(x => typeof(IDriver).IsAssignableFrom(x) && x.IsClass).FirstOrDefault(); - return type.FullName; + var type = dll.GetTypes().FirstOrDefault(x => typeof(IDriver).IsAssignableFrom(x) && x.IsClass); + return type?.FullName; } - public void AddConfigs(Guid? dapID, Guid? DriverId) + + public void AddConfigs(Guid? dapId, Guid? driverId) { - using (var DC = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DBType)) + using var dc = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DbType); + var device = dc.Set().Where(x => x.ID == dapId).AsNoTracking().SingleOrDefault(); + var driver = dc.Set().Where(x => x.ID == driverId).AsNoTracking().SingleOrDefault(); + var type = DriverInfos.SingleOrDefault(x => x.Type.FullName == driver?.AssembleName); + + Type[] types = { typeof(string), typeof(ILogger) }; + object[] param = { device?.DeviceName, _logger }; + + ConstructorInfo? constructor = type?.Type.GetConstructor(types); + var iObj = constructor?.Invoke(param) as IDriver; + + foreach (var property in type?.Type.GetProperties()) { - var device = DC.Set().Where(x => x.ID == dapID).AsNoTracking().SingleOrDefault(); - var driver = DC.Set().Where(x => x.ID == DriverId).AsNoTracking().SingleOrDefault(); - var type = DriverInfos.Where(x => x.Type.FullName == driver.AssembleName).SingleOrDefault(); - - Type[] types = new Type[2] { typeof(string), typeof(ILogger) }; - object[] param = new object[2] { device.DeviceName, _logger }; - - ConstructorInfo constructor = type.Type.GetConstructor(types); - var iObj = constructor.Invoke(param) as IDriver; - - foreach (var property in type.Type.GetProperties()) + var config = property.GetCustomAttribute(typeof(ConfigParameterAttribute)); + if (config != null) { - var config = property.GetCustomAttribute(typeof(ConfigParameterAttribute)); - if (config != null) + var dapConfig = new DeviceConfig { - var DapConfig = new DeviceConfig - { - ID = Guid.NewGuid(), - DeviceId = dapID, - DeviceConfigName = property.Name, - DataSide= DataSide.AnySide, - Description = ((ConfigParameterAttribute)config).Description, - Value = property.GetValue(iObj)?.ToString() - }; + ID = Guid.NewGuid(), + DeviceId = dapId, + DeviceConfigName = property.Name, + DataSide = DataSide.AnySide, + Description = ((ConfigParameterAttribute)config).Description, + Value = property.GetValue(iObj)?.ToString() + }; - if (property.PropertyType.BaseType == typeof(Enum)) - { - var fields = property.PropertyType.GetFields(BindingFlags.Static | BindingFlags.Public); - var EnumInfos = fields.ToDictionary(f => f.Name, f => (int)f.GetValue(null)); - DapConfig.EnumInfo = JsonSerializer.Serialize(EnumInfos); - } - - DC.Set().Add(DapConfig); + if (property.PropertyType.BaseType == typeof(Enum)) + { + var fields = property.PropertyType.GetFields(BindingFlags.Static | BindingFlags.Public); + var enumInfos = fields.ToDictionary(f => f.Name, f => (int)f.GetValue(null)); + dapConfig.EnumInfo = JsonSerializer.Serialize(enumInfos); } + + dc.Set().Add(dapConfig); } - DC.SaveChanges(); } + + dc.SaveChanges(); } + public void LoadAllDrivers() { _logger.LogInformation("LoadAllDrivers Start"); - foreach (var file in driverFiles) + foreach (var file in _driverFiles) { try { @@ -138,34 +134,30 @@ namespace Plugin { _logger.LogDebug($"LoadAllDrivers Error {ex}"); } - } - _logger.LogInformation($"LoadAllDrivers End,Count{DriverInfos.Count}"); + _logger.LogInformation($"LoadAllDrivers End,Count{DriverInfos.Count}"); } public void LoadRegestedDeviers() { - using (var DC = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DBType)) - { - var Drivers = DC.Set().AsNoTracking().ToList(); + using var dc = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DbType); - var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"drivers/net5.0"); - var files = Directory.GetFiles(path).Where(x => Path.GetExtension(x) == ".dll").ToArray(); - foreach (var file in files) + var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"drivers/net6.0"); + var files = Directory.GetFiles(path).Where(x => Path.GetExtension(x) == ".dll").ToArray(); + foreach (var file in files) + { + var dll = Assembly.LoadFrom(file); + foreach (var type in dll.GetTypes().Where(x => typeof(IDriver).IsAssignableFrom(x) && x.IsClass)) { - var dll = Assembly.LoadFrom(file); - foreach (var type in dll.GetTypes().Where(x => typeof(IDriver).IsAssignableFrom(x) && x.IsClass)) + DriverInfo driverInfo = new DriverInfo { - DriverInfo driverInfo = new DriverInfo - { - FileName = Path.GetFileName(file), - Type = type - }; - DriverInfos.Add(driverInfo); - } + FileName = Path.GetFileName(file), + Type = type + }; + DriverInfos.Add(driverInfo); } } } } -} +} \ No newline at end of file diff --git a/Plugins/Plugin/IoTBackgroundService.cs b/Plugins/Plugin/IoTBackgroundService.cs index 6cc9c58..e3be538 100644 --- a/Plugins/Plugin/IoTBackgroundService.cs +++ b/Plugins/Plugin/IoTBackgroundService.cs @@ -1,44 +1,36 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; using WalkingTec.Mvvm.Core; namespace Plugin { public class IoTBackgroundService : BackgroundService { - public static DBTypeEnum DBType; + public static DBTypeEnum DbType; public static string connnectSetting; public static Guid? VariableSelectDeviceId, ConfigSelectDeviceId; - public IoTBackgroundService(IConfiguration ConfigRoot) + public IoTBackgroundService(IConfiguration configRoot) { var connnectSettings = new List(); - ConfigRoot.Bind("Connections", connnectSettings); + configRoot.Bind("Connections", connnectSettings); connnectSetting = connnectSettings[0].Value; - switch (connnectSettings[0].DBType.Trim().ToLower()) + switch (connnectSettings[0].DbType?.Trim().ToLower()) { case "oracle": - DBType = DBTypeEnum.Oracle; + DbType = DBTypeEnum.Oracle; break; case "mysql": - DBType = DBTypeEnum.MySql; + DbType = DBTypeEnum.MySql; break; case "pgsql": - DBType = DBTypeEnum.PgSql; + DbType = DBTypeEnum.PgSql; break; case "sqlite": - DBType = DBTypeEnum.SQLite; + DbType = DBTypeEnum.SQLite; break; case "memory": - DBType = DBTypeEnum.Memory; - break; - default: + DbType = DBTypeEnum.Memory; break; } } diff --git a/Plugins/Plugin/ModbusSlaveService.cs b/Plugins/Plugin/ModbusSlaveService.cs index 8944e62..4a95cb4 100644 --- a/Plugins/Plugin/ModbusSlaveService.cs +++ b/Plugins/Plugin/ModbusSlaveService.cs @@ -1,24 +1,19 @@ using Microsoft.Extensions.Logging; using Modbus.Data; using Modbus.Device; -using System; -using System.Collections.Generic; -using System.Linq; using System.Net; using System.Net.Sockets; -using System.Text; -using System.Threading.Tasks; namespace Plugin { public class ModbusSlaveService : IDisposable { private readonly ILogger _logger; - TcpListener slaveTcpListener; - private Timer m_simulationTimer; - private object Lock=new object(); - private ModbusSlave slave; - private Task task { get; set; } = null; + readonly TcpListener _slaveTcpListener; + private readonly Timer _mSimulationTimer; + private readonly object _lock = new(); + private readonly ModbusSlave _slave; + private Task _task; public ModbusSlaveService(ILogger logger) { _logger = logger; @@ -27,12 +22,12 @@ namespace Plugin IPAddress address = IPAddress.Any; // create and start the TCP slave - slaveTcpListener = new TcpListener(address, port); - slaveTcpListener.Start(); - slave = ModbusTcpSlave.CreateTcp(slaveId, slaveTcpListener); - slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); - slave.ListenAsync(); - m_simulationTimer = new Timer(DoSimulation, null, 1000, 1000); + _slaveTcpListener = new TcpListener(address, port); + _slaveTcpListener.Start(); + _slave = ModbusTcpSlave.CreateTcp(slaveId, _slaveTcpListener); + _slave.DataStore = DataStoreFactory.CreateDefaultDataStore(); + _slave.ListenAsync(); + _mSimulationTimer = new Timer(DoSimulation, null, 1000, 1000); _logger.LogInformation($"Modbus Server Started"); } @@ -40,19 +35,19 @@ namespace Plugin { try { - lock (Lock) + lock (_lock) { for (int i = 1; i <= 20; i++) { - if(i != 1|| i != 2|| i != 7) - slave.DataStore.HoldingRegisters[i] = (ushort)new Random().Next(0, short.MaxValue); - slave.DataStore.InputRegisters[i] = (ushort)new Random().Next(0, short.MaxValue); - slave.DataStore.CoilDiscretes[i] = new Random().Next() % 2 == 0; - slave.DataStore.InputDiscretes[i] = new Random().Next() % 2 == 0; + if (i != 1 || i != 2 || i != 7) + _slave.DataStore.HoldingRegisters[i] = (ushort)new Random().Next(0, short.MaxValue); + _slave.DataStore.InputRegisters[i] = (ushort)new Random().Next(0, short.MaxValue); + _slave.DataStore.CoilDiscretes[i] = new Random().Next() % 2 == 0; + _slave.DataStore.InputDiscretes[i] = new Random().Next() % 2 == 0; } - slave.DataStore.HoldingRegisters[1] = (ushort)new Random().Next(2000,3000); //前端要用的温度 - slave.DataStore.HoldingRegisters[2] = (ushort)new Random().Next(4000, 7000);//湿度 - slave.DataStore.HoldingRegisters[7] = (ushort)new Random().Next(0, 10000);//随机值 + _slave.DataStore.HoldingRegisters[1] = (ushort)new Random().Next(2000, 3000); //前端要用的温度 + _slave.DataStore.HoldingRegisters[2] = (ushort)new Random().Next(4000, 7000);//湿度 + _slave.DataStore.HoldingRegisters[7] = (ushort)new Random().Next(0, 10000);//随机值 } } catch (Exception ex) @@ -63,8 +58,8 @@ namespace Plugin public void Dispose() { _logger.LogError($"Modbus Server Dispose"); - m_simulationTimer.Dispose(); - slaveTcpListener.Stop(); + _mSimulationTimer.Dispose(); + _slaveTcpListener.Stop(); } } } diff --git a/Plugins/Plugin/MyMqttClient.cs b/Plugins/Plugin/MyMqttClient.cs index 7442550..c3b2d45 100644 --- a/Plugins/Plugin/MyMqttClient.cs +++ b/Plugins/Plugin/MyMqttClient.cs @@ -10,6 +10,7 @@ using MQTTnet.Client.Receiving; using MQTTnet.Protocol; using Newtonsoft.Json; using PluginInterface; +using PluginInterface.HuaWeiRoma; using PluginInterface.IotDB; using PluginInterface.IoTSharp; using PluginInterface.ThingsBoard; @@ -20,14 +21,15 @@ namespace Plugin public class MyMqttClient { private readonly ILogger _logger; - private readonly ReferenceNodeManager _uaNodeManager = null; + private readonly ReferenceNodeManager? _uaNodeManager; private SystemConfig? _systemConfig; - private IMqttClientOptions clientOptions; - public bool IsConnected => (Client?.IsConnected).GetValueOrDefault(); + private IMqttClientOptions _clientOptions; + public bool IsConnected => (Client.IsConnected); private IMqttClient Client { get; set; } public event EventHandler OnExcRpc; public event EventHandler OnReceiveAttributes; + public MyMqttClient(UAService uaService, ILogger logger) { _logger = logger; @@ -35,126 +37,129 @@ namespace Plugin ConnectAsync(); } - public async Task ConnectAsync() + public async Task ConnectAsync() { - bool initok = false; try { - using (var DC = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DBType)) + await using var dc = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DbType); + _systemConfig = dc.Set().FirstOrDefault(); + if (_systemConfig == null) { - _systemConfig = DC.Set().FirstOrDefault(); - if (_systemConfig == null) + _systemConfig = new SystemConfig() { - _systemConfig = new SystemConfig() - { - ID = Guid.NewGuid(), - GatewayName = "iotgateway", - MqttIp = "localhost", - MqttPort = 1888, - MqttUName = "user", - MqttUPwd = "pwd", - IoTPlatformType = IoTPlatformType.IoTSharp - }; - DC.Set().Add(_systemConfig); - DC.SaveChanges(); - } - var factory = new MqttFactory(); - Client = (MqttClient)factory.CreateMqttClient(); - clientOptions = new MqttClientOptionsBuilder() - .WithClientId(_systemConfig.GatewayName + Guid.NewGuid().ToString()) - .WithTcpServer(_systemConfig.MqttIp, _systemConfig.MqttPort) - .WithCredentials(_systemConfig.MqttUName, _systemConfig.MqttUPwd) - .WithCommunicationTimeout(TimeSpan.FromSeconds(30)) - .WithKeepAlivePeriod(TimeSpan.FromSeconds(20)) - .Build(); - - Client.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(Client_ApplicationMessageReceived); - Client.ConnectedHandler = new MqttClientConnectedHandlerDelegate(x => OnConnected()); - Client.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(x => OnDisconnectedAsync()); - try - { - Client.ConnectAsync(clientOptions); - initok = true; - } - catch (Exception exception) - { - _logger.LogError("MQTT CONNECTING FAILED", exception); - } - _logger.LogInformation("MQTT WAITING FOR APPLICATION MESSAGES"); + ID = Guid.NewGuid(), + GatewayName = "iotgateway", + ClientId = Guid.NewGuid().ToString(), + MqttIp = "localhost", + MqttPort = 1888, + MqttUName = "user", + MqttUPwd = "pwd", + IoTPlatformType = IoTPlatformType.IoTSharp + }; + dc.Set().Add(_systemConfig); + await dc.SaveChangesAsync(); } + + var factory = new MqttFactory(); + Client = (MqttClient)factory.CreateMqttClient(); + _clientOptions = new MqttClientOptionsBuilder() + .WithClientId(_systemConfig.ClientId ?? Guid.NewGuid().ToString()) + .WithTcpServer(_systemConfig.MqttIp, _systemConfig.MqttPort) + .WithCredentials(_systemConfig.MqttUName, _systemConfig.MqttUPwd) + .WithCommunicationTimeout(TimeSpan.FromSeconds(30)) + .WithKeepAlivePeriod(TimeSpan.FromSeconds(20)) + .Build(); + + Client.ApplicationMessageReceivedHandler = + new MqttApplicationMessageReceivedHandlerDelegate(Client_ApplicationMessageReceived); + Client.ConnectedHandler = new MqttClientConnectedHandlerDelegate(_ => OnConnected()); + Client.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(_ => OnDisconnectedAsync()); + try + { + await Client.ConnectAsync(_clientOptions); + } + catch (Exception ex) + { + _logger.LogError("MQTT CONNECTING FAILED", ex); + } + + _logger.LogInformation("MQTT WAITING FOR APPLICATION MESSAGES"); } - catch (Exception exception) + catch (Exception ex) { - _logger.LogError("MQTT CONNECTING FAILED", exception); + _logger.LogError("MQTT CONNECTING FAILED", ex); } - return initok; } private async Task OnDisconnectedAsync() { try { - await Client.ConnectAsync(clientOptions); + await Client.ConnectAsync(_clientOptions); } - catch (Exception exception) + catch (Exception ex) { - _logger.LogError("MQTT CONNECTING FAILED", exception); + _logger.LogError("MQTT CONNECTING FAILED", ex); } } - private readonly string tbRpcTopic = "v1/gateway/rpc"; + private readonly string _tbRpcTopic = "v1/gateway/rpc"; + private void OnConnected() { - switch (_systemConfig.IoTPlatformType) - { - case IoTPlatformType.ThingsBoard: - //{"device": "Device A", "data": {"id": $request_id, "method": "toggle_gpio", "params": {"pin":1}}} - Client.SubscribeAsync(tbRpcTopic, MqttQualityOfServiceLevel.ExactlyOnce); - //Message: {"id": $request_id, "device": "Device A", "value": "value1"} - Client.SubscribeAsync("v1/gateway/attributes/response", MqttQualityOfServiceLevel.ExactlyOnce); - //Message: {"device": "Device A", "data": {"attribute1": "value1", "attribute2": 42}} - Client.SubscribeAsync("v1/gateway/attributes", MqttQualityOfServiceLevel.ExactlyOnce); - break; - case IoTPlatformType.IoTSharp: - Client.SubscribeAsync("devices/+/rpc/request/+/+", MqttQualityOfServiceLevel.ExactlyOnce); - Client.SubscribeAsync("devices/+/attributes/update", MqttQualityOfServiceLevel.ExactlyOnce); - //Message: {"device": "Device A", "data": {"attribute1": "value1", "attribute2": 42}} - Client.SubscribeAsync("devices/+/attributes/response/+", MqttQualityOfServiceLevel.ExactlyOnce); - break; - case IoTPlatformType.ThingsCloud: - Client.SubscribeAsync("gateway/attributes/response", MqttQualityOfServiceLevel.ExactlyOnce); - Client.SubscribeAsync("gateway/attributes/get/response", MqttQualityOfServiceLevel.ExactlyOnce); - Client.SubscribeAsync("gateway/attributes/push", MqttQualityOfServiceLevel.ExactlyOnce); - Client.SubscribeAsync("gateway/event/response", MqttQualityOfServiceLevel.ExactlyOnce); - Client.SubscribeAsync("gateway/command/send", MqttQualityOfServiceLevel.ExactlyOnce); - break; - case IoTPlatformType.AliCloudIoT: - break; - case IoTPlatformType.TencentIoTHub: - break; - case IoTPlatformType.BaiduIoTCore: - break; - case IoTPlatformType.OneNET: - break; - default: - break; - } + if (_systemConfig != null) + switch (_systemConfig.IoTPlatformType) + { + case IoTPlatformType.ThingsBoard: + //{"device": "Device A", "data": {"id": $request_id, "method": "toggle_gpio", "params": {"pin":1}}} + Client.SubscribeAsync(_tbRpcTopic, MqttQualityOfServiceLevel.ExactlyOnce); + //Message: {"id": $request_id, "device": "Device A", "value": "value1"} + Client.SubscribeAsync("v1/gateway/attributes/response", MqttQualityOfServiceLevel.ExactlyOnce); + //Message: {"device": "Device A", "data": {"attribute1": "value1", "attribute2": 42}} + Client.SubscribeAsync("v1/gateway/attributes", MqttQualityOfServiceLevel.ExactlyOnce); + break; + case IoTPlatformType.IoTSharp: + Client.SubscribeAsync("devices/+/rpc/request/+/+", MqttQualityOfServiceLevel.ExactlyOnce); + Client.SubscribeAsync("devices/+/attributes/update", MqttQualityOfServiceLevel.ExactlyOnce); + //Message: {"device": "Device A", "data": {"attribute1": "value1", "attribute2": 42}} + Client.SubscribeAsync("devices/+/attributes/response/+", MqttQualityOfServiceLevel.ExactlyOnce); + break; + case IoTPlatformType.ThingsCloud: + Client.SubscribeAsync("gateway/attributes/response", MqttQualityOfServiceLevel.ExactlyOnce); + Client.SubscribeAsync("gateway/attributes/get/response", MqttQualityOfServiceLevel.ExactlyOnce); + Client.SubscribeAsync("gateway/attributes/push", MqttQualityOfServiceLevel.ExactlyOnce); + Client.SubscribeAsync("gateway/event/response", MqttQualityOfServiceLevel.ExactlyOnce); + Client.SubscribeAsync("gateway/command/send", MqttQualityOfServiceLevel.ExactlyOnce); + break; + case IoTPlatformType.AliCloudIoT: + break; + case IoTPlatformType.TencentIoTHub: + break; + case IoTPlatformType.BaiduIoTCore: + break; + case IoTPlatformType.OneNET: + break; + } + _logger.LogInformation($"MQTT CONNECTED WITH SERVER "); } private Task Client_ApplicationMessageReceived(MqttApplicationMessageReceivedEventArgs e) { - _logger.LogDebug($"ApplicationMessageReceived Topic {e.ApplicationMessage.Topic} QualityOfServiceLevel:{e.ApplicationMessage.QualityOfServiceLevel} Retain:{e.ApplicationMessage.Retain} "); + _logger.LogDebug( + $"ApplicationMessageReceived Topic {e.ApplicationMessage.Topic} QualityOfServiceLevel:{e.ApplicationMessage.QualityOfServiceLevel} Retain:{e.ApplicationMessage.Retain} "); try { - if (e.ApplicationMessage.Topic == tbRpcTopic) + if (e.ApplicationMessage.Topic == _tbRpcTopic) ReceiveTbRpc(e); - else if (e.ApplicationMessage.Topic.StartsWith($"devices/") && e.ApplicationMessage.Topic.Contains("/response/")) + else if (e.ApplicationMessage.Topic.StartsWith($"devices/") && + e.ApplicationMessage.Topic.Contains("/response/")) { ReceiveAttributes(e); } - else if (e.ApplicationMessage.Topic.StartsWith($"devices/") && e.ApplicationMessage.Topic.Contains("/rpc/request/")) + else if (e.ApplicationMessage.Topic.StartsWith($"devices/") && + e.ApplicationMessage.Topic.Contains("/rpc/request/")) { ReceiveIsRpc(e); } @@ -165,8 +170,11 @@ namespace Plugin } catch (Exception ex) { - _logger.LogError($"ClientId:{e.ClientId} Topic:{e.ApplicationMessage.Topic},Payload:{e.ApplicationMessage.ConvertPayloadToString()}", ex); + _logger.LogError( + $"ClientId:{e.ClientId} Topic:{e.ApplicationMessage.Topic},Payload:{e.ApplicationMessage.ConvertPayloadToString()}", + ex); } + return Task.CompletedTask; } @@ -176,13 +184,13 @@ namespace Plugin /// private void ReceiveTbRpc(MqttApplicationMessageReceivedEventArgs e) { - TBRpcRequest tBRpcRequest; try { - tBRpcRequest = JsonConvert.DeserializeObject(e.ApplicationMessage.ConvertPayloadToString()); - if (!string.IsNullOrWhiteSpace(tBRpcRequest.RequestData.Method)) + var tBRpcRequest = + JsonConvert.DeserializeObject(e.ApplicationMessage.ConvertPayloadToString()); + if (tBRpcRequest != null && !string.IsNullOrWhiteSpace(tBRpcRequest.RequestData.Method)) { - OnExcRpc?.Invoke(Client, new RpcRequest() + OnExcRpc(Client, new RpcRequest() { Method = tBRpcRequest.RequestData.Method, DeviceName = tBRpcRequest.DeviceName, @@ -193,9 +201,10 @@ namespace Plugin } catch (Exception ex) { - _logger.LogError($"ReceiveTbRpc:Topic:{e.ApplicationMessage.Topic},Payload:{e.ApplicationMessage.ConvertPayloadToString()}", ex); + _logger.LogError( + $"ReceiveTbRpc:Topic:{e.ApplicationMessage.Topic},Payload:{e.ApplicationMessage.ConvertPayloadToString()}", + ex); } - } /// @@ -204,76 +213,81 @@ namespace Plugin /// private void ReceiveTcRpc(MqttApplicationMessageReceivedEventArgs e) { - TCRpcRequest tCRpcRequest; try { - tCRpcRequest = JsonConvert.DeserializeObject(e.ApplicationMessage.ConvertPayloadToString()); - OnExcRpc?.Invoke(Client, new RpcRequest() - { - Method = tCRpcRequest.RequestData.Method, - DeviceName = tCRpcRequest.DeviceName, - RequestId = tCRpcRequest.RequestData.RequestId, - Params = tCRpcRequest.RequestData.Params - }); + var tCRpcRequest = + JsonConvert.DeserializeObject(e.ApplicationMessage.ConvertPayloadToString()); + if (tCRpcRequest != null) + OnExcRpc.Invoke(Client, new RpcRequest() + { + Method = tCRpcRequest.RequestData.Method, + DeviceName = tCRpcRequest.DeviceName, + RequestId = tCRpcRequest.RequestData.RequestId, + Params = tCRpcRequest.RequestData.Params + }); } catch (Exception ex) { - _logger.LogError($"ReceiveTbRpc:Topic:{e.ApplicationMessage.Topic},Payload:{e.ApplicationMessage.ConvertPayloadToString()}", ex); + _logger.LogError( + $"ReceiveTbRpc:Topic:{e.ApplicationMessage.Topic},Payload:{e.ApplicationMessage.ConvertPayloadToString()}", + ex); } - } + private void ReceiveIsRpc(MqttApplicationMessageReceivedEventArgs e) { try { - var tps = e.ApplicationMessage.Topic.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); - var rpcmethodname = tps[4]; - var rpcdevicename = tps[1]; - var rpcrequestid = tps[5]; - _logger.LogInformation($"rpcmethodname={rpcmethodname} "); - _logger.LogInformation($"rpcdevicename={rpcdevicename } "); - _logger.LogInformation($"rpcrequestid={rpcrequestid} "); - if (!string.IsNullOrEmpty(rpcmethodname) && !string.IsNullOrEmpty(rpcdevicename) && !string.IsNullOrEmpty(rpcrequestid)) + var tps = e.ApplicationMessage.Topic.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + var rpcMethodName = tps[4]; + var rpcDeviceName = tps[1]; + var rpcRequestId = tps[5]; + _logger.LogInformation($"rpcMethodName={rpcMethodName} "); + _logger.LogInformation($"rpcDeviceName={rpcDeviceName} "); + _logger.LogInformation($"rpcRequestId={rpcRequestId} "); + if (!string.IsNullOrEmpty(rpcMethodName) && !string.IsNullOrEmpty(rpcDeviceName) && + !string.IsNullOrEmpty(rpcRequestId)) { - OnExcRpc?.Invoke(Client, new RpcRequest() + OnExcRpc(Client, new RpcRequest() { - Method = rpcmethodname, - DeviceName = rpcdevicename, - RequestId = rpcrequestid, - Params = JsonConvert.DeserializeObject>(e.ApplicationMessage.ConvertPayloadToString()) + Method = rpcMethodName, + DeviceName = rpcDeviceName, + RequestId = rpcRequestId, + Params = JsonConvert.DeserializeObject>(e.ApplicationMessage + .ConvertPayloadToString()) }); } } catch (Exception ex) { - _logger.LogError($"ReceiveIsRpc:Topic:{e.ApplicationMessage.Topic},Payload:{e.ApplicationMessage.ConvertPayloadToString()}", ex); - + _logger.LogError( + $"ReceiveIsRpc:Topic:{e.ApplicationMessage.Topic},Payload:{e.ApplicationMessage.ConvertPayloadToString()}", + ex); } - } - private Task ResponseTBRpc(TBRpcResponse tBRpcResponse) + private async Task ResponseTbRpcAsync(TBRpcResponse tBRpcResponse) { - return Client.PublishAsync(new MqttApplicationMessageBuilder() - .WithTopic(tbRpcTopic) + await Client.PublishAsync(new MqttApplicationMessageBuilder() + .WithTopic(_tbRpcTopic) .WithPayload(JsonConvert.SerializeObject(tBRpcResponse)) .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.ExactlyOnce).Build()); } - private Task ResponseTCRpc(TCRpcRequest tCRpcResponse) + private async Task ResponseTcRpcAsync(TCRpcRequest tCRpcResponse) { - string topic = $"command/reply/{tCRpcResponse.RequestData.RequestId}"; - return Client.PublishAsync(new MqttApplicationMessageBuilder() + var topic = $"command/reply/{tCRpcResponse.RequestData.RequestId}"; + await Client.PublishAsync(new MqttApplicationMessageBuilder() .WithTopic(topic) .WithPayload(JsonConvert.SerializeObject(tCRpcResponse)) .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.ExactlyOnce).Build()); } - private Task ResponseISRpc(ISRpcResponse rpcResult) + private async Task ResponseIsRpcAsync(ISRpcResponse rpcResult) { - ///IoTSharp/Clients/RpcClient.cs#L65 var responseTopic = $"/devices/{deviceid}/rpc/response/{methodName}/{rpcid}"; - string topic = $"devices/{rpcResult.DeviceId}/rpc/response/{rpcResult.Method}/{rpcResult.ResponseId}"; - return Client.PublishAsync(new MqttApplicationMessageBuilder() + //var responseTopic = $"/devices/{deviceid}/rpc/response/{methodName}/{rpcid}"; + var topic = $"devices/{rpcResult.DeviceId}/rpc/response/{rpcResult.Method}/{rpcResult.ResponseId}"; + await Client.PublishAsync(new MqttApplicationMessageBuilder() .WithTopic(topic) .WithPayload(JsonConvert.SerializeObject(rpcResult)) .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.ExactlyOnce).Build()); @@ -281,161 +295,199 @@ namespace Plugin private void ReceiveAttributes(MqttApplicationMessageReceivedEventArgs e) { - var tps = e.ApplicationMessage.Topic.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); - var rpcmethodname = tps[2]; - var rpcdevicename = tps[1]; - var rpcrequestid = tps[4]; - _logger.LogInformation($"rpcmethodname={rpcmethodname} "); - _logger.LogInformation($"rpcdevicename={rpcdevicename } "); - _logger.LogInformation($"rpcrequestid={rpcrequestid} "); + var tps = e.ApplicationMessage.Topic.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + var rpcMethodName = tps[2]; + var rpcDeviceName = tps[1]; + var rpcRequestId = tps[4]; + _logger.LogInformation($"rpcMethodName={rpcMethodName}"); + _logger.LogInformation($"rpcDeviceName={rpcDeviceName}"); + _logger.LogInformation($"rpcRequestId={rpcRequestId}"); - if (!string.IsNullOrEmpty(rpcmethodname) && !string.IsNullOrEmpty(rpcdevicename) && !string.IsNullOrEmpty(rpcrequestid)) + if (!string.IsNullOrEmpty(rpcMethodName) && !string.IsNullOrEmpty(rpcDeviceName) && + !string.IsNullOrEmpty(rpcRequestId)) { if (e.ApplicationMessage.Topic.Contains("/attributes/")) { - OnReceiveAttributes?.Invoke(Client, new ISAttributeResponse() + OnReceiveAttributes.Invoke(Client, new ISAttributeResponse() { - KeyName = rpcmethodname, - DeviceName = rpcdevicename, - Id = rpcrequestid, + KeyName = rpcMethodName, + DeviceName = rpcDeviceName, + Id = rpcRequestId, Data = e.ApplicationMessage.ConvertPayloadToString() }); } } } - public Task UploadAttributeAsync(string _devicename, object obj) + public Task UploadAttributeAsync(string deviceName, object obj) { //Topic: v1/gateway/attributes //Message: {"Device A":{"attribute1":"value1", "attribute2": 42}, "Device B":{"attribute1":"value1", "attribute2": 42} try { if (Client.IsConnected) - return Client.PublishAsync(new MqttApplicationMessageBuilder().WithTopic($"devices/{_devicename}/attributes").WithPayload(Newtonsoft.Json.JsonConvert.SerializeObject(obj)).Build()); + return Client.PublishAsync(new MqttApplicationMessageBuilder() + .WithTopic($"devices/{deviceName}/attributes").WithPayload(JsonConvert.SerializeObject(obj)) + .Build()); } catch (Exception ex) { - _logger.LogError($"Device:{_devicename} UploadAttributeAsync Failed,{ex}"); + _logger.LogError($"Device:{deviceName} UploadAttributeAsync Failed,{ex}"); } + return Task.CompletedTask; - } - public Task UploadISTelemetryDataAsync(string _devicename, object obj) + public async Task UploadIsTelemetryDataAsync(string deviceName, object obj) { - return Client.PublishAsync(new MqttApplicationMessageBuilder().WithTopic($"devices/{_devicename}/telemetry").WithPayload(Newtonsoft.Json.JsonConvert.SerializeObject(obj)).Build()); + await Client.PublishAsync(new MqttApplicationMessageBuilder().WithTopic($"devices/{deviceName}/telemetry") + .WithPayload(JsonConvert.SerializeObject(obj)).Build()); } - public Task UploadTCTelemetryDataAsync(string _devicename, object obj) + public async Task UploadTcTelemetryDataAsync(string deviceName, object obj) { - var toSend = new Dictionary { { _devicename, obj } }; - return Client.PublishAsync("gateway/attributes", JsonConvert.SerializeObject(toSend)); + var toSend = new Dictionary { { deviceName, obj } }; + await Client.PublishAsync("gateway/attributes", JsonConvert.SerializeObject(toSend)); } - public void ResponseRpc(RpcResponse rpcResponse) + public async Task UploadHwTelemetryDataAsync(Device device, object obj) + { + var hwTelemetry = new List() + { + new HwTelemetry() + { + DeviceId = device.DeviceConfigs.FirstOrDefault(x => x.DeviceConfigName == "DeviceId")?.Value, + Services = new() + { + new Service() + { + ServiceId = "serviceId", + EventTime = DateTime.Now.ToString("yyyyMMddTHHmmssZ"), + Data = new Dictionary() + { + { "data", obj } + } + } + } + } + }; + var hwTelemetrys = new HwTelemetrys() + { + Devices = hwTelemetry + }; + + await Client.PublishAsync($"/v1/devices/{_systemConfig?.GatewayName}/datas", + JsonConvert.SerializeObject(hwTelemetrys)); + } + + public async Task ResponseRpcAsync(RpcResponse rpcResponse) { try { - switch (_systemConfig.IoTPlatformType) - { - case IoTPlatformType.ThingsBoard: - var tRpcResponse = new TBRpcResponse - { - DeviceName = rpcResponse.DeviceName, - RequestId = rpcResponse.RequestId, - ResponseData = new Dictionary { { "success", rpcResponse.IsSuccess }, { "description", rpcResponse.Description } } - }; - ResponseTBRpc(tRpcResponse); - break; - case IoTPlatformType.IoTSharp: - ResponseISRpc(new ISRpcResponse - { - DeviceId = rpcResponse.DeviceName, - Method = "Method", - ResponseId = rpcResponse.RequestId, - Data = JsonConvert.SerializeObject(new Dictionary { { "success", rpcResponse.IsSuccess }, { "description", rpcResponse.Description } }) - }); - break; - case IoTPlatformType.ThingsCloud: - //官网API不需要回复的 - break; - case IoTPlatformType.AliCloudIoT: - break; - case IoTPlatformType.TencentIoTHub: - break; - case IoTPlatformType.BaiduIoTCore: - break; - case IoTPlatformType.OneNET: - break; - default: - break; - } + if (_systemConfig != null) + switch (_systemConfig.IoTPlatformType) + { + case IoTPlatformType.ThingsBoard: + var tRpcResponse = new TBRpcResponse + { + DeviceName = rpcResponse.DeviceName, + RequestId = rpcResponse.RequestId, + ResponseData = new Dictionary + { { "success", rpcResponse.IsSuccess }, { "description", rpcResponse.Description } } + }; + await ResponseTbRpcAsync(tRpcResponse); + break; + case IoTPlatformType.IoTSharp: + await ResponseIsRpcAsync(new ISRpcResponse + { + DeviceId = rpcResponse.DeviceName, + Method = "Method", + ResponseId = rpcResponse.RequestId, + Data = JsonConvert.SerializeObject(new Dictionary + { + { "success", rpcResponse.IsSuccess }, { "description", rpcResponse.Description } + }) + }); + break; + case IoTPlatformType.ThingsCloud: + //官网API不需要回复的 + break; + case IoTPlatformType.AliCloudIoT: + break; + case IoTPlatformType.TencentIoTHub: + break; + case IoTPlatformType.BaiduIoTCore: + break; + case IoTPlatformType.OneNET: + break; + } } catch (Exception ex) { _logger.LogError($"ResponseRpc Error,{rpcResponse}", ex); } - } - public Task RequestAttributes(string _devicename, bool anySide, params string[] args) + public async Task RequestAttributes(string deviceName, bool anySide, params string[] args) { try { string id = Guid.NewGuid().ToString(); - switch (_systemConfig.IoTPlatformType) - { - case IoTPlatformType.ThingsBoard: - //{"id": $request_id, "device": "Device A", "client": true, "key": "attribute1"} - Dictionary tbRequestData = new Dictionary - { - { "id",id}, - { "device",_devicename}, - { "client",true}, - { "key",args[0]} - }; - return Client.PublishAsync("v1/gateway/attributes/request", JsonConvert.SerializeObject(tbRequestData), MqttQualityOfServiceLevel.ExactlyOnce); - case IoTPlatformType.IoTSharp: - string topic = $"devices/{_devicename}/attributes/request/{id}"; - Dictionary keys = new Dictionary(); - keys.Add(anySide ? "anySide" : "server", string.Join(",", args)); - Client.SubscribeAsync($"devices/{_devicename}/attributes/response/{id}", MqttQualityOfServiceLevel.ExactlyOnce); - return Client.PublishAsync(topic, JsonConvert.SerializeObject(keys), MqttQualityOfServiceLevel.ExactlyOnce); - case IoTPlatformType.AliCloudIoT: - break; - case IoTPlatformType.TencentIoTHub: - break; - case IoTPlatformType.BaiduIoTCore: - break; - case IoTPlatformType.OneNET: - break; - default: - break; - } + if (_systemConfig != null) + switch (_systemConfig.IoTPlatformType) + { + case IoTPlatformType.ThingsBoard: + //{"id": $request_id, "device": "Device A", "client": true, "key": "attribute1"} + Dictionary tbRequestData = new Dictionary + { + { "id", id }, + { "device", deviceName }, + { "client", true }, + { "key", args[0] } + }; + await Client.PublishAsync("v1/gateway/attributes/request", + JsonConvert.SerializeObject(tbRequestData), MqttQualityOfServiceLevel.ExactlyOnce); + break; + case IoTPlatformType.IoTSharp: + string topic = $"devices/{deviceName}/attributes/request/{id}"; + Dictionary keys = new Dictionary(); + keys.Add(anySide ? "anySide" : "server", string.Join(",", args)); + await Client.SubscribeAsync($"devices/{deviceName}/attributes/response/{id}", + MqttQualityOfServiceLevel.ExactlyOnce); + await Client.PublishAsync(topic, JsonConvert.SerializeObject(keys), + MqttQualityOfServiceLevel.ExactlyOnce); + break; + case IoTPlatformType.AliCloudIoT: + break; + case IoTPlatformType.TencentIoTHub: + break; + case IoTPlatformType.BaiduIoTCore: + break; + case IoTPlatformType.OneNET: + break; + } } catch (Exception ex) { - - _logger.LogError($"RequestAttributes:{_devicename}", ex); + _logger.LogError($"RequestAttributes:{deviceName}", ex); } - return Task.CompletedTask; } - private Dictionary> LastTelemetrys = new(0); + private Dictionary> _lastTelemetrys = new(0); /// /// 判断是否推送遥测数据 /// /// 设备 - /// 遥测 + /// 遥测 /// - private bool CanPubTelemetry(Device device, Dictionary> SendModel) + private bool CanPubTelemetry(Device device, Dictionary> sendModel) { bool canPub = false; try { //第一次上传 - if (!LastTelemetrys.ContainsKey(device.DeviceName)) + if (!_lastTelemetrys.ContainsKey(device.DeviceName)) canPub = true; else { @@ -443,14 +495,15 @@ namespace Plugin if (device.CgUpload) { //是否超过归档周期 - if (SendModel[device.DeviceName][0].TS - LastTelemetrys[device.DeviceName][0].TS > device.EnforcePeriod) + if (sendModel[device.DeviceName][0].TS - _lastTelemetrys[device.DeviceName][0].TS > + device.EnforcePeriod) canPub = true; //是否变化 else { - if (JsonConvert.SerializeObject(SendModel[device.DeviceName][0].Values) != JsonConvert.SerializeObject(LastTelemetrys[device.DeviceName][0].Values)) + if (JsonConvert.SerializeObject(sendModel[device.DeviceName][0].Values) != + JsonConvert.SerializeObject(_lastTelemetrys[device.DeviceName][0].Values)) canPub = true; - } } //非变化上传 @@ -463,141 +516,266 @@ namespace Plugin canPub = true; Console.WriteLine(e); } - if(canPub) - LastTelemetrys[device.DeviceName] = SendModel[device.DeviceName]; + + if (canPub) + _lastTelemetrys[device.DeviceName] = sendModel[device.DeviceName]; return canPub; } - public void PublishTelemetry(Device device, Dictionary> SendModel) + + public async Task PublishTelemetryAsync(Device device, Dictionary> sendModel) { try { - if (CanPubTelemetry(device, SendModel)) + if (CanPubTelemetry(device, sendModel)) { - switch (_systemConfig.IoTPlatformType) - { - case IoTPlatformType.ThingsBoard: - Client.PublishAsync("v1/gateway/telemetry", JsonConvert.SerializeObject(SendModel)); - break; - case IoTPlatformType.IoTSharp: - foreach (var payload in SendModel[device.DeviceName]) - { - UploadISTelemetryDataAsync(device.DeviceName, payload.Values); - } - break; - case IoTPlatformType.ThingsCloud: - foreach (var payload in SendModel[device.DeviceName]) - { - UploadTCTelemetryDataAsync(device.DeviceName, payload.Values); - } - break; - case IoTPlatformType.IotDB: - { - foreach (var payload in SendModel[device.DeviceName]) + if (_systemConfig != null) + switch (_systemConfig.IoTPlatformType) + { + case IoTPlatformType.ThingsBoard: + await Client.PublishAsync("v1/gateway/telemetry", + JsonConvert.SerializeObject(sendModel)); + break; + case IoTPlatformType.IoTSharp: + foreach (var payload in sendModel[device.DeviceName]) { - if (payload.DeviceStatus != DeviceStatusTypeEnum.Good) - continue; - - IotTsData tsData = new IotTsData() - { - device = device.DeviceName, - timestamp = payload.TS, - measurements = payload.Values.Keys.ToList(), - values = payload.Values.Values.ToList() - }; - Client.PublishAsync(device.DeviceName, JsonConvert.SerializeObject(tsData)); + await UploadIsTelemetryDataAsync(device.DeviceName, payload.Values); } break; - } - case IoTPlatformType.AliCloudIoT: - case IoTPlatformType.TencentIoTHub: - case IoTPlatformType.BaiduIoTCore: - case IoTPlatformType.OneNET: - default: - break; - } + case IoTPlatformType.ThingsCloud: + foreach (var payload in sendModel[device.DeviceName]) + { + await UploadTcTelemetryDataAsync(device.DeviceName, payload.Values); + } + + break; + case IoTPlatformType.IotDB: + { + foreach (var payload in sendModel[device.DeviceName]) + { + if (payload.DeviceStatus != DeviceStatusTypeEnum.Good) + continue; + + IotTsData tsData = new IotTsData() + { + device = device.DeviceName, + timestamp = payload.TS, + measurements = payload.Values.Keys.ToList(), + values = payload.Values.Values.ToList() + }; + await Client.PublishAsync(device.DeviceName, JsonConvert.SerializeObject(tsData)); + } + + break; + } + case IoTPlatformType.HuaWei: + foreach (var payload in sendModel[device.DeviceName]) + { + await UploadHwTelemetryDataAsync(device, payload.Values); + } + + break; + + case IoTPlatformType.AliCloudIoT: + case IoTPlatformType.TencentIoTHub: + case IoTPlatformType.BaiduIoTCore: + case IoTPlatformType.OneNET: + default: + break; + } } - foreach (var payload in SendModel[device.DeviceName]) + foreach (var payload in sendModel[device.DeviceName]) { foreach (var kv in payload.Values) { //更新到UAService - _uaNodeManager.UpdateNode($"{device.Parent.DeviceName}.{device.DeviceName}.{kv.Key}", kv.Value); + _uaNodeManager?.UpdateNode($"{device.Parent.DeviceName}.{device.DeviceName}.{kv.Key}", + kv.Value); } } - - } catch (Exception ex) { - + _logger.LogError($"PublishTelemetryAsync Error", ex); } - } - public async Task DeviceConnected(string DeviceName) + public async Task DeviceConnected(Device device) { try { - switch (_systemConfig.IoTPlatformType) - { - case IoTPlatformType.ThingsBoard: - case IoTPlatformType.IoTSharp: - await Client.PublishAsync("v1/gateway/connect", JsonConvert.SerializeObject(new Dictionary { { "device", DeviceName } })); - break; - case IoTPlatformType.AliCloudIoT: - break; - case IoTPlatformType.TencentIoTHub: - break; - case IoTPlatformType.BaiduIoTCore: - break; - case IoTPlatformType.OneNET: - break; - case IoTPlatformType.ThingsCloud: - await Client.PublishAsync("gateway/connect", JsonConvert.SerializeObject(new Dictionary { { "device", DeviceName } })); - break; - default: - break; - } + if (_systemConfig != null) + switch (_systemConfig.IoTPlatformType) + { + case IoTPlatformType.ThingsBoard: + case IoTPlatformType.IoTSharp: + await Client.PublishAsync("v1/gateway/connect", + JsonConvert.SerializeObject(new Dictionary + { { "device", device.DeviceName } })); + break; + case IoTPlatformType.AliCloudIoT: + break; + case IoTPlatformType.TencentIoTHub: + break; + case IoTPlatformType.BaiduIoTCore: + break; + case IoTPlatformType.OneNET: + break; + case IoTPlatformType.ThingsCloud: + await Client.PublishAsync("gateway/connect", + JsonConvert.SerializeObject(new Dictionary + { { "device", device.DeviceName } })); + break; + case IoTPlatformType.HuaWei: + var deviceOnLine = new HwDeviceOnOffLine() + { + MId = new Random().NextInt64(), //命令ID + DeviceStatuses = new List() + { + new DeviceStatus() + { + DeviceId = device.DeviceConfigs + .FirstOrDefault(x => x.DeviceConfigName == "DeviceId") + ?.Value, + Status = "ONLINE" + } + } + }; + await Client.PublishAsync($"/v1/devices/{_systemConfig.GatewayName}/topo/update", + JsonConvert.SerializeObject(deviceOnLine)); + break; + } } catch (Exception ex) { - _logger.LogError($"DeviceConnected:{DeviceName}", ex); + _logger.LogError($"DeviceConnected:{device.DeviceName}", ex); } } - public async Task DeviceDisconnected(string DeviceName) + public async Task DeviceDisconnected(Device device) { try { - switch (_systemConfig.IoTPlatformType) - { - case IoTPlatformType.ThingsBoard: - case IoTPlatformType.IoTSharp: - await Client.PublishAsync("v1/gateway/disconnect", JsonConvert.SerializeObject(new Dictionary { { "device", DeviceName } })); - break; - case IoTPlatformType.AliCloudIoT: - break; - case IoTPlatformType.TencentIoTHub: - break; - case IoTPlatformType.BaiduIoTCore: - break; - case IoTPlatformType.OneNET: - break; - case IoTPlatformType.ThingsCloud: - await Client.PublishAsync("gateway/disconnect", JsonConvert.SerializeObject(new Dictionary { { "device", DeviceName } })); - break; - default: - break; - } + if (_systemConfig != null) + switch (_systemConfig.IoTPlatformType) + { + case IoTPlatformType.ThingsBoard: + case IoTPlatformType.IoTSharp: + await Client.PublishAsync("v1/gateway/disconnect", + JsonConvert.SerializeObject(new Dictionary + { { "device", device.DeviceName } })); + break; + case IoTPlatformType.AliCloudIoT: + break; + case IoTPlatformType.TencentIoTHub: + break; + case IoTPlatformType.BaiduIoTCore: + break; + case IoTPlatformType.OneNET: + break; + case IoTPlatformType.ThingsCloud: + await Client.PublishAsync("gateway/disconnect", + JsonConvert.SerializeObject(new Dictionary + { { "device", device.DeviceName } })); + break; + case IoTPlatformType.HuaWei: + var deviceOnLine = new HwDeviceOnOffLine() + { + MId = new Random().NextInt64(), //命令ID + DeviceStatuses = new List() + { + new DeviceStatus() + { + DeviceId = device.DeviceConfigs + .FirstOrDefault(x => x.DeviceConfigName == "DeviceId") + ?.Value, + Status = "OFFLINE" + } + } + }; + await Client.PublishAsync($"/v1/devices/{_systemConfig.GatewayName}/topo/update", + JsonConvert.SerializeObject(deviceOnLine)); + break; + } } catch (Exception ex) { - _logger.LogError($"DeviceDisconnected:{DeviceName}", ex); + _logger.LogError($"DeviceDisconnected:{device.DeviceName}", ex); } - } + + public async Task DeviceAdded(Device device) + { + try + { + if (_systemConfig != null) + switch (_systemConfig.IoTPlatformType) + { + case IoTPlatformType.HuaWei: + var topic = $"/v1/devices/{_systemConfig.GatewayName}/topo/add"; + + var addDeviceDto = new HwAddDeviceDto + { + MId = new Random().NextInt64() //命令ID + }; + addDeviceDto.DeviceInfos.Add( + new DeviceInfo + { + NodeId = device.DeviceName, + Name = device.DeviceName, + Description = device.Description, + ManufacturerId = "Test_n", + ProductType = "A_n" + } + ); + + await Client.PublishAsync(topic, + JsonConvert.SerializeObject(addDeviceDto)); + break; + } + } + catch (Exception ex) + { + _logger.LogError($"DeviceAdded:{device.DeviceName}", ex); + } + } + + + public async Task DeviceDeleted(Device device) + { + try + { + if (_systemConfig != null) + switch (_systemConfig.IoTPlatformType) + { + case IoTPlatformType.HuaWei: + var topic = $"/v1/devices/{_systemConfig.GatewayName}/topo/delete"; + + var deleteDeviceDto = new HwDeleteDeviceDto + { + Id = new Random().NextInt64(), //命令ID + DeviceId = device.DeviceConfigs.FirstOrDefault(x => x.DeviceConfigName == "DeviceId") + ?.Value, + RequestTime = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds, + Request = new() + { + ManufacturerId = "Test_n", + ManufacturerName = "Test_n", + ProductType = "A_n" + } + }; + + await Client.PublishAsync(topic, + JsonConvert.SerializeObject(deleteDeviceDto)); + break; + } + } + catch (Exception ex) + { + _logger.LogError($"DeviceAdded:{device.DeviceName}", ex); + } + } } -} +} \ No newline at end of file diff --git a/Plugins/Plugin/UA.Server/ReferenceNodeManager.cs b/Plugins/Plugin/UA.Server/ReferenceNodeManager.cs index c3a3b08..35e0524 100644 --- a/Plugins/Plugin/UA.Server/ReferenceNodeManager.cs +++ b/Plugins/Plugin/UA.Server/ReferenceNodeManager.cs @@ -49,6 +49,7 @@ namespace Quickstarts.ReferenceServer public class ReferenceNodeManager : CustomNodeManager2 { #region Constructors + /// /// Initializes the node manager. /// @@ -69,9 +70,11 @@ namespace Quickstarts.ReferenceServer m_dynamicNodes = new List(); m_iotgatewayNodes = new List(); } + #endregion #region IDisposable Members + /// /// An overrideable version of the Dispose. /// @@ -82,9 +85,11 @@ namespace Quickstarts.ReferenceServer // TBD } } + #endregion #region INodeIdFactory Members + /// /// Creates the NodeId for the specified node. /// @@ -104,9 +109,11 @@ namespace Quickstarts.ReferenceServer return node.NodeId; } + #endregion #region Private Helper Functions + private static bool IsUnsignedAnalogType(BuiltInType builtInType) { if (builtInType == BuiltInType.Byte || @@ -116,6 +123,7 @@ namespace Quickstarts.ReferenceServer { return true; } + return false; } @@ -135,6 +143,7 @@ namespace Quickstarts.ReferenceServer case BuiltInType.Double: return true; } + return false; } @@ -166,9 +175,11 @@ namespace Quickstarts.ReferenceServer return new Range(System.SByte.MaxValue, System.SByte.MinValue); } } + #endregion #region INodeManager Members + /// /// Does any initialization required before the address space can be used. /// @@ -199,60 +210,97 @@ namespace Quickstarts.ReferenceServer try { #region Scalar_Static + FolderState scalarFolder = CreateFolder(root, "Scalar", "Scalar"); - BaseDataVariableState scalarInstructions = CreateVariable(scalarFolder, "Scalar_Instructions", "Scalar_Instructions", DataTypeIds.String, ValueRanks.Scalar); + BaseDataVariableState scalarInstructions = CreateVariable(scalarFolder, "Scalar_Instructions", + "Scalar_Instructions", DataTypeIds.String, ValueRanks.Scalar); scalarInstructions.Value = "A library of Read/Write Variables of all supported data-types."; variables.Add(scalarInstructions); FolderState staticFolder = CreateFolder(scalarFolder, "Scalar_Static", "Scalar_Static"); const string scalarStatic = "Scalar_Static_"; - variables.Add(CreateVariable(staticFolder, scalarStatic + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Double", "Double", DataTypeIds.Double, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Float", "Float", DataTypeIds.Float, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Number", "Number", DataTypeIds.Number, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "String", "String", DataTypeIds.String, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "Variant", "Variant", BuiltInType.Variant, ValueRanks.Scalar)); - variables.Add(CreateVariable(staticFolder, scalarStatic + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Boolean", "Boolean", DataTypeIds.Boolean, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Byte", "Byte", DataTypeIds.Byte, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "ByteString", "ByteString", + DataTypeIds.ByteString, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "DateTime", "DateTime", + DataTypeIds.DateTime, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Double", "Double", DataTypeIds.Double, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Duration", "Duration", + DataTypeIds.Duration, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Float", "Float", DataTypeIds.Float, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Guid", "Guid", DataTypeIds.Guid, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Int16", "Int16", DataTypeIds.Int16, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Int32", "Int32", DataTypeIds.Int32, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Int64", "Int64", DataTypeIds.Int64, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Integer", "Integer", DataTypeIds.Integer, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "LocaleId", "LocaleId", + DataTypeIds.LocaleId, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "LocalizedText", "LocalizedText", + DataTypeIds.LocalizedText, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "NodeId", "NodeId", DataTypeIds.NodeId, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Number", "Number", DataTypeIds.Number, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "QualifiedName", "QualifiedName", + DataTypeIds.QualifiedName, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "SByte", "SByte", DataTypeIds.SByte, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "String", "String", DataTypeIds.String, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "UInt16", "UInt16", DataTypeIds.UInt16, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "UInt32", "UInt32", DataTypeIds.UInt32, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "UInt64", "UInt64", DataTypeIds.UInt64, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "UInteger", "UInteger", + DataTypeIds.UInteger, ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "UtcTime", "UtcTime", DataTypeIds.UtcTime, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "Variant", "Variant", BuiltInType.Variant, + ValueRanks.Scalar)); + variables.Add(CreateVariable(staticFolder, scalarStatic + "XmlElement", "XmlElement", + DataTypeIds.XmlElement, ValueRanks.Scalar)); - BaseDataVariableState decimalVariable = CreateVariable(staticFolder, scalarStatic + "Decimal", "Decimal", DataTypeIds.DecimalDataType, ValueRanks.Scalar); + BaseDataVariableState decimalVariable = CreateVariable(staticFolder, scalarStatic + "Decimal", + "Decimal", DataTypeIds.DecimalDataType, ValueRanks.Scalar); // Set an arbitrary precision decimal value. - BigInteger largeInteger = BigInteger.Parse("1234567890123546789012345678901234567890123456789012345"); + BigInteger largeInteger = + BigInteger.Parse("1234567890123546789012345678901234567890123456789012345"); DecimalDataType decimalValue = new DecimalDataType(); decimalValue.Scale = 100; decimalValue.Value = largeInteger.ToByteArray(); decimalVariable.Value = decimalValue; variables.Add(decimalVariable); + #endregion #region Scalar_Static_Arrays + FolderState arraysFolder = CreateFolder(staticFolder, "Scalar_Static_Arrays", "Arrays"); const string staticArrays = "Scalar_Static_Arrays_"; - variables.Add(CreateVariable(arraysFolder, staticArrays + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Boolean", "Boolean", DataTypeIds.Boolean, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Byte", "Byte", DataTypeIds.Byte, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "ByteString", "ByteString", + DataTypeIds.ByteString, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "DateTime", "DateTime", + DataTypeIds.DateTime, ValueRanks.OneDimension)); - BaseDataVariableState doubleArrayVar = CreateVariable(arraysFolder, staticArrays + "Double", "Double", DataTypeIds.Double, ValueRanks.OneDimension); + BaseDataVariableState doubleArrayVar = CreateVariable(arraysFolder, staticArrays + "Double", + "Double", DataTypeIds.Double, ValueRanks.OneDimension); // Set the first elements of the array to a smaller value. double[] doubleArrayVal = doubleArrayVar.Value as double[]; doubleArrayVal[0] %= 10E+10; @@ -261,9 +309,11 @@ namespace Quickstarts.ReferenceServer doubleArrayVal[3] %= 10E+10; variables.Add(doubleArrayVar); - variables.Add(CreateVariable(arraysFolder, staticArrays + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Duration", "Duration", + DataTypeIds.Duration, ValueRanks.OneDimension)); - BaseDataVariableState floatArrayVar = CreateVariable(arraysFolder, staticArrays + "Float", "Float", DataTypeIds.Float, ValueRanks.OneDimension); + BaseDataVariableState floatArrayVar = CreateVariable(arraysFolder, staticArrays + "Float", "Float", + DataTypeIds.Float, ValueRanks.OneDimension); // Set the first elements of the array to a smaller value. float[] floatArrayVal = floatArrayVar.Value as float[]; floatArrayVal[0] %= 0xf10E + 4; @@ -272,237 +322,431 @@ namespace Quickstarts.ReferenceServer floatArrayVal[3] %= 0xf10E + 4; variables.Add(floatArrayVar); - variables.Add(CreateVariable(arraysFolder, staticArrays + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "Number", "Number", DataTypeIds.Number, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Guid", "Guid", DataTypeIds.Guid, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Int16", "Int16", DataTypeIds.Int16, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Int32", "Int32", DataTypeIds.Int32, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Int64", "Int64", DataTypeIds.Int64, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Integer", "Integer", DataTypeIds.Integer, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "LocaleId", "LocaleId", + DataTypeIds.LocaleId, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "LocalizedText", "LocalizedText", + DataTypeIds.LocalizedText, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "NodeId", "NodeId", DataTypeIds.NodeId, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Number", "Number", DataTypeIds.Number, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "QualifiedName", "QualifiedName", + DataTypeIds.QualifiedName, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "SByte", "SByte", DataTypeIds.SByte, + ValueRanks.OneDimension)); - BaseDataVariableState stringArrayVar = CreateVariable(arraysFolder, staticArrays + "String", "String", DataTypeIds.String, ValueRanks.OneDimension); - stringArrayVar.Value = new string[] { + BaseDataVariableState stringArrayVar = CreateVariable(arraysFolder, staticArrays + "String", + "String", DataTypeIds.String, ValueRanks.OneDimension); + stringArrayVar.Value = new string[] + { "Лошадь_ Пурпурово( Змейка( Слон", "猪 绿色 绵羊 大象~ 狗 菠萝 猪鼠", "Лошадь Овцы Голубика Овцы Змейка", "Чернота` Дракон Бело Дракон", "Horse# Black Lemon Lemon Grape", "猫< パイナップル; ドラゴン 犬 モモ", - "레몬} 빨간% 자주색 쥐 백색; 들" , + "레몬} 빨간% 자주색 쥐 백색; 들", "Yellow Sheep Peach Elephant Cow", "Крыса Корова Свинья Собака Кот", - "龙_ 绵羊 大象 芒果; 猫'" }; + "龙_ 绵羊 大象 芒果; 猫'" + }; variables.Add(stringArrayVar); - variables.Add(CreateVariable(arraysFolder, staticArrays + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "Variant", "Variant", BuiltInType.Variant, ValueRanks.OneDimension)); - variables.Add(CreateVariable(arraysFolder, staticArrays + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "UInt16", "UInt16", DataTypeIds.UInt16, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "UInt32", "UInt32", DataTypeIds.UInt32, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "UInt64", "UInt64", DataTypeIds.UInt64, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "UInteger", "UInteger", + DataTypeIds.UInteger, ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "UtcTime", "UtcTime", DataTypeIds.UtcTime, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "Variant", "Variant", BuiltInType.Variant, + ValueRanks.OneDimension)); + variables.Add(CreateVariable(arraysFolder, staticArrays + "XmlElement", "XmlElement", + DataTypeIds.XmlElement, ValueRanks.OneDimension)); + #endregion #region Scalar_Static_Arrays2D + FolderState arrays2DFolder = CreateFolder(staticFolder, "Scalar_Static_Arrays2D", "Arrays2D"); const string staticArrays2D = "Scalar_Static_Arrays2D_"; - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Double", "Double", DataTypeIds.Double, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Float", "Float", DataTypeIds.Float, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Number", "Number", DataTypeIds.Number, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "String", "String", DataTypeIds.String, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Variant", "Variant", BuiltInType.Variant, ValueRanks.TwoDimensions)); - variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Boolean", "Boolean", + DataTypeIds.Boolean, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Byte", "Byte", DataTypeIds.Byte, + ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "ByteString", "ByteString", + DataTypeIds.ByteString, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "DateTime", "DateTime", + DataTypeIds.DateTime, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Double", "Double", + DataTypeIds.Double, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Duration", "Duration", + DataTypeIds.Duration, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Float", "Float", DataTypeIds.Float, + ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Guid", "Guid", DataTypeIds.Guid, + ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Int16", "Int16", DataTypeIds.Int16, + ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Int32", "Int32", DataTypeIds.Int32, + ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Int64", "Int64", DataTypeIds.Int64, + ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Integer", "Integer", + DataTypeIds.Integer, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "LocaleId", "LocaleId", + DataTypeIds.LocaleId, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "LocalizedText", "LocalizedText", + DataTypeIds.LocalizedText, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "NodeId", "NodeId", + DataTypeIds.NodeId, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Number", "Number", + DataTypeIds.Number, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "QualifiedName", "QualifiedName", + DataTypeIds.QualifiedName, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "SByte", "SByte", DataTypeIds.SByte, + ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "String", "String", + DataTypeIds.String, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInt16", "UInt16", + DataTypeIds.UInt16, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInt32", "UInt32", + DataTypeIds.UInt32, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInt64", "UInt64", + DataTypeIds.UInt64, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UInteger", "UInteger", + DataTypeIds.UInteger, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "UtcTime", "UtcTime", + DataTypeIds.UtcTime, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "Variant", "Variant", + BuiltInType.Variant, ValueRanks.TwoDimensions)); + variables.Add(CreateVariable(arrays2DFolder, staticArrays2D + "XmlElement", "XmlElement", + DataTypeIds.XmlElement, ValueRanks.TwoDimensions)); + #endregion #region Scalar_Static_ArrayDynamic - FolderState arrayDymnamicFolder = CreateFolder(staticFolder, "Scalar_Static_ArrayDymamic", "ArrayDymamic"); + + FolderState arrayDymnamicFolder = + CreateFolder(staticFolder, "Scalar_Static_ArrayDymamic", "ArrayDymamic"); const string staticArraysDynamic = "Scalar_Static_ArrayDynamic_"; - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Double", "Double", DataTypeIds.Double, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Float", "Float", DataTypeIds.Float, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Number", "Number", DataTypeIds.Number, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "String", "String", DataTypeIds.String, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Variant", "Variant", BuiltInType.Variant, ValueRanks.OneOrMoreDimensions)); - variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Boolean", "Boolean", + DataTypeIds.Boolean, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Byte", "Byte", + DataTypeIds.Byte, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "ByteString", "ByteString", + DataTypeIds.ByteString, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "DateTime", "DateTime", + DataTypeIds.DateTime, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Double", "Double", + DataTypeIds.Double, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Duration", "Duration", + DataTypeIds.Duration, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Float", "Float", + DataTypeIds.Float, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Guid", "Guid", + DataTypeIds.Guid, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Int16", "Int16", + DataTypeIds.Int16, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Int32", "Int32", + DataTypeIds.Int32, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Int64", "Int64", + DataTypeIds.Int64, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Integer", "Integer", + DataTypeIds.Integer, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "LocaleId", "LocaleId", + DataTypeIds.LocaleId, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "LocalizedText", + "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "NodeId", "NodeId", + DataTypeIds.NodeId, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Number", "Number", + DataTypeIds.Number, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "QualifiedName", + "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "SByte", "SByte", + DataTypeIds.SByte, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "String", "String", + DataTypeIds.String, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInt16", "UInt16", + DataTypeIds.UInt16, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInt32", "UInt32", + DataTypeIds.UInt32, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInt64", "UInt64", + DataTypeIds.UInt64, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UInteger", "UInteger", + DataTypeIds.UInteger, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "UtcTime", "UtcTime", + DataTypeIds.UtcTime, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "Variant", "Variant", + BuiltInType.Variant, ValueRanks.OneOrMoreDimensions)); + variables.Add(CreateVariable(arrayDymnamicFolder, staticArraysDynamic + "XmlElement", "XmlElement", + DataTypeIds.XmlElement, ValueRanks.OneOrMoreDimensions)); + #endregion #region Scalar_Static_Mass + // create 100 instances of each static scalar type FolderState massFolder = CreateFolder(staticFolder, "Scalar_Static_Mass", "Mass"); const string staticMass = "Scalar_Static_Mass_"; - variables.AddRange(CreateVariables(massFolder, staticMass + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Double", "Double", DataTypeIds.Double, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Float", "Float", DataTypeIds.Float, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Number", "Number", DataTypeIds.Number, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "String", "String", DataTypeIds.String, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "Variant", "Variant", BuiltInType.Variant, ValueRanks.Scalar, 100)); - variables.AddRange(CreateVariables(massFolder, staticMass + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Boolean", "Boolean", + DataTypeIds.Boolean, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Byte", "Byte", DataTypeIds.Byte, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "ByteString", "ByteString", + DataTypeIds.ByteString, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "DateTime", "DateTime", + DataTypeIds.DateTime, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Double", "Double", DataTypeIds.Double, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Duration", "Duration", + DataTypeIds.Duration, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Float", "Float", DataTypeIds.Float, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Guid", "Guid", DataTypeIds.Guid, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Int16", "Int16", DataTypeIds.Int16, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Int32", "Int32", DataTypeIds.Int32, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Int64", "Int64", DataTypeIds.Int64, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Integer", "Integer", + DataTypeIds.Integer, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "LocalizedText", "LocalizedText", + DataTypeIds.LocalizedText, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "NodeId", "NodeId", DataTypeIds.NodeId, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Number", "Number", DataTypeIds.Number, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "SByte", "SByte", DataTypeIds.SByte, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "String", "String", DataTypeIds.String, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "UInt16", "UInt16", DataTypeIds.UInt16, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "UInt32", "UInt32", DataTypeIds.UInt32, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "UInt64", "UInt64", DataTypeIds.UInt64, + ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "UInteger", "UInteger", + DataTypeIds.UInteger, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "UtcTime", "UtcTime", + DataTypeIds.UtcTime, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "Variant", "Variant", + BuiltInType.Variant, ValueRanks.Scalar, 100)); + variables.AddRange(CreateVariables(massFolder, staticMass + "XmlElement", "XmlElement", + DataTypeIds.XmlElement, ValueRanks.Scalar, 100)); + #endregion #region Scalar_Simulation + FolderState simulationFolder = CreateFolder(scalarFolder, "Scalar_Simulation", "Simulation"); const string scalarSimulation = "Scalar_Simulation_"; - CreateDynamicVariable(simulationFolder, scalarSimulation + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Double", "Double", DataTypeIds.Double, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Float", "Float", DataTypeIds.Float, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Number", "Number", DataTypeIds.Number, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "String", "String", DataTypeIds.String, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Variant", "Variant", BuiltInType.Variant, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Boolean", "Boolean", + DataTypeIds.Boolean, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Byte", "Byte", DataTypeIds.Byte, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "ByteString", "ByteString", + DataTypeIds.ByteString, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "DateTime", "DateTime", + DataTypeIds.DateTime, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Double", "Double", DataTypeIds.Double, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Duration", "Duration", + DataTypeIds.Duration, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Float", "Float", DataTypeIds.Float, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Guid", "Guid", DataTypeIds.Guid, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Int16", "Int16", DataTypeIds.Int16, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Int32", "Int32", DataTypeIds.Int32, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Int64", "Int64", DataTypeIds.Int64, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Integer", "Integer", + DataTypeIds.Integer, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "LocaleId", "LocaleId", + DataTypeIds.LocaleId, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "LocalizedText", "LocalizedText", + DataTypeIds.LocalizedText, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "NodeId", "NodeId", DataTypeIds.NodeId, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Number", "Number", DataTypeIds.Number, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "QualifiedName", "QualifiedName", + DataTypeIds.QualifiedName, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "SByte", "SByte", DataTypeIds.SByte, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "String", "String", DataTypeIds.String, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt16", "UInt16", DataTypeIds.UInt16, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt32", "UInt32", DataTypeIds.UInt32, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt64", "UInt64", DataTypeIds.UInt64, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInteger", "UInteger", + DataTypeIds.UInteger, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UtcTime", "UtcTime", + DataTypeIds.UtcTime, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Variant", "Variant", + BuiltInType.Variant, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "XmlElement", "XmlElement", + DataTypeIds.XmlElement, ValueRanks.Scalar); - BaseDataVariableState intervalVariable = CreateVariable(simulationFolder, scalarSimulation + "Interval", "Interval", DataTypeIds.UInt16, ValueRanks.Scalar); + BaseDataVariableState intervalVariable = CreateVariable(simulationFolder, + scalarSimulation + "Interval", "Interval", DataTypeIds.UInt16, ValueRanks.Scalar); intervalVariable.Value = m_simulationInterval; intervalVariable.OnSimpleWriteValue = OnWriteInterval; - BaseDataVariableState enabledVariable = CreateVariable(simulationFolder, scalarSimulation + "Enabled", "Enabled", DataTypeIds.Boolean, ValueRanks.Scalar); + BaseDataVariableState enabledVariable = CreateVariable(simulationFolder, + scalarSimulation + "Enabled", "Enabled", DataTypeIds.Boolean, ValueRanks.Scalar); enabledVariable.Value = m_simulationEnabled; enabledVariable.OnSimpleWriteValue = OnWriteEnabled; + #endregion #region Scalar_Simulation_Arrays - FolderState arraysSimulationFolder = CreateFolder(simulationFolder, "Scalar_Simulation_Arrays", "Arrays"); + + FolderState arraysSimulationFolder = + CreateFolder(simulationFolder, "Scalar_Simulation_Arrays", "Arrays"); const string simulationArrays = "Scalar_Simulation_Arrays_"; - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Double", "Double", DataTypeIds.Double, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Float", "Float", DataTypeIds.Float, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Number", "Number", DataTypeIds.Number, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "String", "String", DataTypeIds.String, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Variant", "Variant", BuiltInType.Variant, ValueRanks.OneDimension); - CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Boolean", "Boolean", + DataTypeIds.Boolean, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Byte", "Byte", DataTypeIds.Byte, + ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "ByteString", "ByteString", + DataTypeIds.ByteString, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "DateTime", "DateTime", + DataTypeIds.DateTime, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Double", "Double", + DataTypeIds.Double, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Duration", "Duration", + DataTypeIds.Duration, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Float", "Float", + DataTypeIds.Float, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Guid", "Guid", DataTypeIds.Guid, + ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Int16", "Int16", + DataTypeIds.Int16, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Int32", "Int32", + DataTypeIds.Int32, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Int64", "Int64", + DataTypeIds.Int64, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Integer", "Integer", + DataTypeIds.Integer, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "LocaleId", "LocaleId", + DataTypeIds.LocaleId, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "LocalizedText", "LocalizedText", + DataTypeIds.LocalizedText, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "NodeId", "NodeId", + DataTypeIds.NodeId, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Number", "Number", + DataTypeIds.Number, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "QualifiedName", "QualifiedName", + DataTypeIds.QualifiedName, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "SByte", "SByte", + DataTypeIds.SByte, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "String", "String", + DataTypeIds.String, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInt16", "UInt16", + DataTypeIds.UInt16, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInt32", "UInt32", + DataTypeIds.UInt32, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInt64", "UInt64", + DataTypeIds.UInt64, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UInteger", "UInteger", + DataTypeIds.UInteger, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "UtcTime", "UtcTime", + DataTypeIds.UtcTime, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "Variant", "Variant", + BuiltInType.Variant, ValueRanks.OneDimension); + CreateDynamicVariable(arraysSimulationFolder, simulationArrays + "XmlElement", "XmlElement", + DataTypeIds.XmlElement, ValueRanks.OneDimension); + #endregion #region Scalar_Simulation_Mass + FolderState massSimulationFolder = CreateFolder(simulationFolder, "Scalar_Simulation_Mass", "Mass"); const string massSimulation = "Scalar_Simulation_Mass_"; - CreateDynamicVariables(massSimulationFolder, massSimulation + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Double", "Double", DataTypeIds.Double, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Float", "Float", DataTypeIds.Float, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Number", "Number", DataTypeIds.Number, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "String", "String", DataTypeIds.String, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "Variant", "Variant", BuiltInType.Variant, ValueRanks.Scalar, 100); - CreateDynamicVariables(massSimulationFolder, massSimulation + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Boolean", "Boolean", + DataTypeIds.Boolean, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Byte", "Byte", DataTypeIds.Byte, + ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "ByteString", "ByteString", + DataTypeIds.ByteString, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "DateTime", "DateTime", + DataTypeIds.DateTime, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Double", "Double", + DataTypeIds.Double, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Duration", "Duration", + DataTypeIds.Duration, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Float", "Float", DataTypeIds.Float, + ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Guid", "Guid", DataTypeIds.Guid, + ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Int16", "Int16", DataTypeIds.Int16, + ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Int32", "Int32", DataTypeIds.Int32, + ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Int64", "Int64", DataTypeIds.Int64, + ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Integer", "Integer", + DataTypeIds.Integer, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "LocaleId", "LocaleId", + DataTypeIds.LocaleId, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "LocalizedText", "LocalizedText", + DataTypeIds.LocalizedText, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "NodeId", "NodeId", + DataTypeIds.NodeId, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Number", "Number", + DataTypeIds.Number, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "QualifiedName", "QualifiedName", + DataTypeIds.QualifiedName, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "SByte", "SByte", DataTypeIds.SByte, + ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "String", "String", + DataTypeIds.String, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "UInt16", "UInt16", + DataTypeIds.UInt16, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "UInt32", "UInt32", + DataTypeIds.UInt32, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "UInt64", "UInt64", + DataTypeIds.UInt64, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "UInteger", "UInteger", + DataTypeIds.UInteger, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "UtcTime", "UtcTime", + DataTypeIds.UtcTime, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "Variant", "Variant", + BuiltInType.Variant, ValueRanks.Scalar, 100); + CreateDynamicVariables(massSimulationFolder, massSimulation + "XmlElement", "XmlElement", + DataTypeIds.XmlElement, ValueRanks.Scalar, 100); + #endregion #region DataAccess_DataItem + FolderState daFolder = CreateFolder(root, "DataAccess", "DataAccess"); - BaseDataVariableState daInstructions = CreateVariable(daFolder, "DataAccess_Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + BaseDataVariableState daInstructions = CreateVariable(daFolder, "DataAccess_Instructions", + "Instructions", DataTypeIds.String, ValueRanks.Scalar); daInstructions.Value = "A library of Read/Write Variables of all supported data-types."; variables.Add(daInstructions); @@ -511,7 +755,8 @@ namespace Quickstarts.ReferenceServer foreach (string name in Enum.GetNames(typeof(BuiltInType))) { - DataItemState item = CreateDataItemVariable(dataItemFolder, daDataItem + name, name, (BuiltInType)Enum.Parse(typeof(BuiltInType), name), ValueRanks.Scalar); + DataItemState item = CreateDataItemVariable(dataItemFolder, daDataItem + name, name, + (BuiltInType)Enum.Parse(typeof(BuiltInType), name), ValueRanks.Scalar); // set initial value to String.Empty for String node. if (name == BuiltInType.String.ToString()) @@ -519,9 +764,11 @@ namespace Quickstarts.ReferenceServer item.Value = String.Empty; } } + #endregion #region DataAccess_AnalogType + FolderState analogItemFolder = CreateFolder(daFolder, "DataAccess_AnalogType", "AnalogType"); const string daAnalogItem = "DataAccess_AnalogType_"; @@ -530,7 +777,8 @@ namespace Quickstarts.ReferenceServer BuiltInType builtInType = (BuiltInType)Enum.Parse(typeof(BuiltInType), name); if (IsAnalogType(builtInType)) { - AnalogItemState item = CreateAnalogItemVariable(analogItemFolder, daAnalogItem + name, name, builtInType, ValueRanks.Scalar); + AnalogItemState item = CreateAnalogItemVariable(analogItemFolder, daAnalogItem + name, name, + builtInType, ValueRanks.Scalar); if (builtInType == BuiltInType.Int64 || builtInType == BuiltInType.UInt64) @@ -552,101 +800,233 @@ namespace Quickstarts.ReferenceServer } } } + #endregion #region DataAccess_AnalogType_Array - FolderState analogArrayFolder = CreateFolder(analogItemFolder, "DataAccess_AnalogType_Array", "Array"); + + FolderState analogArrayFolder = + CreateFolder(analogItemFolder, "DataAccess_AnalogType_Array", "Array"); const string daAnalogArray = "DataAccess_AnalogType_Array_"; - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Boolean", "Boolean", BuiltInType.Boolean, ValueRanks.OneDimension, new Boolean[] { true, false, true, false, true, false, true, false, true }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Byte", "Byte", BuiltInType.Byte, ValueRanks.OneDimension, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "ByteString", "ByteString", BuiltInType.ByteString, ValueRanks.OneDimension, new Byte[][] { new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "DateTime", "DateTime", BuiltInType.DateTime, ValueRanks.OneDimension, new DateTime[] { DateTime.MinValue, DateTime.MaxValue, DateTime.MinValue, DateTime.MaxValue, DateTime.MinValue, DateTime.MaxValue, DateTime.MinValue, DateTime.MaxValue, DateTime.MinValue }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Double", "Double", BuiltInType.Double, ValueRanks.OneDimension, new double[] { 9.00001d, 9.0002d, 9.003d, 9.04d, 9.5d, 9.06d, 9.007d, 9.008d, 9.0009d }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.OneDimension, new double[] { 9.00001d, 9.0002d, 9.003d, 9.04d, 9.5d, 9.06d, 9.007d, 9.008d, 9.0009d }, null); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Float", "Float", BuiltInType.Float, ValueRanks.OneDimension, new float[] { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 1.1f, 2.2f, 3.3f, 4.4f, 5.5f }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Guid", "Guid", BuiltInType.Guid, ValueRanks.OneDimension, new Guid[] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Int16", "Int16", BuiltInType.Int16, ValueRanks.OneDimension, new Int16[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Int32", "Int32", BuiltInType.Int32, ValueRanks.OneDimension, new Int32[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Int64", "Int64", BuiltInType.Int64, ValueRanks.OneDimension, new Int64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Integer", "Integer", BuiltInType.Integer, ValueRanks.OneDimension, new Int64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.OneDimension, new String[] { "en", "fr", "de", "en", "fr", "de", "en", "fr", "de", "en" }, null); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "LocalizedText", "LocalizedText", BuiltInType.LocalizedText, ValueRanks.OneDimension, new LocalizedText[] { new LocalizedText("en", "Hello World1"), new LocalizedText("en", "Hello World2"), new LocalizedText("en", "Hello World3"), new LocalizedText("en", "Hello World4"), new LocalizedText("en", "Hello World5"), new LocalizedText("en", "Hello World6"), new LocalizedText("en", "Hello World7"), new LocalizedText("en", "Hello World8"), new LocalizedText("en", "Hello World9"), new LocalizedText("en", "Hello World10") }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "NodeId", "NodeId", BuiltInType.NodeId, ValueRanks.OneDimension, new NodeId[] { new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()) }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Number", "Number", BuiltInType.Number, ValueRanks.OneDimension, new Int16[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "QualifiedName", "QualifiedName", BuiltInType.QualifiedName, ValueRanks.OneDimension, new QualifiedName[] { "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", "q9"}); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "SByte", "SByte", BuiltInType.SByte, ValueRanks.OneDimension, new SByte[] { 10, 20, 30, 40, 50, 60, 70, 80, 90 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "String", "String", BuiltInType.String, ValueRanks.OneDimension, new String[] { "a00", "b10", "c20", "d30", "e40", "f50", "g60", "h70", "i80", "j90" }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInt16", "UInt16", BuiltInType.UInt16, ValueRanks.OneDimension, new UInt16[] { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInt32", "UInt32", BuiltInType.UInt32, ValueRanks.OneDimension, new UInt32[] { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInt64", "UInt64", BuiltInType.UInt64, ValueRanks.OneDimension, new UInt64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInteger", "UInteger", BuiltInType.UInteger, ValueRanks.OneDimension, new UInt64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.OneDimension, new DateTime[] { DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), DateTime.MinValue.ToUniversalTime() }, null); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Variant", "Variant", BuiltInType.Variant, ValueRanks.OneDimension, new Variant[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Boolean", "Boolean", + BuiltInType.Boolean, ValueRanks.OneDimension, + new Boolean[] { true, false, true, false, true, false, true, false, true }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Byte", "Byte", BuiltInType.Byte, + ValueRanks.OneDimension, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "ByteString", "ByteString", + BuiltInType.ByteString, ValueRanks.OneDimension, + new Byte[][] + { + new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, + new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, + new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, + new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, + new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, new Byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } + }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "DateTime", "DateTime", + BuiltInType.DateTime, ValueRanks.OneDimension, + new DateTime[] + { + DateTime.MinValue, DateTime.MaxValue, DateTime.MinValue, DateTime.MaxValue, + DateTime.MinValue, DateTime.MaxValue, DateTime.MinValue, DateTime.MaxValue, + DateTime.MinValue + }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Double", "Double", BuiltInType.Double, + ValueRanks.OneDimension, + new double[] { 9.00001d, 9.0002d, 9.003d, 9.04d, 9.5d, 9.06d, 9.007d, 9.008d, 9.0009d }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Duration", "Duration", + DataTypeIds.Duration, ValueRanks.OneDimension, + new double[] { 9.00001d, 9.0002d, 9.003d, 9.04d, 9.5d, 9.06d, 9.007d, 9.008d, 9.0009d }, null); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Float", "Float", BuiltInType.Float, + ValueRanks.OneDimension, + new float[] { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 1.1f, 2.2f, 3.3f, 4.4f, 5.5f }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Guid", "Guid", BuiltInType.Guid, + ValueRanks.OneDimension, + new Guid[] + { + Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), + Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() + }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Int16", "Int16", BuiltInType.Int16, + ValueRanks.OneDimension, new Int16[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Int32", "Int32", BuiltInType.Int32, + ValueRanks.OneDimension, new Int32[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Int64", "Int64", BuiltInType.Int64, + ValueRanks.OneDimension, new Int64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Integer", "Integer", + BuiltInType.Integer, ValueRanks.OneDimension, + new Int64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "LocaleId", "LocaleId", + DataTypeIds.LocaleId, ValueRanks.OneDimension, + new String[] { "en", "fr", "de", "en", "fr", "de", "en", "fr", "de", "en" }, null); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "LocalizedText", "LocalizedText", + BuiltInType.LocalizedText, ValueRanks.OneDimension, + new LocalizedText[] + { + new LocalizedText("en", "Hello World1"), new LocalizedText("en", "Hello World2"), + new LocalizedText("en", "Hello World3"), new LocalizedText("en", "Hello World4"), + new LocalizedText("en", "Hello World5"), new LocalizedText("en", "Hello World6"), + new LocalizedText("en", "Hello World7"), new LocalizedText("en", "Hello World8"), + new LocalizedText("en", "Hello World9"), new LocalizedText("en", "Hello World10") + }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "NodeId", "NodeId", BuiltInType.NodeId, + ValueRanks.OneDimension, + new NodeId[] + { + new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), + new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), + new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), new NodeId(Guid.NewGuid()), + new NodeId(Guid.NewGuid()) + }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Number", "Number", BuiltInType.Number, + ValueRanks.OneDimension, new Int16[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "QualifiedName", "QualifiedName", + BuiltInType.QualifiedName, ValueRanks.OneDimension, + new QualifiedName[] { "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", "q9" }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "SByte", "SByte", BuiltInType.SByte, + ValueRanks.OneDimension, new SByte[] { 10, 20, 30, 40, 50, 60, 70, 80, 90 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "String", "String", BuiltInType.String, + ValueRanks.OneDimension, + new String[] { "a00", "b10", "c20", "d30", "e40", "f50", "g60", "h70", "i80", "j90" }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInt16", "UInt16", BuiltInType.UInt16, + ValueRanks.OneDimension, new UInt16[] { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInt32", "UInt32", BuiltInType.UInt32, + ValueRanks.OneDimension, new UInt32[] { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInt64", "UInt64", BuiltInType.UInt64, + ValueRanks.OneDimension, new UInt64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UInteger", "UInteger", + BuiltInType.UInteger, ValueRanks.OneDimension, + new UInt64[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "UtcTime", "UtcTime", + DataTypeIds.UtcTime, ValueRanks.OneDimension, + new DateTime[] + { + DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), + DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), + DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), + DateTime.MinValue.ToUniversalTime(), DateTime.MaxValue.ToUniversalTime(), + DateTime.MinValue.ToUniversalTime() + }, null); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "Variant", "Variant", + BuiltInType.Variant, ValueRanks.OneDimension, + new Variant[] { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); XmlDocument doc1 = new XmlDocument(); - CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "XmlElement", "XmlElement", BuiltInType.XmlElement, ValueRanks.OneDimension, new XmlElement[] { doc1.CreateElement("tag1"), doc1.CreateElement("tag2"), doc1.CreateElement("tag3"), doc1.CreateElement("tag4"), doc1.CreateElement("tag5"), doc1.CreateElement("tag6"), doc1.CreateElement("tag7"), doc1.CreateElement("tag8"), doc1.CreateElement("tag9"), doc1.CreateElement("tag10") }); + CreateAnalogItemVariable(analogArrayFolder, daAnalogArray + "XmlElement", "XmlElement", + BuiltInType.XmlElement, ValueRanks.OneDimension, + new XmlElement[] + { + doc1.CreateElement("tag1"), doc1.CreateElement("tag2"), doc1.CreateElement("tag3"), + doc1.CreateElement("tag4"), doc1.CreateElement("tag5"), doc1.CreateElement("tag6"), + doc1.CreateElement("tag7"), doc1.CreateElement("tag8"), doc1.CreateElement("tag9"), + doc1.CreateElement("tag10") + }); + #endregion #region DataAccess_DiscreteType + FolderState discreteTypeFolder = CreateFolder(daFolder, "DataAccess_DiscreteType", "DiscreteType"); - FolderState twoStateDiscreteFolder = CreateFolder(discreteTypeFolder, "DataAccess_TwoStateDiscreteType", "TwoStateDiscreteType"); + FolderState twoStateDiscreteFolder = CreateFolder(discreteTypeFolder, + "DataAccess_TwoStateDiscreteType", "TwoStateDiscreteType"); const string daTwoStateDiscrete = "DataAccess_TwoStateDiscreteType_"; // Add our Nodes to the folder, and specify their customized discrete enumerations - CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "001", "001", "red", "blue"); - CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "002", "002", "open", "close"); - CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "003", "003", "up", "down"); - CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "004", "004", "left", "right"); - CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "005", "005", "circle", "cross"); + CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "001", "001", "red", + "blue"); + CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "002", "002", + "open", "close"); + CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "003", "003", "up", + "down"); + CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "004", "004", + "left", "right"); + CreateTwoStateDiscreteItemVariable(twoStateDiscreteFolder, daTwoStateDiscrete + "005", "005", + "circle", "cross"); - FolderState multiStateDiscreteFolder = CreateFolder(discreteTypeFolder, "DataAccess_MultiStateDiscreteType", "MultiStateDiscreteType"); + FolderState multiStateDiscreteFolder = CreateFolder(discreteTypeFolder, + "DataAccess_MultiStateDiscreteType", "MultiStateDiscreteType"); const string daMultiStateDiscrete = "DataAccess_MultiStateDiscreteType_"; // Add our Nodes to the folder, and specify their customized discrete enumerations - CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "001", "001", "open", "closed", "jammed"); - CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "002", "002", "red", "green", "blue", "cyan"); - CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "003", "003", "lolo", "lo", "normal", "hi", "hihi"); - CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "004", "004", "left", "right", "center"); - CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "005", "005", "circle", "cross", "triangle"); + CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "001", "001", + "open", "closed", "jammed"); + CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "002", "002", + "red", "green", "blue", "cyan"); + CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "003", "003", + "lolo", "lo", "normal", "hi", "hihi"); + CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "004", "004", + "left", "right", "center"); + CreateMultiStateDiscreteItemVariable(multiStateDiscreteFolder, daMultiStateDiscrete + "005", "005", + "circle", "cross", "triangle"); + #endregion #region DataAccess_MultiStateValueDiscreteType - FolderState multiStateValueDiscreteFolder = CreateFolder(discreteTypeFolder, "DataAccess_MultiStateValueDiscreteType", "MultiStateValueDiscreteType"); + + FolderState multiStateValueDiscreteFolder = CreateFolder(discreteTypeFolder, + "DataAccess_MultiStateValueDiscreteType", "MultiStateValueDiscreteType"); const string daMultiStateValueDiscrete = "DataAccess_MultiStateValueDiscreteType_"; // Add our Nodes to the folder, and specify their customized discrete enumerations - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "001", "001", new string[] { "open", "closed", "jammed" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "002", "002", new string[] { "red", "green", "blue", "cyan" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "003", "003", new string[] { "lolo", "lo", "normal", "hi", "hihi" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "004", "004", new string[] { "left", "right", "center" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "005", "005", new string[] { "circle", "cross", "triangle" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "001", "001", new string[] { "open", "closed", "jammed" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "002", "002", new string[] { "red", "green", "blue", "cyan" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "003", "003", + new string[] { "lolo", "lo", "normal", "hi", "hihi" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "004", "004", new string[] { "left", "right", "center" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "005", "005", new string[] { "circle", "cross", "triangle" }); // Add our Nodes to the folder and specify varying data types - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "Byte", "Byte", DataTypeIds.Byte, new string[] { "open", "closed", "jammed" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "Int16", "Int16", DataTypeIds.Int16, new string[] { "red", "green", "blue", "cyan" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "Int32", "Int32", DataTypeIds.Int32, new string[] { "lolo", "lo", "normal", "hi", "hihi" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "Int64", "Int64", DataTypeIds.Int64, new string[] { "left", "right", "center" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "SByte", "SByte", DataTypeIds.SByte, new string[] { "open", "closed", "jammed" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "UInt16", "UInt16", DataTypeIds.UInt16, new string[] { "red", "green", "blue", "cyan" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "UInt32", "UInt32", DataTypeIds.UInt32, new string[] { "lolo", "lo", "normal", "hi", "hihi" }); - CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, daMultiStateValueDiscrete + "UInt64", "UInt64", DataTypeIds.UInt64, new string[] { "left", "right", "center" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "Byte", "Byte", DataTypeIds.Byte, + new string[] { "open", "closed", "jammed" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "Int16", "Int16", DataTypeIds.Int16, + new string[] { "red", "green", "blue", "cyan" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "Int32", "Int32", DataTypeIds.Int32, + new string[] { "lolo", "lo", "normal", "hi", "hihi" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "Int64", "Int64", DataTypeIds.Int64, + new string[] { "left", "right", "center" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "SByte", "SByte", DataTypeIds.SByte, + new string[] { "open", "closed", "jammed" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "UInt16", "UInt16", DataTypeIds.UInt16, + new string[] { "red", "green", "blue", "cyan" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "UInt32", "UInt32", DataTypeIds.UInt32, + new string[] { "lolo", "lo", "normal", "hi", "hihi" }); + CreateMultiStateValueDiscreteItemVariable(multiStateValueDiscreteFolder, + daMultiStateValueDiscrete + "UInt64", "UInt64", DataTypeIds.UInt64, + new string[] { "left", "right", "center" }); #endregion #region References + FolderState referencesFolder = CreateFolder(root, "References", "References"); const string referencesPrefix = "References_"; - BaseDataVariableState referencesInstructions = CreateVariable(referencesFolder, "References_Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); - referencesInstructions.Value = "This folder will contain nodes that have specific Reference configurations."; + BaseDataVariableState referencesInstructions = CreateVariable(referencesFolder, + "References_Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + referencesInstructions.Value = + "This folder will contain nodes that have specific Reference configurations."; variables.Add(referencesInstructions); // create variable nodes with specific references - BaseDataVariableState hasForwardReference = CreateMeshVariable(referencesFolder, referencesPrefix + "HasForwardReference", "HasForwardReference"); + BaseDataVariableState hasForwardReference = CreateMeshVariable(referencesFolder, + referencesPrefix + "HasForwardReference", "HasForwardReference"); hasForwardReference.AddReference(ReferenceTypes.HasCause, false, variables[0].NodeId); variables.Add(hasForwardReference); - BaseDataVariableState hasInverseReference = CreateMeshVariable(referencesFolder, referencesPrefix + "HasInverseReference", "HasInverseReference"); + BaseDataVariableState hasInverseReference = CreateMeshVariable(referencesFolder, + referencesPrefix + "HasInverseReference", "HasInverseReference"); hasInverseReference.AddReference(ReferenceTypes.HasCause, true, variables[0].NodeId); variables.Add(hasInverseReference); @@ -658,7 +1038,9 @@ namespace Quickstarts.ReferenceServer { referenceString += i.ToString(); } - BaseDataVariableState has3ForwardReferences = CreateMeshVariable(referencesFolder, referencesPrefix + referenceString, referenceString); + + BaseDataVariableState has3ForwardReferences = CreateMeshVariable(referencesFolder, + referencesPrefix + referenceString, referenceString); has3ForwardReferences.AddReference(ReferenceTypes.HasCause, false, variables[0].NodeId); has3ForwardReferences.AddReference(ReferenceTypes.HasCause, false, variables[1].NodeId); has3ForwardReferences.AddReference(ReferenceTypes.HasCause, false, variables[2].NodeId); @@ -666,103 +1048,131 @@ namespace Quickstarts.ReferenceServer { has3InverseReference = has3ForwardReferences; } + variables.Add(has3ForwardReferences); } - BaseDataVariableState has3InverseReferences = CreateMeshVariable(referencesFolder, referencesPrefix + "Has3InverseReferences", "Has3InverseReferences"); + BaseDataVariableState has3InverseReferences = CreateMeshVariable(referencesFolder, + referencesPrefix + "Has3InverseReferences", "Has3InverseReferences"); has3InverseReferences.AddReference(ReferenceTypes.HasEffect, true, variables[0].NodeId); has3InverseReferences.AddReference(ReferenceTypes.HasEffect, true, variables[1].NodeId); has3InverseReferences.AddReference(ReferenceTypes.HasEffect, true, variables[2].NodeId); variables.Add(has3InverseReferences); - BaseDataVariableState hasForwardAndInverseReferences = CreateMeshVariable(referencesFolder, referencesPrefix + "HasForwardAndInverseReference", "HasForwardAndInverseReference", hasForwardReference, hasInverseReference, has3InverseReference, has3InverseReferences, variables[0]); + BaseDataVariableState hasForwardAndInverseReferences = CreateMeshVariable(referencesFolder, + referencesPrefix + "HasForwardAndInverseReference", "HasForwardAndInverseReference", + hasForwardReference, hasInverseReference, has3InverseReference, has3InverseReferences, + variables[0]); variables.Add(hasForwardAndInverseReferences); + #endregion #region AccessRights + FolderState folderAccessRights = CreateFolder(root, "AccessRights", "AccessRights"); const string accessRights = "AccessRights_"; - BaseDataVariableState accessRightsInstructions = CreateVariable(folderAccessRights, accessRights + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); - accessRightsInstructions.Value = "This folder will be accessible to all who enter, but contents therein will be secured."; + BaseDataVariableState accessRightsInstructions = CreateVariable(folderAccessRights, + accessRights + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + accessRightsInstructions.Value = + "This folder will be accessible to all who enter, but contents therein will be secured."; variables.Add(accessRightsInstructions); // sub-folder for "AccessAll" - FolderState folderAccessRightsAccessAll = CreateFolder(folderAccessRights, "AccessRights_AccessAll", "AccessAll"); + FolderState folderAccessRightsAccessAll = + CreateFolder(folderAccessRights, "AccessRights_AccessAll", "AccessAll"); const string accessRightsAccessAll = "AccessRights_AccessAll_"; - BaseDataVariableState arAllRO = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RO", "RO", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arAllRO = CreateVariable(folderAccessRightsAccessAll, + accessRightsAccessAll + "RO", "RO", BuiltInType.Int16, ValueRanks.Scalar); arAllRO.AccessLevel = AccessLevels.CurrentRead; arAllRO.UserAccessLevel = AccessLevels.CurrentRead; variables.Add(arAllRO); - BaseDataVariableState arAllWO = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "WO", "WO", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arAllWO = CreateVariable(folderAccessRightsAccessAll, + accessRightsAccessAll + "WO", "WO", BuiltInType.Int16, ValueRanks.Scalar); arAllWO.AccessLevel = AccessLevels.CurrentWrite; arAllWO.UserAccessLevel = AccessLevels.CurrentWrite; variables.Add(arAllWO); - BaseDataVariableState arAllRW = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RW", "RW", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arAllRW = CreateVariable(folderAccessRightsAccessAll, + accessRightsAccessAll + "RW", "RW", BuiltInType.Int16, ValueRanks.Scalar); arAllRW.AccessLevel = AccessLevels.CurrentReadOrWrite; arAllRW.UserAccessLevel = AccessLevels.CurrentReadOrWrite; variables.Add(arAllRW); - BaseDataVariableState arAllRONotUser = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RO_NotUser", "RO_NotUser", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arAllRONotUser = CreateVariable(folderAccessRightsAccessAll, + accessRightsAccessAll + "RO_NotUser", "RO_NotUser", BuiltInType.Int16, ValueRanks.Scalar); arAllRONotUser.AccessLevel = AccessLevels.CurrentRead; arAllRONotUser.UserAccessLevel = AccessLevels.None; variables.Add(arAllRONotUser); - BaseDataVariableState arAllWONotUser = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "WO_NotUser", "WO_NotUser", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arAllWONotUser = CreateVariable(folderAccessRightsAccessAll, + accessRightsAccessAll + "WO_NotUser", "WO_NotUser", BuiltInType.Int16, ValueRanks.Scalar); arAllWONotUser.AccessLevel = AccessLevels.CurrentWrite; arAllWONotUser.UserAccessLevel = AccessLevels.None; variables.Add(arAllWONotUser); - BaseDataVariableState arAllRWNotUser = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RW_NotUser", "RW_NotUser", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arAllRWNotUser = CreateVariable(folderAccessRightsAccessAll, + accessRightsAccessAll + "RW_NotUser", "RW_NotUser", BuiltInType.Int16, ValueRanks.Scalar); arAllRWNotUser.AccessLevel = AccessLevels.CurrentReadOrWrite; arAllRWNotUser.UserAccessLevel = AccessLevels.CurrentRead; variables.Add(arAllRWNotUser); - BaseDataVariableState arAllROUserRW = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RO_User1_RW", "RO_User1_RW", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arAllROUserRW = CreateVariable(folderAccessRightsAccessAll, + accessRightsAccessAll + "RO_User1_RW", "RO_User1_RW", BuiltInType.Int16, ValueRanks.Scalar); arAllROUserRW.AccessLevel = AccessLevels.CurrentRead; arAllROUserRW.UserAccessLevel = AccessLevels.CurrentReadOrWrite; variables.Add(arAllROUserRW); - BaseDataVariableState arAllROGroupRW = CreateVariable(folderAccessRightsAccessAll, accessRightsAccessAll + "RO_Group1_RW", "RO_Group1_RW", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arAllROGroupRW = CreateVariable(folderAccessRightsAccessAll, + accessRightsAccessAll + "RO_Group1_RW", "RO_Group1_RW", BuiltInType.Int16, ValueRanks.Scalar); arAllROGroupRW.AccessLevel = AccessLevels.CurrentRead; arAllROGroupRW.UserAccessLevel = AccessLevels.CurrentReadOrWrite; variables.Add(arAllROGroupRW); // sub-folder for "AccessUser1" - FolderState folderAccessRightsAccessUser1 = CreateFolder(folderAccessRights, "AccessRights_AccessUser1", "AccessUser1"); + FolderState folderAccessRightsAccessUser1 = + CreateFolder(folderAccessRights, "AccessRights_AccessUser1", "AccessUser1"); const string accessRightsAccessUser1 = "AccessRights_AccessUser1_"; - BaseDataVariableState arUserRO = CreateVariable(folderAccessRightsAccessUser1, accessRightsAccessUser1 + "RO", "RO", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arUserRO = CreateVariable(folderAccessRightsAccessUser1, + accessRightsAccessUser1 + "RO", "RO", BuiltInType.Int16, ValueRanks.Scalar); arUserRO.AccessLevel = AccessLevels.CurrentRead; arUserRO.UserAccessLevel = AccessLevels.CurrentRead; variables.Add(arUserRO); - BaseDataVariableState arUserWO = CreateVariable(folderAccessRightsAccessUser1, accessRightsAccessUser1 + "WO", "WO", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arUserWO = CreateVariable(folderAccessRightsAccessUser1, + accessRightsAccessUser1 + "WO", "WO", BuiltInType.Int16, ValueRanks.Scalar); arUserWO.AccessLevel = AccessLevels.CurrentWrite; arUserWO.UserAccessLevel = AccessLevels.CurrentWrite; variables.Add(arUserWO); - BaseDataVariableState arUserRW = CreateVariable(folderAccessRightsAccessUser1, accessRightsAccessUser1 + "RW", "RW", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arUserRW = CreateVariable(folderAccessRightsAccessUser1, + accessRightsAccessUser1 + "RW", "RW", BuiltInType.Int16, ValueRanks.Scalar); arUserRW.AccessLevel = AccessLevels.CurrentReadOrWrite; arUserRW.UserAccessLevel = AccessLevels.CurrentReadOrWrite; variables.Add(arUserRW); // sub-folder for "AccessGroup1" - FolderState folderAccessRightsAccessGroup1 = CreateFolder(folderAccessRights, "AccessRights_AccessGroup1", "AccessGroup1"); + FolderState folderAccessRightsAccessGroup1 = + CreateFolder(folderAccessRights, "AccessRights_AccessGroup1", "AccessGroup1"); const string accessRightsAccessGroup1 = "AccessRights_AccessGroup1_"; - BaseDataVariableState arGroupRO = CreateVariable(folderAccessRightsAccessGroup1, accessRightsAccessGroup1 + "RO", "RO", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arGroupRO = CreateVariable(folderAccessRightsAccessGroup1, + accessRightsAccessGroup1 + "RO", "RO", BuiltInType.Int16, ValueRanks.Scalar); arGroupRO.AccessLevel = AccessLevels.CurrentRead; arGroupRO.UserAccessLevel = AccessLevels.CurrentRead; variables.Add(arGroupRO); - BaseDataVariableState arGroupWO = CreateVariable(folderAccessRightsAccessGroup1, accessRightsAccessGroup1 + "WO", "WO", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arGroupWO = CreateVariable(folderAccessRightsAccessGroup1, + accessRightsAccessGroup1 + "WO", "WO", BuiltInType.Int16, ValueRanks.Scalar); arGroupWO.AccessLevel = AccessLevels.CurrentWrite; arGroupWO.UserAccessLevel = AccessLevels.CurrentWrite; variables.Add(arGroupWO); - BaseDataVariableState arGroupRW = CreateVariable(folderAccessRightsAccessGroup1, accessRightsAccessGroup1 + "RW", "RW", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arGroupRW = CreateVariable(folderAccessRightsAccessGroup1, + accessRightsAccessGroup1 + "RW", "RW", BuiltInType.Int16, ValueRanks.Scalar); arGroupRW.AccessLevel = AccessLevels.CurrentReadOrWrite; arGroupRW.UserAccessLevel = AccessLevels.CurrentReadOrWrite; variables.Add(arGroupRW); // sub folder for "RolePermissions" - FolderState folderRolePermissions = CreateFolder(folderAccessRights, "AccessRights_RolePermissions", "RolePermissions"); + FolderState folderRolePermissions = CreateFolder(folderAccessRights, "AccessRights_RolePermissions", + "RolePermissions"); const string rolePermissions = "AccessRights_RolePermissions_"; - BaseDataVariableState rpAnonymous = CreateVariable(folderRolePermissions, rolePermissions + "AnonymousAccess", "AnonymousAccess", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState rpAnonymous = CreateVariable(folderRolePermissions, + rolePermissions + "AnonymousAccess", "AnonymousAccess", BuiltInType.Int16, ValueRanks.Scalar); rpAnonymous.Description = "This node can be accessed by users that have Anonymous Role"; rpAnonymous.RolePermissions = new RolePermissionTypeCollection() { @@ -770,26 +1180,33 @@ namespace Quickstarts.ReferenceServer new RolePermissionType() { RoleId = ObjectIds.WellKnownRole_Anonymous, - Permissions = (uint)(PermissionType.Browse |PermissionType.Read|PermissionType.ReadRolePermissions | PermissionType.Write) + Permissions = (uint)(PermissionType.Browse | PermissionType.Read | + PermissionType.ReadRolePermissions | PermissionType.Write) }, }; variables.Add(rpAnonymous); - BaseDataVariableState rpAuthenticatedUser = CreateVariable(folderRolePermissions, rolePermissions + "AuthenticatedUser", "AuthenticatedUser", BuiltInType.Int16, ValueRanks.Scalar); - rpAuthenticatedUser.Description = "This node can be accessed by users that have AuthenticatedUser Role"; + BaseDataVariableState rpAuthenticatedUser = CreateVariable(folderRolePermissions, + rolePermissions + "AuthenticatedUser", "AuthenticatedUser", BuiltInType.Int16, + ValueRanks.Scalar); + rpAuthenticatedUser.Description = + "This node can be accessed by users that have AuthenticatedUser Role"; rpAuthenticatedUser.RolePermissions = new RolePermissionTypeCollection() { // allow access to users with AuthenticatedUser role new RolePermissionType() { RoleId = ObjectIds.WellKnownRole_AuthenticatedUser, - Permissions = (uint)(PermissionType.Browse |PermissionType.Read|PermissionType.ReadRolePermissions | PermissionType.Write) + Permissions = (uint)(PermissionType.Browse | PermissionType.Read | + PermissionType.ReadRolePermissions | PermissionType.Write) }, }; variables.Add(rpAuthenticatedUser); - BaseDataVariableState rpAdminUser = CreateVariable(folderRolePermissions, rolePermissions + "AdminUser", "AdminUser", BuiltInType.Int16, ValueRanks.Scalar); - rpAdminUser.Description = "This node can be accessed by users that have SecurityAdmin Role over an encrypted connection"; + BaseDataVariableState rpAdminUser = CreateVariable(folderRolePermissions, + rolePermissions + "AdminUser", "AdminUser", BuiltInType.Int16, ValueRanks.Scalar); + rpAdminUser.Description = + "This node can be accessed by users that have SecurityAdmin Role over an encrypted connection"; rpAdminUser.AccessRestrictions = AccessRestrictionType.EncryptionRequired; rpAdminUser.RolePermissions = new RolePermissionTypeCollection() { @@ -797,68 +1214,88 @@ namespace Quickstarts.ReferenceServer new RolePermissionType() { RoleId = ObjectIds.WellKnownRole_SecurityAdmin, - Permissions = (uint)(PermissionType.Browse |PermissionType.Read|PermissionType.ReadRolePermissions | PermissionType.Write) + Permissions = (uint)(PermissionType.Browse | PermissionType.Read | + PermissionType.ReadRolePermissions | PermissionType.Write) }, }; variables.Add(rpAdminUser); // sub-folder for "AccessRestrictions" - FolderState folderAccessRestrictions = CreateFolder(folderAccessRights, "AccessRights_AccessRestrictions", "AccessRestrictions"); + FolderState folderAccessRestrictions = CreateFolder(folderAccessRights, + "AccessRights_AccessRestrictions", "AccessRestrictions"); const string accessRestrictions = "AccessRights_AccessRestrictions_"; - BaseDataVariableState arNone = CreateVariable(folderAccessRestrictions, accessRestrictions + "None", "None", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arNone = CreateVariable(folderAccessRestrictions, accessRestrictions + "None", + "None", BuiltInType.Int16, ValueRanks.Scalar); arNone.AccessLevel = AccessLevels.CurrentRead; arNone.UserAccessLevel = AccessLevels.CurrentRead; arNone.AccessRestrictions = AccessRestrictionType.None; variables.Add(arNone); - BaseDataVariableState arSigningRequired = CreateVariable(folderAccessRestrictions, accessRestrictions + "SigningRequired", "SigningRequired", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arSigningRequired = CreateVariable(folderAccessRestrictions, + accessRestrictions + "SigningRequired", "SigningRequired", BuiltInType.Int16, + ValueRanks.Scalar); arSigningRequired.AccessLevel = AccessLevels.CurrentRead; arSigningRequired.UserAccessLevel = AccessLevels.CurrentRead; arSigningRequired.AccessRestrictions = AccessRestrictionType.SigningRequired; variables.Add(arSigningRequired); - BaseDataVariableState arEncryptionRequired = CreateVariable(folderAccessRestrictions, accessRestrictions + "EncryptionRequired", "EncryptionRequired", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arEncryptionRequired = CreateVariable(folderAccessRestrictions, + accessRestrictions + "EncryptionRequired", "EncryptionRequired", BuiltInType.Int16, + ValueRanks.Scalar); arEncryptionRequired.AccessLevel = AccessLevels.CurrentRead; arEncryptionRequired.UserAccessLevel = AccessLevels.CurrentRead; arEncryptionRequired.AccessRestrictions = AccessRestrictionType.EncryptionRequired; variables.Add(arEncryptionRequired); - BaseDataVariableState arSessionRequired = CreateVariable(folderAccessRestrictions, accessRestrictions + "SessionRequired", "SessionRequired", BuiltInType.Int16, ValueRanks.Scalar); + BaseDataVariableState arSessionRequired = CreateVariable(folderAccessRestrictions, + accessRestrictions + "SessionRequired", "SessionRequired", BuiltInType.Int16, + ValueRanks.Scalar); arSessionRequired.AccessLevel = AccessLevels.CurrentRead; arSessionRequired.UserAccessLevel = AccessLevels.CurrentRead; arSessionRequired.AccessRestrictions = AccessRestrictionType.SessionRequired; variables.Add(arSessionRequired); + #endregion #region NodeIds + FolderState nodeIdsFolder = CreateFolder(root, "NodeIds", "NodeIds"); const string nodeIds = "NodeIds_"; - BaseDataVariableState nodeIdsInstructions = CreateVariable(nodeIdsFolder, nodeIds + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); - nodeIdsInstructions.Value = "All supported Node types are available except whichever is in use for the other nodes."; + BaseDataVariableState nodeIdsInstructions = CreateVariable(nodeIdsFolder, nodeIds + "Instructions", + "Instructions", DataTypeIds.String, ValueRanks.Scalar); + nodeIdsInstructions.Value = + "All supported Node types are available except whichever is in use for the other nodes."; variables.Add(nodeIdsInstructions); - BaseDataVariableState integerNodeId = CreateVariable(nodeIdsFolder, nodeIds + "Int16Integer", "Int16Integer", DataTypeIds.Int16, ValueRanks.Scalar); + BaseDataVariableState integerNodeId = CreateVariable(nodeIdsFolder, nodeIds + "Int16Integer", + "Int16Integer", DataTypeIds.Int16, ValueRanks.Scalar); integerNodeId.NodeId = new NodeId((uint)9202, NamespaceIndex); variables.Add(integerNodeId); - variables.Add(CreateVariable(nodeIdsFolder, nodeIds + "Int16String", "Int16String", DataTypeIds.Int16, ValueRanks.Scalar)); + variables.Add(CreateVariable(nodeIdsFolder, nodeIds + "Int16String", "Int16String", + DataTypeIds.Int16, ValueRanks.Scalar)); - BaseDataVariableState guidNodeId = CreateVariable(nodeIdsFolder, nodeIds + "Int16GUID", "Int16GUID", DataTypeIds.Int16, ValueRanks.Scalar); + BaseDataVariableState guidNodeId = CreateVariable(nodeIdsFolder, nodeIds + "Int16GUID", "Int16GUID", + DataTypeIds.Int16, ValueRanks.Scalar); guidNodeId.NodeId = new NodeId(new Guid("00000000-0000-0000-0000-000000009204"), NamespaceIndex); variables.Add(guidNodeId); - BaseDataVariableState opaqueNodeId = CreateVariable(nodeIdsFolder, nodeIds + "Int16Opaque", "Int16Opaque", DataTypeIds.Int16, ValueRanks.Scalar); + BaseDataVariableState opaqueNodeId = CreateVariable(nodeIdsFolder, nodeIds + "Int16Opaque", + "Int16Opaque", DataTypeIds.Int16, ValueRanks.Scalar); opaqueNodeId.NodeId = new NodeId(new byte[] { 9, 2, 0, 5 }, NamespaceIndex); variables.Add(opaqueNodeId); + #endregion #region Methods + FolderState methodsFolder = CreateFolder(root, "Methods", "Methods"); const string methods = "Methods_"; - BaseDataVariableState methodsInstructions = CreateVariable(methodsFolder, methods + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + BaseDataVariableState methodsInstructions = CreateVariable(methodsFolder, methods + "Instructions", + "Instructions", DataTypeIds.String, ValueRanks.Scalar); methodsInstructions.Value = "Contains methods with varying parameter definitions."; variables.Add(methodsInstructions); @@ -866,6 +1303,7 @@ namespace Quickstarts.ReferenceServer voidMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnVoidCall); #region Add Method + MethodState addMethod = CreateMethod(methodsFolder, methods + "Add", "Add"); // set input arguments addMethod.InputArguments = new PropertyState(addMethod); @@ -879,13 +1317,22 @@ namespace Quickstarts.ReferenceServer addMethod.InputArguments.Value = new Argument[] { - new Argument() { Name = "Float value", Description = "Float value", DataType = DataTypeIds.Float, ValueRank = ValueRanks.Scalar }, - new Argument() { Name = "UInt32 value", Description = "UInt32 value", DataType = DataTypeIds.UInt32, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Float value", Description = "Float value", DataType = DataTypeIds.Float, + ValueRank = ValueRanks.Scalar + }, + new Argument() + { + Name = "UInt32 value", Description = "UInt32 value", DataType = DataTypeIds.UInt32, + ValueRank = ValueRanks.Scalar + } }; // set output arguments addMethod.OutputArguments = new PropertyState(addMethod); - addMethod.OutputArguments.NodeId = new NodeId(addMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + addMethod.OutputArguments.NodeId = + new NodeId(addMethod.BrowseName.Name + "OutArgs", NamespaceIndex); addMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; addMethod.OutputArguments.DisplayName = addMethod.OutputArguments.BrowseName.Name; addMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -895,17 +1342,24 @@ namespace Quickstarts.ReferenceServer addMethod.OutputArguments.Value = new Argument[] { - new Argument() { Name = "Add Result", Description = "Add Result", DataType = DataTypeIds.Float, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Add Result", Description = "Add Result", DataType = DataTypeIds.Float, + ValueRank = ValueRanks.Scalar + } }; addMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnAddCall); + #endregion #region Multiply Method + MethodState multiplyMethod = CreateMethod(methodsFolder, methods + "Multiply", "Multiply"); // set input arguments multiplyMethod.InputArguments = new PropertyState(multiplyMethod); - multiplyMethod.InputArguments.NodeId = new NodeId(multiplyMethod.BrowseName.Name + "InArgs", NamespaceIndex); + multiplyMethod.InputArguments.NodeId = + new NodeId(multiplyMethod.BrowseName.Name + "InArgs", NamespaceIndex); multiplyMethod.InputArguments.BrowseName = BrowseNames.InputArguments; multiplyMethod.InputArguments.DisplayName = multiplyMethod.InputArguments.BrowseName.Name; multiplyMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -915,13 +1369,22 @@ namespace Quickstarts.ReferenceServer multiplyMethod.InputArguments.Value = new Argument[] { - new Argument() { Name = "Int16 value", Description = "Int16 value", DataType = DataTypeIds.Int16, ValueRank = ValueRanks.Scalar }, - new Argument() { Name = "UInt16 value", Description = "UInt16 value", DataType = DataTypeIds.UInt16, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Int16 value", Description = "Int16 value", DataType = DataTypeIds.Int16, + ValueRank = ValueRanks.Scalar + }, + new Argument() + { + Name = "UInt16 value", Description = "UInt16 value", DataType = DataTypeIds.UInt16, + ValueRank = ValueRanks.Scalar + } }; // set output arguments multiplyMethod.OutputArguments = new PropertyState(multiplyMethod); - multiplyMethod.OutputArguments.NodeId = new NodeId(multiplyMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + multiplyMethod.OutputArguments.NodeId = + new NodeId(multiplyMethod.BrowseName.Name + "OutArgs", NamespaceIndex); multiplyMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; multiplyMethod.OutputArguments.DisplayName = multiplyMethod.OutputArguments.BrowseName.Name; multiplyMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -931,17 +1394,24 @@ namespace Quickstarts.ReferenceServer multiplyMethod.OutputArguments.Value = new Argument[] { - new Argument() { Name = "Multiply Result", Description = "Multiply Result", DataType = DataTypeIds.Int32, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Multiply Result", Description = "Multiply Result", DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + } }; multiplyMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnMultiplyCall); + #endregion #region Divide Method + MethodState divideMethod = CreateMethod(methodsFolder, methods + "Divide", "Divide"); // set input arguments divideMethod.InputArguments = new PropertyState(divideMethod); - divideMethod.InputArguments.NodeId = new NodeId(divideMethod.BrowseName.Name + "InArgs", NamespaceIndex); + divideMethod.InputArguments.NodeId = + new NodeId(divideMethod.BrowseName.Name + "InArgs", NamespaceIndex); divideMethod.InputArguments.BrowseName = BrowseNames.InputArguments; divideMethod.InputArguments.DisplayName = divideMethod.InputArguments.BrowseName.Name; divideMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -951,13 +1421,22 @@ namespace Quickstarts.ReferenceServer divideMethod.InputArguments.Value = new Argument[] { - new Argument() { Name = "Int32 value", Description = "Int32 value", DataType = DataTypeIds.Int32, ValueRank = ValueRanks.Scalar }, - new Argument() { Name = "UInt16 value", Description = "UInt16 value", DataType = DataTypeIds.UInt16, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Int32 value", Description = "Int32 value", DataType = DataTypeIds.Int32, + ValueRank = ValueRanks.Scalar + }, + new Argument() + { + Name = "UInt16 value", Description = "UInt16 value", DataType = DataTypeIds.UInt16, + ValueRank = ValueRanks.Scalar + } }; // set output arguments divideMethod.OutputArguments = new PropertyState(divideMethod); - divideMethod.OutputArguments.NodeId = new NodeId(divideMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + divideMethod.OutputArguments.NodeId = + new NodeId(divideMethod.BrowseName.Name + "OutArgs", NamespaceIndex); divideMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; divideMethod.OutputArguments.DisplayName = divideMethod.OutputArguments.BrowseName.Name; divideMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -967,17 +1446,24 @@ namespace Quickstarts.ReferenceServer divideMethod.OutputArguments.Value = new Argument[] { - new Argument() { Name = "Divide Result", Description = "Divide Result", DataType = DataTypeIds.Float, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Divide Result", Description = "Divide Result", DataType = DataTypeIds.Float, + ValueRank = ValueRanks.Scalar + } }; divideMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnDivideCall); + #endregion #region Substract Method + MethodState substractMethod = CreateMethod(methodsFolder, methods + "Substract", "Substract"); // set input arguments substractMethod.InputArguments = new PropertyState(substractMethod); - substractMethod.InputArguments.NodeId = new NodeId(substractMethod.BrowseName.Name + "InArgs", NamespaceIndex); + substractMethod.InputArguments.NodeId = + new NodeId(substractMethod.BrowseName.Name + "InArgs", NamespaceIndex); substractMethod.InputArguments.BrowseName = BrowseNames.InputArguments; substractMethod.InputArguments.DisplayName = substractMethod.InputArguments.BrowseName.Name; substractMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -987,13 +1473,22 @@ namespace Quickstarts.ReferenceServer substractMethod.InputArguments.Value = new Argument[] { - new Argument() { Name = "Int16 value", Description = "Int16 value", DataType = DataTypeIds.Int16, ValueRank = ValueRanks.Scalar }, - new Argument() { Name = "Byte value", Description = "Byte value", DataType = DataTypeIds.Byte, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Int16 value", Description = "Int16 value", DataType = DataTypeIds.Int16, + ValueRank = ValueRanks.Scalar + }, + new Argument() + { + Name = "Byte value", Description = "Byte value", DataType = DataTypeIds.Byte, + ValueRank = ValueRanks.Scalar + } }; // set output arguments substractMethod.OutputArguments = new PropertyState(substractMethod); - substractMethod.OutputArguments.NodeId = new NodeId(substractMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + substractMethod.OutputArguments.NodeId = + new NodeId(substractMethod.BrowseName.Name + "OutArgs", NamespaceIndex); substractMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; substractMethod.OutputArguments.DisplayName = substractMethod.OutputArguments.BrowseName.Name; substractMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -1003,17 +1498,24 @@ namespace Quickstarts.ReferenceServer substractMethod.OutputArguments.Value = new Argument[] { - new Argument() { Name = "Substract Result", Description = "Substract Result", DataType = DataTypeIds.Int16, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Substract Result", Description = "Substract Result", DataType = DataTypeIds.Int16, + ValueRank = ValueRanks.Scalar + } }; substractMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnSubstractCall); + #endregion #region Hello Method + MethodState helloMethod = CreateMethod(methodsFolder, methods + "Hello", "Hello"); // set input arguments helloMethod.InputArguments = new PropertyState(helloMethod); - helloMethod.InputArguments.NodeId = new NodeId(helloMethod.BrowseName.Name + "InArgs", NamespaceIndex); + helloMethod.InputArguments.NodeId = + new NodeId(helloMethod.BrowseName.Name + "InArgs", NamespaceIndex); helloMethod.InputArguments.BrowseName = BrowseNames.InputArguments; helloMethod.InputArguments.DisplayName = helloMethod.InputArguments.BrowseName.Name; helloMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -1023,12 +1525,17 @@ namespace Quickstarts.ReferenceServer helloMethod.InputArguments.Value = new Argument[] { - new Argument() { Name = "String value", Description = "String value", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "String value", Description = "String value", DataType = DataTypeIds.String, + ValueRank = ValueRanks.Scalar + } }; // set output arguments helloMethod.OutputArguments = new PropertyState(helloMethod); - helloMethod.OutputArguments.NodeId = new NodeId(helloMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + helloMethod.OutputArguments.NodeId = + new NodeId(helloMethod.BrowseName.Name + "OutArgs", NamespaceIndex); helloMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; helloMethod.OutputArguments.DisplayName = helloMethod.OutputArguments.BrowseName.Name; helloMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -1038,17 +1545,24 @@ namespace Quickstarts.ReferenceServer helloMethod.OutputArguments.Value = new Argument[] { - new Argument() { Name = "Hello Result", Description = "Hello Result", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Hello Result", Description = "Hello Result", DataType = DataTypeIds.String, + ValueRank = ValueRanks.Scalar + } }; helloMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnHelloCall); + #endregion #region Input Method + MethodState inputMethod = CreateMethod(methodsFolder, methods + "Input", "Input"); // set input arguments inputMethod.InputArguments = new PropertyState(inputMethod); - inputMethod.InputArguments.NodeId = new NodeId(inputMethod.BrowseName.Name + "InArgs", NamespaceIndex); + inputMethod.InputArguments.NodeId = + new NodeId(inputMethod.BrowseName.Name + "InArgs", NamespaceIndex); inputMethod.InputArguments.BrowseName = BrowseNames.InputArguments; inputMethod.InputArguments.DisplayName = inputMethod.InputArguments.BrowseName.Name; inputMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -1058,18 +1572,25 @@ namespace Quickstarts.ReferenceServer inputMethod.InputArguments.Value = new Argument[] { - new Argument() { Name = "String value", Description = "String value", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "String value", Description = "String value", DataType = DataTypeIds.String, + ValueRank = ValueRanks.Scalar + } }; inputMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnInputCall); + #endregion #region Output Method + MethodState outputMethod = CreateMethod(methodsFolder, methods + "Output", "Output"); // set output arguments outputMethod.OutputArguments = new PropertyState(helloMethod); - outputMethod.OutputArguments.NodeId = new NodeId(helloMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + outputMethod.OutputArguments.NodeId = + new NodeId(helloMethod.BrowseName.Name + "OutArgs", NamespaceIndex); outputMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; outputMethod.OutputArguments.DisplayName = helloMethod.OutputArguments.BrowseName.Name; outputMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -1079,350 +1600,484 @@ namespace Quickstarts.ReferenceServer outputMethod.OutputArguments.Value = new Argument[] { - new Argument() { Name = "Output Result", Description = "Output Result", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Output Result", Description = "Output Result", DataType = DataTypeIds.String, + ValueRank = ValueRanks.Scalar + } }; outputMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnOutputCall); + #endregion + #endregion #region Views + FolderState viewsFolder = CreateFolder(root, "Views", "Views"); const string views = "Views_"; - ViewState viewStateOperations = CreateView(viewsFolder, externalReferences, views + "Operations", "Operations"); - ViewState viewStateEngineering = CreateView(viewsFolder, externalReferences, views + "Engineering", "Engineering"); + ViewState viewStateOperations = + CreateView(viewsFolder, externalReferences, views + "Operations", "Operations"); + ViewState viewStateEngineering = CreateView(viewsFolder, externalReferences, views + "Engineering", + "Engineering"); + #endregion #region Locales + FolderState localesFolder = CreateFolder(root, "Locales", "Locales"); const string locales = "Locales_"; - BaseDataVariableState qnEnglishVariable = CreateVariable(localesFolder, locales + "QNEnglish", "QNEnglish", DataTypeIds.QualifiedName, ValueRanks.Scalar); + BaseDataVariableState qnEnglishVariable = CreateVariable(localesFolder, locales + "QNEnglish", + "QNEnglish", DataTypeIds.QualifiedName, ValueRanks.Scalar); qnEnglishVariable.Description = new LocalizedText("en", "English"); qnEnglishVariable.Value = new QualifiedName("Hello World", NamespaceIndex); variables.Add(qnEnglishVariable); - BaseDataVariableState ltEnglishVariable = CreateVariable(localesFolder, locales + "LTEnglish", "LTEnglish", DataTypeIds.LocalizedText, ValueRanks.Scalar); + BaseDataVariableState ltEnglishVariable = CreateVariable(localesFolder, locales + "LTEnglish", + "LTEnglish", DataTypeIds.LocalizedText, ValueRanks.Scalar); ltEnglishVariable.Description = new LocalizedText("en", "English"); ltEnglishVariable.Value = new LocalizedText("en", "Hello World"); variables.Add(ltEnglishVariable); - BaseDataVariableState qnFrancaisVariable = CreateVariable(localesFolder, locales + "QNFrancais", "QNFrancais", DataTypeIds.QualifiedName, ValueRanks.Scalar); + BaseDataVariableState qnFrancaisVariable = CreateVariable(localesFolder, locales + "QNFrancais", + "QNFrancais", DataTypeIds.QualifiedName, ValueRanks.Scalar); qnFrancaisVariable.Description = new LocalizedText("en", "Francais"); qnFrancaisVariable.Value = new QualifiedName("Salut tout le monde", NamespaceIndex); variables.Add(qnFrancaisVariable); - BaseDataVariableState ltFrancaisVariable = CreateVariable(localesFolder, locales + "LTFrancais", "LTFrancais", DataTypeIds.LocalizedText, ValueRanks.Scalar); + BaseDataVariableState ltFrancaisVariable = CreateVariable(localesFolder, locales + "LTFrancais", + "LTFrancais", DataTypeIds.LocalizedText, ValueRanks.Scalar); ltFrancaisVariable.Description = new LocalizedText("en", "Francais"); ltFrancaisVariable.Value = new LocalizedText("fr", "Salut tout le monde"); variables.Add(ltFrancaisVariable); - BaseDataVariableState qnDeutschVariable = CreateVariable(localesFolder, locales + "QNDeutsch", "QNDeutsch", DataTypeIds.QualifiedName, ValueRanks.Scalar); + BaseDataVariableState qnDeutschVariable = CreateVariable(localesFolder, locales + "QNDeutsch", + "QNDeutsch", DataTypeIds.QualifiedName, ValueRanks.Scalar); qnDeutschVariable.Description = new LocalizedText("en", "Deutsch"); qnDeutschVariable.Value = new QualifiedName("Hallo Welt", NamespaceIndex); variables.Add(qnDeutschVariable); - BaseDataVariableState ltDeutschVariable = CreateVariable(localesFolder, locales + "LTDeutsch", "LTDeutsch", DataTypeIds.LocalizedText, ValueRanks.Scalar); + BaseDataVariableState ltDeutschVariable = CreateVariable(localesFolder, locales + "LTDeutsch", + "LTDeutsch", DataTypeIds.LocalizedText, ValueRanks.Scalar); ltDeutschVariable.Description = new LocalizedText("en", "Deutsch"); ltDeutschVariable.Value = new LocalizedText("de", "Hallo Welt"); variables.Add(ltDeutschVariable); - BaseDataVariableState qnEspanolVariable = CreateVariable(localesFolder, locales + "QNEspanol", "QNEspanol", DataTypeIds.QualifiedName, ValueRanks.Scalar); + BaseDataVariableState qnEspanolVariable = CreateVariable(localesFolder, locales + "QNEspanol", + "QNEspanol", DataTypeIds.QualifiedName, ValueRanks.Scalar); qnEspanolVariable.Description = new LocalizedText("en", "Espanol"); qnEspanolVariable.Value = new QualifiedName("Hola mundo", NamespaceIndex); variables.Add(qnEspanolVariable); - BaseDataVariableState ltEspanolVariable = CreateVariable(localesFolder, locales + "LTEspanol", "LTEspanol", DataTypeIds.LocalizedText, ValueRanks.Scalar); + BaseDataVariableState ltEspanolVariable = CreateVariable(localesFolder, locales + "LTEspanol", + "LTEspanol", DataTypeIds.LocalizedText, ValueRanks.Scalar); ltEspanolVariable.Description = new LocalizedText("en", "Espanol"); ltEspanolVariable.Value = new LocalizedText("es", "Hola mundo"); variables.Add(ltEspanolVariable); - BaseDataVariableState qnJapaneseVariable = CreateVariable(localesFolder, locales + "QN日本の", "QN日本の", DataTypeIds.QualifiedName, ValueRanks.Scalar); + BaseDataVariableState qnJapaneseVariable = CreateVariable(localesFolder, locales + "QN日本の", "QN日本の", + DataTypeIds.QualifiedName, ValueRanks.Scalar); qnJapaneseVariable.Description = new LocalizedText("en", "Japanese"); qnJapaneseVariable.Value = new QualifiedName("ハローワールド", NamespaceIndex); variables.Add(qnJapaneseVariable); - BaseDataVariableState ltJapaneseVariable = CreateVariable(localesFolder, locales + "LT日本の", "LT日本の", DataTypeIds.LocalizedText, ValueRanks.Scalar); + BaseDataVariableState ltJapaneseVariable = CreateVariable(localesFolder, locales + "LT日本の", "LT日本の", + DataTypeIds.LocalizedText, ValueRanks.Scalar); ltJapaneseVariable.Description = new LocalizedText("en", "Japanese"); ltJapaneseVariable.Value = new LocalizedText("jp", "ハローワールド"); variables.Add(ltJapaneseVariable); - BaseDataVariableState qnChineseVariable = CreateVariable(localesFolder, locales + "QN中國的", "QN中國的", DataTypeIds.QualifiedName, ValueRanks.Scalar); + BaseDataVariableState qnChineseVariable = CreateVariable(localesFolder, locales + "QN中國的", "QN中國的", + DataTypeIds.QualifiedName, ValueRanks.Scalar); qnChineseVariable.Description = new LocalizedText("en", "Chinese"); qnChineseVariable.Value = new QualifiedName("世界您好", NamespaceIndex); variables.Add(qnChineseVariable); - BaseDataVariableState ltChineseVariable = CreateVariable(localesFolder, locales + "LT中國的", "LT中國的", DataTypeIds.LocalizedText, ValueRanks.Scalar); + BaseDataVariableState ltChineseVariable = CreateVariable(localesFolder, locales + "LT中國的", "LT中國的", + DataTypeIds.LocalizedText, ValueRanks.Scalar); ltChineseVariable.Description = new LocalizedText("en", "Chinese"); ltChineseVariable.Value = new LocalizedText("ch", "世界您好"); variables.Add(ltChineseVariable); - BaseDataVariableState qnRussianVariable = CreateVariable(localesFolder, locales + "QNрусский", "QNрусский", DataTypeIds.QualifiedName, ValueRanks.Scalar); + BaseDataVariableState qnRussianVariable = CreateVariable(localesFolder, locales + "QNрусский", + "QNрусский", DataTypeIds.QualifiedName, ValueRanks.Scalar); qnRussianVariable.Description = new LocalizedText("en", "Russian"); qnRussianVariable.Value = new QualifiedName("LTрусский", NamespaceIndex); variables.Add(qnRussianVariable); - BaseDataVariableState ltRussianVariable = CreateVariable(localesFolder, locales + "LTрусский", "LTрусский", DataTypeIds.LocalizedText, ValueRanks.Scalar); + BaseDataVariableState ltRussianVariable = CreateVariable(localesFolder, locales + "LTрусский", + "LTрусский", DataTypeIds.LocalizedText, ValueRanks.Scalar); ltRussianVariable.Description = new LocalizedText("en", "Russian"); ltRussianVariable.Value = new LocalizedText("ru", "LTрусский"); variables.Add(ltRussianVariable); - BaseDataVariableState qnArabicVariable = CreateVariable(localesFolder, locales + "QNالعربية", "QNالعربية", DataTypeIds.QualifiedName, ValueRanks.Scalar); + BaseDataVariableState qnArabicVariable = CreateVariable(localesFolder, locales + "QNالعربية", + "QNالعربية", DataTypeIds.QualifiedName, ValueRanks.Scalar); qnArabicVariable.Description = new LocalizedText("en", "Arabic"); qnArabicVariable.Value = new QualifiedName("مرحبا بالعال", NamespaceIndex); variables.Add(qnArabicVariable); - BaseDataVariableState ltArabicVariable = CreateVariable(localesFolder, locales + "LTالعربية", "LTالعربية", DataTypeIds.LocalizedText, ValueRanks.Scalar); + BaseDataVariableState ltArabicVariable = CreateVariable(localesFolder, locales + "LTالعربية", + "LTالعربية", DataTypeIds.LocalizedText, ValueRanks.Scalar); ltArabicVariable.Description = new LocalizedText("en", "Arabic"); ltArabicVariable.Value = new LocalizedText("ae", "مرحبا بالعال"); variables.Add(ltArabicVariable); - BaseDataVariableState qnKlingonVariable = CreateVariable(localesFolder, locales + "QNtlhIngan", "QNtlhIngan", DataTypeIds.QualifiedName, ValueRanks.Scalar); + BaseDataVariableState qnKlingonVariable = CreateVariable(localesFolder, locales + "QNtlhIngan", + "QNtlhIngan", DataTypeIds.QualifiedName, ValueRanks.Scalar); qnKlingonVariable.Description = new LocalizedText("en", "Klingon"); qnKlingonVariable.Value = new QualifiedName("qo' vIvan", NamespaceIndex); variables.Add(qnKlingonVariable); - BaseDataVariableState ltKlingonVariable = CreateVariable(localesFolder, locales + "LTtlhIngan", "LTtlhIngan", DataTypeIds.LocalizedText, ValueRanks.Scalar); + BaseDataVariableState ltKlingonVariable = CreateVariable(localesFolder, locales + "LTtlhIngan", + "LTtlhIngan", DataTypeIds.LocalizedText, ValueRanks.Scalar); ltKlingonVariable.Description = new LocalizedText("en", "Klingon"); ltKlingonVariable.Value = new LocalizedText("ko", "qo' vIvan"); variables.Add(ltKlingonVariable); + #endregion #region Attributes + FolderState folderAttributes = CreateFolder(root, "Attributes", "Attributes"); #region AccessAll - FolderState folderAttributesAccessAll = CreateFolder(folderAttributes, "Attributes_AccessAll", "AccessAll"); + + FolderState folderAttributesAccessAll = + CreateFolder(folderAttributes, "Attributes_AccessAll", "AccessAll"); const string attributesAccessAll = "Attributes_AccessAll_"; - BaseDataVariableState accessLevelAccessAll = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "AccessLevel", "AccessLevel", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState accessLevelAccessAll = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "AccessLevel", "AccessLevel", DataTypeIds.Double, ValueRanks.Scalar); accessLevelAccessAll.WriteMask = AttributeWriteMask.AccessLevel; accessLevelAccessAll.UserWriteMask = AttributeWriteMask.AccessLevel; variables.Add(accessLevelAccessAll); - BaseDataVariableState arrayDimensionsAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "ArrayDimensions", "ArrayDimensions", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState arrayDimensionsAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "ArrayDimensions", "ArrayDimensions", DataTypeIds.Double, + ValueRanks.Scalar); arrayDimensionsAccessLevel.WriteMask = AttributeWriteMask.ArrayDimensions; arrayDimensionsAccessLevel.UserWriteMask = AttributeWriteMask.ArrayDimensions; variables.Add(arrayDimensionsAccessLevel); - BaseDataVariableState browseNameAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "BrowseName", "BrowseName", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState browseNameAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "BrowseName", "BrowseName", DataTypeIds.Double, ValueRanks.Scalar); browseNameAccessLevel.WriteMask = AttributeWriteMask.BrowseName; browseNameAccessLevel.UserWriteMask = AttributeWriteMask.BrowseName; variables.Add(browseNameAccessLevel); - BaseDataVariableState containsNoLoopsAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "ContainsNoLoops", "ContainsNoLoops", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState containsNoLoopsAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "ContainsNoLoops", "ContainsNoLoops", DataTypeIds.Double, + ValueRanks.Scalar); containsNoLoopsAccessLevel.WriteMask = AttributeWriteMask.ContainsNoLoops; containsNoLoopsAccessLevel.UserWriteMask = AttributeWriteMask.ContainsNoLoops; variables.Add(containsNoLoopsAccessLevel); - BaseDataVariableState dataTypeAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "DataType", "DataType", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState dataTypeAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "DataType", "DataType", DataTypeIds.Double, ValueRanks.Scalar); dataTypeAccessLevel.WriteMask = AttributeWriteMask.DataType; dataTypeAccessLevel.UserWriteMask = AttributeWriteMask.DataType; variables.Add(dataTypeAccessLevel); - BaseDataVariableState descriptionAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "Description", "Description", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState descriptionAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "Description", "Description", DataTypeIds.Double, ValueRanks.Scalar); descriptionAccessLevel.WriteMask = AttributeWriteMask.Description; descriptionAccessLevel.UserWriteMask = AttributeWriteMask.Description; variables.Add(descriptionAccessLevel); - BaseDataVariableState eventNotifierAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "EventNotifier", "EventNotifier", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState eventNotifierAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "EventNotifier", "EventNotifier", DataTypeIds.Double, ValueRanks.Scalar); eventNotifierAccessLevel.WriteMask = AttributeWriteMask.EventNotifier; eventNotifierAccessLevel.UserWriteMask = AttributeWriteMask.EventNotifier; variables.Add(eventNotifierAccessLevel); - BaseDataVariableState executableAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "Executable", "Executable", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState executableAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "Executable", "Executable", DataTypeIds.Double, ValueRanks.Scalar); executableAccessLevel.WriteMask = AttributeWriteMask.Executable; executableAccessLevel.UserWriteMask = AttributeWriteMask.Executable; variables.Add(executableAccessLevel); - BaseDataVariableState historizingAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "Historizing", "Historizing", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState historizingAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "Historizing", "Historizing", DataTypeIds.Double, ValueRanks.Scalar); historizingAccessLevel.WriteMask = AttributeWriteMask.Historizing; historizingAccessLevel.UserWriteMask = AttributeWriteMask.Historizing; variables.Add(historizingAccessLevel); - BaseDataVariableState inverseNameAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "InverseName", "InverseName", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState inverseNameAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "InverseName", "InverseName", DataTypeIds.Double, ValueRanks.Scalar); inverseNameAccessLevel.WriteMask = AttributeWriteMask.InverseName; inverseNameAccessLevel.UserWriteMask = AttributeWriteMask.InverseName; variables.Add(inverseNameAccessLevel); - BaseDataVariableState isAbstractAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "IsAbstract", "IsAbstract", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState isAbstractAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "IsAbstract", "IsAbstract", DataTypeIds.Double, ValueRanks.Scalar); isAbstractAccessLevel.WriteMask = AttributeWriteMask.IsAbstract; isAbstractAccessLevel.UserWriteMask = AttributeWriteMask.IsAbstract; variables.Add(isAbstractAccessLevel); - BaseDataVariableState minimumSamplingIntervalAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "MinimumSamplingInterval", "MinimumSamplingInterval", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState minimumSamplingIntervalAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "MinimumSamplingInterval", "MinimumSamplingInterval", DataTypeIds.Double, + ValueRanks.Scalar); minimumSamplingIntervalAccessLevel.WriteMask = AttributeWriteMask.MinimumSamplingInterval; minimumSamplingIntervalAccessLevel.UserWriteMask = AttributeWriteMask.MinimumSamplingInterval; variables.Add(minimumSamplingIntervalAccessLevel); - BaseDataVariableState nodeClassIntervalAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "NodeClass", "NodeClass", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState nodeClassIntervalAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "NodeClass", "NodeClass", DataTypeIds.Double, ValueRanks.Scalar); nodeClassIntervalAccessLevel.WriteMask = AttributeWriteMask.NodeClass; nodeClassIntervalAccessLevel.UserWriteMask = AttributeWriteMask.NodeClass; variables.Add(nodeClassIntervalAccessLevel); - BaseDataVariableState nodeIdAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "NodeId", "NodeId", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState nodeIdAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "NodeId", "NodeId", DataTypeIds.Double, ValueRanks.Scalar); nodeIdAccessLevel.WriteMask = AttributeWriteMask.NodeId; nodeIdAccessLevel.UserWriteMask = AttributeWriteMask.NodeId; variables.Add(nodeIdAccessLevel); - BaseDataVariableState symmetricAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "Symmetric", "Symmetric", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState symmetricAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "Symmetric", "Symmetric", DataTypeIds.Double, ValueRanks.Scalar); symmetricAccessLevel.WriteMask = AttributeWriteMask.Symmetric; symmetricAccessLevel.UserWriteMask = AttributeWriteMask.Symmetric; variables.Add(symmetricAccessLevel); - BaseDataVariableState userAccessLevelAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "UserAccessLevel", "UserAccessLevel", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState userAccessLevelAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "UserAccessLevel", "UserAccessLevel", DataTypeIds.Double, + ValueRanks.Scalar); userAccessLevelAccessLevel.WriteMask = AttributeWriteMask.UserAccessLevel; userAccessLevelAccessLevel.UserWriteMask = AttributeWriteMask.UserAccessLevel; variables.Add(userAccessLevelAccessLevel); - BaseDataVariableState userExecutableAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "UserExecutable", "UserExecutable", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState userExecutableAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "UserExecutable", "UserExecutable", DataTypeIds.Double, + ValueRanks.Scalar); userExecutableAccessLevel.WriteMask = AttributeWriteMask.UserExecutable; userExecutableAccessLevel.UserWriteMask = AttributeWriteMask.UserExecutable; variables.Add(userExecutableAccessLevel); - BaseDataVariableState valueRankAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "ValueRank", "ValueRank", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState valueRankAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "ValueRank", "ValueRank", DataTypeIds.Double, ValueRanks.Scalar); valueRankAccessLevel.WriteMask = AttributeWriteMask.ValueRank; valueRankAccessLevel.UserWriteMask = AttributeWriteMask.ValueRank; variables.Add(valueRankAccessLevel); - BaseDataVariableState writeMaskAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "WriteMask", "WriteMask", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState writeMaskAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "WriteMask", "WriteMask", DataTypeIds.Double, ValueRanks.Scalar); writeMaskAccessLevel.WriteMask = AttributeWriteMask.WriteMask; writeMaskAccessLevel.UserWriteMask = AttributeWriteMask.WriteMask; variables.Add(writeMaskAccessLevel); - BaseDataVariableState valueForVariableTypeAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "ValueForVariableType", "ValueForVariableType", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState valueForVariableTypeAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "ValueForVariableType", "ValueForVariableType", DataTypeIds.Double, + ValueRanks.Scalar); valueForVariableTypeAccessLevel.WriteMask = AttributeWriteMask.ValueForVariableType; valueForVariableTypeAccessLevel.UserWriteMask = AttributeWriteMask.ValueForVariableType; variables.Add(valueForVariableTypeAccessLevel); - BaseDataVariableState allAccessLevel = CreateVariable(folderAttributesAccessAll, attributesAccessAll + "All", "All", DataTypeIds.Double, ValueRanks.Scalar); - allAccessLevel.WriteMask = AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | AttributeWriteMask.DataType | - AttributeWriteMask.Description | AttributeWriteMask.DisplayName | AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | AttributeWriteMask.IsAbstract | - AttributeWriteMask.MinimumSamplingInterval | AttributeWriteMask.NodeClass | AttributeWriteMask.NodeId | AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | AttributeWriteMask.UserExecutable | - AttributeWriteMask.UserWriteMask | AttributeWriteMask.ValueForVariableType | AttributeWriteMask.ValueRank | AttributeWriteMask.WriteMask; - allAccessLevel.UserWriteMask = AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | AttributeWriteMask.DataType | - AttributeWriteMask.Description | AttributeWriteMask.DisplayName | AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | AttributeWriteMask.IsAbstract | - AttributeWriteMask.MinimumSamplingInterval | AttributeWriteMask.NodeClass | AttributeWriteMask.NodeId | AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | AttributeWriteMask.UserExecutable | - AttributeWriteMask.UserWriteMask | AttributeWriteMask.ValueForVariableType | AttributeWriteMask.ValueRank | AttributeWriteMask.WriteMask; + BaseDataVariableState allAccessLevel = CreateVariable(folderAttributesAccessAll, + attributesAccessAll + "All", "All", DataTypeIds.Double, ValueRanks.Scalar); + allAccessLevel.WriteMask = AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | + AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | + AttributeWriteMask.DataType | + AttributeWriteMask.Description | AttributeWriteMask.DisplayName | + AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | + AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | + AttributeWriteMask.IsAbstract | + AttributeWriteMask.MinimumSamplingInterval | + AttributeWriteMask.NodeClass | AttributeWriteMask.NodeId | + AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | + AttributeWriteMask.UserExecutable | + AttributeWriteMask.UserWriteMask | + AttributeWriteMask.ValueForVariableType | AttributeWriteMask.ValueRank | + AttributeWriteMask.WriteMask; + allAccessLevel.UserWriteMask = + AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | + AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | + AttributeWriteMask.DataType | + AttributeWriteMask.Description | AttributeWriteMask.DisplayName | + AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | + AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | + AttributeWriteMask.IsAbstract | + AttributeWriteMask.MinimumSamplingInterval | AttributeWriteMask.NodeClass | + AttributeWriteMask.NodeId | AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | + AttributeWriteMask.UserExecutable | + AttributeWriteMask.UserWriteMask | AttributeWriteMask.ValueForVariableType | + AttributeWriteMask.ValueRank | AttributeWriteMask.WriteMask; variables.Add(allAccessLevel); + #endregion #region AccessUser1 - FolderState folderAttributesAccessUser1 = CreateFolder(folderAttributes, "Attributes_AccessUser1", "AccessUser1"); + + FolderState folderAttributesAccessUser1 = + CreateFolder(folderAttributes, "Attributes_AccessUser1", "AccessUser1"); const string attributesAccessUser1 = "Attributes_AccessUser1_"; - BaseDataVariableState accessLevelAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "AccessLevel", "AccessLevel", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState accessLevelAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "AccessLevel", "AccessLevel", DataTypeIds.Double, ValueRanks.Scalar); accessLevelAccessAll.WriteMask = AttributeWriteMask.AccessLevel; accessLevelAccessAll.UserWriteMask = AttributeWriteMask.AccessLevel; variables.Add(accessLevelAccessAll); - BaseDataVariableState arrayDimensionsAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "ArrayDimensions", "ArrayDimensions", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState arrayDimensionsAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "ArrayDimensions", "ArrayDimensions", DataTypeIds.Double, + ValueRanks.Scalar); arrayDimensionsAccessUser1.WriteMask = AttributeWriteMask.ArrayDimensions; arrayDimensionsAccessUser1.UserWriteMask = AttributeWriteMask.ArrayDimensions; variables.Add(arrayDimensionsAccessUser1); - BaseDataVariableState browseNameAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "BrowseName", "BrowseName", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState browseNameAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "BrowseName", "BrowseName", DataTypeIds.Double, ValueRanks.Scalar); browseNameAccessUser1.WriteMask = AttributeWriteMask.BrowseName; browseNameAccessUser1.UserWriteMask = AttributeWriteMask.BrowseName; variables.Add(browseNameAccessUser1); - BaseDataVariableState containsNoLoopsAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "ContainsNoLoops", "ContainsNoLoops", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState containsNoLoopsAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "ContainsNoLoops", "ContainsNoLoops", DataTypeIds.Double, + ValueRanks.Scalar); containsNoLoopsAccessUser1.WriteMask = AttributeWriteMask.ContainsNoLoops; containsNoLoopsAccessUser1.UserWriteMask = AttributeWriteMask.ContainsNoLoops; variables.Add(containsNoLoopsAccessUser1); - BaseDataVariableState dataTypeAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "DataType", "DataType", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState dataTypeAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "DataType", "DataType", DataTypeIds.Double, ValueRanks.Scalar); dataTypeAccessUser1.WriteMask = AttributeWriteMask.DataType; dataTypeAccessUser1.UserWriteMask = AttributeWriteMask.DataType; variables.Add(dataTypeAccessUser1); - BaseDataVariableState descriptionAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "Description", "Description", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState descriptionAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "Description", "Description", DataTypeIds.Double, ValueRanks.Scalar); descriptionAccessUser1.WriteMask = AttributeWriteMask.Description; descriptionAccessUser1.UserWriteMask = AttributeWriteMask.Description; variables.Add(descriptionAccessUser1); - BaseDataVariableState eventNotifierAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "EventNotifier", "EventNotifier", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState eventNotifierAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "EventNotifier", "EventNotifier", DataTypeIds.Double, + ValueRanks.Scalar); eventNotifierAccessUser1.WriteMask = AttributeWriteMask.EventNotifier; eventNotifierAccessUser1.UserWriteMask = AttributeWriteMask.EventNotifier; variables.Add(eventNotifierAccessUser1); - BaseDataVariableState executableAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "Executable", "Executable", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState executableAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "Executable", "Executable", DataTypeIds.Double, ValueRanks.Scalar); executableAccessUser1.WriteMask = AttributeWriteMask.Executable; executableAccessUser1.UserWriteMask = AttributeWriteMask.Executable; variables.Add(executableAccessUser1); - BaseDataVariableState historizingAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "Historizing", "Historizing", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState historizingAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "Historizing", "Historizing", DataTypeIds.Double, ValueRanks.Scalar); historizingAccessUser1.WriteMask = AttributeWriteMask.Historizing; historizingAccessUser1.UserWriteMask = AttributeWriteMask.Historizing; variables.Add(historizingAccessUser1); - BaseDataVariableState inverseNameAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "InverseName", "InverseName", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState inverseNameAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "InverseName", "InverseName", DataTypeIds.Double, ValueRanks.Scalar); inverseNameAccessUser1.WriteMask = AttributeWriteMask.InverseName; inverseNameAccessUser1.UserWriteMask = AttributeWriteMask.InverseName; variables.Add(inverseNameAccessUser1); - BaseDataVariableState isAbstractAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "IsAbstract", "IsAbstract", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState isAbstractAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "IsAbstract", "IsAbstract", DataTypeIds.Double, ValueRanks.Scalar); isAbstractAccessUser1.WriteMask = AttributeWriteMask.IsAbstract; isAbstractAccessUser1.UserWriteMask = AttributeWriteMask.IsAbstract; variables.Add(isAbstractAccessUser1); - BaseDataVariableState minimumSamplingIntervalAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "MinimumSamplingInterval", "MinimumSamplingInterval", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState minimumSamplingIntervalAccessUser1 = + CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "MinimumSamplingInterval", + "MinimumSamplingInterval", DataTypeIds.Double, ValueRanks.Scalar); minimumSamplingIntervalAccessUser1.WriteMask = AttributeWriteMask.MinimumSamplingInterval; minimumSamplingIntervalAccessUser1.UserWriteMask = AttributeWriteMask.MinimumSamplingInterval; variables.Add(minimumSamplingIntervalAccessUser1); - BaseDataVariableState nodeClassIntervalAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "NodeClass", "NodeClass", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState nodeClassIntervalAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "NodeClass", "NodeClass", DataTypeIds.Double, ValueRanks.Scalar); nodeClassIntervalAccessUser1.WriteMask = AttributeWriteMask.NodeClass; nodeClassIntervalAccessUser1.UserWriteMask = AttributeWriteMask.NodeClass; variables.Add(nodeClassIntervalAccessUser1); - BaseDataVariableState nodeIdAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "NodeId", "NodeId", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState nodeIdAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "NodeId", "NodeId", DataTypeIds.Double, ValueRanks.Scalar); nodeIdAccessUser1.WriteMask = AttributeWriteMask.NodeId; nodeIdAccessUser1.UserWriteMask = AttributeWriteMask.NodeId; variables.Add(nodeIdAccessUser1); - BaseDataVariableState symmetricAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "Symmetric", "Symmetric", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState symmetricAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "Symmetric", "Symmetric", DataTypeIds.Double, ValueRanks.Scalar); symmetricAccessUser1.WriteMask = AttributeWriteMask.Symmetric; symmetricAccessUser1.UserWriteMask = AttributeWriteMask.Symmetric; variables.Add(symmetricAccessUser1); - BaseDataVariableState userAccessUser1AccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "UserAccessUser1", "UserAccessUser1", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState userAccessUser1AccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "UserAccessUser1", "UserAccessUser1", DataTypeIds.Double, + ValueRanks.Scalar); userAccessUser1AccessUser1.WriteMask = AttributeWriteMask.UserAccessLevel; userAccessUser1AccessUser1.UserWriteMask = AttributeWriteMask.UserAccessLevel; variables.Add(userAccessUser1AccessUser1); - BaseDataVariableState userExecutableAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "UserExecutable", "UserExecutable", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState userExecutableAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "UserExecutable", "UserExecutable", DataTypeIds.Double, + ValueRanks.Scalar); userExecutableAccessUser1.WriteMask = AttributeWriteMask.UserExecutable; userExecutableAccessUser1.UserWriteMask = AttributeWriteMask.UserExecutable; variables.Add(userExecutableAccessUser1); - BaseDataVariableState valueRankAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "ValueRank", "ValueRank", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState valueRankAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "ValueRank", "ValueRank", DataTypeIds.Double, ValueRanks.Scalar); valueRankAccessUser1.WriteMask = AttributeWriteMask.ValueRank; valueRankAccessUser1.UserWriteMask = AttributeWriteMask.ValueRank; variables.Add(valueRankAccessUser1); - BaseDataVariableState writeMaskAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "WriteMask", "WriteMask", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState writeMaskAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "WriteMask", "WriteMask", DataTypeIds.Double, ValueRanks.Scalar); writeMaskAccessUser1.WriteMask = AttributeWriteMask.WriteMask; writeMaskAccessUser1.UserWriteMask = AttributeWriteMask.WriteMask; variables.Add(writeMaskAccessUser1); - BaseDataVariableState valueForVariableTypeAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "ValueForVariableType", "ValueForVariableType", DataTypeIds.Double, ValueRanks.Scalar); + BaseDataVariableState valueForVariableTypeAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "ValueForVariableType", "ValueForVariableType", DataTypeIds.Double, + ValueRanks.Scalar); valueForVariableTypeAccessUser1.WriteMask = AttributeWriteMask.ValueForVariableType; valueForVariableTypeAccessUser1.UserWriteMask = AttributeWriteMask.ValueForVariableType; variables.Add(valueForVariableTypeAccessUser1); - BaseDataVariableState allAccessUser1 = CreateVariable(folderAttributesAccessUser1, attributesAccessUser1 + "All", "All", DataTypeIds.Double, ValueRanks.Scalar); - allAccessUser1.WriteMask = AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | AttributeWriteMask.DataType | - AttributeWriteMask.Description | AttributeWriteMask.DisplayName | AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | AttributeWriteMask.IsAbstract | - AttributeWriteMask.MinimumSamplingInterval | AttributeWriteMask.NodeClass | AttributeWriteMask.NodeId | AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | AttributeWriteMask.UserExecutable | - AttributeWriteMask.UserWriteMask | AttributeWriteMask.ValueForVariableType | AttributeWriteMask.ValueRank | AttributeWriteMask.WriteMask; - allAccessUser1.UserWriteMask = AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | AttributeWriteMask.DataType | - AttributeWriteMask.Description | AttributeWriteMask.DisplayName | AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | AttributeWriteMask.IsAbstract | - AttributeWriteMask.MinimumSamplingInterval | AttributeWriteMask.NodeClass | AttributeWriteMask.NodeId | AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | AttributeWriteMask.UserExecutable | - AttributeWriteMask.UserWriteMask | AttributeWriteMask.ValueForVariableType | AttributeWriteMask.ValueRank | AttributeWriteMask.WriteMask; + BaseDataVariableState allAccessUser1 = CreateVariable(folderAttributesAccessUser1, + attributesAccessUser1 + "All", "All", DataTypeIds.Double, ValueRanks.Scalar); + allAccessUser1.WriteMask = AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | + AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | + AttributeWriteMask.DataType | + AttributeWriteMask.Description | AttributeWriteMask.DisplayName | + AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | + AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | + AttributeWriteMask.IsAbstract | + AttributeWriteMask.MinimumSamplingInterval | + AttributeWriteMask.NodeClass | AttributeWriteMask.NodeId | + AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | + AttributeWriteMask.UserExecutable | + AttributeWriteMask.UserWriteMask | + AttributeWriteMask.ValueForVariableType | AttributeWriteMask.ValueRank | + AttributeWriteMask.WriteMask; + allAccessUser1.UserWriteMask = + AttributeWriteMask.AccessLevel | AttributeWriteMask.ArrayDimensions | + AttributeWriteMask.BrowseName | AttributeWriteMask.ContainsNoLoops | + AttributeWriteMask.DataType | + AttributeWriteMask.Description | AttributeWriteMask.DisplayName | + AttributeWriteMask.EventNotifier | AttributeWriteMask.Executable | + AttributeWriteMask.Historizing | AttributeWriteMask.InverseName | + AttributeWriteMask.IsAbstract | + AttributeWriteMask.MinimumSamplingInterval | AttributeWriteMask.NodeClass | + AttributeWriteMask.NodeId | AttributeWriteMask.Symmetric | AttributeWriteMask.UserAccessLevel | + AttributeWriteMask.UserExecutable | + AttributeWriteMask.UserWriteMask | AttributeWriteMask.ValueForVariableType | + AttributeWriteMask.ValueRank | AttributeWriteMask.WriteMask; variables.Add(allAccessUser1); + #endregion + #endregion #region MyCompany + FolderState myCompanyFolder = CreateFolder(root, "MyCompany", "MyCompany"); const string myCompany = "MyCompany_"; - BaseDataVariableState myCompanyInstructions = CreateVariable(myCompanyFolder, myCompany + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + BaseDataVariableState myCompanyInstructions = CreateVariable(myCompanyFolder, + myCompany + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); myCompanyInstructions.Value = "A place for the vendor to describe their address-space."; variables.Add(myCompanyInstructions); + #endregion } catch (Exception e) @@ -1529,7 +2184,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new object type. /// - private BaseObjectTypeState CreateObjectType(NodeState parent, IDictionary> externalReferences, string path, string name) + private BaseObjectTypeState CreateObjectType(NodeState parent, + IDictionary> externalReferences, string path, string name) { BaseObjectTypeState type = new BaseObjectTypeState(); @@ -1564,7 +2220,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new variable. /// - private BaseDataVariableState CreateMeshVariable(NodeState parent, string path, string name, params NodeState[] peers) + private BaseDataVariableState CreateMeshVariable(NodeState parent, string path, string name, + params NodeState[] peers) { BaseDataVariableState variable = CreateVariable(parent, path, name, BuiltInType.Double, ValueRanks.Scalar); @@ -1585,7 +2242,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new variable. /// - private DataItemState CreateDataItemVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank) + private DataItemState CreateDataItemVariable(NodeState parent, string path, string name, BuiltInType dataType, + int valueRank) { DataItemState variable = new DataItemState(parent); variable.ValuePrecision = new PropertyState(variable); @@ -1638,7 +2296,8 @@ namespace Quickstarts.ReferenceServer return variable; } - private DataItemState[] CreateDataItemVariables(NodeState parent, string path, string name, BuiltInType dataType, int valueRank, UInt16 numVariables) + private DataItemState[] CreateDataItemVariables(NodeState parent, string path, string name, + BuiltInType dataType, int valueRank, UInt16 numVariables) { List itemsCreated = new List(); // create the default name first: @@ -1649,7 +2308,8 @@ namespace Quickstarts.ReferenceServer string newName = string.Format("{0}{1}", name, i.ToString("000")); string newPath = string.Format("{0}/Mass/{1}", path, newName); itemsCreated.Add(CreateDataItemVariable(parent, newPath, newName, dataType, valueRank)); - }//for i + } //for i + return (itemsCreated.ToArray()); } @@ -1690,22 +2350,26 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new variable. /// - private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank) + private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, + BuiltInType dataType, int valueRank) { return (CreateAnalogItemVariable(parent, path, name, dataType, valueRank, null)); } - private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank, object initialValues) + private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, + BuiltInType dataType, int valueRank, object initialValues) { return (CreateAnalogItemVariable(parent, path, name, dataType, valueRank, initialValues, null)); } - private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank, object initialValues, Opc.Ua.Range customRange) + private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, + BuiltInType dataType, int valueRank, object initialValues, Opc.Ua.Range customRange) { return CreateAnalogItemVariable(parent, path, name, (uint)dataType, valueRank, initialValues, customRange); } - private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, NodeId dataType, int valueRank, object initialValues, Opc.Ua.Range customRange) + private AnalogItemState CreateAnalogItemVariable(NodeState parent, string path, string name, NodeId dataType, + int valueRank, object initialValues, Opc.Ua.Range customRange) { AnalogItemState variable = new AnalogItemState(parent); variable.BrowseName = new QualifiedName(path, NamespaceIndex); @@ -1771,7 +2435,8 @@ namespace Quickstarts.ReferenceServer variable.Timestamp = DateTime.UtcNow; // The latest UNECE version (Rev 11, published in 2015) is available here: // http://www.opcfoundation.org/UA/EngineeringUnits/UNECE/rec20_latest_08052015.zip - variable.EngineeringUnits.Value = new EUInformation("mV", "millivolt", "http://www.opcfoundation.org/UA/units/un/cefact"); + variable.EngineeringUnits.Value = + new EUInformation("mV", "millivolt", "http://www.opcfoundation.org/UA/units/un/cefact"); // The mapping of the UNECE codes to OPC UA(EUInformation.unitId) is available here: // http://www.opcfoundation.org/UA/EngineeringUnits/UNECE/UNECE_to_OPCUA.csv variable.EngineeringUnits.Value.UnitId = 12890; // "2Z" @@ -1796,7 +2461,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new variable. /// - private DataItemState CreateTwoStateDiscreteItemVariable(NodeState parent, string path, string name, string trueState, string falseState) + private DataItemState CreateTwoStateDiscreteItemVariable(NodeState parent, string path, string name, + string trueState, string falseState) { TwoStateDiscreteState variable = new TwoStateDiscreteState(parent); @@ -1843,7 +2509,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new variable. /// - private DataItemState CreateMultiStateDiscreteItemVariable(NodeState parent, string path, string name, params string[] values) + private DataItemState CreateMultiStateDiscreteItemVariable(NodeState parent, string path, string name, + params string[] values) { MultiStateDiscreteState variable = new MultiStateDiscreteState(parent); @@ -1894,7 +2561,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new UInt32 variable. /// - private DataItemState CreateMultiStateValueDiscreteItemVariable(NodeState parent, string path, string name, params string[] enumNames) + private DataItemState CreateMultiStateValueDiscreteItemVariable(NodeState parent, string path, string name, + params string[] enumNames) { return CreateMultiStateValueDiscreteItemVariable(parent, path, name, null, enumNames); } @@ -1902,7 +2570,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new variable. /// - private DataItemState CreateMultiStateValueDiscreteItemVariable(NodeState parent, string path, string name, NodeId nodeId, params string[] enumNames) + private DataItemState CreateMultiStateValueDiscreteItemVariable(NodeState parent, string path, string name, + NodeId nodeId, params string[] enumNames) { MultiStateValueDiscreteState variable = new MultiStateValueDiscreteState(parent); @@ -1951,6 +2620,7 @@ namespace Quickstarts.ReferenceServer values[ii].Description = strings[ii]; values[ii].DisplayName = strings[ii]; } + variable.EnumValues.Value = values; variable.EnumValues.AccessLevel = AccessLevels.CurrentReadOrWrite; variable.EnumValues.UserAccessLevel = AccessLevels.CurrentReadOrWrite; @@ -2035,7 +2705,8 @@ namespace Quickstarts.ReferenceServer return StatusCodes.BadOutOfRange; } - if (!node.SetChildValue(context, BrowseNames.ValueAsText, variable.EnumValues.Value[number].DisplayName, true)) + if (!node.SetChildValue(context, BrowseNames.ValueAsText, variable.EnumValues.Value[number].DisplayName, + true)) { return StatusCodes.BadOutOfRange; } @@ -2096,7 +2767,8 @@ namespace Quickstarts.ReferenceServer double number = Convert.ToDouble(value); - if (variable.InstrumentRange != null && (number < variable.InstrumentRange.Value.Low || number > variable.InstrumentRange.Value.High)) + if (variable.InstrumentRange != null && (number < variable.InstrumentRange.Value.Low || + number > variable.InstrumentRange.Value.High)) { return StatusCodes.BadOutOfRange; } @@ -2155,7 +2827,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new variable. /// - private BaseDataVariableState CreateVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank) + private BaseDataVariableState CreateVariable(NodeState parent, string path, string name, BuiltInType dataType, + int valueRank) { return CreateVariable(parent, path, name, (uint)dataType, valueRank); } @@ -2163,7 +2836,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new variable. /// - private BaseDataVariableState CreateVariable(NodeState parent, string path, string name, NodeId dataType, int valueRank,bool ini=true) + private BaseDataVariableState CreateVariable(NodeState parent, string path, string name, NodeId dataType, + int valueRank, bool ini = true) { BaseDataVariableState variable = new BaseDataVariableState(parent); @@ -2201,12 +2875,14 @@ namespace Quickstarts.ReferenceServer return variable; } - private BaseDataVariableState[] CreateVariables(NodeState parent, string path, string name, BuiltInType dataType, int valueRank, UInt16 numVariables) + private BaseDataVariableState[] CreateVariables(NodeState parent, string path, string name, + BuiltInType dataType, int valueRank, UInt16 numVariables) { return CreateVariables(parent, path, name, (uint)dataType, valueRank, numVariables); } - private BaseDataVariableState[] CreateVariables(NodeState parent, string path, string name, NodeId dataType, int valueRank, UInt16 numVariables) + private BaseDataVariableState[] CreateVariables(NodeState parent, string path, string name, NodeId dataType, + int valueRank, UInt16 numVariables) { // first, create a new Parent folder for this data-type FolderState newParentFolder = CreateFolder(parent, path, name); @@ -2219,13 +2895,15 @@ namespace Quickstarts.ReferenceServer string newPath = string.Format("{0}_{1}", path, newName); itemsCreated.Add(CreateVariable(newParentFolder, newPath, newName, dataType, valueRank)); } + return (itemsCreated.ToArray()); } /// /// Creates a new variable. /// - private BaseDataVariableState CreateDynamicVariable(NodeState parent, string path, string name, BuiltInType dataType, int valueRank) + private BaseDataVariableState CreateDynamicVariable(NodeState parent, string path, string name, + BuiltInType dataType, int valueRank) { return CreateDynamicVariable(parent, path, name, (uint)dataType, valueRank); } @@ -2233,7 +2911,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new variable. /// - private BaseDataVariableState CreateDynamicVariable(NodeState parent, string path, string name, NodeId dataType, int valueRank) + private BaseDataVariableState CreateDynamicVariable(NodeState parent, string path, string name, NodeId dataType, + int valueRank) { BaseDataVariableState variable = CreateVariable(parent, path, name, dataType, valueRank); m_dynamicNodes.Add(variable); @@ -2243,7 +2922,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new variable. /// - private void CreateIoTGatewayVariable(NodeState parent, string path, string name, NodeId dataType, int valueRank) + private void CreateIoTGatewayVariable(NodeState parent, string path, string name, NodeId dataType, + int valueRank) { try { @@ -2255,15 +2935,16 @@ namespace Quickstarts.ReferenceServer Console.WriteLine($"节点创建失败,{name},{ex}"); } } - - private BaseDataVariableState[] CreateDynamicVariables(NodeState parent, string path, string name, BuiltInType dataType, int valueRank, uint numVariables) + + private BaseDataVariableState[] CreateDynamicVariables(NodeState parent, string path, string name, + BuiltInType dataType, int valueRank, uint numVariables) { return CreateDynamicVariables(parent, path, name, (uint)dataType, valueRank, numVariables); - } - private BaseDataVariableState[] CreateDynamicVariables(NodeState parent, string path, string name, NodeId dataType, int valueRank, uint numVariables) + private BaseDataVariableState[] CreateDynamicVariables(NodeState parent, string path, string name, + NodeId dataType, int valueRank, uint numVariables) { // first, create a new Parent folder for this data-type FolderState newParentFolder = CreateFolder(parent, path, name); @@ -2275,14 +2956,17 @@ namespace Quickstarts.ReferenceServer string newName = string.Format("{0}_{1}", name, i.ToString("00")); string newPath = string.Format("{0}_{1}", path, newName); itemsCreated.Add(CreateDynamicVariable(newParentFolder, newPath, newName, dataType, valueRank)); - }//for i + } //for i + return (itemsCreated.ToArray()); } /// /// Creates a new variable type. /// - private BaseVariableTypeState CreateVariableType(NodeState parent, IDictionary> externalReferences, string path, string name, BuiltInType dataType, int valueRank) + private BaseVariableTypeState CreateVariableType(NodeState parent, + IDictionary> externalReferences, string path, string name, BuiltInType dataType, + int valueRank) { BaseDataVariableTypeState type = new BaseDataVariableTypeState(); @@ -2320,7 +3004,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new data type. /// - private DataTypeState CreateDataType(NodeState parent, IDictionary> externalReferences, string path, string name) + private DataTypeState CreateDataType(NodeState parent, + IDictionary> externalReferences, string path, string name) { DataTypeState type = new DataTypeState(); @@ -2355,7 +3040,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new reference type. /// - private ReferenceTypeState CreateReferenceType(NodeState parent, IDictionary> externalReferences, string path, string name) + private ReferenceTypeState CreateReferenceType(NodeState parent, + IDictionary> externalReferences, string path, string name) { ReferenceTypeState type = new ReferenceTypeState(); @@ -2392,7 +3078,8 @@ namespace Quickstarts.ReferenceServer /// /// Creates a new view. /// - private ViewState CreateView(NodeState parent, IDictionary> externalReferences, string path, string name) + private ViewState CreateView(NodeState parent, IDictionary> externalReferences, + string path, string name) { ViewState type = new ViewState(); @@ -2464,7 +3151,6 @@ namespace Quickstarts.ReferenceServer IList inputArguments, IList outputArguments) { - // all arguments must be provided. if (inputArguments.Count < 2) { @@ -2492,7 +3178,6 @@ namespace Quickstarts.ReferenceServer IList inputArguments, IList outputArguments) { - // all arguments must be provided. if (inputArguments.Count < 2) { @@ -2520,7 +3205,6 @@ namespace Quickstarts.ReferenceServer IList inputArguments, IList outputArguments) { - // all arguments must be provided. if (inputArguments.Count < 2) { @@ -2548,7 +3232,6 @@ namespace Quickstarts.ReferenceServer IList inputArguments, IList outputArguments) { - // all arguments must be provided. if (inputArguments.Count < 2) { @@ -2576,7 +3259,6 @@ namespace Quickstarts.ReferenceServer IList inputArguments, IList outputArguments) { - // all arguments must be provided. if (inputArguments.Count < 1) { @@ -2603,7 +3285,6 @@ namespace Quickstarts.ReferenceServer IList inputArguments, IList outputArguments) { - // all arguments must be provided. if (inputArguments.Count < 1) { @@ -2645,7 +3326,8 @@ namespace Quickstarts.ReferenceServer while (value == null && retryCount < 10) { - value = m_generator.GetRandom(variable.DataType, variable.ValueRank, new uint[] { 10 }, Server.TypeTree); + value = m_generator.GetRandom(variable.DataType, variable.ValueRank, new uint[] { 10 }, + Server.TypeTree); retryCount++; } @@ -2685,7 +3367,8 @@ namespace Quickstarts.ReferenceServer /// /// Returns a unique handle for the node. /// - protected override NodeHandle GetManagerHandle(ServerSystemContext context, NodeId nodeId, IDictionary cache) + protected override NodeHandle GetManagerHandle(ServerSystemContext context, NodeId nodeId, + IDictionary cache) { lock (Lock) { @@ -2716,9 +3399,9 @@ namespace Quickstarts.ReferenceServer /// Verifies that the specified node exists. /// protected override NodeState ValidateNode( - ServerSystemContext context, - NodeHandle handle, - IDictionary cache) + ServerSystemContext context, + NodeHandle handle, + IDictionary cache) { // not valid if no root. if (handle == null) @@ -2736,12 +3419,15 @@ namespace Quickstarts.ReferenceServer return null; } + #endregion #region Overrides + #endregion #region Private Fields + private ReferenceServerConfiguration m_configuration; private Opc.Ua.Test.DataGenerator m_generator; private Timer m_simulationTimer; @@ -2749,8 +3435,8 @@ namespace Quickstarts.ReferenceServer private bool m_simulationEnabled = true; private List m_dynamicNodes; public List m_iotgatewayNodes; - #endregion + #endregion public override void CreateAddressSpace(IDictionary> externalReferences) @@ -2775,74 +3461,112 @@ namespace Quickstarts.ReferenceServer try { #region IoTGatewayDevice - using (var DC = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DBType)) + + using (var DC = new DataContext(IoTBackgroundService.connnectSetting, IoTBackgroundService.DbType)) { - foreach (var group in DC.Set().AsNoTracking().Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Group).OrderBy(x => x.Index).ToList()) + foreach (var group in DC.Set().AsNoTracking() + .Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Group).OrderBy(x => x.Index) + .ToList()) { FolderState deviceGroupFolder = CreateFolder(root, group.DeviceName, group.DeviceName); - foreach (var device in DC.Set().AsNoTracking().Where(x => x.ParentId == group.ID).Include(x => x.DeviceVariables).Include(x => x.DeviceConfigs).OrderBy(x => x.Index).ToList()) + foreach (var device in DC.Set().AsNoTracking().Where(x => x.ParentId == group.ID) + .Include(x => x.DeviceVariables).Include(x => x.DeviceConfigs) + .OrderBy(x => x.Index).ToList()) { - FolderState staticFolder = CreateFolder(deviceGroupFolder, device.DeviceName, device.DeviceName); + FolderState staticFolder = CreateFolder(deviceGroupFolder, device.DeviceName, + device.DeviceName); foreach (var variable in device.DeviceVariables) { //先把变量加进去,都用float有瑕疵,属性先不做, - CreateIoTGatewayVariable(staticFolder, $"{group.DeviceName}.{device.DeviceName}.{variable.Name}", $"{variable.Name}", DataTypeIds.Float, ValueRanks.Scalar); + CreateIoTGatewayVariable(staticFolder, + $"{group.DeviceName}.{device.DeviceName}.{variable.Name}", $"{variable.Name}", + DataTypeIds.Float, ValueRanks.Scalar); } } } - } - #endregion #region Scalar_Simulation + FolderState scalarFolder = CreateFolder(root, "常量", "常量"); FolderState simulationFolder = CreateFolder(scalarFolder, "实时模拟", "实时模拟"); const string scalarSimulation = "Scalar_Simulation_"; - CreateDynamicVariable(simulationFolder, scalarSimulation + "Boolean", "Boolean", DataTypeIds.Boolean, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Byte", "Byte", DataTypeIds.Byte, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "ByteString", "ByteString", DataTypeIds.ByteString, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "DateTime", "DateTime", DataTypeIds.DateTime, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Double", "Double", DataTypeIds.Double, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Duration", "Duration", DataTypeIds.Duration, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Float", "Float", DataTypeIds.Float, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Guid", "Guid", DataTypeIds.Guid, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Int16", "Int16", DataTypeIds.Int16, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Int32", "Int32", DataTypeIds.Int32, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Int64", "Int64", DataTypeIds.Int64, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Integer", "Integer", DataTypeIds.Integer, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "LocaleId", "LocaleId", DataTypeIds.LocaleId, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "LocalizedText", "LocalizedText", DataTypeIds.LocalizedText, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "NodeId", "NodeId", DataTypeIds.NodeId, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Number", "Number", DataTypeIds.Number, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "QualifiedName", "QualifiedName", DataTypeIds.QualifiedName, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "SByte", "SByte", DataTypeIds.SByte, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "String", "String", DataTypeIds.String, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt16", "UInt16", DataTypeIds.UInt16, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt32", "UInt32", DataTypeIds.UInt32, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt64", "UInt64", DataTypeIds.UInt64, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "UInteger", "UInteger", DataTypeIds.UInteger, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "UtcTime", "UtcTime", DataTypeIds.UtcTime, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "Variant", "Variant", BuiltInType.Variant, ValueRanks.Scalar); - CreateDynamicVariable(simulationFolder, scalarSimulation + "XmlElement", "XmlElement", DataTypeIds.XmlElement, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Boolean", "Boolean", + DataTypeIds.Boolean, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Byte", "Byte", DataTypeIds.Byte, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "ByteString", "ByteString", + DataTypeIds.ByteString, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "DateTime", "DateTime", + DataTypeIds.DateTime, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Double", "Double", DataTypeIds.Double, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Duration", "Duration", + DataTypeIds.Duration, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Float", "Float", DataTypeIds.Float, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Guid", "Guid", DataTypeIds.Guid, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Int16", "Int16", DataTypeIds.Int16, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Int32", "Int32", DataTypeIds.Int32, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Int64", "Int64", DataTypeIds.Int64, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Integer", "Integer", + DataTypeIds.Integer, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "LocaleId", "LocaleId", + DataTypeIds.LocaleId, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "LocalizedText", "LocalizedText", + DataTypeIds.LocalizedText, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "NodeId", "NodeId", DataTypeIds.NodeId, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Number", "Number", DataTypeIds.Number, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "QualifiedName", "QualifiedName", + DataTypeIds.QualifiedName, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "SByte", "SByte", DataTypeIds.SByte, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "String", "String", DataTypeIds.String, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt16", "UInt16", DataTypeIds.UInt16, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt32", "UInt32", DataTypeIds.UInt32, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInt64", "UInt64", DataTypeIds.UInt64, + ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UInteger", "UInteger", + DataTypeIds.UInteger, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "UtcTime", "UtcTime", + DataTypeIds.UtcTime, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "Variant", "Variant", + BuiltInType.Variant, ValueRanks.Scalar); + CreateDynamicVariable(simulationFolder, scalarSimulation + "XmlElement", "XmlElement", + DataTypeIds.XmlElement, ValueRanks.Scalar); - BaseDataVariableState intervalVariable = CreateVariable(simulationFolder, scalarSimulation + "Interval", "Interval", DataTypeIds.UInt16, ValueRanks.Scalar); + BaseDataVariableState intervalVariable = CreateVariable(simulationFolder, + scalarSimulation + "Interval", "Interval", DataTypeIds.UInt16, ValueRanks.Scalar); intervalVariable.Value = m_simulationInterval; intervalVariable.OnSimpleWriteValue = OnWriteInterval; - BaseDataVariableState enabledVariable = CreateVariable(simulationFolder, scalarSimulation + "Enabled", "Enabled", DataTypeIds.Boolean, ValueRanks.Scalar); + BaseDataVariableState enabledVariable = CreateVariable(simulationFolder, + scalarSimulation + "Enabled", "Enabled", DataTypeIds.Boolean, ValueRanks.Scalar); enabledVariable.Value = m_simulationEnabled; enabledVariable.OnSimpleWriteValue = OnWriteEnabled; + #endregion #region Methods + FolderState methodsFolder = CreateFolder(root, "方法", "方法"); const string methods = "Methods_"; - BaseDataVariableState methodsInstructions = CreateVariable(methodsFolder, methods + "Instructions", "Instructions", DataTypeIds.String, ValueRanks.Scalar); + BaseDataVariableState methodsInstructions = CreateVariable(methodsFolder, methods + "Instructions", + "Instructions", DataTypeIds.String, ValueRanks.Scalar); methodsInstructions.Value = "Contains methods with varying parameter definitions."; variables.Add(methodsInstructions); @@ -2850,6 +3574,7 @@ namespace Quickstarts.ReferenceServer voidMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnVoidCall); #region Add Method + MethodState addMethod = CreateMethod(methodsFolder, methods + "Add", "Add"); // set input arguments addMethod.InputArguments = new PropertyState(addMethod); @@ -2863,13 +3588,22 @@ namespace Quickstarts.ReferenceServer addMethod.InputArguments.Value = new Argument[] { - new Argument() { Name = "Float value", Description = "Float value", DataType = DataTypeIds.Float, ValueRank = ValueRanks.Scalar }, - new Argument() { Name = "UInt32 value", Description = "UInt32 value", DataType = DataTypeIds.UInt32, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Float value", Description = "Float value", DataType = DataTypeIds.Float, + ValueRank = ValueRanks.Scalar + }, + new Argument() + { + Name = "UInt32 value", Description = "UInt32 value", DataType = DataTypeIds.UInt32, + ValueRank = ValueRanks.Scalar + } }; // set output arguments addMethod.OutputArguments = new PropertyState(addMethod); - addMethod.OutputArguments.NodeId = new NodeId(addMethod.BrowseName.Name + "OutArgs", NamespaceIndex); + addMethod.OutputArguments.NodeId = + new NodeId(addMethod.BrowseName.Name + "OutArgs", NamespaceIndex); addMethod.OutputArguments.BrowseName = BrowseNames.OutputArguments; addMethod.OutputArguments.DisplayName = addMethod.OutputArguments.BrowseName.Name; addMethod.OutputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -2879,17 +3613,24 @@ namespace Quickstarts.ReferenceServer addMethod.OutputArguments.Value = new Argument[] { - new Argument() { Name = "Add Result", Description = "Add Result", DataType = DataTypeIds.Float, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "Add Result", Description = "Add Result", DataType = DataTypeIds.Float, + ValueRank = ValueRanks.Scalar + } }; addMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnAddCall); + #endregion #region Input Method + MethodState inputMethod = CreateMethod(methodsFolder, methods + "Input", "Input"); // set input arguments inputMethod.InputArguments = new PropertyState(inputMethod); - inputMethod.InputArguments.NodeId = new NodeId(inputMethod.BrowseName.Name + "InArgs", NamespaceIndex); + inputMethod.InputArguments.NodeId = + new NodeId(inputMethod.BrowseName.Name + "InArgs", NamespaceIndex); inputMethod.InputArguments.BrowseName = BrowseNames.InputArguments; inputMethod.InputArguments.DisplayName = inputMethod.InputArguments.BrowseName.Name; inputMethod.InputArguments.TypeDefinitionId = VariableTypeIds.PropertyType; @@ -2899,21 +3640,29 @@ namespace Quickstarts.ReferenceServer inputMethod.InputArguments.Value = new Argument[] { - new Argument() { Name = "String value", Description = "String value", DataType = DataTypeIds.String, ValueRank = ValueRanks.Scalar } + new Argument() + { + Name = "String value", Description = "String value", DataType = DataTypeIds.String, + ValueRank = ValueRanks.Scalar + } }; inputMethod.OnCallMethod = new GenericMethodCalledEventHandler(OnInputCall); + #endregion #endregion #region Contact + FolderState myCompanyFolder = CreateFolder(root, "联系", "联系"); const string myCompany = "Contact_"; - BaseDataVariableState myContactInstructions = CreateVariable(myCompanyFolder, myCompany + "联系方式", "联系方式", DataTypeIds.String, ValueRanks.Scalar); + BaseDataVariableState myContactInstructions = CreateVariable(myCompanyFolder, myCompany + "联系方式", + "联系方式", DataTypeIds.String, ValueRanks.Scalar); myContactInstructions.Value = "https://github.com/iioter/iotgateway."; variables.Add(myContactInstructions); + #endregion } catch (Exception e) @@ -2925,11 +3674,12 @@ namespace Quickstarts.ReferenceServer } } - public void UpdateNode(string nodeName,object value) + public void UpdateNode(string nodeName, object value) { try { - var variable = m_iotgatewayNodes.Where(x => x.NodeId.Identifier.ToString() == nodeName).FirstOrDefault(); + var variable = m_iotgatewayNodes.Where(x => x.NodeId.Identifier.ToString() == nodeName) + .FirstOrDefault(); if (variable != null) { variable.Value = value; @@ -2937,12 +3687,10 @@ namespace Quickstarts.ReferenceServer variable.StatusCode = StatusCodes.Good; variable.ClearChangeMasks(SystemContext, false); } - } catch (Exception ex) { - } } } -} +} \ No newline at end of file diff --git a/Plugins/Plugin/UAService.cs b/Plugins/Plugin/UAService.cs index 3353cdc..1e03698 100644 --- a/Plugins/Plugin/UAService.cs +++ b/Plugins/Plugin/UAService.cs @@ -1,13 +1,5 @@ -using Microsoft.Extensions.Hosting; -using Opc.Ua; -using Quickstarts; +using Quickstarts; using Quickstarts.ReferenceServer; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; namespace Plugin { diff --git a/Plugins/PluginInterface/HuaWeiRoma/HwAddDeviceDto.cs b/Plugins/PluginInterface/HuaWeiRoma/HwAddDeviceDto.cs new file mode 100644 index 0000000..81c3f45 --- /dev/null +++ b/Plugins/PluginInterface/HuaWeiRoma/HwAddDeviceDto.cs @@ -0,0 +1,49 @@ +using Newtonsoft.Json; + +namespace PluginInterface.HuaWeiRoma +{ + public class HwAddDeviceDto + { + [JsonProperty(PropertyName = "deviceInfos")] + public List DeviceInfos = new(); + + /// + /// 命令ID + /// + [JsonProperty(PropertyName = "mid")] + public long MId { get; set; } + } + + public class DeviceInfo + { + /// + /// 设备标识 + /// + [JsonProperty(PropertyName = "nodeId")] + public string NodeId { get; set; } + + /// + /// 设备名称 + /// + [JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// 设备描述 + /// + [JsonProperty(PropertyName = "description")] + public string Description { get; set; } + + /// + /// 厂商ID + /// + [JsonProperty(PropertyName = "manufacturerId")] + public string ManufacturerId { get; set; } + + /// + /// 产品型号 + /// + [JsonProperty(PropertyName = "model")] + public string ProductType { get; set; } + } +} diff --git a/Plugins/PluginInterface/HuaWeiRoma/HwDeleteDeviceDto.cs b/Plugins/PluginInterface/HuaWeiRoma/HwDeleteDeviceDto.cs new file mode 100644 index 0000000..6012b78 --- /dev/null +++ b/Plugins/PluginInterface/HuaWeiRoma/HwDeleteDeviceDto.cs @@ -0,0 +1,52 @@ +using Newtonsoft.Json; + +namespace PluginInterface.HuaWeiRoma +{ + public class HwDeleteDeviceDto + { + /// + /// 命令ID + /// + [JsonProperty(PropertyName = "id")] + public long Id { get; set; } + + /// + /// 平台生成的设备唯一标识,对应设备客户端ID + /// + [JsonProperty(PropertyName = "deviceId")] + public string? DeviceId { get; set; } + + /// + /// 请求时间戳 + /// + [JsonProperty(PropertyName = "requestTime")] + public long RequestTime { get; set; } + + /// + /// 子设备信息 + /// + [JsonProperty(PropertyName = "request")] + public Request? Request { get; set; } + } + + public class Request + { + /// + /// 厂商名称 + /// + [JsonProperty(PropertyName = "manufacturerName")] + public string? ManufacturerName { get; set; } + + /// + /// 厂商ID + /// + [JsonProperty(PropertyName = "manufacturerId")] + public string? ManufacturerId { get; set; } + + /// + /// 产品型号 + /// + [JsonProperty(PropertyName = "model")] + public string? ProductType { get; set; } + } +} diff --git a/Plugins/PluginInterface/HuaWeiRoma/HwDeviceOnOffLine.cs b/Plugins/PluginInterface/HuaWeiRoma/HwDeviceOnOffLine.cs new file mode 100644 index 0000000..9e4ae0d --- /dev/null +++ b/Plugins/PluginInterface/HuaWeiRoma/HwDeviceOnOffLine.cs @@ -0,0 +1,34 @@ +using Newtonsoft.Json; + +namespace PluginInterface.HuaWeiRoma +{ + public class HwDeviceOnOffLine + { + [JsonProperty(PropertyName = "deviceStatuses")] + public List DeviceStatuses = new(); + + /// + /// 命令ID + /// + [JsonProperty(PropertyName = "mid")] + public long MId { get; set; } + } + + public class DeviceStatus + { + /// + /// 设备标识 + /// + [JsonProperty(PropertyName = "deviceId")] + public string? DeviceId { get; set; } + + /// + /// 子设备状态: + /// OFFLINE:设备离线 + /// ONLINE: 设备上线 + /// + [JsonProperty(PropertyName = "status")] + public string? Status { get; set; } + + } +} diff --git a/Plugins/PluginInterface/HuaWeiRoma/HwTelemetry.cs b/Plugins/PluginInterface/HuaWeiRoma/HwTelemetry.cs new file mode 100644 index 0000000..be3d7f8 --- /dev/null +++ b/Plugins/PluginInterface/HuaWeiRoma/HwTelemetry.cs @@ -0,0 +1,27 @@ +using Newtonsoft.Json; + +namespace PluginInterface.HuaWeiRoma +{ + public class HwTelemetrys + { + [JsonProperty(PropertyName = "devices")] + public List? Devices { get; set; } + } + public class HwTelemetry + { + [JsonProperty(PropertyName = "deviceId")] + public string? DeviceId { get; set; } + [JsonProperty(PropertyName = "services")] + public List? Services { get; set; } + } + + public class Service + { + [JsonProperty(PropertyName = "serviceId")] + public string? ServiceId { get; set; } + [JsonProperty(PropertyName = "data")] + public object? Data { get; set; } + [JsonProperty(PropertyName = "eventTime")] + public string? EventTime { get; set; } + } +} diff --git a/Plugins/PluginInterface/IDriver.cs b/Plugins/PluginInterface/IDriver.cs index 5a8beac..3565468 100644 --- a/Plugins/PluginInterface/IDriver.cs +++ b/Plugins/PluginInterface/IDriver.cs @@ -5,7 +5,7 @@ namespace PluginInterface { public interface IDriver : IDisposable { - public Guid DeviceId { get; } + public string DeviceId { get; } public bool IsConnected { get; } public int Timeout { get; } public uint MinPeriod { get; } diff --git a/Plugins/PluginInterface/RpcRequest.cs b/Plugins/PluginInterface/RpcRequest.cs index fe398fc..503e338 100644 --- a/Plugins/PluginInterface/RpcRequest.cs +++ b/Plugins/PluginInterface/RpcRequest.cs @@ -11,7 +11,7 @@ namespace PluginInterface public string DeviceName { get; set; } public string Method { get; set; } public string RequestId { get; set; } - public Dictionary Params { get; set; } + public Dictionary? Params { get; set; } public override string ToString() { return $"Method:{Method},RequestId:{RequestId},Params:{Newtonsoft.Json.JsonConvert.SerializeObject(Params)}";