CoDeSys фиксация переменных в режиме эмуляции |
Ответить |
Автор | |
Новичок Присоединился: 26 Июль 2013 Online Status: Offline Публикации: 12 |
Опубликовано: 26 Июль 2013 18:36 |
Всем доброго времени суток.
Есть CodeSys 2.3.9.38. Код на ST: vvv:=1; IF vvv= 1 THEN tmp:=tmp+1; END_IF в режиме симуляции делаю фиксацию vvv=0. Теперь если ходить по шагам, то в IF не заходит. Если просто запустить, то идет инкремент tmp. При этом среда четко показывает ,что vvv зафиксирована и ее значение всегда 0. Подскажите в чем тут загвоздка? Почему разный результат в пошаговом режиме и при непрерывнрм выполенении? |
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Шаг в CoDeSys (и ваще в автоматике) это не переход со строчки на строчку как в обычном программировании, а прокрутка целого цикла, т.е. если делать "шаг" без точек останова то будет однократно исполнен весь программный код. Если надо идти по строчкам то ставится точка останова (breakpoint), но надо учесть что и после останова следущий шаг провернёт весь цикл и опять встанет на точку ! Можно поставить несколько точек, но отладка получится путанная потому что после каждой точки будет проскок на цикл. Фиксация переменных делается совместно с точками останова, без точек она не будет действовать. Ну ваще-то будет, но обновление фиксированных значений будет происходить только в начале цикла и дальше переменные принимают значения по программе. То-есть переменная vvv в начале цикла примет 0 и после этого не действует, потом идёт vvv := 1, вот это значение и будет держаться до нового присвоения - либо по ходу программы, либо до начала нового цикла. Если хочется отследить переменную то надо поставить точку останова на вторую строчку IF vvv = 1 THEN .. в точке останова фиксированное значение обновится. Ну а лучше всего не пользоваться отладочными средствами в боль-менее сложных программах, отладка циклических програм в режиме останова - дело очень мутное, особенно с несколькими задачами с разным временем цикла - клинит неимоверно ! Универсальное средство - использовать отладочный код, т.е. добавить такие инструкции которые выявят нужные места при циклической работе С уважением, SAN |
|
Новичок Присоединился: 26 Июль 2013 Online Status: Offline Публикации: 12 |
|
Правильно ли я понял....если имеем код , к примеру:
а:=1; b:=1; c:=1; d:=1; e:=1; f:=1; ......x :=1; мы остановились на строчке c:=1. Убрали все точки останова и сделали шаг(F10), то выполнятся все строчки начиная с (c:=1) и ниже до конца всей программы, после этого будет сделан вывод в реальное железо, цикл начнется сначала, будет сделан ввод с реального железа, программа дойдет до строки (d:=1) и там остановится. Я правильно понял?
|
|
Новичок Присоединился: 26 Июль 2013 Online Status: Offline Публикации: 12 |
|
Вопрос с фиксацией вы мне прояснили. Спасибо большое.
|
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |