public static S7PendingAlarmAckDatagram TranslateFromMemory(Memory <byte> data)
        {
            var current = new S7PendingAlarmAckDatagram
            {
                UserData = S7UserDataDatagram.TranslateFromMemory(data),
            };

            return(current);
        }
        public static S7AlarmIndicationDatagram TranslateFromMemory(Memory <byte> data)
        {
            var current = new S7AlarmIndicationDatagram
            {
                UserData = S7UserDataDatagram.TranslateFromMemory(data),
            };

            current.AlarmMessage = S7AlarmMessage.TranslateFromMemory(current.UserData.Data.Data, (AlarmMessageType)current.UserData.Parameter.SubFunction);

            return(current);
        }
Esempio n. 3
0
        //public static Memory<byte> TranslateToMemory(S7PlcBlockInfoAckDatagram datagram)
        //{
        //    var result = S7UserDataDatagram.TranslateToMemory(datagram.UserData);

        //    S7UserDataParameter.TranslateToMemory(datagram.Parameter, result.Slice(datagram.Header.GetHeaderSize()));
        //    result.Span[offset++] = datagram.Data.ReturnCode;
        //    result.Span[offset++] = datagram.Data.TransportSize;
        //    BinaryPrimitives.WriteUInt16BigEndian(result.Slice(offset, 2).Span, datagram.Data.UserDataLength);
        //    datagram.Data.Data.CopyTo(result.Slice(offset + 2, datagram.Data.UserDataLength));
        //    return result;
        //}

        public static S7PlcBlockInfoAckDatagram TranslateFromMemory(Memory <byte> data)
        {
            var result = new S7PlcBlockInfoAckDatagram
            {
                UserData = S7UserDataDatagram.TranslateFromMemory(data)
            };

            if (result.UserData.Parameter.ParamErrorCode == 0)
            {
                if (result.UserData.Data.ReturnCode == 0xff)
                {
                    var offset = 0;
                    var span   = result.UserData.Data.Data.Span;
                    result.BlockType           = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(offset, 2)); offset += 2;
                    result.LengthOfInfo        = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(offset, 2)); offset += 2;
                    result.Unknown1            = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(offset, 2)); offset += 2;
                    result.Const1              = span[offset++];
                    result.Const2              = span[offset++];
                    result.Unknown2            = span[offset++];
                    result.BlockFlags          = (PlcBlockAttributes)span[offset++];
                    result.BlockLanguage       = (PlcBlockLanguage)span[offset++];
                    result.SubBlockType        = (PlcSubBlockType)span[offset++];
                    result.BlockNumber         = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(offset, 2)); offset += 2;
                    result.LengthLoadMemory    = BinaryPrimitives.ReadUInt32BigEndian(span.Slice(offset, 4)); offset += 4;
                    result.BlockSecurity       = BinaryPrimitives.ReadUInt32BigEndian(span.Slice(offset, 4)); offset += 4; // ????
                    result.LastCodeChange      = GetDt(span.Slice(offset, 6)); offset += 6;
                    result.LastInterfaceChange = GetDt(span.Slice(offset, 6)); offset += 6;
                    result.SSBLength           = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(offset, 2)); offset += 2;
                    result.ADDLength           = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(offset, 2)); offset += 2;
                    result.LocalDataSize       = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(offset, 2)); offset += 2;
                    result.CodeSize            = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(offset, 2)); offset += 2;
                    result.Author              = Encoding.ASCII.GetString(span.Slice(offset, 8).ToArray()); offset += 8;
                    result.Family              = Encoding.ASCII.GetString(span.Slice(offset, 8).ToArray()); offset += 8;
                    result.Name = Encoding.ASCII.GetString(span.Slice(offset, 8).ToArray()); offset += 8;
                    var version = span[offset++];
                    result.VersionHeaderMajor = (version & 0xF0) >> 4;
                    result.VersionHeaderMinor = (version & 0x0F);
                    result.Unknown2           = span[offset++];
                    result.Checksum           = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(offset, 2)); offset += 2;
                    result.Reserved1          = BinaryPrimitives.ReadUInt32BigEndian(span.Slice(offset, 4)); offset += 4;
                    result.Reserved2          = BinaryPrimitives.ReadUInt32BigEndian(span.Slice(offset, 4));
                }
            }
            return(result);
        }
Esempio n. 4
0
        public static S7AlarmUpdateAckDatagram TranslateFromMemory(Memory <byte> data)
        {
            var span    = data.Span;
            var current = new S7AlarmUpdateAckDatagram
            {
                UserData = S7UserDataDatagram.TranslateFromMemory(data),
            };
            var offset = 0;

            current.SubscribedEvents = span[offset++];
            current.Unknown          = span[offset++];
            data.Slice(offset, current.Username.Length).CopyTo(current.Username);
            offset           += current.Username.Length;
            current.AlarmType = span[offset++];
            current.FillByte  = span[offset++];

            return(current);
        }