SetPasswordRequest.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using Core.Communication.Transport;
  2. using Core.Util.Extension;
  3. using PLC.Siemens.Protocol.Common;
  4. using PLC.Siemens.Protocol.Header;
  5. using PLC.Siemens.O;
  6. namespace PLC.Siemens.Protocol.Security
  7. {
  8. public class SetPasswordRequest : IBuildRequest
  9. {
  10. public HeaderPacket Header { get; set; }
  11. public ParamsRequest Params { get; set; }
  12. public DataSecurityRequest Data { get; set; }
  13. public string Password { get; set; }
  14. public SetPasswordRequest()
  15. {
  16. Header = new HeaderPacket();
  17. Params = new ParamsRequest();
  18. Data = new DataSecurityRequest();
  19. }
  20. public void Build()
  21. {
  22. Header.Build(PduType.Userdata, Params.PacketLength, Data.PacketLength);
  23. if (Password.IsNotEmpty())
  24. {
  25. Header.Build(PduType.Userdata, Params.PacketLength, Data.PacketLength);
  26. Params.Build(true, 0x00, GrType.GrSecurity, PduFuncType.SFunEnterPwd);
  27. Data.Build(Password.PadRight(8, ' ').ToCharArray());
  28. }
  29. else
  30. {
  31. Header.Build(PduType.Userdata, Params.PacketLength, (ushort)(Data.PacketLength - 8));
  32. Params.Build(true, 0x00, GrType.GrSecurity, PduFuncType.SFunCancelPwd);
  33. }
  34. Params.Uk = 0x11;
  35. }
  36. public ByteBuffer GetBuffer()
  37. {
  38. ByteBuffer buffer = ByteBuffer.Allocate();
  39. Header.GetByteBuffer(buffer);
  40. Params.GetByteBuffer(buffer);
  41. Data.GetByteBuffer(buffer);
  42. return buffer;
  43. }
  44. }
  45. }