6/15/2017 4:11 PM | |
Posts: 16 Rating: (0) |
Hi, i have developed a FB to find the Minimum value in a DB region. But now i need to find a minimum value after which it ramps up and the ramping up value should be having a certain limited difference higher than the previous value. for example. value in db goes like 9,8,7,6,7,8,9,4,3 answer should be 6 and its dbd number Below is my program. pls suggest where im going wrong. it is always giving the minimum value (in this case 3). i need 6 after which it ramps up. #rrmin will give me 6 TAR1 #dwAR1save OPN DB [#DB_Temp] L #Min_adrr LAR1 //***** Init vars with the first value ***** L DBD [AR1,P#0.0] T #rrMin TAR1 #dwPtrMin L #Loop_Leng loop: T #i +AR1 P#4.0 A M 2001.1 JC nope L #rrMin L DBD [AR1,P#0.0] <R JC Min T #rrMin TAR1 #dwPtrMin TAR1 "tempDw" = #X1 Min: NOP 0 A #X1 CALL "FWD_MIN_RISING" // this a fc which give a value from the current position after finding a minimum value,by knowing the current min position from tempDW i tried by defining L DBD [AR1,P#8.0] but it does'nt help. //X1 is 1 if value is decrementing L #i L 5 >I = #X2 //X2 rising value found A #X1 A #X2 = #X3 //was decreasing (x1) and rise found (x2)= x3 //TempR1 is from fc 531 A #X1 L "TempR1" L #rrMin -R T #TEMPR L 5.000000e-001 L #TEMPR >R = #X4 // rising value - rmin is valid > = x4 A #X1 A #X2 A #X3 A #X4 L 9.200000e+000 L #rrMin -R T #tempR1 L #tempR1 L 1.000000e+000 >R = #X5 A #X5 A #X1 A #X2 A #X3 A #X4 S M 2001.1 nope: NOP 0 //***** Loop if not finish ***** L #i LOOP loop //********** Write output ********** L #dwPtrMin SRD 3 T #Curr_yMin_addr_R L #Curr_yMin_addr_R DTR T #Ymin_R_add_temp ------------------------------------------------------------------------------------------ |
Last edited by: Min_Moderator at: 6/20/2017 9:08:31 AMNew subject after splitting |
|
6/15/2017 9:49 PM | |
Joined: 5/30/2013 Last visit: 9/17/2024 Posts: 112 Rating: (37) |
Hi Siemens- STL, loop: T #i + AR1 p#4.0 // wrong place L # rrMin L DBD [ AR1. P#0.0] A M2001.1 // it's bad option, you have seen FAQ JC nope and more..... ************************************************ L # rrMin L DBD [ AR1. P#0.0] + AR1 p#4.0 maybe help this FAQ: Search for minimum / maximum values (slave pointer) and averaging Programming a Loop with Indirect Addressing and the posts for better understand yours mistake: How to Compare two data Blocks Why do I need to backup the Adress registers in the beginning of a FC? Best regards zzVss |
Last edited by: zzVss at: 6/15/2017 10:16:30 PMLast edited by: zzVss at: 6/16/2017 3:29:48 AM |
|
6/16/2017 6:22 AM | |
Joined: 12/9/2010 Last visit: 10/8/2022 Posts: 623 Rating: (77) |
Hi Najsel, The code section shared by you is equivalent to moving 100 to #test. Because the during execution of LOOP instruction, CPU will complete loop and then execute instructions downwards. Instead of +1 instruction, u can use INC instruction and clear all 4 bytes of accumulator before the LOOP. Another solution is to test only shared code and share the result. May be #test is used somewhere in same block. |
If you like the comment, rate it (right top) or thank it (left bottom). |
|
6/16/2017 2:42 PM | |
Joined: 5/30/2013 Last visit: 9/17/2024 Posts: 112 Rating: (37) |
Off topic:
Hi Sachinpatke, your the answer applies for post in 2011.I believe he had managed to find the answer after 6 years passed by. Too late. fritz and hdhosseiini are solved this problem (for yours greater explanation in all post in the forum thank another). Thank Piotr.M. for nice explanation. The problem is in the post "Siemens-STL" in 2017. See another Best regards zzVss |
Follow us on