コード例 #1
0
ファイル: PLCManager.cs プロジェクト: Chefkoch85/CKT_PLC
        private bool loadVisu()
        {
            // to get rid of the Enter-key in the console buffer
            while (Console.ReadLine().Length > 0)
            {
                ;
            }

            Console.Clear();

            FileInfo fi = new FileInfo(@"..\..\..\PLC_PROJ\PROJ_ONE\VISU.COV");

            if (!fi.Exists || fi.Length < 16)
            {
                Console.WriteLine("File not found or to small!\n" + fi.FullName);
                Console.ReadKey();
                return(true);
            }
            FileStream   fs = new FileStream(fi.FullName, FileMode.Open);
            BinaryReader br = new BinaryReader(fs);

            VisuFileHeader header = new VisuFileHeader();

            header.FileTag        = new char[2];
            header.FileTag[0]     = br.ReadChar();
            header.FileTag[1]     = br.ReadChar();
            header.OffsetVisuData = br.ReadUInt16();
            header.VisuVersion    = new Version(br.ReadByte(), br.ReadByte());
            header.Count          = br.ReadInt16();
            header.CreationDate   = new DateTime(br.ReadInt16(), br.ReadByte(), br.ReadByte(), br.ReadByte(), br.ReadByte(), br.ReadByte());
            br.ReadByte();   // read fill byte

            if (header.FileTag[0] != 'P' || header.FileTag[1] != 'V')
            {
                Console.WriteLine("File is no CKTPLC visu or is corupted!\n" + fi.Name);
                Console.ReadKey();
                return(true);
            }

            List <char> stringList = new List <char>();

            while (br.PeekChar() != 0)
            {
                stringList.Add((char)br.ReadByte());
            }
            br.ReadChar();
            header.VisuCompany = new String(stringList.ToArray());

            stringList = new List <char>();
            while (br.PeekChar() != 0)
            {
                stringList.Add((char)br.ReadByte());
            }
            br.ReadChar();
            header.VisuAuthor = new String(stringList.ToArray());

            stringList = new List <char>();
            while (br.PeekChar() != 0)
            {
                stringList.Add((char)br.ReadByte());
            }
            br.ReadChar();
            header.VisuDescription = new String(stringList.ToArray());

            int size = header.Count * VISU_BLOCK_SIZE;

            if (size < fi.Length - header.OffsetVisuData || size > fi.Length - header.OffsetVisuData)
            {
                Console.WriteLine("File size is to small or large for the count of visu blocks!\n"
                                  + fi.Name + " size: " + fi.Length + " | header: " + header.OffsetVisuData +
                                  "\nsize all visu blocks: " + (fi.Length - header.OffsetVisuData) + " | should: " + size);
                Console.ReadKey();
                return(true);
            }

            m_VisuBlocks = new List <VisuBlock>(header.Count);

            br.BaseStream.Seek(header.OffsetVisuData, SeekOrigin.Begin);
            int i = 0;

            while (br.PeekChar() != -1)
            {
                VisuBlock vb = new VisuBlock();
                vb.Index        = br.ReadInt16();
                vb.Row          = br.ReadByte();
                vb.Column       = br.ReadByte();
                vb.MemLocation  = (uint)(br.ReadByte() << 24);
                vb.MemLocation |= (uint)(br.ReadByte() << 16);
                vb.MemLocation |= (uint)(br.ReadByte() << 8);
                vb.MemLocation |= (uint)(br.ReadByte());
                vb.Flags        = br.ReadByte();

                // read the fill bytes
                br.ReadBytes(7);

                char[] name        = new char[16];
                byte[] nameAsBytes = br.ReadBytes(16);
                Array.Copy(nameAsBytes, name, 16);
                vb.Name = new String(name);
                vb.Name = vb.Name.Substring(0, vb.Name.IndexOf('\0'));

                m_VisuBlocks.Add(vb);
                i++;
            }

            if (m_VisuBlocks.Count != header.Count)
            {
                Console.WriteLine("File contains wrong number of visu blocks!\n"
                                  + fi.Name + " should: " + header.Count + " | has: " + m_VisuBlocks.Count);
                Console.ReadKey();
                return(true);
            }

            m_bVisuLoaded = true;
            return(false);
        }
コード例 #2
0
ファイル: PLCManager.cs プロジェクト: Chefkoch85/CKT_PLC
        private bool loadVisu()
        {
            // to get rid of the Enter-key in the console buffer
            while (Console.ReadLine().Length > 0)
                ;

            Console.Clear();

            FileInfo fi = new FileInfo(@"..\..\..\PLC_PROJ\PROJ_ONE\VISU.COV");
            if (!fi.Exists || fi.Length < 16)
            {
                Console.WriteLine("File not found or to small!\n" + fi.FullName);
                Console.ReadKey();
                return true;
            }
            FileStream fs = new FileStream(fi.FullName, FileMode.Open);
            BinaryReader br = new BinaryReader(fs);

            VisuFileHeader header = new VisuFileHeader();
            header.FileTag = new char[2];
            header.FileTag[0] = br.ReadChar();
            header.FileTag[1] = br.ReadChar();
            header.OffsetVisuData = br.ReadUInt16();
            header.VisuVersion = new Version(br.ReadByte(), br.ReadByte());
            header.Count = br.ReadInt16();
            header.CreationDate = new DateTime(br.ReadInt16(), br.ReadByte(), br.ReadByte(), br.ReadByte(), br.ReadByte(), br.ReadByte());
            br.ReadByte();   // read fill byte

            if (header.FileTag[0] != 'P' || header.FileTag[1] != 'V')
            {
                Console.WriteLine("File is no CKTPLC visu or is corupted!\n" + fi.Name);
                Console.ReadKey();
                return true;
            }

            List<char> stringList = new List<char>();
            while (br.PeekChar() != 0)
            {
                stringList.Add((char)br.ReadByte());
            }
            br.ReadChar();
            header.VisuCompany = new String(stringList.ToArray());

            stringList = new List<char>();
            while (br.PeekChar() != 0)
            {
                stringList.Add((char)br.ReadByte());
            }
            br.ReadChar();
            header.VisuAuthor = new String(stringList.ToArray());

            stringList = new List<char>();
            while (br.PeekChar() != 0)
            {
                stringList.Add((char)br.ReadByte());
            }
            br.ReadChar();
            header.VisuDescription = new String(stringList.ToArray());

            int size = header.Count * VISU_BLOCK_SIZE;
            if (size < fi.Length - header.OffsetVisuData || size > fi.Length - header.OffsetVisuData)
            {
                Console.WriteLine("File size is to small or large for the count of visu blocks!\n"
                    + fi.Name + " size: " + fi.Length + " | header: " + header.OffsetVisuData + 
                    "\nsize all visu blocks: " + (fi.Length - header.OffsetVisuData) + " | should: " + size);
                Console.ReadKey();
                return true;
            }

            m_VisuBlocks = new List<VisuBlock>(header.Count);

            br.BaseStream.Seek(header.OffsetVisuData, SeekOrigin.Begin);
            int i = 0;
            while (br.PeekChar() != -1)
            {
                VisuBlock vb = new VisuBlock();
                vb.Index = br.ReadInt16();
                vb.Row = br.ReadByte();
                vb.Column = br.ReadByte();
                vb.MemLocation = (uint)(br.ReadByte() << 24);
                vb.MemLocation |= (uint)(br.ReadByte() << 16);
                vb.MemLocation |= (uint)(br.ReadByte() << 8);
                vb.MemLocation |= (uint)(br.ReadByte());
                vb.Flags = br.ReadByte();

                // read the fill bytes
                br.ReadBytes(7);

                char[] name = new char[16];
                byte[] nameAsBytes = br.ReadBytes(16);
                Array.Copy(nameAsBytes, name, 16);
                vb.Name = new String(name);
                vb.Name = vb.Name.Substring(0, vb.Name.IndexOf('\0'));

                m_VisuBlocks.Add(vb);
                i++;
            }

            if (m_VisuBlocks.Count != header.Count)
            {
                Console.WriteLine("File contains wrong number of visu blocks!\n"
                    + fi.Name + " should: " + header.Count + " | has: " + m_VisuBlocks.Count);
                Console.ReadKey();
                return true;
            }

            m_bVisuLoaded = true;
            return false;
        }