Gosh - scan times higher than 100ms !
It could account for some of the difference between timer value and output ON time.
But you should also take into account the propagation time for an output to change from ON to OFF. If the output drives a 24V coil that is protected by a freewheeling diode, then it delays the ON to OFF transition significantly. Protection via a zener barrier makes the ON to OFF time shorter.
Is it normal with such high scan time for S7-300 ?
I use S7-400 and have no problem keeping the scan time down to 3-4ms.
For a similar program in an AB SLC500 or PLC5 I get 20-30ms.
I would look into revising the program in order to squeze the scan time down.
- Change code from cyclical to event-based execution where possible.
- Check for unnecessarry code, especially in sub-routines that are called often.
- Change the update rate from every scan to a lower rate where possible (analog i/o seldomly needs to update every scan).
- Task-switch noncritical code (f.ex: execute subroutine A+B+C in one scan, execute subroutine D+E+F in the next, and so forth).
- Use interrupts for critical i/o that should update as fast as possible (but that won't help if there are timer-dependencies !)