Вход

Просмотр полной версии : предупреждение при компиляции



Назаров Александр
25.04.2008, 16:49
Здравствуйте коллеги! При добавлении модуля Blink из Util и компиляции выскакивает предупреждение: (*PUTBIT (2): Operand TO be shifted has no explict type. Pleise use a typed literal, like 'DWORD#1'*).
Хотя все вроде бы и работает, но все равно не приятно и не понятно чего он хочет:) . Что это такое?

Валера Храмцов
28.04.2008, 10:01
Напиши номер предупреждения. Там должно быть написано: warning ****: и далее название.
Или посмотри в описании, прилагаемом к CoDeSyS, что означает предупреждение с этим номером.

Назаров Александр
29.04.2008, 10:33
Warning 1511. В руководстве такая ошибка не описана.:confused:

Игорь Петров
04.05.2008, 13:50
Вероятно Blink не корректно соединяется с PUTBIT. Предупреждение относится именно к нему.

Смысл предупреждения такой: Есть некий блок, который обладает полиморфизмом. Т.е. компилятор дает разный машинный код для операндов разного типа. Например, сложение или сдвиг – понятно, что сдвиг байта, это одно, сдвиг двойного слова - совсем другое. Какой именно код генерировать компилятор определяет по типу входов. Так если на вход блока подана переменная типа BYTE, то все очевидно. Если же вдруг на такой вход подвешено число 2, что делать компилятору? Генерировать ли ему код для BYTE или для WORD? В такой ситуации компилятор подбирает минимально приемлемый под эту константу тип данных (в данном случае BYTE) и на всякий случай выдает предупреждение: "Не ясен тип операнда для операции сдвига. Используйте типизированную константу, 'DWORD#1'."

Задайте явно тип константы на входе, например 'WORD#2' или 'BYTE#2', а не просто 2. Компилятор получит четкое указание, относительно типа входа и не будет давать предупреждение.

Назаров Александр
04.05.2008, 18:21
дело в том, что у Blink нет переменных типа Dword, есть только Bool и Time. поэтому это или баг компилятора или функции Blink?!
а вообще спасибо за ответ, а то сейчас форум стал какой то вялый и ленивый!!

Игорь Петров
06.05.2008, 11:21
дело в том, что у Blink нет переменных типа Dword, есть только Bool и Time. поэтому это или баг компилятора или функции Blink?!...

В сообщении явно указан блок PUTBIT – именно он вызывает проблему. Где-то в программе он стоит. Внутри Blink сдвиговых операций нет, он тут вообще не причем. . Попробуете воткнуть его в пустой проект и никаких сообщений не будет 100%.

Назаров Александр
07.05.2008, 07:16
В сообщении явно указан блок PUTBIT – именно он вызывает проблему. Где-то в программе он стоит. Внутри Blink сдвиговых операций нет, он тут вообще не причем. . Попробуете воткнуть его в пустой проект и никаких сообщений не будет 100%.

Попробовал, результат тотже. В проекте один оператор
VAR
f:BLINK;
END_VAR

f(ENABLE:= TRUE, TIMELOW:=t#0.5s , TIMEHIGH:=t#0.5s); - два предупреждения!!!!

Игорь Петров
07.05.2008, 13:23
Результат должен быть как на вложенной картинке (CoDeSys V2.3.9.4).

Блок Blink реализован в биб-ке Util.lib. Она точно подключена к проекту? Она случаем не изменена/повреждена?
Это внутренняя биб-ка, ее можно открыть в CoDeSys и посмотреть исходный текст данного блока. Должно быть так:

FUNCTION_BLOCK BLINK
(* Function block to simulate a turn signal *)
VAR_INPUT
ENABLE:BOOL; (* TRUE:run Blink, FALSE: OUT keeps its value*)
TIMELOW:TIME; (* Time for OUT=FALSE *)
TIMEHIGH:TIME; (* Time for OUT=TRUE *)
END_VAR
VAR_OUTPUT
OUT:BOOL; (* output variable, starting with FALSE *)
END_VAR
VAR
CLOCK:TP;
END_VAR

CLOCK; (* call Timer *)
IF CLOCK.Q=FALSE AND ENABLE THEN (* time passed or init *)
CLOCK(IN:=FALSE); (* reset Timer *)
CLOCK(IN:=TRUE); (* restart Timer *)
IF OUT=FALSE THEN
CLOCK.PT:=TIMEHIGH;
ELSE
CLOCK.PT:=TIMELOW;
END_IF;
OUT := NOT OUT; (* invert *)
END_IF

Здесь в принципе нет никаких сдвигов, которые могли бы вызвать подобные сообщения :rolleyes:

Назаров Александр
07.05.2008, 16:15
Версия CoDeSys_v2381. Библиотека вроде бы нормальная. Результат в приложении.:confused:

Игорь Петров
07.05.2008, 18:04
Ругается опять же на функцию PUTBIT в биб-ке Util… Правильная биб-ка вложена. Попробуйте ее просто заменить.

Назаров Александр
08.05.2008, 07:04
Да, действительно дело оказалось в библиотеке! хотя не понятно зачем такое по класть на диски вместе с контроллером? у меня диск версии 8 (приобретен в марте 2008), а библиотеки еще от 2006 года.:d
Игорю Петрову большое спасибо:) !!!!
А что по этому поводу скажет многоуважаемый Овен?

Игорь Петров
08.05.2008, 11:05
Очевидно, 3S сначала усилили контроль в компиляторе CoDeSys, потом поправили биб-ку. Сообщение не критичное, можно не брать в голову, на генерируемый код это не влияет никак.

Kirill
08.05.2008, 11:14
Да, действительно дело оказалось в библиотеке! хотя не понятно зачем такое по класть на диски вместе с контроллером? у меня диск версии 8 (приобретен в марте 2008), а библиотеки еще от 2006 года.:d
Игорю Петрову большое спасибо:) !!!!
А что по этому поводу скажет многоуважаемый Овен?

Немного прозевали, поменяем. Спасибо за поднятую тему.

Pvalp
31.08.2015, 10:27
А как открыть ФБ BLINK библиотеки util.lib в ST, он открывается только в виде CFC?

petera
31.08.2015, 10:33
А как открыть ФБ BLINK библиотеки util.lib в ST, он открывается только в виде CFC?
Открыть библиотеку как обычный проект
19717

Pvalp
31.08.2015, 12:43
Спасибо получилось., только оказывается открыть нужно, предварительно установив расширение открываемого файла не (*.pro), а (*.lib).

petera
31.08.2015, 13:09
Спасибо получилось., только оказывается открыть нужно, предварительно установив расширение открываемого файла не (*.pro), а (*.lib).
Способ 1. Традиционный
19720

Способ 2.
19719