/// <summary> /// /// </summary> /// <param name="DBNumber">DB Number</param> /// <param name="Buffer">Destination buffer</param> /// <param name="SizeRead">How many bytes were read</param> /// <returns></returns> public int DBGet(int DBNumber, byte[] Buffer, IntByRef SizeRead) { S7BlockInfo Block = new S7BlockInfo(); // Query the DB Length LastError = GetAgBlockInfo(S7.Block_DB, DBNumber, Block); if (LastError == 0) { int SizeToRead = Block.MC7Size(); // Checks the room if (SizeToRead <= Buffer.Length) { LastError = ReadArea(S7.S7AreaDB, DBNumber, 0, SizeToRead, Buffer); if (LastError == 0) { SizeRead.Value = SizeToRead; } } else { LastError = errS7BufferTooSmall; } } return(LastError); }
public int GetAgBlockInfo(int BlockType, int BlockNumber, S7BlockInfo Block) { int Length; LastError = 0; // Block Type S7_BI[30] = (byte)BlockType; // Block Number S7_BI[31] = (byte)((BlockNumber / 10000) + 0x30); BlockNumber = BlockNumber % 10000; S7_BI[32] = (byte)((BlockNumber / 1000) + 0x30); BlockNumber = BlockNumber % 1000; S7_BI[33] = (byte)((BlockNumber / 100) + 0x30); BlockNumber = BlockNumber % 100; S7_BI[34] = (byte)((BlockNumber / 10) + 0x30); BlockNumber = BlockNumber % 10; S7_BI[35] = (byte)((BlockNumber / 1) + 0x30); SendPacket(S7_BI); if (LastError == 0) { Length = RecvIsoPacket(); if (Length > 32) // the minimum expected { if ((S7.GetWordAt(PDU, 27) == 0) && (PDU[29] == (byte)0xFF)) { Block.Update(PDU, 42); } else { LastError = errS7FunctionError; } } else { LastError = errS7InvalidPDU; } } return(LastError); }