using PlcSiemens.O;
using PlcSiemens.Protocol.Common;
using System.Text;
namespace PlcSiemens.Protocol.ListBlocks
{
public class DataBlockInfoDataResponse
{
public byte Ret { get; set; }
public byte Size { get; set; }
public ushort Length { get; set; }
public byte CstB { get; set; }
public BlockType BlkType { get; set; }
public ushort CstW1 { get; set; }
public ushort CstW2 { get; set; }
public ushort CstPp { get; set; }
public byte Unknown1 { get; set; }
public byte BlkFlags { get; set; }
public BlockLangType BlkLang { get; set; }
public SubBlockType SubBlkType { get; set; }
public ushort BlkNumber { get; set; }
public uint LenLoadMem { get; set; }
public byte[] BlkSec { get; set; }//[4]
//public uint CodeTimeMs { get; set; }
//public ushort CodeTimeDy { get; set; }
//public uint IntfTimeMs { get; set; }
//public ushort IntfTimeDy { get; set; }
public System.DateTime CodeDateTime { get; set; }
public System.DateTime IntfDateTime { get; set; }
public ushort SbbLen { get; set; }
public ushort AddLen { get; set; }
public ushort LocDataLen { get; set; }
public ushort Mc7Len { get; set; }
public string Author { get; set; }//[8]
public string Family { get; set; }//[8]
public string Header { get; set; }//[8]
public byte Version { get; set; }
public byte Unknown2 { get; set; }
public ushort BlkChksum { get; set; }
public byte[] Resvd1 { get; set; }//[4]
public byte[] Resvd2 { get; set; }//[4]
private BlockType GetBlockType(SubBlockType subBlockType)
{
switch (subBlockType)
{
case SubBlockType.OB: return BlockType.OB;
case SubBlockType.DB: return BlockType.DB;
case SubBlockType.SDB: return BlockType.SDB;
case SubBlockType.FC: return BlockType.FC;
case SubBlockType.SFC: return BlockType.SFC;
case SubBlockType.FB: return BlockType.FB;
case SubBlockType.SFB: return BlockType.SFB;
default: return 0;
};
}
public void Build(ByteBuffer buffer)
{
Ret = buffer.PopByte();
Size = buffer.PopByte();
Length = buffer.PopUshort();
CstB = buffer.PopByte();
BlkType = (BlockType)buffer.PopByte();
CstW1 = buffer.PopUshort();
CstW2 = buffer.PopUshort();
CstPp = buffer.PopUshort();
Unknown1 = buffer.PopByte();
BlkFlags = buffer.PopByte();
BlkLang = (BlockLangType)buffer.PopByte();
SubBlkType = (SubBlockType)buffer.PopByte();
BlkType = GetBlockType(SubBlkType);//根据SunblockType
BlkNumber = buffer.PopUshort();
LenLoadMem = buffer.PopUint();
BlkSec = buffer.PopBytes(4);// { get; set; }//[4]
var codeTimeMs = buffer.PopUint();//毫秒时间
var codeTimeDy = buffer.PopUshort();//天数 开始时间1984/1/1
var intfTimeMs = buffer.PopUint();//毫秒时间
var intfTimeDy = buffer.PopUshort();//天数 开始时间1984/1/1
System.DateTime date = new System.DateTime(1984, 1, 1);
CodeDateTime = date.AddDays(codeTimeDy).AddMilliseconds(codeTimeMs);
IntfDateTime = date.AddDays(intfTimeDy).AddMilliseconds(intfTimeMs);
SbbLen = buffer.PopUshort();
AddLen = buffer.PopUshort();
LocDataLen = buffer.PopUshort();
Mc7Len = buffer.PopUshort();
var author = buffer.PopBytes(8);//{ get; set; }//[8]
var family = buffer.PopBytes(8);//{ get; set; }//[8]
var header = buffer.PopBytes(8);//{ get; set; }//[8]
Author = Encoding.UTF8.GetString(author).TrimEnd('\0');
Family = Encoding.UTF8.GetString(family).TrimEnd('\0');
Header = Encoding.UTF8.GetString(header).TrimEnd('\0');
Version = buffer.PopByte();
Unknown2 = buffer.PopByte();
BlkChksum = buffer.PopUshort();
Resvd1 = buffer.PopBytes(4);//{ get; set; }//[4]
Resvd2 = buffer.PopBytes(4);// { get; set; }//[4]
}
/// Returns a string that represents the current object.
/// A string that represents the current object.
//public override string ToString()
//{
// return $"Block Type : {BlkType}\r\n" +
// $"Block Number : {BlkNumber}\r\n" +
// $"Block Lang : {BlkLang}\r\n" +
// $"Block Flags : {Convert.ToString(BlkFlags, 2).PadLeft(8,'0')}\r\n" +
// $"MC7 Size : {Mc7Len}\r\n" +
// $"Load Size : {LenLoadMem}\r\n" +
// $"Local Data : {LocDataLen}\r\n" +
// $"SBB Length : {SbbLen}\r\n" +
// $"CheckSum : {BlkChksum.ToString("X4")}\r\n" +
// $"Version : {(Version/16.0).ToString("F1")}\r\n" +
// $"Code Date : {CodeDateTime}\r\n" +
// $"Intf.Date : {IntfDateTime}\r\n" +
// $"Author : {Author}\r\n" +
// $"Family : {Family}\r\n" +
// $"Header : {Header}";
//}
}
}