From 4ca5456e159f3d0ecd82c79fa425795461d82186 Mon Sep 17 00:00:00 2001 From: "parallelbgls@outlook.com" Date: Wed, 15 Apr 2015 14:58:43 +0800 Subject: [PATCH] 2015-04-15 update 2 --- Modbus.Net/ModBus.Net/BaseMachine.cs | 27 ++++++++++++--- Modbus.Net/ModBus.Net/TaskManager.cs | 49 +++++++++++++++++++--------- 2 files changed, 57 insertions(+), 19 deletions(-) diff --git a/Modbus.Net/ModBus.Net/BaseMachine.cs b/Modbus.Net/ModBus.Net/BaseMachine.cs index 5c6f7e5..e667444 100644 --- a/Modbus.Net/ModBus.Net/BaseMachine.cs +++ b/Modbus.Net/ModBus.Net/BaseMachine.cs @@ -10,15 +10,20 @@ namespace ModBus.Net { public abstract class BaseMachine : IMachineProperty { + public string Id { get; set; } + public string ProjectName { get; set; } public string MachineName { get; set; } - public string ConnectionToken { get { return BaseUtility.ConnectionToken; } } + public string ConnectionToken + { + get { return BaseUtility.ConnectionToken; } + } - protected AddressFormater AddressFormater { get; set; } + public AddressFormater AddressFormater { get; set; } - protected AddressCombiner AddressCombiner { get; set; } + public AddressCombiner AddressCombiner { get; set; } protected IEnumerable CommunicateAddresses { @@ -60,7 +65,7 @@ namespace ModBus.Net p => p.Area == communicateAddress.Area && p.Address == pos + communicateAddress.Address); if (address != null) { - ans.Add(address.CommunicationTag, (String.Format("{0:#0.000}", Double.Parse(ValueHelper.Instance.GetValue(datas, ref pos, address.DataType).ToString()) * address.Zoom))); + ans.Add(address.CommunicationTag, (String.Format("{0:#0.#}", Math.Round(Double.Parse(ValueHelper.Instance.GetValue(datas, ref pos, address.DataType).ToString()) * address.Zoom, 3)))); } else { @@ -86,6 +91,19 @@ namespace ModBus.Net } } + public class BaseMachineEqualityComparer : IEqualityComparer + { + public bool Equals(BaseMachine x, BaseMachine y) + { + return x.ConnectionToken == y.ConnectionToken; + } + + public int GetHashCode(BaseMachine obj) + { + return obj.GetHashCode(); + } + } + public struct CommunicationUnit { public string Area { get; set; } @@ -129,6 +147,7 @@ namespace ModBus.Net public interface IMachineProperty { + string Id { get; set; } string ProjectName { get; set; } string MachineName { get; set; } string ConnectionToken { get; } diff --git a/Modbus.Net/ModBus.Net/TaskManager.cs b/Modbus.Net/ModBus.Net/TaskManager.cs index 47d4637..1b32005 100644 --- a/Modbus.Net/ModBus.Net/TaskManager.cs +++ b/Modbus.Net/ModBus.Net/TaskManager.cs @@ -166,19 +166,6 @@ namespace ModBus.Net } } - public class BaseMachineEqualityComparer : IEqualityComparer - { - public bool Equals(BaseMachine x, BaseMachine y) - { - return x.ConnectionToken == y.ConnectionToken; - } - - public int GetHashCode(BaseMachine obj) - { - return obj.GetHashCode(); - } - } - public class TaskManager { private HashSet _machines; @@ -272,6 +259,38 @@ namespace ModBus.Net } } + public void AddMachines(IEnumerable machines) + { + foreach (var machine in machines) + { + AddMachine(machine); + } + } + + public void RemoveMachineWithToken(string machineToken) + { + lock (_machines) + { + _machines.RemoveWhere(p => p.ConnectionToken == machineToken); + } + } + + public void RemoveMachineWithId(string id) + { + lock (_machines) + { + _machines.RemoveWhere(p => p.Id == id); + } + } + + public void RemoveMachine(BaseMachine machine) + { + lock (_machines) + { + _machines.Remove(machine); + } + } + private void MaintainTasks(object sender, System.Timers.ElapsedEventArgs e) { lock (_machines) @@ -318,7 +337,7 @@ namespace ModBus.Net var ans = _tasks.StartNew(machine.GetDatas).Result; if (ReturnValues != null) { - ReturnValues(new KeyValuePair>(machine.ConnectionToken, ans)); + ReturnValues(new KeyValuePair>(machine.Id, ans)); } } catch (Exception e) @@ -326,7 +345,7 @@ namespace ModBus.Net if (ReturnValues != null) { - ReturnValues(new KeyValuePair>(machine.ConnectionToken, null)); + ReturnValues(new KeyValuePair>(machine.Id, null)); } } }