Последний раз редактировалось Сергей0308; 30.03.2024 в 18:50.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Ну, это "плата" за универсальность, в смысле никто не запрещает создать отдельные макросы для каждого диапазона!
В моём варианте это минимальная плата, всего один SEL:
Плата за универсальность.PNG
Что сводит к минимуму необходимость в отдельных макросах!
Мне кажется один из самых универсальных вариантов для расчёта отрицательной части диапазона Пётр из Минска предлагал, в смысле, инверсия(кода числа) + 1, получается значение отрицательного числа по модулю, я свой вариант предложил, мне он проще показался!
Последний раз редактировалось Сергей0308; 30.03.2024 в 21:50.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
в моем варианте это приведение внешних i16 в i32.В моём варианте это минимальная плата, всего один SEL:
и в моем варианте не нужно создавать отдельные макросы для каждого диапазона. Он 1.в смысле никто не запрещает создать отдельные макросы для каждого диапазона!
0 - uинверсия(кода числа) + 1
Последний раз редактировалось Валенок; 30.03.2024 в 21:49.
Если есть функции для 32 битных, типа DINT, то как сказал Валенок, для 16 битных они не нужны. Скрин 1 Передача через 1 регистр.jpg
Вы передаёте 1 регистр если число меньше 65535 и через 2 регистра если больше и 32 битными функциями работаете с любыми переменными.
На скрине передан 1 регистр, а функции 32 битные. На ST функции универсальные, выложил выше. Переключатель делать не стал, хотя это возможно.
Последний раз редактировалось kondor3000; 30.03.2024 в 22:07.
Я то это в принципе рассматриваю, без привязки к конкретному случаю, в смысле, к сетевым переменным!
ОЛ в принципе не умеет работать с 32 -х битными целочисленными сетевыми переменными в режиме слейв(подчинённого устройства), в смысле, в любом случае, их придётся разделять на два соседних регистра. Может со временем это поправят, но это не точно!
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Вроде понял, что Вы хотите! В смысле всегда использовать один макрос DINT(INT32)_TO_FLOAT. Если надо преобразовать INT(INT16), то предварительно преобразовываете его в DINT(INT32).
Короче, мне кажется это не очень логичным, в смысле, чаще всё-таки INT(INT16) встречается, а DINT(INT32) намного реже. Вам надо всё равно знать, что это INT(INT16), иначе правильное преобразование невозможно, уже писал об этом, даже пример приводил! И, мне кажется в FBD проще значение INT(INT16) сразу преобразовать во FLOAT, чем ваше промежуточное преобразование в DINT(INT32). Если Вы говорите в ST это проще, поверю Вам на слово(я в ST не шарю), но это получается частный случай, не более!
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.