Ошибка с Long Integer
- eugeneb
- Лейтенант
- Сообщения: 486
- Зарегистрирован: 15 авг 2016, 11:20
- Откуда: Нижний Новгород
- Имя: Евгений
- Благодарил (а): 1 раз
Ошибка с Long Integer
Столкнулся с неприятным эффектом самопроизвольного изменения типа данных(!).
Вот тестовая схема:
[spoiler=Спойлер][/spoiler]На верхнем входе вычитателя тип данных Integer(синий). Данные идут с потенциометра. Я держу там 0.
На нижнем входе тип Long Integer(серый).
На выходе я ожидаю Long Integer(серый).
А получаю Unsigned Long Integer(!):
[spoiler=Спойлер][/spoiler]Если я вместо потенциометра поставлю константу Integer со значением 0, то всё будет нормально:
[spoiler=Спойлер][/spoiler]
Эффект наблюдается в FLProg 2.5.1 и в 3.0.0.
И как жить дальше?
Вот тестовая схема:
[spoiler=Спойлер][/spoiler]На верхнем входе вычитателя тип данных Integer(синий). Данные идут с потенциометра. Я держу там 0.
На нижнем входе тип Long Integer(серый).
На выходе я ожидаю Long Integer(серый).
А получаю Unsigned Long Integer(!):
[spoiler=Спойлер][/spoiler]Если я вместо потенциометра поставлю константу Integer со значением 0, то всё будет нормально:
[spoiler=Спойлер][/spoiler]
Эффект наблюдается в FLProg 2.5.1 и в 3.0.0.
И как жить дальше?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось eugeneb 01 дек 2017, 15:14, всего редактировалось 1 раз.
С уважением,
Евгений Бобков
Евгений Бобков
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
Ошибка с Long Integer
Положите значение с выхода блока вычитания в переменную типа longInteger, и далее импользуйте её. Все должно заработать нормально. Дело в том что для экономии памяти, я не везде использовал переменные для выходов блоков, и кое какие блоки расчитываются на лету, и как там компилятор определит тип - не всегда известно. Создавая переменную, вы четко указываете компилятору какой тип Вам нужен.
Автор программы FLProg.
- eugeneb
- Лейтенант
- Сообщения: 486
- Зарегистрирован: 15 авг 2016, 11:20
- Откуда: Нижний Новгород
- Имя: Евгений
- Благодарил (а): 1 раз
Ошибка с Long Integer
Спасибо! Маневр с промежуточной переменной решил проблему:
[spoiler=Спойлер][/spoiler][spoiler=Спойлер][/spoiler]
Однако, это пенальти надёжности FLProg.
Может ну её нафиг экономию памяти, бо надёжность всегда важнее?
[spoiler=Спойлер][/spoiler][spoiler=Спойлер][/spoiler]
Однако, это пенальти надёжности FLProg.
Может ну её нафиг экономию памяти, бо надёжность всегда важнее?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
С уважением,
Евгений Бобков
Евгений Бобков
Ошибка с Long Integer
ближе к 80% загрузки, дуню начинает плющить. с чем сам недавно столкнулся. пришлось выискивать как освободить драгоценные байты...eugeneb писал(а):Может ну её нафиг экономию памят
- eugeneb
- Лейтенант
- Сообщения: 486
- Зарегистрирован: 15 авг 2016, 11:20
- Откуда: Нижний Новгород
- Имя: Евгений
- Благодарил (а): 1 раз
Ошибка с Long Integer
Согласен, что память очень ценный ресурс. Но надёжность программирования я ценю больше. Мне вообще очень нравится наглядность FLProg. Всегда есть уверенность в правильности работы контроллера. Это и язык FBD и разбиение на платы. (Правда не хватает ещё языка SFC. Я писал уже об этом http://forum.flprogwiki.ru/viewtopic.php?f=10&t=1988 Я спокойно ставлю свои поделки в Продакшн на производство своим друзьям. Но вот такие косячки подрезают эту уверенность. Они увеличивают необходимый объём тестирования.
С уважением,
Евгений Бобков
Евгений Бобков
Ошибка с Long Integer
это не косячки, а тонкости программы) их нужно просто знать и принимать во внимание
- support
- Супермодератор
- Сообщения: 1917
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Поблагодарили: 23 раза
- Контактная информация:
Ошибка с Long Integer
Этот манёвр - это временное решение. В принципе это бага (я то же не знаю всех тонкостей низкоуровнего компилятора), как её устранить, я уже знаю, так что эта проблема будет решена. К сожалению в версии которая сегодня выйдет я уже не смогу исправит (релиз уже выпущен и загружен на сервер), а в следующей всё будет нормальноeugeneb писал(а):Спасибо! Маневр с промежуточной переменной решил проблему:Однако, это пенальти надёжности FLProg.
Автор программы FLProg.
- Сергей
- Лейтенант
- Сообщения: 578
- Зарегистрирован: 31 авг 2015, 15:06
- Имя: Сергей
- Контактная информация:
Ошибка с Long Integer
support, если никто не против задам вопрос здесь.
Колупаюсь со своим автоматом. Хочу сделать систему скидок при продажах. Процент скидки будет привязан к брелку пользователя, вместе с балансом. Проблема с умножением. Вопрос на фото.
Может я в 3 ночи чего то не догоняю?
Колупаюсь со своим автоматом. Хочу сделать систему скидок при продажах. Процент скидки будет привязан к брелку пользователя, вместе с балансом. Проблема с умножением. Вопрос на фото.
Может я в 3 ночи чего то не догоняю?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- eugeneb
- Лейтенант
- Сообщения: 486
- Зарегистрирован: 15 авг 2016, 11:20
- Откуда: Нижний Новгород
- Имя: Евгений
- Благодарил (а): 1 раз
Ошибка с Long Integer
На Due ошибка не воспроизводится:
[spoiler=Спойлер][/spoiler]
А если результат деления пропустить через вспомогательную переменную?
[spoiler=Спойлер][/spoiler]
А если результат деления пропустить через вспомогательную переменную?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось eugeneb 12 дек 2017, 11:11, всего редактировалось 1 раз.
С уважением,
Евгений Бобков
Евгений Бобков
- Сергей
- Лейтенант
- Сообщения: 578
- Зарегистрирован: 31 авг 2015, 15:06
- Имя: Сергей
- Контактная информация:
Ошибка с Long Integer
то же самое. Да и у вас работает, и у меня раньше таких глюков не было. У меня в таких ситуациях мозг ломается. Вижу что черное, а все говорят белое)))eugeneb писал(а):А если результат деления пропустить через вспомогательную переменную?
- eugeneb
- Лейтенант
- Сообщения: 486
- Зарегистрирован: 15 авг 2016, 11:20
- Откуда: Нижний Новгород
- Имя: Евгений
- Благодарил (а): 1 раз
Ошибка с Long Integer
Надо повнимательнее разглядеть С-код, который генерится.
А может это какая-нибудь шняга с Модбасом?
А может это какая-нибудь шняга с Модбасом?
Последний раз редактировалось eugeneb 12 дек 2017, 13:59, всего редактировалось 1 раз.
С уважением,
Евгений Бобков
Евгений Бобков
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Ошибка с Long Integer
Сергей, Попробуйте константу 100 объявить тем-же типом, что и делимое.
Последний раз редактировалось Sancho 12 дек 2017, 16:10, всего редактировалось 1 раз.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- Сергей
- Лейтенант
- Сообщения: 578
- Зарегистрирован: 31 авг 2015, 15:06
- Имя: Сергей
- Контактная информация:
Ошибка с Long Integer
Та там проект как "Война и мир", это кусочек проекта. Попробую. Модбас просто отображает. Не должен влиять.eugeneb писал(а):Надо повнимательнее разглядеть С-код
Это я изначально делал, что бы все вычисления были с одним типом.Sancho писал(а):Сергей, Попробуйте константу 100 объявить тем-же типом, что и делимое
Позже попробую вообще на другую плату вынести и заодно код посмотрю + сделаю свой блок для вычисления процентов.
Интересный глюк получился.
- nalnik
- Подполковник
- Сообщения: 1320
- Зарегистрирован: 14 май 2016, 17:12
- Откуда: Кисловодск
- Имя: Александр
Ошибка с Long Integer
Сергей
Ваши слова: Интересный глюк получился.
Никогда не говори: "Я ошибся", лучше скажи: "Надо же, как интересно получилось..." Николай II, 1905 год.
Ваши слова: Интересный глюк получился.
Никогда не говори: "Я ошибся", лучше скажи: "Надо же, как интересно получилось..." Николай II, 1905 год.
Последний раз редактировалось nalnik 12 дек 2017, 16:58, всего редактировалось 1 раз.
Я хочу быть добрее, но люди сами нарываются.
-
- Лейтенант
- Сообщения: 676
- Зарегистрирован: 10 сен 2015, 21:51
- Благодарил (а): 3 раза
- Поблагодарили: 1 раз
Ошибка с Long Integer
Чтоб убедиться что не модбас. Замените модбас на отправку переменной в uart.Сергей писал(а):Модбас просто отображает. Не должен влиять.
- Сергей
- Лейтенант
- Сообщения: 578
- Зарегистрирован: 31 авг 2015, 15:06
- Имя: Сергей
- Контактная информация:
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя