No need to worry about same steps in same scan unless Your PLC uses a sync I/O update (easy to get round by mapping, however, it will not cause a problem well never has for me, and one scan is not going to make any difference, even if you wait for next scan it is usually so fast (example reversing a motor) you would put a delay in. I have used the above technique for over 35 years never had any problems, generally you have transitions between steps anyway i.e. settle times especially in batching, it's the same as using steps with bits but not unsurmountable by calling the step change at the end of scan or at the start of scan.
The point is as you rely on perhaps in a sequence for a proximity to make after an output has been energised this would not be instant and one scan is not to be considered anything more than a step transition in one scan and is not going to happen. Also many step changes may only be moving a value into a word like incrementing a recipe block.
As for the state skipping in one scan explain to me where this would cause a problem.
ielkhatib: Things like home sequence is just another range of values.
Let me explain, You have a process that for example is a batching process.
You split the values into areas like
10-100 Initialisation
1000-1999 is water addition
2000 -2999 is starch addition
3000- 3999 is mixing sequence (i.e. run a mixer & perhaps a blender for a time)
4000-4999 is operator checks
5000- 5999 is discharge to line
so for example you start the process and it runs through initialisation what ever that is, it then sets the sequence word to 10000 so you create a program that runs when the sequence is 10000-10100(move first stage into running recipe area (the values that stage needs).
This then checks what type of addition is i.e. 1. = water, 2 = starch 3 =mix
so if the recipe stage requires starch then it moves 2000 into the sequence word, next scan it calls the starch sequence code based on the sequence word is between 1000 & 1999.
So in simple terms
assume sequence = 0 then it is idle
Operator presses the start button, it moves 10 into the sequence word
a block of code is called conditionally when the sequence word is between 10 & 100
When the initialisation has been done that bit of code writes 10000 into the sequence word, this then enables the call to the recipe stage load logic, in there it copies the recipe stage into the running recipe stages then compares what type of process it needs to do i.e. it is water addition so moves 1000 into the sequence, the next scan of the PLC the water addition block of code runs as it is enabled because the sequence word is between 1000 & 1999, this code then increments the sequence in increments of say 10, so 1010 is store the weight of the vessel, 1020 is open the main feed valve, 1030 is check added weight, if weight is within 10kg of target, move 1040 into sequence close main feed valve, open trickle valve, 1050 is check for target weight, when target reached move 1060 into sequence word, settle time, move 1070 into sequence, check weight = recipe, complete move 1000 into sequence to call the increment recipe stage.
It may seem complex but if you write out the steps or stages and give them a range of numbers then it becomes easy.
Here is a sample, however, it is too large to post so only shows the main cooker sequence that calls the various additions, note: there are two sequences as I use one for the main task that takes care of handling alarms & holding the process on an alarm and the other is the control sequence word.