2017-02-07 update 1 Add comments and documents.

This commit is contained in:
parallelbgls
2017-02-07 17:15:05 +08:00
parent 0d19567038
commit ff81e4aa09
34 changed files with 463 additions and 16 deletions

View File

@@ -1,8 +1,12 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Modbus.Net.Siemens
{
/// <summary>
/// 地址翻译器Modbus.Net格式
/// </summary>
public class AddressTranslatorSiemens : AddressTranslator
{
protected Dictionary<string, int> AreaCodeDictionary;
@@ -69,4 +73,72 @@ namespace Modbus.Net.Siemens
return 1;
}
}
/// <summary>
/// 地址翻译器Siemens格式
/// </summary>
public class AddressTranslatorSimenseStandard : AddressTranslator
{
protected Dictionary<string, int> AreaCodeDictionary;
public AddressTranslatorSimenseStandard()
{
AreaCodeDictionary = new Dictionary<string, int>
{
{"S", 0x04},
{"SM", 0x05},
{"AI", 0x06},
{"AQ", 0x07},
{"C", 0x1E},
{"T", 0x1F},
{"HC", 0x20},
{"I", 0x81},
{"Q", 0x82},
{"M", 0x83},
{"DB", 0x84},
{"V", 0x184},
};
}
public override AddressDef AddressTranslate(string address, bool isRead)
{
address = address.ToUpper();
if (address.Substring(0, 2) == "DB")
{
var addressSplit = address.Split('.');
if (addressSplit.Length != 2 && addressSplit.Length != 3) throw new FormatException();
addressSplit[0] = addressSplit[0].Substring(2);
if (addressSplit[1].Substring(0, 2) == "DB")
addressSplit[1] = addressSplit[1].Substring(2);
return new AddressDef
{
AreaString = "DB" + addressSplit[0],
Area = int.Parse(addressSplit[0]) * 256 + AreaCodeDictionary["DB"],
Address = int.Parse(addressSplit[1]),
SubAddress = addressSplit.Length == 2 ? 0 : int.Parse(addressSplit[2])
};
}
int i = 0;
int t;
while (!int.TryParse(address[i].ToString(), out t) && i < address.Length)
{
i++;
}
if (i == 0 || i >= address.Length) throw new FormatException();
string head = address.Substring(0, i);
string[] tail = address.Substring(i).Split('.');
return new AddressDef
{
AreaString = head,
Area = AreaCodeDictionary[head],
Address = int.Parse(tail[0]),
SubAddress = tail.Length == 1 ? 0 : int.Parse(tail[1])
};
}
public override double GetAreaByteLength(string area)
{
return 1;
}
}
}