Страница 1 из 1

Ошибка с Long Integer

Добавлено: 01 дек 2017, 15:12
eugeneb
Столкнулся с неприятным эффектом самопроизвольного изменения типа данных(!).

Вот тестовая схема:
[spoiler=Спойлер][/spoiler]На верхнем входе вычитателя тип данных Integer(синий). Данные идут с потенциометра. Я держу там 0.
На нижнем входе тип Long Integer(серый).
На выходе я ожидаю Long Integer(серый).

А получаю Unsigned Long Integer(!):
[spoiler=Спойлер][/spoiler]Если я вместо потенциометра поставлю константу Integer со значением 0, то всё будет нормально:
[spoiler=Спойлер][/spoiler]
Эффект наблюдается в FLProg 2.5.1 и в 3.0.0.

И как жить дальше?

Ошибка с Long Integer

Добавлено: 01 дек 2017, 15:23
support
Положите значение с выхода блока вычитания в переменную типа longInteger, и далее импользуйте её. Все должно заработать нормально. Дело в том что для экономии памяти, я не везде использовал переменные для выходов блоков, и кое какие блоки расчитываются на лету, и как там компилятор определит тип - не всегда известно. Создавая переменную, вы четко указываете компилятору какой тип Вам нужен.

Ошибка с Long Integer

Добавлено: 01 дек 2017, 21:09
eugeneb
Спасибо! Маневр с промежуточной переменной решил проблему:
[spoiler=Спойлер][/spoiler][spoiler=Спойлер][/spoiler]
Однако, это пенальти надёжности FLProg.
Может ну её нафиг экономию памяти, бо надёжность всегда важнее?

Ошибка с Long Integer

Добавлено: 01 дек 2017, 21:17
pan
eugeneb писал(а):Может ну её нафиг экономию памят
 ближе к 80% загрузки, дуню начинает плющить. с чем сам недавно столкнулся. пришлось выискивать как освободить драгоценные байты...

Ошибка с Long Integer

Добавлено: 01 дек 2017, 23:31
eugeneb
Согласен, что память очень ценный ресурс. Но надёжность программирования я ценю больше. Мне вообще очень нравится наглядность FLProg. Всегда есть уверенность в правильности работы контроллера. Это и язык FBD и разбиение на платы. (Правда не хватает ещё языка SFC. Я писал уже об этом http://forum.flprogwiki.ru/viewtopic.php?f=10&t=1988 Я спокойно ставлю свои поделки в Продакшн на производство своим друзьям. Но вот такие косячки подрезают эту уверенность. Они увеличивают необходимый объём тестирования.

Ошибка с Long Integer

Добавлено: 01 дек 2017, 23:39
pan
это не косячки, а тонкости программы) их нужно просто знать и принимать во внимание

Ошибка с Long Integer

Добавлено: 01 дек 2017, 23:51
eugeneb
Да-да, это не баги, это фичи

Ошибка с Long Integer

Добавлено: 02 дек 2017, 03:16
support
eugeneb писал(а):Спасибо! Маневр с промежуточной переменной решил проблему:Однако, это пенальти надёжности FLProg.
Этот манёвр - это временное решение. В принципе это бага (я то же не знаю всех тонкостей низкоуровнего компилятора), как её устранить, я уже знаю, так что эта проблема будет решена. К сожалению в версии которая сегодня выйдет я уже не смогу исправит (релиз уже выпущен и загружен на сервер), а в следующей всё будет нормально

Ошибка с Long Integer

Добавлено: 12 дек 2017, 04:59
Сергей
support, если никто не против задам вопрос здесь.
Колупаюсь со своим автоматом. Хочу сделать систему скидок при продажах. Процент скидки будет привязан к брелку пользователя, вместе с балансом. Проблема с умножением. Вопрос на фото.

Может я в 3 ночи чего то не догоняю?

Ошибка с Long Integer

Добавлено: 12 дек 2017, 11:09
eugeneb
На Due ошибка не воспроизводится:
[spoiler=Спойлер][/spoiler]
А если результат деления пропустить через вспомогательную переменную?

Ошибка с Long Integer

Добавлено: 12 дек 2017, 13:25
Сергей
eugeneb писал(а):А если результат деления пропустить через вспомогательную переменную?
то же самое. Да и у вас работает, и у меня раньше таких глюков не было. У меня в таких ситуациях мозг ломается. Вижу что черное, а все говорят белое)))

Ошибка с Long Integer

Добавлено: 12 дек 2017, 13:54
eugeneb
Надо повнимательнее разглядеть С-код, который генерится.
А может это какая-нибудь шняга с Модбасом?

Ошибка с Long Integer

Добавлено: 12 дек 2017, 16:07
Sancho
Сергей, Попробуйте константу 100 объявить тем-же типом, что и делимое.

Ошибка с Long Integer

Добавлено: 12 дек 2017, 16:24
Сергей
eugeneb писал(а):Надо повнимательнее разглядеть С-код
Та там проект как "Война и мир", это кусочек проекта. Попробую. Модбас просто отображает. Не должен влиять.
Sancho писал(а):Сергей, Попробуйте константу 100 объявить тем-же типом, что и делимое
Это я изначально делал, что бы все вычисления были с одним типом.
Позже попробую вообще на другую плату вынести и заодно код посмотрю + сделаю свой блок для вычисления процентов.
Интересный глюк получился.

Ошибка с Long Integer

Добавлено: 12 дек 2017, 16:58
nalnik
Сергей
Ваши слова:  Интересный глюк получился.

Никогда не говори: "Я ошибся", лучше скажи: "Надо же, как интересно получилось..." Николай II, 1905 год.


Ошибка с Long Integer

Добавлено: 12 дек 2017, 19:41
CraCk
Сергей писал(а):Модбас просто отображает. Не должен влиять.
 Чтоб убедиться что не модбас. Замените модбас на отправку переменной в uart.

Ошибка с Long Integer

Добавлено: 12 дек 2017, 20:45
Сергей
nalnik писал(а):"Надо же, как интересно получилось..."