123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- using PlcSiemens.Core.Extension;
- using PlcSiemens.O;
- using PlcSiemens.Protocol.Common;
- namespace PlcSiemens.Protocol.Security
- {
- public class DataSecurityRequest
- {
- public byte Ret; // 0xFF for request
- public byte Ts; // 0x09 Transport size
- public ushort DLen; // Data len : 8 bytes
- public char[] Pwd; // Password encoded into "AG" format 8
- public ushort PacketLength
- { get { return 0x0C; } }
- public void Build(params char[] value)
- {
- if (value.IsNotEmpty())
- {
- Ts = (byte)TsType.TsResOctet;
- Ret = 0xFF;
- Pwd = value;
- DLen = 0x0008;
- }
- else
- {
- Ts = 0x00;
- Ret = 0x0A;
- DLen = 0x0000;
- }
- }
- public void GetByteBuffer(ByteBuffer buffer)
- {
- buffer.Push(Ret);
- buffer.Push(Ts);
- buffer.Push(DLen);
- if (DLen == 0) return;
- Pwd[0] = (char)(Pwd[0] ^ 0x55);
- Pwd[1] = (char)(Pwd[1] ^ 0x55);
- for (var i = 2; i < 8; i++)
- {
- Pwd[i] = (char)(Pwd[i] ^ 0x55 ^ Pwd[i - 2]);
- }
- ;
- Pwd.ForEach(t => buffer.Push((byte)t));
- }
- }
- }
|