What you need to create is a sequencer. Pre PLC these were called Drums and were similar to a music box and the way it plays notes. Think of the spool on a music box. As it turns, the tits lift the tines and notes are played. This was translated to the industrial world with Drums. Then PLCs came along alot of them too had drum and sequencer instructions. However, nowadays, most people just build their own following a step/transistion methodology.
An easy way to do this is to use B3 bits to latch/unlatch steps. At any given time you'll be in one step and based on being in that step you'll execute your outputs. To get from one step to the next, will be your conditional logic, in this case your 500 ms delay.
So, let's say B3:1/0 to B3:1/15 represent 16 steps.
Anytime, one of those bits is on (the others will be off), that represents the step you are in. So, when B3:1/0 is on, you are in step 0 (the first step). When you are done being in step 0, B3:1/0 will turn off and B3:1/1 will turn on, indicating you are now in step 1.
So, how to construct...Easy.
First, you'll need one rung to reset everything to step 0. I don't know your process well enough to know what this is, but make a rung with the condition you need. The output of this rung will be a CLR B3:1 (clears all the B3:1 bits in that word) and in parallel branch to that, use an OTL (NOT OTE) of B3:1/0. Now, all the B3:1 bits are clear except for B3:1/0 which is on indicating you are in step 0. You only need to do this one time, like on power up of the PLC (use the first scan bit), or if you have a master reset condition.
Okay, now how to step through. You'll create the number of rungs you need for the number of steps. Each rung will be very similiar. It is:
XIC Step x - CONDITIONS to STEP - OTL Step x+1 parallel branch OTU Step x
Let's take step 0 to step 1. The code would be:
XIC B3:1/0 - your condition to start - OTL B3:1/1 parallel OTU B3:1/0
See, if you are in step 0 and the condition happens to leave step 0 to go to step 1, step 1 bit is set and step 0 bit is turned off.
The next step rung would be:
XIC B3:1/1 - your condition to go to step 2 - OTL B3:1/2 parallel OTU B3:1/1
Now you've stepped from Step 1 to Step 2.
Keep repeating until you are done and want to go back to step 0. Let's say you only have step 0 to step 8. The last rung would be:
XIC B3:1/8 - condition to end and go back to step 0 - OTL B3:1/0 parallel OTU B3:1/8.
Now, you're stepping routine is complete. To actually turn on the outputs you need, go to your existing matrix logic, just add more extended branches and add an XIC of the B3:1/x for the step that should turn on that output.
And particular to your request, your condition from step to step is 500ms. So, you just create a rung with a TON based on being in that step. You use the .DN of that timer as the condition in your stepping routine. For example, 500ms delay between step 1 and step 2.
Create a rung XIC B3:1/1 (step 1) TON T4:5 500ms
Your step logic from 1 to 2 as above is
XIC B3:1/1 XIC T4:5.DN OTL B3:1/2 Parallel OTU B3:1/1
See how well that works and it is easily understandable. And from troubleshooting you can look at the B3:1 word in the data table and know exactly what step you are in at any given time.
Also, understand that as you step out of one step and into the other if you need to maintain outputs on based on being in multiple steps, you again just simply add those steps to your existing OTE output instructions. Let's say that you want the output to come on in Step 1 and stay on until Step 3. Then for that output, you would have XIC's of B3:1/1, B3:1/2 and B3:1/3 in parallel branches as Bernie explained.