public static IdentificationMessage ReadFromBms1Stream(IBms1Reader reader)
 {
     return reader.ReadBlock(
         () => new IdentificationMessage()
         { 
             InterfaceName = reader.ReadString(),
             InterfaceVersion = reader.ReadInt16(),
             ApplicationName = reader.ReadString(),
             ApplicationVersion = VersionBase.ReadFromBms1Stream(reader),
             ApplicationInstance = reader.ReadString(),
         });
 }
        public string AdditionaInfo = "None"; // not transferred before V.2

        internal static VersionPLC CreateFromBms1Stream(IBms1Reader reader)
        {
            return reader.ReadBlock(()=>
                {
                    var dto = new VersionPLC();
                    dto.Version = reader.ReadString();
                    dto.CpuType = reader.ReadEnum<CpuType>();
                    if (!reader.Internal.EndOfBlock)
                    {
                        // starting with V.2, more data is transferred. When sender has V.1, AdditionaInfo is "None".
                        dto.AdditionaInfo = reader.ReadString();
                    }
                    return dto;
                });
        }