| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- using Edge.Core.Parser.BinaryParser.Attributes;
- using System;
- using System.Collections.Generic;
- namespace PetroChinaOnlineWatchPlugin.MessageEntity.Outgoing
- {
- public abstract class IfsfMessageDataOut
- {
- [Format(1, EncodingType.BIN, -9890)]
- public byte DataIdentifier { get; set; }
- [Format(1, EncodingType.BIN, -9880)]
- public int DataLength { get; protected set; }
- protected List<byte> BcdToBytes(decimal data, int bcdDigits)
- {
- byte bin8Data = 0;
- bin8Data = (byte)(data < 0 ? (bin8Data | 0x80) : (bin8Data & 0x00));
- string strBcd = Math.Abs(data).ToString();
- int index = strBcd.IndexOf('.');
- bin8Data = (byte)(bin8Data + (index >= 0 ? index : strBcd.Length));
- var buffer = new List<byte>() { bin8Data };
- //2 digits per byte
- int divisor = 2;
- strBcd = strBcd.Replace(".", "").PadRight(bcdDigits, '0');
- for (int i = 0; i < strBcd.Length;)
- {
- byte d = Convert.ToByte(strBcd.Substring(i, divisor), 16);
- buffer.Add(d);
- i += divisor;
- }
- return buffer;
- }
- }
- public class DateTimeMessage : IfsfMessageDataOut
- {
- [Format(7, EncodingType.BcdString, -9870)]
- public string Data { get; protected set; }
- public DateTimeMessage(byte dataId, object objData)
- {
- base.DataIdentifier = dataId;
- string strData = objData.ToString();
- DateTime data = DateTime.Parse(string.IsNullOrEmpty(strData) ? "2000-01-01 00:00:00" : strData);
- Data = data.ToString("yyyyMMddHHmmss");
- base.DataLength = Data.Length / 2;
- }
- public override string ToString()
- {
- return $"{DataIdentifier} {DataLength} {Data}";
- }
- }
- public class Bin8Bcd4Message : IfsfMessageDataOut
- {
- [EnumerableFormat("%cascade", -9870)]
- public List<byte> Bcd4Data { get; protected set; }
- public Bin8Bcd4Message(byte dataId, object objData)
- {
- base.DataIdentifier = dataId;
- string strData = objData.ToString();
- decimal data = decimal.Parse(string.IsNullOrEmpty(strData) ? "0" : strData);
- Bcd4Data = BcdToBytes(data, 4);
- base.DataLength = Bcd4Data.Count;
- }
- public override string ToString()
- {
- return $"{DataIdentifier} {DataLength} {Bcd4Data}";
- }
- }
- public class Bin8Bcd6Message : IfsfMessageDataOut
- {
- [EnumerableFormat("%cascade", -9870)]
- public List<byte> Bcd6Data { get; protected set; }
- public Bin8Bcd6Message(byte dataId, object objData)
- {
- base.DataIdentifier = dataId;
- string strData = objData.ToString();
- decimal data = decimal.Parse(string.IsNullOrEmpty(strData) ? "0" : strData);
- Bcd6Data = BcdToBytes(data, 6);
- base.DataLength = Bcd6Data.Count;
- }
- public override string ToString()
- {
- return $"{DataIdentifier} {DataLength} {Bcd6Data}";
- }
- }
- public class Bin8Bcd8Message : IfsfMessageDataOut
- {
- [EnumerableFormat("%cascade", -9870)]
- public List<byte> Bcd8Data { get; protected set; }
- public Bin8Bcd8Message(byte dataId, object objData)
- {
- base.DataIdentifier = dataId;
- string strData = objData.ToString();
- decimal data = decimal.Parse(string.IsNullOrEmpty(strData) ? "0" : strData);
- Bcd8Data = BcdToBytes(data, 8);
- base.DataLength = Bcd8Data.Count;
- }
- public override string ToString()
- {
- return $"{DataIdentifier} {DataLength} {Bcd8Data}";
- }
- }
- public class Bcd4Message : IfsfMessageDataOut
- {
- [Format(2, EncodingType.BCD, -9870)]
- public int Bcd4Data { get; protected set; }
- public Bcd4Message(byte dataId, object objData)
- {
- base.DataIdentifier = dataId;
- string strData = objData.ToString();
- int data = int.Parse(string.IsNullOrEmpty(strData) ? "0" : strData);
- Bcd4Data = data;
- base.DataLength = 2;
- }
- public override string ToString()
- {
- return $"{DataIdentifier} {DataLength} {Bcd4Data}";
- }
- }
- public class Bin8Message : IfsfMessageDataOut
- {
- [Format(1, EncodingType.BIN, -9870)]
- public byte Bin8Data { get; protected set; }
- public Bin8Message(byte dataId, object objData)
- {
- base.DataIdentifier = dataId;
- string strData = objData.ToString();
- byte data = byte.Parse(string.IsNullOrEmpty(strData) ? "0" : strData);
- Bin8Data = data;
- base.DataLength = 1;
- }
- public override string ToString()
- {
- return $"{DataIdentifier} {DataLength} {Bin8Data}";
- }
- }
- }
|