update 2014-07-31 3
This commit is contained in:
57
NA200H/ModBus.Net/AddressTranslator.cs
Normal file
57
NA200H/ModBus.Net/AddressTranslator.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace ModBus.Net
|
||||
{
|
||||
public abstract class AddressTranslator
|
||||
{
|
||||
protected static AddressTranslator _instance;
|
||||
public Dictionary<string, short> TransDictionary;
|
||||
|
||||
public abstract ushort AddressTranslate(string address);
|
||||
}
|
||||
|
||||
public class AddressTranslatorNA200H : AddressTranslator
|
||||
{
|
||||
private AddressTranslatorNA200H()
|
||||
{
|
||||
TransDictionary = new Dictionary<string, short>();
|
||||
TransDictionary.Add("Q", 0);
|
||||
TransDictionary.Add("M", 10000);
|
||||
TransDictionary.Add("N", 20000);
|
||||
TransDictionary.Add("I", 0);
|
||||
TransDictionary.Add("S", 10000);
|
||||
TransDictionary.Add("IW", 0);
|
||||
TransDictionary.Add("SW", 5000);
|
||||
TransDictionary.Add("E", 10000);
|
||||
TransDictionary.Add("MW", 0);
|
||||
TransDictionary.Add("NW", 10000);
|
||||
TransDictionary.Add("QW", 20000);
|
||||
TransDictionary.Add("CLOCK", 30000);
|
||||
TransDictionary.Add("V", 0);
|
||||
}
|
||||
|
||||
public static AddressTranslator GetInstance()
|
||||
{
|
||||
if (_instance == null)
|
||||
{
|
||||
_instance = new AddressTranslatorNA200H();
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
|
||||
public override ushort AddressTranslate(string address)
|
||||
{
|
||||
address = address.ToUpper();
|
||||
int i = 0;
|
||||
int t;
|
||||
while (!int.TryParse(address[i].ToString(), out t) && i < address.Length)
|
||||
{
|
||||
i++;
|
||||
}
|
||||
if (i == 0) return ushort.Parse(address);
|
||||
string head = address.Substring(0, i);
|
||||
string tail = address.Substring(i);
|
||||
return (ushort) (TransDictionary[head] + ushort.Parse(tail) - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user