Short answer: it executes only once because that is what the program logic tells it to do.
Long answer:
I suspect the -(p)- instruction is a one-shot, and S_ODT is an On-Delay Timer.
If that is the case, it's output rung can be True for only the one scan cycle when #pombit transistions from a value of 0 to a value of 1.
On the scan cycle when the #pombit value transitions from 0 to 1, that -(p)- output rung becomes True, which feeds the S rung of the timer, and starts the timer.
However, on all following scan cycles, the value of #pombit is still 1, but the output of the -(p)- instruction will be False because the one-shot already happened and it cannot be True again until the #pombit values transit back to 0 and then to 1 again. Since the output of the -(p)- instruction is False, the input pin S will see that false and reset the timer. Since the timer is reset, it's output Q pin can never become True, so the #pombit value can never become 0 again, so the timer stays reset.
As
@joseph_e2 says, changing to an Off-Delay Timer should work. Another option would be to remove the -(p)- one-shot instruction, so a value of 1 in #pombit would keep the S_ODT timer timing until timer expiry, which would then reset the value of #pombit to 0, which would in turn reset the timer and allow the process to start again.
A better solution might be to do this without Set and Reset instructions, and use the canonical Start/Stop Circuit pattern (see
here) to implement this logic. In my experience, although there is nothing wrong with Set and Reset instructions, logic that is implemented with Set and Reset is usually harder to read and debug.