示例#1
0
        internal byte[] GetBlockInByte(string BlockName)
        {
            S5ProjectBlockInfo blkInf = GetBlockInfo(BlockName);

            if (blkInf != null)
            {
                return(blkInf._blkByte);
            }
            return(null);
        }
        private S5ProjectBlockInfo AddBlockInfo(byte[] s5ProjectByteArray, ref int pos, Step5BlocksFolder blkFld, byte[] header)
        {
            int len = 0;
            S5ProjectBlockInfo tmpBlk = new S5ProjectBlockInfo();

            tmpBlk._blkHeaderByte = header;

            if (s5ProjectByteArray[pos] == 0x70 && s5ProjectByteArray[pos + 1] == 0x70) //Step5 Block
            // && s5ProjectByteArray[n - 1] == 0x00)
            {
                len = (s5ProjectByteArray[pos + 8] * 0x100 + s5ProjectByteArray[pos + 9]) * 2;

                tmpBlk.BlockType = (PLCBlockType)(s5ProjectByteArray[pos + 2] | 0xf00);

                tmpBlk.BlockNumber = s5ProjectByteArray[pos + 3];

                //byte n+4 -> kennungen für das programiergerät
                //byte n+5,6,7 -> bib nummer

                byte[] code = new byte[len];
                Array.Copy(s5ProjectByteArray, pos, code, 0, len);
                tmpBlk._blkByte     = code;
                tmpBlk.ParentFolder = blkFld;

                //blkFld.step5BlocksinfoList.Add(tmpBlk);
                //string aa = System.Text.Encoding.GetEncoding("ISO-8859-1").GetString(code);
            }
            else if (s5ProjectByteArray[pos] == 0x06) //DB - Vorkopf
            {
                len = (s5ProjectByteArray[pos + 4] * 0x100 + s5ProjectByteArray[pos + 5]) * 2;

                tmpBlk.BlockType = PLCBlockType.S5_DV;

                tmpBlk.BlockNumber = s5ProjectByteArray[pos + 1];

                byte[] code = new byte[len];
                Array.Copy(s5ProjectByteArray, pos, code, 0, len);
                tmpBlk._blkByte     = code;
                tmpBlk.ParentFolder = blkFld;

                //blkFld.step5BlocksinfoList.Add(tmpBlk);
            }
            else if (s5ProjectByteArray[pos] == 0x11) //DX - Vorkopf
            {
                len = (s5ProjectByteArray[pos + 4] * 0x100 + s5ProjectByteArray[pos + 5]) * 2;

                tmpBlk.BlockType = PLCBlockType.S5_DVX;

                tmpBlk.BlockNumber = s5ProjectByteArray[pos + 1];

                byte[] code = new byte[len];
                Array.Copy(s5ProjectByteArray, pos, code, 0, len);
                tmpBlk._blkByte     = code;
                tmpBlk.ParentFolder = blkFld;

                //blkFld.step5BlocksinfoList.Add(tmpBlk);
            }
            else if (s5ProjectByteArray[pos] == 0x0D) //FB - Vorkopf
            {
                len = (s5ProjectByteArray[pos + 4] * 0x100 + s5ProjectByteArray[pos + 5]) * 2;

                tmpBlk.BlockType = PLCBlockType.S5_FV;

                tmpBlk.BlockNumber = s5ProjectByteArray[pos + 1];

                byte[] code = new byte[len];
                Array.Copy(s5ProjectByteArray, pos, code, 0, len);
                tmpBlk._blkByte     = code;
                tmpBlk.ParentFolder = blkFld;

                //blkFld.step5BlocksinfoList.Add(tmpBlk);
            }
            else if (s5ProjectByteArray[pos] == 0x0A) //FX - Vorkopf
            {
                len = (s5ProjectByteArray[pos + 4] * 0x100 + s5ProjectByteArray[pos + 5]) * 2;

                tmpBlk.BlockType = PLCBlockType.S5_FVX;

                tmpBlk.BlockNumber = s5ProjectByteArray[pos + 1];

                byte[] code = new byte[len];
                Array.Copy(s5ProjectByteArray, pos, code, 0, len);
                tmpBlk._blkByte     = code;
                tmpBlk.ParentFolder = blkFld;

                //blkFld.step5BlocksinfoList.Add(tmpBlk);
            }
            else
            {
                //Here are the $ Blocks woch are not yet implemented!
                //akanz--;
                len    = 0x80;
                tmpBlk = null;
            }

            if (len == 0)
            {
                len = 0x80;
            }

            pos += (len / 0x80) * 0x80;
            if (len % 0x80 != 0)
            {
                pos += 0x80;
            }

            return(tmpBlk);
        }
示例#3
0
        private S5ProjectBlockInfo AddBlockInfo(byte[] s5ProjectByteArray, ref int pos, Step5BlocksFolder blkFld, byte[] header)
        {
            int len = 0;
            S5ProjectBlockInfo tmpBlk = new S5ProjectBlockInfo();

            tmpBlk._blkHeaderByte = header;

            if (s5ProjectByteArray[pos] == 0x70 && s5ProjectByteArray[pos + 1] == 0x70) //Step5 Block
            // && s5ProjectByteArray[n - 1] == 0x00)
            {
                len = (s5ProjectByteArray[pos + 8] * 0x100 + s5ProjectByteArray[pos + 9]) * 2;

                tmpBlk.BlockType = (PLCBlockType)(s5ProjectByteArray[pos + 2] | 0xf00);

                tmpBlk.BlockNumber = s5ProjectByteArray[pos + 3];

                var bits = s5ProjectByteArray[pos + 4];     //siehe: https://www.yumpu.com/de/document/view/5702154/3-s5-power-bios-process-informatik-entwicklungsgesellschaft-mbh/26

                tmpBlk.Assembler = (bits & 0b00001000) > 0; // -> Assembler
                var bibNumber = s5ProjectByteArray[pos + 5] * 0x10000 + s5ProjectByteArray[pos + 6] * 0x100 + s5ProjectByteArray[pos + 7];

                //Console.WriteLine(tmpBlk.BlockType.ToString() + " - " + tmpBlk.BlockNumber + " - " + bibNumber);
                //byte n+4 -> kennungen für das programiergerät
                //byte n+5,6,7 -> bib nummer

                byte[] code = new byte[len];
                Array.Copy(s5ProjectByteArray, pos, code, 0, len);
                tmpBlk._blkByte     = code;
                tmpBlk.ParentFolder = blkFld;

                //blkFld.step5BlocksinfoList.Add(tmpBlk);
                //string aa = System.Text.Encoding.GetEncoding("ISO-8859-1").GetString(code);
            }
            else if (s5ProjectByteArray[pos] == 0x06) //DB - Vorkopf
            {
                len = (s5ProjectByteArray[pos + 4] * 0x100 + s5ProjectByteArray[pos + 5]) * 2;

                tmpBlk.BlockType = PLCBlockType.S5_DV;

                tmpBlk.BlockNumber = s5ProjectByteArray[pos + 1];

                byte[] code = new byte[len];
                Array.Copy(s5ProjectByteArray, pos, code, 0, len);
                tmpBlk._blkByte     = code;
                tmpBlk.ParentFolder = blkFld;

                //blkFld.step5BlocksinfoList.Add(tmpBlk);
            }
            else if (s5ProjectByteArray[pos] == 0x11) //DX - Vorkopf
            {
                len = (s5ProjectByteArray[pos + 4] * 0x100 + s5ProjectByteArray[pos + 5]) * 2;

                tmpBlk.BlockType = PLCBlockType.S5_DVX;

                tmpBlk.BlockNumber = s5ProjectByteArray[pos + 1];

                byte[] code = new byte[len];
                Array.Copy(s5ProjectByteArray, pos, code, 0, len);
                tmpBlk._blkByte     = code;
                tmpBlk.ParentFolder = blkFld;

                //blkFld.step5BlocksinfoList.Add(tmpBlk);
            }
            else if (s5ProjectByteArray[pos] == 0x0D) //FB - Vorkopf
            {
                len = (s5ProjectByteArray[pos + 4] * 0x100 + s5ProjectByteArray[pos + 5]) * 2;

                tmpBlk.BlockType = PLCBlockType.S5_FV;

                tmpBlk.BlockNumber = s5ProjectByteArray[pos + 1];

                byte[] code = new byte[len];
                Array.Copy(s5ProjectByteArray, pos, code, 0, len);
                tmpBlk._blkByte     = code;
                tmpBlk.ParentFolder = blkFld;

                //blkFld.step5BlocksinfoList.Add(tmpBlk);
            }
            else if (s5ProjectByteArray[pos] == 0x0A) //FX - Vorkopf
            {
                len = (s5ProjectByteArray[pos + 4] * 0x100 + s5ProjectByteArray[pos + 5]) * 2;

                tmpBlk.BlockType = PLCBlockType.S5_FVX;

                tmpBlk.BlockNumber = s5ProjectByteArray[pos + 1];

                byte[] code = new byte[len];
                Array.Copy(s5ProjectByteArray, pos, code, 0, len);
                tmpBlk._blkByte     = code;
                tmpBlk.ParentFolder = blkFld;

                //blkFld.step5BlocksinfoList.Add(tmpBlk);
            }
            else if (s5ProjectByteArray[pos] == 0x6E) //?????
            {
                len    = 0x80;
                tmpBlk = null;
            }
            else
            {
                //Here are the $ Blocks woch are not yet implemented!
                //akanz--;
                len    = 0x80;
                tmpBlk = null;
            }

            if (len == 0)
            {
                len = 0x80;
            }

            pos += (len / 0x80) * 0x80;
            if (len % 0x80 != 0)
            {
                pos += 0x80;
            }

            return(tmpBlk);
        }