WriteDataRequest.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using PlcSiemens.Protocol.Common;
  2. using PlcSiemens.Protocol.ReadData;
  3. using ByteBuffer = PlcSiemens.O.ByteBuffer;
  4. namespace PlcSiemens.Protocol.WriteData
  5. {
  6. public class WriteDataRequest
  7. {
  8. public byte ReturnCode { get; set; }
  9. public byte TransportSize { get; set; }
  10. public ushort DataLength { get; set; }
  11. public byte[] Data { get; set; }// 17 = header + params + data header -1
  12. public ushort PacketLength
  13. { get { return (ushort)(0x04 + Data.Length); } }
  14. public void Build(DataItem item, bool isLast)
  15. {
  16. var sizeByte = (ushort)(item.SizeByte * item.Length);
  17. ReturnCode = 0x00;
  18. switch (item.DataType)
  19. {
  20. case DataType.Bit:
  21. TransportSize = (byte)TsType.TsResBit; ;
  22. break;
  23. case DataType.Int:
  24. case DataType.DInt:
  25. TransportSize = (byte)TsType.TsResInt;
  26. break;
  27. case DataType.Real:
  28. TransportSize = (byte)TsType.TsResReal;// TS_ResReal;
  29. break;
  30. case DataType.Char:
  31. case DataType.Counter:
  32. case DataType.Timer:
  33. TransportSize = (byte)TsType.TsResOctet;//TS_ResOctet;
  34. break;
  35. default:
  36. TransportSize = (byte)TsType.TsResByte;
  37. break;
  38. };
  39. if ((TransportSize != (byte)TsType.TsResOctet) &&
  40. (TransportSize != (byte)TsType.TsResReal) &&
  41. (TransportSize != (byte)TsType.TsResBit))
  42. DataLength = (ushort)(sizeByte * 8);
  43. else
  44. DataLength = (sizeByte);
  45. if (!isLast && sizeByte % 2 != 0)
  46. Data = new byte[sizeByte + 1];
  47. else
  48. Data = new byte[sizeByte];
  49. Array.Copy(item.Data, item.DataOffset, Data, 0, sizeByte);
  50. }
  51. public void GetByteBuffer(ByteBuffer buffer)
  52. {
  53. buffer.Push(ReturnCode);
  54. buffer.Push(TransportSize);
  55. buffer.Push(DataLength);
  56. buffer.Push(Data);
  57. }
  58. }
  59. }