Quellcode durchsuchen

1. 自定义订阅细节修改,移除不必要的事件
2. 细节优化,版本更新

Shun vor 2 Jahren
Ursprung
Commit
7f48da6c5a

+ 4 - 1
README.md

@@ -447,4 +447,7 @@ while(true)
 4. 优化所有采集协议的读取代码
 5. 修改采集协议的OFF方法,新添加订阅OFF
 6. 新增S7、AllenBradley、Mitsubishi、Omron、ModBus 测试服务端(非标准)
-7. 版本更新
+7. 版本更新
+
+#### 2023-11-10
+1. 自定义订阅细节修改,移除不必要的事件

+ 2 - 2
src/YSAI.AllenBradley/YSAI.AllenBradley.csproj

@@ -5,7 +5,7 @@
 		<ImplicitUsings>enable</ImplicitUsings>
 		<Nullable>enable</Nullable>
 		<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-		<Version>1.0.0.2</Version>
+		<Version>1.0.0.3</Version>
 		<Authors>Shun</Authors>
 		<Company>YSAI</Company>
 		<Product>SCADA</Product>
@@ -13,6 +13,6 @@
 	</PropertyGroup>
 
 	<ItemGroup>
-		<PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+		<PackageReference Include="YSAI.Core" Version="1.0.0.90" />
 	</ItemGroup>
 </Project>

+ 2 - 2
src/YSAI.Beckhoff/YSAI.Beckhoff.csproj

@@ -5,7 +5,7 @@
 		<ImplicitUsings>enable</ImplicitUsings>
 		<Nullable>enable</Nullable>
 		<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-		<Version>1.0.0.12</Version>
+		<Version>1.0.0.13</Version>
 		<Authors>Shun</Authors>
 		<Company>YSAI</Company>
 		<Product>SCADA</Product>
@@ -14,7 +14,7 @@
 
 	<ItemGroup>
 		<PackageReference Include="Beckhoff.TwinCAT.Ads" Version="6.1.86" />
-		<PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+		<PackageReference Include="YSAI.Core" Version="1.0.0.90" />
 	</ItemGroup>
 
 	<!--<ItemGroup>

+ 2 - 2
src/YSAI.Can/YSAI.Can.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
 	  <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-	  <Version>1.0.0.38</Version>
+	  <Version>1.0.0.39</Version>
 	  <Authors>Shun</Authors>
 	  <Company>YSAI</Company>
 	  <Product>SCADA</Product>
@@ -17,7 +17,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.90" />
   </ItemGroup>
 
   <ItemGroup>

+ 1 - 1
src/YSAI.Core/YSAI.Core.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.0.89</Version>
+    <Version>1.0.0.90</Version>
     <Authors>Shun</Authors>
     <Company>YSAI</Company>
     <Product>SCADA</Product>

+ 19 - 0
src/YSAI.Core/subscribe/SubscribeOperate.cs

@@ -66,6 +66,7 @@ namespace YSAI.Core.subscription
         {
             //设置参数
             this.basics = basics;
+            //事件注册
             subscribeService.OnEvent += SubscribeService_OnEvent;
         }
 
@@ -256,6 +257,24 @@ namespace YSAI.Core.subscription
             }
         }
 
+        public OperateResult GetStatus()
+        {
+            string SN = Depart("GetStatus");
+            if (DataQueue == null && TaskArray == null)
+            {
+                return Break(SN, false, "未订阅");
+            }
+            else
+            {
+                return Break(SN, true, "已订阅");
+            }
+        }
+
+        public Task<OperateResult> GetStatusAsync()
+        {
+            return Task.Run(() => GetStatus());
+        }
+
         /// <summary>
         /// 任务集合
         /// </summary>

+ 1 - 16
src/YSAI.Core/subscribe/core/SubscribeService.cs

@@ -9,7 +9,7 @@ namespace YSAI.Core.subscribe.core
     ///
     /// 确保SN 是唯一,不然会导致数据冲突
     /// </summary>
-    public class SubscribeService<T> : IBaseAbstract
+    public class SubscribeService<T> : IBaseAbstract, IDisposable
     {
         protected override string TAG => "SubscribeService";
 
@@ -47,21 +47,6 @@ namespace YSAI.Core.subscribe.core
         /// </summary>
         private ConcurrentDictionary<string, SubscribeSource<T>> Source = new ConcurrentDictionary<string, SubscribeSource<T>>();
 
-        /// <summary>
-        /// 订阅事件
-        /// </summary>
-        public event EventHandler<EventResult> OnEvent;
-
-        /// <summary>
-        /// 事件传递
-        /// </summary>
-        /// <param name="sender">源</param>
-        /// <param name="e">事件结果</param>
-        private void OnEventHandler(object? sender, EventResult e)
-        {
-            OnEvent?.Invoke(sender, e);
-        }
-
         /// <summary>
         /// 释放
         /// </summary>

+ 1 - 14
src/YSAI.Core/subscribe/core/SubscribeSource.cs

@@ -18,11 +18,6 @@ namespace YSAI.Core.subscribe.core
             SN = sN;
         }
 
-        /// <summary>
-        /// 订阅事件
-        /// </summary>
-        public event EventHandler<EventResult> OnEvent;
-
         protected virtual string TAG => "SubscribeSource";
 
         /// <summary>
@@ -87,15 +82,7 @@ namespace YSAI.Core.subscribe.core
             return Task.Run(() => Get());
         }
 
-        /// <summary>
-        /// 事件传递
-        /// </summary>
-        /// <param name="sender">源</param>
-        /// <param name="e">事件结果</param>
-        private void OnEventHandler(object? sender, EventResult e)
-        {
-            OnEvent?.Invoke(sender, e);
-        }
+
 
         /// <summary>
         /// 释放

+ 10 - 3
src/YSAI.DAQ.sln

@@ -111,11 +111,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YSAI.NetMQ", "YSAI.NetMQ\YS
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YSAI.NetMQ.Pack", "YSAI.NetMQ.Pack\YSAI.NetMQ.Pack.csproj", "{F41F510E-5D32-44A1-97A0-228B507DDA90}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YSAI.Test.Service", "YSAI.Test.Service\YSAI.Test.Service.csproj", "{6B3E64C2-34D4-4086-878D-D736431F0004}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YSAI.Test.Service", "YSAI.Test.Service\YSAI.Test.Service.csproj", "{6B3E64C2-34D4-4086-878D-D736431F0004}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YSAI.AllenBradley", "YSAI.AllenBradley\YSAI.AllenBradley.csproj", "{5D263A57-A36F-44DF-9AC8-9F4AA928B221}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YSAI.AllenBradley", "YSAI.AllenBradley\YSAI.AllenBradley.csproj", "{5D263A57-A36F-44DF-9AC8-9F4AA928B221}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YSAI.AllenBradley.Pack", "YSAI.AllenBradley.Pack\YSAI.AllenBradley.Pack.csproj", "{3263AB0B-19E7-456B-9DCF-C7DC3BEED337}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YSAI.AllenBradley.Pack", "YSAI.AllenBradley.Pack\YSAI.AllenBradley.Pack.csproj", "{3263AB0B-19E7-456B-9DCF-C7DC3BEED337}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YSAI.Mewtocol", "YSAI.Mewtocol\YSAI.Mewtocol.csproj", "{BA30E984-11EE-426B-872C-8DF74D48C3B3}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -315,6 +317,10 @@ Global
 		{3263AB0B-19E7-456B-9DCF-C7DC3BEED337}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{3263AB0B-19E7-456B-9DCF-C7DC3BEED337}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{3263AB0B-19E7-456B-9DCF-C7DC3BEED337}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BA30E984-11EE-426B-872C-8DF74D48C3B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BA30E984-11EE-426B-872C-8DF74D48C3B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BA30E984-11EE-426B-872C-8DF74D48C3B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BA30E984-11EE-426B-872C-8DF74D48C3B3}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -372,6 +378,7 @@ Global
 		{6B3E64C2-34D4-4086-878D-D736431F0004} = {12CB0510-7B1E-4518-AA3B-412A4D323D42}
 		{5D263A57-A36F-44DF-9AC8-9F4AA928B221} = {0A264424-1AD7-49FA-B813-D96498066479}
 		{3263AB0B-19E7-456B-9DCF-C7DC3BEED337} = {1EBA4FD7-DF52-49A0-8AA4-9E61ABC614F5}
+		{BA30E984-11EE-426B-872C-8DF74D48C3B3} = {0A264424-1AD7-49FA-B813-D96498066479}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {5D5D3927-6714-40C0-84EA-44C5BA4C5E87}

+ 2 - 2
src/YSAI.DB/YSAI.DB.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
 	  <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-	  <Version>1.0.0.38</Version>
+	  <Version>1.0.0.39</Version>
 	  <Authors>Shun</Authors>
 	  <Company>YSAI</Company>
 	  <Product>SCADA</Product>
@@ -18,7 +18,7 @@
 		<PackageReference Include="System.Data.OracleClient" Version="1.0.8" />
 		<PackageReference Include="System.Data.SqlClient" Version="4.8.5" />
 		<PackageReference Include="System.Data.SQLite" Version="1.0.118" />
-		<PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+		<PackageReference Include="YSAI.Core" Version="1.0.0.90" />
 	</ItemGroup>
 	<!--<ItemGroup>
 		<ProjectReference Include="..\YSAI.Core\YSAI.Core.csproj" />

+ 1 - 1
src/YSAI.DaqManage/YSAI.DaqManage.csproj

@@ -7,7 +7,7 @@
   </PropertyGroup>
 	<ItemGroup>
 		<FrameworkReference Include="Microsoft.AspNetCore.App" />
-		<PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+		<PackageReference Include="YSAI.Core" Version="1.0.0.90" />
 	</ItemGroup>
 
 	<!--<ItemGroup>

+ 2 - 2
src/YSAI.Kafka/YSAI.Kafka.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
 	  <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-	  <Version>1.0.0.38</Version>
+	  <Version>1.0.0.39</Version>
 	  <Authors>Shun</Authors>
 	  <Company>YSAI</Company>
 	  <Product>SCADA</Product>
@@ -14,7 +14,7 @@
 
   <ItemGroup>
     <PackageReference Include="Confluent.Kafka" Version="2.3.0" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.90" />
   </ItemGroup>
 	
 	<!--<ItemGroup>

+ 16 - 0
src/YSAI.Mewtocol/MewtocolData.cs

@@ -0,0 +1,16 @@
+using YSAI.Core.subscription;
+
+namespace YSAI.Mewtocol
+{
+    public class MewtocolData
+    {
+
+        /// <summary>
+        /// 基础数据
+        /// </summary>
+        public class Basics : SubscribeData.SCData
+        {
+
+        }
+    }
+}

+ 10 - 0
src/YSAI.Mewtocol/MewtocolOperate.cs

@@ -0,0 +1,10 @@
+namespace YSAI.Mewtocol
+{
+    /// <summary>
+    /// 松下PLC 操作
+    /// </summary>
+    public class MewtocolOperate
+    {
+
+    }
+}

+ 19 - 0
src/YSAI.Mewtocol/YSAI.Mewtocol.csproj

@@ -0,0 +1,19 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+	<PropertyGroup>
+		<TargetFramework>net6.0</TargetFramework>
+		<ImplicitUsings>enable</ImplicitUsings>
+		<Nullable>enable</Nullable>
+		<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
+		<Version>1.0.0.1</Version>
+		<Authors>Shun</Authors>
+		<Company>YSAI</Company>
+		<Product>SCADA</Product>
+		<GenerateDocumentationFile>True</GenerateDocumentationFile>
+	</PropertyGroup>
+
+	<ItemGroup>
+		<PackageReference Include="YSAI.Core" Version="1.0.0.90" />
+	</ItemGroup>
+
+</Project>

+ 2 - 2
src/YSAI.Mitsubishi/YSAI.Mitsubishi.csproj

@@ -5,7 +5,7 @@
 		<ImplicitUsings>enable</ImplicitUsings>
 		<Nullable>enable</Nullable>
 		<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-		<Version>1.0.0.6</Version>
+		<Version>1.0.0.7</Version>
 		<Authors>Shun</Authors>
 		<Company>YSAI</Company>
 		<Product>SCADA</Product>
@@ -13,7 +13,7 @@
 	</PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.90" />
   </ItemGroup>
 
 </Project>

+ 2 - 2
src/YSAI.Modbus/YSAI.Modbus.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
 	  <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-	  <Version>1.0.0.39</Version>
+	  <Version>1.0.0.40</Version>
 	  <Authors>Shun</Authors>
 	  <Company>YSAI</Company>
 	  <Product>SCADA</Product>
@@ -15,7 +15,7 @@
 	<ItemGroup>
     <PackageReference Include="NModbus" Version="3.0.81" />
     <PackageReference Include="NModbus.Serial" Version="3.0.81" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.90" />
   </ItemGroup>
 
 	<!--<ItemGroup>

+ 2 - 2
src/YSAI.Mqtt/YSAI.Mqtt.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
 	  <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-	  <Version>1.0.0.40</Version>
+	  <Version>1.0.0.41</Version>
 	  <Authors>Shun</Authors>
 	  <Company>YSAI</Company>
 	  <Product>SCADA</Product>
@@ -15,7 +15,7 @@
   <ItemGroup>
     <PackageReference Include="MQTTnet" Version="4.3.1.873" />
     <PackageReference Include="MQTTnet.AspNetCore" Version="4.3.1.873" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.90" />
   </ItemGroup>
 
 	<!--<ItemGroup>

+ 2 - 2
src/YSAI.NetMQ/YSAI.NetMQ.csproj

@@ -5,7 +5,7 @@
 		<ImplicitUsings>enable</ImplicitUsings>
 		<Nullable>enable</Nullable>
 		<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-		<Version>1.0.0.4</Version>
+		<Version>1.0.0.5</Version>
 		<Authors>Shun</Authors>
 		<Company>YSAI</Company>
 		<Product>SCADA</Product>
@@ -16,7 +16,7 @@
 
 	<ItemGroup>
     <PackageReference Include="NetMQ" Version="4.0.1.13" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.90" />
   </ItemGroup>
 
 </Project>

+ 2 - 2
src/YSAI.Netty/YSAI.Netty.csproj

@@ -5,7 +5,7 @@
 		<ImplicitUsings>enable</ImplicitUsings>
 		<Nullable>enable</Nullable>
 		<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-		<Version>1.0.0.12</Version>
+		<Version>1.0.0.13</Version>
 		<Authors>Shun</Authors>
 		<Company>YSAI</Company>
 		<Product>SCADA</Product>
@@ -14,6 +14,6 @@
 	<ItemGroup>
 		<PackageReference Include="DotNetty.Handlers" Version="0.7.5" />
 		<PackageReference Include="DotNetty.Transport" Version="0.7.5" />
-		<PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+		<PackageReference Include="YSAI.Core" Version="1.0.0.90" />
 	</ItemGroup>
 </Project>

+ 2 - 2
src/YSAI.Omron/YSAI.Omron.csproj

@@ -5,7 +5,7 @@
 		<ImplicitUsings>enable</ImplicitUsings>
 		<Nullable>enable</Nullable>
 		<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-		<Version>1.0.0.6</Version>
+		<Version>1.0.0.7</Version>
 		<Authors>Shun</Authors>
 		<Company>YSAI</Company>
 		<Product>SCADA</Product>
@@ -13,7 +13,7 @@
 	</PropertyGroup>
 
 	<ItemGroup>
-		<PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+		<PackageReference Include="YSAI.Core" Version="1.0.0.90" />
 	</ItemGroup>
 
 </Project>

+ 2 - 2
src/YSAI.Opc/YSAI.Opc.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
 	  <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-	  <Version>1.0.0.50</Version>
+	  <Version>1.0.0.51</Version>
 	  <Authors>Shun</Authors>
 	  <Company>YSAI</Company>
 	  <Product>SCADA</Product>
@@ -13,7 +13,7 @@
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="OPCFoundation.NetStandard.Opc.Ua" Version="1.4.372.76" />
-	<PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+	<PackageReference Include="YSAI.Core" Version="1.0.0.90" />
   </ItemGroup>
 
 

+ 2 - 2
src/YSAI.RabbitMQ/YSAI.RabbitMQ.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
 	  <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-	  <Version>1.0.0.39</Version>
+	  <Version>1.0.0.40</Version>
 	  <Authors>Shun</Authors>
 	  <Company>YSAI</Company>
 	  <Product>SCADA</Product>
@@ -14,7 +14,7 @@
 
   <ItemGroup>
     <PackageReference Include="RabbitMQ.Client" Version="6.6.0" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.90" />
   </ItemGroup>
 
   <ItemGroup>

+ 1 - 1
src/YSAI.RelayManage/YSAI.RelayManage.csproj

@@ -9,7 +9,7 @@
 	<ItemGroup>
 		<PackageReference Include="RabbitMQ.Client" Version="6.6.0" />
 		<PackageReference Include="Confluent.Kafka" Version="2.3.0" />
-		<PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+		<PackageReference Include="YSAI.Core" Version="1.0.0.90" />
 		<FrameworkReference Include="Microsoft.AspNetCore.App" />
 	</ItemGroup>
 

+ 2 - 2
src/YSAI.S7/YSAI.S7.csproj

@@ -5,7 +5,7 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
 	  <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-	  <Version>1.0.0.37</Version>
+	  <Version>1.0.0.38</Version>
 	  <Authors>Shun</Authors>
 	  <Company>YSAI</Company>
 	  <Product>SCADA</Product>
@@ -14,7 +14,7 @@
 
 	<ItemGroup>
     <PackageReference Include="S7netplus" Version="0.20.0" />
-    <PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+    <PackageReference Include="YSAI.Core" Version="1.0.0.90" />
   </ItemGroup>
 
 	<!--<ItemGroup>

+ 56 - 2
src/YSAI.Test.Service/Program.cs

@@ -1,10 +1,64 @@
-namespace YSAI.Test.Service
+using System.Collections.Concurrent;
+using YSAI.AllenBradley;
+using YSAI.Core.data;
+using YSAI.Core.@enum;
+using YSAI.Test.Service.Servers.PLC;
+using YSAI.Unility;
+
+namespace YSAI.Test.Service
 {
     internal class Program
     {
         static void Main(string[] args)
         {
-            Console.WriteLine("Hello, World!");
+            AllenBradleyServer allenBradleyServer = new AllenBradleyServer(6666);
+            allenBradleyServer.Start();
+
+
+
+            AllenBradleyOperate allenBradleyOperate = AllenBradleyOperate.Instance(new AllenBradleyData.Basics
+            {
+                Ip = "127.0.0.1",
+                Port = 6666,
+                TaskHandleInterval = 1
+            }); ;
+            Console.WriteLine(allenBradleyOperate.On().ToJson().JsonFormatting());
+
+
+
+
+
+
+
+
+            //点位地址
+            Address address = new Address();
+            address.SN = Guid.NewGuid().ToString();
+            address.CreationTime = DateTime.Now.ToLocalTime();
+            address.AddressArray = new List<AddressDetails>();
+            address.AddressArray.Add(new AddressDetails()
+            {
+                AddressName = "A1",
+                AddressDataType = YSAI.Core.@enum.DataType.Float,
+                AddressType = AddressType.Reality
+            });
+
+            allenBradleyOperate.OnEvent += AllenBradleyOperate_OnEvent;
+            Console.WriteLine(allenBradleyOperate.Subscribe(address).ToJson().JsonFormatting());
+
+            while (true)
+            {
+                string value = Console.ReadLine();
+                ConcurrentDictionary<string, float> keyValuePairs = new ConcurrentDictionary<string, float>();
+                keyValuePairs.TryAdd("A1", string.IsNullOrWhiteSpace(value) ? float.Parse(new Random().NextDouble().ToString()) : float.Parse(value));
+                Console.WriteLine(allenBradleyOperate.Write(keyValuePairs).ToJson().JsonFormatting());
+            }
+
+        }
+
+        private static void AllenBradleyOperate_OnEvent(object? sender, EventResult e)
+        {
+            Console.WriteLine(e.ToJson());
         }
     }
 }

+ 4 - 0
src/YSAI.Test.Service/YSAI.Test.Service.csproj

@@ -12,4 +12,8 @@
 	<PackageReference Include="Talk.BACnet" Version="1.0.2" />
   </ItemGroup>
 
+  <ItemGroup>
+    <ProjectReference Include="..\YSAI.AllenBradley\YSAI.AllenBradley.csproj" />
+  </ItemGroup>
+
 </Project>

+ 1 - 1
src/YSAI.Test/YSAI.Test.csproj

@@ -17,7 +17,7 @@
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
-	<PackageReference Include="YSAI.Core" Version="1.0.0.89" />
+	<PackageReference Include="YSAI.Core" Version="1.0.0.90" />
   </ItemGroup>
 
   <ItemGroup>