Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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);
        }