PDA

Просмотр полной версии : Глобальная переменная



Newcomer
10.11.2017, 19:49
Добрый вечер

Столкнулся с такой странной ситуацией. В программе на ST объявлена глобальная переменная типа WORD. По умолчанию ее значение равно 0.

При старте программы этой глобальной переменной присваивается другое значение. В отладчике видно что переменная поменяла свое значение, однако оборудование работает так будто значение этой переменной равно 0.

Newcomer
11.11.2017, 15:16
Ну так это обычное дело. Просто нужно исправить sin на exp в 17й строке.

Ничего не понял, поясните, пожалуйста, поподробней.

Игорюня
11.11.2017, 17:59
Ничего не понял, поясните, пожалуйста, поподробней.

К ясновидящим в другой форум. Ну а если серьезно, то вполне вероятно, что в глобальной переменной и локальной одинаковые имена, возможно. Если нет, проект в студию, тогда и на помощь можно рассчитывать.

Newcomer
11.11.2017, 18:13
Ну а если серьезно, то вполне вероятно, что в глобальной переменной и локальной одинаковые имена, возможно.

Я это сразу проверил. Нет такого. Я с подобным за 10 лет работы с CoDeSys первый раз столкнулся. Мистика какая-то. Может у человека, который пытает программу на объекте что-то с компьютером не то, вирус или еще что-то ?

Newcomer
11.11.2017, 18:27
Ну у себя, в 17й строке PLC_PRG, ошиблись. Не то написали.

Что именно не то ?

У меня в глобальных переменных объявлено A:WORD; K:WORD := 16;, а в PLC_PRG сделано присвоение A := 200 * K;

А должно быть равно 3200, а по факту 0.

Игорюня
11.11.2017, 19:07
Знакомая ситуация у меня тоже не проканало a: ton := (pt:=t#1s) , пришлось в теле программы время забивать при каждом вызове.

Игорюня
12.11.2017, 07:20
Валенок! Уже приводил и это обсуждали. Не надо по пустякам тролить.

capzap
12.11.2017, 09:19
Валенок! Уже приводил и это обсуждали. Не надо по пустякам тролить.

что Вы там привели, решение которым кто то с Вами поделился, нет, сами сделали вывод, что добавив аргумент всё заработало, а по факту не грамотно составлена программа была с вызовом таймеров

Newcomer
12.11.2017, 12:36
Передайте этому человеку что он несёт пургу.
1.Забыл сделать старт
2.Косяк в коде
3.Кривое подключение.

Все это мимо.

Если в глобальных переменных объявлено А:WORD := 3200;, то все работает как надо.

Если в глобальных переменных объявлено A:WORD; K:WORD := 16;, а в PLC_PRG сделано единственное присвоение для A
A := 200 * K;, то не работает.

Оператор A := 200 * K; почему-то игнорируется.

Что такое кривое подключение ?

А может исходный код программы не верно компилироваться из-за заражения компьютера вирусом ?

capzap
12.11.2017, 13:57
Все это мимо.

Если в глобальных переменных объявлено А:WORD := 3200;, то все работает как надо.

Если в глобальных переменных объявлено A:WORD; K:WORD := 16;, а в PLC_PRG сделано единственное присвоение для A
A := 200 * K;, то не работает.

Оператор A := 200 * K; почему-то игнорируется.

Что такое кривое подключение ?

А может исходный код программы не верно компилироваться из-за заражения компьютера вирусом ?а в пустом проекте тоже не работает?

Newcomer
12.11.2017, 14:01
У меня в симуляторе рабочий проект правильно работает. Что творится с компом и ПЛК на объекте не понятно. Я думаю какая-то проблема с тем компом.

capzap
12.11.2017, 15:26
комп не причем, а вот заливка прошивки без выполнения завершающих мероприятий может быть причем

Newcomer
13.11.2017, 12:16
комп не причем, а вот заливка прошивки без выполнения завершающих мероприятий может быть причем

Прошивку никто не записывал. Возможно прошивка слегка слетела и надо перепрошить ПЛК ?

Newcomer
13.11.2017, 13:04
Лично мне понятно - чел с той стороны не понятно что и как делает.

Работа длится довольно продолжительное время. Человек заливал программу в ПЛК, я думаю, больше сотни раз и все было нормально. Проблема возникла на днях, ранее такого не было.

Newcomer
13.11.2017, 14:30
Глобальных переменных в проекте много, все они переопределяются в PLC_PRG и все с ними нормально, а вот с одной глобальной переменной вдруг случился такой казус.

Newcomer
13.11.2017, 17:32
Зачем заливать больше сотни раз если все нормально ?

Заливать будем пока не отладим программу полностью.



Какой ? Покажите.

Показывал выше.

Newcomer
14.11.2017, 12:08
Т.е Вы жалуетесь на переменную в неотлаженной программе ? ))

Валенок, сам то понял что спросил ?

Осинский Алексей
15.11.2017, 09:45
Глобальных переменных в проекте много, все они переопределяются в PLC_PRG и все с ними нормально, а вот с одной глобальной переменной вдруг случился такой казус.

Пожалуйста, пришлите Ваш проект с подробным описанием проблемы и шагов для ее воспроизведения (можно в личку).

Гарчев Евгений
15.11.2017, 18:41
На предыдущей странице поднимался вопрос: "может ли код не правильно компилироваться?" - Может!!! И вирусы тут не при чем ... Для корректной компиляции кода после внесения каких-либо изменений необходимо перед компиляцией делать "очистку проекта" (т.е. подчищать хвосты от предыдущих компиляций).

Newcomer
15.11.2017, 20:44
На предыдущей странице поднимался вопрос: "может ли код не правильно компилироваться?" - Может!!! И вирусы тут не при чем ... Для корректной компиляции кода после внесения каких-либо изменений необходимо перед компиляцией делать "очистку проекта" (т.е. подчищать хвосты от предыдущих компиляций).

Надо Clean all сделать перед компиляцией проекта ?

Newcomer
15.11.2017, 20:49
Вы уже 3-й кто говорит про это. Автор упорно твердит про комп/вирусы..

А Валенок все свои предыдущие посты убрал. Интересно зачем ?

Newcomer
15.11.2017, 21:51
На Ваш вопрос "что такое кривое подключение" я отвечал.
А посты убрал за ненадобностью раз не пользуетесь. Ну и у Овена какие-то проблемы с памятью, помогаю Осинскому освободить место.

Про кривое подключение разъяснения не последовало. А места на форуме всем хватит, тут беспокоится не надо.

Гарчев Евгений
16.11.2017, 13:19
Надо Clean all сделать перед компиляцией проекта ?

Да, необходимо делать "Clean all" перед каждой компиляцией и загрузкой измененного проекта в ПЛК. Особенно, если изменения касались областей объявления переменных.