Files
Modbus.Net/NA200H/ModBus.Net/AddressTranslator.cs
2014-07-31 17:09:53 +08:00

57 lines
1.8 KiB
C#

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);
}
}
}