Вы записываете данные по указателю pt в каждом цикле программы. Как только перестанете туда что-то записывать, это что-то сразу пропадёт, и по этому адресу восстановятся старые данные.
У меня происходило вот что. Предположим, по адресу %IW0 есть число 1234. Вызываю функцию, которая записывает туда 0. Пока идёт вызов функции, по адресу %IW0 - 0. Как только вызов функции прекращается, там снова появляется 1234. Этого и следовало ожидать. Ведь указанный адрес находится в памяти контроллера, в области отображения процесса. Данные туда записываются из портов ввода-вывода в промежутки времени между вызовами программы. Если записать в ячейку памяти число, и сразу прочитать - вы это же число и прочитаете. Но оно потом всё равно перезапишется значением из порта.
Вот такой ФБ я наваял. Кому надо - пользуйтесь. Вчера проверял на железе - нормально работает.





Ответить с цитированием