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); }
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); }