Any dry contact/mechanical switch when they bang together, they rebound a bit before settling (bouncing). Naturally, debouncing is the process of removing the bouncing effect. This is also true in small metal contact when they open or closes, multiple electronic signals gets generated.
In the days of mechanical keyboard, when a key was pressed, the key would oscillate (bounce) against its contact several times before settling. And when it was release, it would oscillate again until it reverted back to its reset position. To rectify this, a debouncer program would aggregate the keystroke across time to produce one “confirmed” keystroke. Hence, we see significant reduction in typing speed during the days of ZX81. These days we have capacitive keyboard and we don’t need the debouncing “delays” and we can type as fast as we like.
Likewise, in the world of process control, we do apply debouncing logic for the same reason. And at the same time to reduce jittering of digital values as it come close to its alarming state.
The logic below is a straight mapping of IO to an PLC tag (RSLogix 5000)
And below is a typical way, to apply debouncing to the same logic.
There is an excellent article in debouncing from Ardunio tutorial web page which explains in great length about debouncing. It is listed in the Reference section or you can get access from here.