12/24/2009 1:44 PM | |
Joined: 10/7/2005 Last visit: 9/18/2024 Posts: 3020 Rating: (1054)
|
Hello mhkocak I haven't verified/tested your results but they are not really suprising in my humble opinion and there are at least the following three reasons responsible for this: 1.) An(SCL or otherwise) loop is a loop to begin which means a number of instructions will be executed as part of the loop (loop index handling, the actual operation of setting a bit, the jump back to the loop start etc) 2.) Any SCL logic does compile down to STL code and will carry with it some "overhead" (i.e. you will always be able to write more runtime and memory efficient code directly in STL. This is the price one must pay for the convinience of using a high level language). 3.)Even adeceptively simple SCL logic like "my_bool_array[i] := TRUE;" hasthe index value [i]in it and requires indirect addressingto be invoked in the compiled STL logic. Result: A "straight" boolean operation may only take0.05 micro seconds in your CPU, a loop based & SCL programed & indirect addressing related one can easily take a "tad"bit longer per bit though. By the way, if you want to see the "gory" STL code that is created from yourSCLsource, simply delete the SCL source and then open the FC or FB (make sure to have a backup copy of your SCL source file though as you can't compile it "backwards" from the STL Block). As for your other questions: Q: Is SCL slower than STL or LADDER? A: That would be adefinete Yes when compared toSTL and a "typicallyyes" for LADDER (you wouldn't really want to compare LAD to SCL or STL though as it doesn't offer the functionalty that the other two do) Q: Am I doing something wrong? A: No Q: What about CPU 317 ( without technology ) ? A: The same rules apply (i.e .this is not a technology CPU related issue) Q: What can I do to increase processing speed? A: Program directly in STL I hope this helps and merry X-Mas |
Cheers |
|
This contribution was helpful to2 thankful Users |
12/25/2009 1:35 PM | |
Joined: 10/7/2005 Last visit: 9/18/2024 Posts: 3020 Rating: (1054)
|
Hello again mhkocak The"JL" instruction (Jump List) that Eastern mentioned is the same as the "CASE" statement in a high level language but has nothing to do with loop handling (I think Eastern generally confused Jump instructions with Loop handling). Anyhow, the STL instruction you are looking for forto make loop implementation easier is cunningly called "Loop". As for your particular question "In STL, is it possible to loop indexed arrays?", the answer is "but of course" (remember thatany of the other 6 non-STL languages that you can use to program an S7 will compile/convert down to STL code which means that anything that'spossible in another S7 language is also possible in STL). The main differences between STL andSCL concerning indexed (indirect)programming is that STL requires you work with addresses whereas SCLconvieniently allows you to use symolics. As for getting help on STL yourfirst port of call should possibly be the <F1> key (context sensitive help) in combinationwiththe "Statement List programming" manual (to be found in the Simatic->Documentation folder from the start menu or via search from https://support.automation.siemens.com). The "Help on STL" inbuilt help (accessible from the help menu if a Block is open) also has a nice "working with Statement list" section including examples on indirect addressing. On top of that, the FAQ below below mayalso come in handy: How can you access an element indirectly in STL in a two-dimensional array (e.g. a value in line 2 and column 5)? Last but not least, I presume your original example code of setting 10000 bits in an array via a loop was purely done to work out execution times. Ifmy presumtion is however wrong, a much easier way to do this task would be by usingSFC21 "FILL" from the system function blocks library. I hope this helps |
Cheers |
|
This contribution was helpful to2 thankful Users |
Follow us on