Я упрощу, чтобы вы поняли:
Код:
AO1 := AO1 + 0.001 * (BOOL_TO_REAL(DI1) - BOOL_TO_REAL(DI2));
Выражение в скобках даёт −1, 0 или +1 в зависимости от того, какие кнопки нажаты. В общем-то, больше объяснять тут и нечего. В полном варианте вводится поправка на длительность цикла чтобы от неё не было зависимости.
Или вы даже не знаете, что в ПЛК ваша программа крутится в бесконечном цикле с периодичностью около 1-50 мс? Тормозить поток, как это делается в прикладном программировании, на контроллерах не принято. Ну а в симуляторе периодичность исполнения программы гораздо реже.