Я думаю, у вас отклоение появляется при конвертации в строку (потому что %s) - не уверен, что его вообще можно избежать, это особенности типа с плавающей точкой.
Я думаю, у вас отклоение появляется при конвертации в строку (потому что %s) - не уверен, что его вообще можно избежать, это особенности типа с плавающей точкой.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
А из кода программы возможно менять спецификатор? Что-нибудь в духе %.iF, где i - переменная int
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
что касается чисто отображения можно сделать немного по-другому, используя динамические тексты для текстового поля:
создать динамический лист для переменной вида:
id текст
0 - %d //отображение без цифр после запятой
1 - %.1f // с одним знаком после запятой
2 - %.2f // 2
3 - %.3f // 3
и т.д.
Только потребуется присвоить для каждого текстового поля переменную с типом отображения и добавить некоторый обработчик в код программы - условия выбора того или иного отображения.
Что касается появления некоторого 'приращения' у значения, это связано с кодированием типа REAL, также сталкивался с подобным.
Собс-но с этим же связаны трудности сравнения переменных REAL на равенство, рекомендуется (кажется это было у OSCAT) сравнивать через некотрую дельту, а не в лоб.
Т.е. код ниже не корректен, т.к. возможны отличия в последних значащих знаках и условие никогда не выполнится (при этом при отладке может казаться что все ок, будет отображаться как будто два одинаковых числа)
rTmp1 :REAL;
rTmp2 :REAL;
IF rTmp1 = rTmp2 <...>
Соот-но рекомендуется в этом случае сравнивать таким образом
IF ABS(rTmp1 - rTmp2) < 0000.1 <...> // дельта в зависимости от требуемой точности
Последний раз редактировалось IgnatTali; 08.07.2021 в 15:54.