DataBlockInfoDataResponse.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using PlcSiemens.O;
  2. using PlcSiemens.Protocol.Common;
  3. using System.Text;
  4. namespace PlcSiemens.Protocol.ListBlocks
  5. {
  6. public class DataBlockInfoDataResponse
  7. {
  8. public byte Ret { get; set; }
  9. public byte Size { get; set; }
  10. public ushort Length { get; set; }
  11. public byte CstB { get; set; }
  12. public BlockType BlkType { get; set; }
  13. public ushort CstW1 { get; set; }
  14. public ushort CstW2 { get; set; }
  15. public ushort CstPp { get; set; }
  16. public byte Unknown1 { get; set; }
  17. public byte BlkFlags { get; set; }
  18. public BlockLangType BlkLang { get; set; }
  19. public SubBlockType SubBlkType { get; set; }
  20. public ushort BlkNumber { get; set; }
  21. public uint LenLoadMem { get; set; }
  22. public byte[] BlkSec { get; set; }//[4]
  23. //public uint CodeTimeMs { get; set; }
  24. //public ushort CodeTimeDy { get; set; }
  25. //public uint IntfTimeMs { get; set; }
  26. //public ushort IntfTimeDy { get; set; }
  27. public System.DateTime CodeDateTime { get; set; }
  28. public System.DateTime IntfDateTime { get; set; }
  29. public ushort SbbLen { get; set; }
  30. public ushort AddLen { get; set; }
  31. public ushort LocDataLen { get; set; }
  32. public ushort Mc7Len { get; set; }
  33. public string Author { get; set; }//[8]
  34. public string Family { get; set; }//[8]
  35. public string Header { get; set; }//[8]
  36. public byte Version { get; set; }
  37. public byte Unknown2 { get; set; }
  38. public ushort BlkChksum { get; set; }
  39. public byte[] Resvd1 { get; set; }//[4]
  40. public byte[] Resvd2 { get; set; }//[4]
  41. private BlockType GetBlockType(SubBlockType subBlockType)
  42. {
  43. switch (subBlockType)
  44. {
  45. case SubBlockType.OB: return BlockType.OB;
  46. case SubBlockType.DB: return BlockType.DB;
  47. case SubBlockType.SDB: return BlockType.SDB;
  48. case SubBlockType.FC: return BlockType.FC;
  49. case SubBlockType.SFC: return BlockType.SFC;
  50. case SubBlockType.FB: return BlockType.FB;
  51. case SubBlockType.SFB: return BlockType.SFB;
  52. default: return 0;
  53. };
  54. }
  55. public void Build(ByteBuffer buffer)
  56. {
  57. Ret = buffer.PopByte();
  58. Size = buffer.PopByte();
  59. Length = buffer.PopUshort();
  60. CstB = buffer.PopByte();
  61. BlkType = (BlockType)buffer.PopByte();
  62. CstW1 = buffer.PopUshort();
  63. CstW2 = buffer.PopUshort();
  64. CstPp = buffer.PopUshort();
  65. Unknown1 = buffer.PopByte();
  66. BlkFlags = buffer.PopByte();
  67. BlkLang = (BlockLangType)buffer.PopByte();
  68. SubBlkType = (SubBlockType)buffer.PopByte();
  69. BlkType = GetBlockType(SubBlkType);//根据SunblockType
  70. BlkNumber = buffer.PopUshort();
  71. LenLoadMem = buffer.PopUint();
  72. BlkSec = buffer.PopBytes(4);// { get; set; }//[4]
  73. var codeTimeMs = buffer.PopUint();//毫秒时间
  74. var codeTimeDy = buffer.PopUshort();//天数 开始时间1984/1/1
  75. var intfTimeMs = buffer.PopUint();//毫秒时间
  76. var intfTimeDy = buffer.PopUshort();//天数 开始时间1984/1/1
  77. System.DateTime date = new System.DateTime(1984, 1, 1);
  78. CodeDateTime = date.AddDays(codeTimeDy).AddMilliseconds(codeTimeMs);
  79. IntfDateTime = date.AddDays(intfTimeDy).AddMilliseconds(intfTimeMs);
  80. SbbLen = buffer.PopUshort();
  81. AddLen = buffer.PopUshort();
  82. LocDataLen = buffer.PopUshort();
  83. Mc7Len = buffer.PopUshort();
  84. var author = buffer.PopBytes(8);//{ get; set; }//[8]
  85. var family = buffer.PopBytes(8);//{ get; set; }//[8]
  86. var header = buffer.PopBytes(8);//{ get; set; }//[8]
  87. Author = Encoding.UTF8.GetString(author).TrimEnd('\0');
  88. Family = Encoding.UTF8.GetString(family).TrimEnd('\0');
  89. Header = Encoding.UTF8.GetString(header).TrimEnd('\0');
  90. Version = buffer.PopByte();
  91. Unknown2 = buffer.PopByte();
  92. BlkChksum = buffer.PopUshort();
  93. Resvd1 = buffer.PopBytes(4);//{ get; set; }//[4]
  94. Resvd2 = buffer.PopBytes(4);// { get; set; }//[4]
  95. }
  96. /// <summary>Returns a string that represents the current object.</summary>
  97. /// <returns>A string that represents the current object.</returns>
  98. //public override string ToString()
  99. //{
  100. // return $"Block Type : {BlkType}\r\n" +
  101. // $"Block Number : {BlkNumber}\r\n" +
  102. // $"Block Lang : {BlkLang}\r\n" +
  103. // $"Block Flags : {Convert.ToString(BlkFlags, 2).PadLeft(8,'0')}\r\n" +
  104. // $"MC7 Size : {Mc7Len}\r\n" +
  105. // $"Load Size : {LenLoadMem}\r\n" +
  106. // $"Local Data : {LocDataLen}\r\n" +
  107. // $"SBB Length : {SbbLen}\r\n" +
  108. // $"CheckSum : {BlkChksum.ToString("X4")}\r\n" +
  109. // $"Version : {(Version/16.0).ToString("F1")}\r\n" +
  110. // $"Code Date : {CodeDateTime}\r\n" +
  111. // $"Intf.Date : {IntfDateTime}\r\n" +
  112. // $"Author : {Author}\r\n" +
  113. // $"Family : {Family}\r\n" +
  114. // $"Header : {Header}";
  115. //}
  116. }
  117. }