show the entry list
 Search for minimum / maximum values (slave pointer) and averaging.
Part number:

QUESTION:
How can I determine the minimum/maximum values from the values in a data block?

The search for minimum / maximum values within a data block (slave pointer) can be done by means of loop programming. The attached sample program facilitates the search for minimum / maximum values in a data block and calculates the average.

Description of the function:
The search for the minimum/maximum values, including averaging, is created as a function. An IN parameter is used to define the data block in which the search is to be performed. The data type ID defines the data type of the values in the data block.

Browsing takes place within a loop. The number of loop runs is calculated from the number of bytes in the DB and the data type ID. The number of bytes in the DB is ascertained via the system function SFC 24.

The function presupposes that there are only values of one data type in the DB. The DB is tested from address 0 on in data type increments. The values are totaled at the same time and are divided by the number of values at the end (averaged).

If the length of the DB is incompatible with the data type, the amount remaining (e.g. 2 bytes in the case of the REAL data type) is ignored.
If the DB is smaller than the length of the data type, a parameter assignment error is output. This also happens if the DB doesn't exist (info supplied by SFC 24).

The average is output as a REAL value. The min./max. values are saved for all the data types in DWORD variables. The actual data type is maintained. This means that the OUT parameters for the function can be allocated to variables with the corresponding data types (without conversion functions) (refer to the example).

CALL "MinMax"
DBNumber :=3
DatatypeID :=1 // Identifier for INT
MinValue :=MD20
AverageValue:= #Average
MaxValue :=MD24
PAFE :=#Error
// from DWORD to INT
L MD 20
T #IntegerVariable_Min
L MD 24
T #IntegerVariable_Max

Interface description of the function FC 1 "MinMax":
 Declaration Name Type Description IN DBNumber INT Number of the DB being checked IN DatatypeID INT Data type identifier: 1=INT; 2=DINT; 3=REAL OUT MinValue DWORD Minimum value arising in the DB OUT AverageValue REAL Average value calculated over the number of values OUT MaxValue DWORD Maximum value arising in the DB OUT PAFE BOOL Parameter assignment error

N.B.
Address registers are not changed by the function.

Description of the sample program:
In the programming example, "MinMax" is called up in OB 1 via FC 1. In the current example a search is performed for the minimum/maximum values in DB 3. DB 3 contains "INT"-type values.
In order to facilitate further tests, DB 4 is prepared with DINT-type values and DB 5 is prepared with "REAL"-type values, and the requisite FC 1 call is available in OB 1 as a source code.
You can use the variable declaration table to monitor the OUT parameters of the function and to change the values in the DBs.

The attached download contains the STEP 7 project with the function block for determining the minimum/maximum values and for averaging, as well as the prepared data blocks and variable declaration tables.

Copy the "Min_Max.exe" file to a separate folder and then double-click on the file to start it. The STEP 7 project is now automatically extracted along with all its sub-folders. You can now open and process the extracted project using the SIMATIC Manager.

Runnability and test environment:
The example can be used on all the CPU variants of SIMATIC S7-300, S7-400 and WinAC.
The following table lists the components which have been used to create this entry and verify the functions described:
 Test environment Version / Release PC platform Pentium III 800 MHz, 264 MB Operating system Windows XP STEP 7 V5.2 S7-CPU CPU 315-2DP (6ES7315-2AF03-0AB0)

Filter criteria:
 Hardware platform: SIMATIC S7-300/S7-400 Software: STEP 7 up to V5.x Entry contents: Function blocks/tools
 Entry ID:16772536 Date:2003-08-29
 Copy link Suggestion for the entry Send to a friend
 Print
 pre-assigning / filling in a data ... Search for a pattern in a sequenc ... WinCC: Communication SIMOTION PLCopen Blocks SIMOTION PLCopen Blocks
 mySupport
 My Documentation Manager