Ejemplo n.º 1
0
        public static IMemoryOwner <byte> TranslateToMemory(S7UserDataDatagram datagram, out int memoryLength)
        {
            var offset   = datagram.Header.GetHeaderSize() + datagram.Parameter.GetParamSize();
            var dataSize = offset + datagram.Data.GetUserDataLength();
            var result   = S7HeaderDatagram.TranslateToMemory(datagram.Header, dataSize, out memoryLength);
            var mem      = result.Memory.Slice(0, memoryLength);

            S7UserDataParameter.TranslateToMemory(datagram.Parameter, mem.Slice(datagram.Header.GetHeaderSize()));
            mem.Span[offset++] = datagram.Data.ReturnCode;
            mem.Span[offset++] = datagram.Data.TransportSize;
            BinaryPrimitives.WriteUInt16BigEndian(mem.Slice(offset, 2).Span, datagram.Data.UserDataLength);
            datagram.Data.Data.CopyTo(mem.Slice(offset + 2, datagram.Data.UserDataLength));
            return(result);
        }
Ejemplo n.º 2
0
        public static S7UserDataDatagram TranslateFromMemory(Memory <byte> data)
        {
            var span   = data.Span;
            var result = new S7UserDataDatagram
            {
                Header = S7HeaderDatagram.TranslateFromMemory(data),
                Data   = new S7UserData()
            };

            result.Parameter = S7UserDataParameter.TranslateFromMemory(data.Slice(result.Header.GetHeaderSize()));
            var offset = result.Header.GetHeaderSize() + result.Parameter.GetParamSize();

            result.Data.ReturnCode     = span[offset++];
            result.Data.TransportSize  = span[offset++];
            result.Data.UserDataLength = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(offset, 2));
            offset          += 2;
            result.Data.Data = new byte[result.Data.UserDataLength];
            data.Slice(offset, result.Data.UserDataLength).CopyTo(result.Data.Data);
            return(result);
        }