-
- Что скажет армянское радио? SciFi(1 знак., 28.01.2026 13:55, ссылка)
- Ну что сказать... только спасибо! - Лaгyнoв(28.01.2026 14:59)
- Вопрос то в чём? Как преобразовать инт во флоат и обратно?
Элементарно, присваиванием переменной соответствующего типа. Если
вопрос о нормализации, то это делается во флоате. Делишь/умножаешь
на 10 в степени n. - =AlexD=(28.01.2026 13:46)
- спасибо, теперь понял. Делитель! Самое забавное из float в int я
давно делал уже путем умножения. Мог бы и догадаться. :-) - Лaгyнoв(28.01.2026 14:02)
- Вам надо взять за привычку разговаривать с ИИ. Раз уж мануалы у нас
тут читать не принято, хотя бы он что-нибудь расскажет :-) - SciFi(28.01.2026 14:11)
- боюсь я ваших ИИ :-) - Лaгyнoв(28.01.2026 15:01)
- Вам надо взять за привычку разговаривать с ИИ. Раз уж мануалы у нас
тут читать не принято, хотя бы он что-нибудь расскажет :-) - SciFi(28.01.2026 14:11)
- спасибо, теперь понял. Делитель! Самое забавное из float в int я
давно делал уже путем умножения. Мог бы и догадаться. :-) - Лaгyнoв(28.01.2026 14:02)
- Тебе хочется юзать ненормализованные (denormal/subnormal) float-ы.
Плохая идея. Но если хоцца ярких эротических впечатлений, то вроде
как никто особо не запрещает. В GCC/Clang можно поставить флаг
-fno-fast-math или убрать флаги
-ffast-math/-funsafe-math-optimizations (буквы в последнем как бы
намекают). Vit(236 знак., 28.01.2026 13:35)
- к сожалению я привязан к неписаным стандартам. Объем у нас в литрах
или кубометрах. Масса в тоннах или килограммах и т.п. Там ниже я
привел картинки - как "положено" всё держать в регистрах Модбас. Со
мной спорить не будут конечно. Но снижается репутация и
конкурентоспособность. - Лaгyнoв(28.01.2026 13:39)
- Вы еще один момент учтите. Если внешняя система ведет суммирование
показаний расхода для целей журналирования, то при суммировании
очень больших и очень малых чисел нормализованный флоат может
давать весьма странные результаты ;-) Для точности лучше
суммировать целые числа. - reZident(28.01.2026 14:00)
- ну это проблемы той внешней стороны, что захотела видеть мой пульт
набором регистров Модбас. :-) К тому же в моем суммарнике всё
складывается целочисленно и его я им показываю. - Лaгyнoв(28.01.2026 15:04)
- Дык когда сумма локальная не будет биться с суммой удаленной, то
претензии все равно будут к программисту :-) - reZident(28.01.2026 15:08)
- буду переживать проблемы в порядке поступления - Лaгyнoв(28.01.2026 16:30)
- Дык когда сумма локальная не будет биться с суммой удаленной, то
претензии все равно будут к программисту :-) - reZident(28.01.2026 15:08)
- ну это проблемы той внешней стороны, что захотела видеть мой пульт
набором регистров Модбас. :-) К тому же в моем суммарнике всё
складывается целочисленно и его я им показываю. - Лaгyнoв(28.01.2026 15:04)
- Вы еще один момент учтите. Если внешняя система ведет суммирование
показаний расхода для целей журналирования, то при суммировании
очень больших и очень малых чисел нормализованный флоат может
давать весьма странные результаты ;-) Для точности лучше
суммировать целые числа. - reZident(28.01.2026 14:00)
- к сожалению я привязан к неписаным стандартам. Объем у нас в литрах
или кубометрах. Масса в тоннах или килограммах и т.п. Там ниже я
привел картинки - как "положено" всё держать в регистрах Модбас. Со
мной спорить не будут конечно. Но снижается репутация и
конкурентоспособность. - Лaгyнoв(28.01.2026 13:39)
- Я не программист, но даже у меня возникает вопрос: зачем
целочисленное значение преобразовывать в плавучку для передачи по
протоколу, не приспособленному для передачи плавучки, чтобы потом
... опять преобразовать в целочисленное? - reZident(28.01.2026 12:31, +1)
- Чтобы соответствовать общепринятым нормам в наших кругах. Вот к
примеру регистры Модбас у фирмы Сенсор. Каждый регистр и передается
побайтно в Модбасе Лaгyнoв(1 знак., 28.01.2026 13:14, картинка)
- Ваша проблема немного надумана. Перевод целочисленных значений в
плавучку (при необходимости) должен быть функцией SCADA-системы,
которая опрашивает modbus-регистры вашего прибора. - reZident(28.01.2026 13:51)
- Проще у себя байты перетасовать в нужном порядке чем потом каждому SCADA-программеру всю эту науку о байтах снова и снова разъяснять. - ЫЫyкпy(28.01.2026 21:11)
- Я о том, что только для передачи нет смысла целочисленные значения преобразовывать в плывучку.
Упаковать их в два регистра и дело с концом. Плывучка имеет смысл
во время преобразования (масштабирования) величин для удобного отображения циферок пользователю. А отображение обычно на стороне SCADA идет. - reZident(28.01.2026 22:25)
- Нифига! Я от передачи не нормализованных данных отказался. Действительно, замучаешься объяснять программистам, как "это" преобразовать в отображаемое значение. Nikolay_Po(221 знак., 29.01.2026 21:24)
- Я о том, что только для передачи нет смысла целочисленные значения преобразовывать в плывучку.
Упаковать их в два регистра и дело с концом. Плывучка имеет смысл
во время преобразования (масштабирования) величин для удобного отображения циферок пользователю. А отображение обычно на стороне SCADA идет. - reZident(28.01.2026 22:25)
- Проще у себя байты перетасовать в нужном порядке чем потом каждому SCADA-программеру всю эту науку о байтах снова и снова разъяснять. - ЫЫyкпy(28.01.2026 21:11)
- Если соответствовать "общепринятым нормам" именно в этих кругах, то
в 9 из 10 устройств тупо, в отдельном регистре, передают положение
decimal point. Решение уродливое, что не мешает ему быть
"общепринятым". - Tahoe3D(28.01.2026 13:19,
)
- вот именно, что тупо и уродливо. Я б с удовольствием в int16 всё
клал. Но надо так, как на картинке. И у нас так живут 10 из 10. Вот
еще пример счетчик-расходомер ЭМИС. Тоже float32. И вдруг тут я
вылезаю такой оригинальный. :-) Лaгyнoв(2 знак., 28.01.2026 13:27, картинка)
- Самое смешное во всей этой стандартизации то, что в так называемых
стандартах Модбаса нет ни слова о том как передавать данные
размером больше 16 бит. Единственное разумное решение в такой
ситуации - сохранять совместимость с уже имеющимся оборудованием.
Первые контроллеры Модикон с которых всё начиналось были big-endian. О таких высоких материях как порядок следования байт программисты
этих контроллеров не задумывались, просто читали/писали байты в том
порядке как они ЫЫyкпy(522 знак., 28.01.2026 20:52)
- Все об этом знают. Поэтому или сразу читают документацию, или просто пробуют и так, и сяк при пусконаладке. - Nikolay_Po(29.01.2026 21:29)
- Я вот тоже думал скажу там - int32. Фигвам. Только float32. А мне
реально надо передавать числа больше 65536. :-( - Лaгyнoв(29.01.2026 10:57)
- У флота32 мантисса 24 бита. Должно хватить для 65536, если
правильно настроить округление (или ограничить разряды после
десятичной точки). - Nikolay_Po(29.01.2026 21:28)
- Так и я про то. А то мне говорят "нафиг ты переводишь целочисленные
во флоат??" А как иначе я передам 90000 отлитых сантилитров? А тем
более суммарник, где счет на миллионы - Лaгyнoв(30.01.2026 11:35)
- Не понял. В те же 4 байта вместо float войдет int32 (до двух
миллиардов сантилитров) или uint32 (до четырёх миллиардов). Samx(95 знак., 31.01.2026 23:26)
- ни у кого в свойствах регистров Модбас не видел int32. Повторюсь,
мне нельзя ничего придумывать по форматам. Я не создаю СВОЁ. Я
должен работать в рамках существующих систем. - Лaгyнoв(01.02.2026 09:18)
- А тебе в чужую SCADA данные нужно отдавать? Самопальные
действительно часто ограничиваются поддержкой int16 + float32, но
брендовые вплоть до текстовых строк умеют. Cкpипaч(155 знак., 01.02.2026 10:28)
- Круто. Беда в том, что я не знаю, куда буду отдавать. Мне сказали,
чтобы всё было как у всех на рынке. А у всех только int16 и
float32. Никаких фантазий у народа. :-) - Лaгyнoв(01.02.2026 10:50)
- Я отдаю uint32 как два последовательных регистра и "кошка бросила
котят". В моем случае речь идет о неких абстрактных "универсальных"
счетчиках. Кто не умеет читать два регистра, пусть читает по одному
(или вообще только младший). Cкpипaч(215 знак., 01.02.2026 11:18)
- Ну тоже вариант про два последовательных регистра. Но "кошка
бросила котят" - не мой случай. :-) - Лaгyнoв(01.02.2026 12:27)
- Вы передаете uint24, но занимаете под него 32 бита. Но то такэ, "общепринятая практика" - всегда лучшее решение. - Cкpипaч(01.02.2026 15:13)
- Стандарт Modbus ничего не говорит о том, как переменные больше двух
байт должны располагаться в регистрах, так что вам в любом случае
или выяснять что и как умеет делать чужой софт или полагаться на
удачу и квалификацию тех, кто всё будет стыковать. - AlexG(01.02.2026 13:37)
- Именно поэтому не буду устраивать самоделки. Как другие делают в наших кругах - так и буду - Лaгyнoв(01.02.2026 14:30)
- Ну тоже вариант про два последовательных регистра. Но "кошка
бросила котят" - не мой случай. :-) - Лaгyнoв(01.02.2026 12:27)
- Я отдаю uint32 как два последовательных регистра и "кошка бросила
котят". В моем случае речь идет о неких абстрактных "универсальных"
счетчиках. Кто не умеет читать два регистра, пусть читает по одному
(или вообще только младший). Cкpипaч(215 знак., 01.02.2026 11:18)
- Круто. Беда в том, что я не знаю, куда буду отдавать. Мне сказали,
чтобы всё было как у всех на рынке. А у всех только int16 и
float32. Никаких фантазий у народа. :-) - Лaгyнoв(01.02.2026 10:50)
- А тебе в чужую SCADA данные нужно отдавать? Самопальные
действительно часто ограничиваются поддержкой int16 + float32, но
брендовые вплоть до текстовых строк умеют. Cкpипaч(155 знак., 01.02.2026 10:28)
- ни у кого в свойствах регистров Модбас не видел int32. Повторюсь,
мне нельзя ничего придумывать по форматам. Я не создаю СВОЁ. Я
должен работать в рамках существующих систем. - Лaгyнoв(01.02.2026 09:18)
- Не понял. В те же 4 байта вместо float войдет int32 (до двух
миллиардов сантилитров) или uint32 (до четырёх миллиардов). Samx(95 знак., 31.01.2026 23:26)
- Вот скажем, у Микрочипа свой формат флота. - Kpoк(30.01.2026 00:03)
- ХЗ... Для Письк32, стандартный. - mse homjak(30.01.2026 11:47)
- Не совместимый с IEEE каким-то там 32 бит? - Nikolay_Po(30.01.2026 10:40)
- Ну как не совместимый... у некоторых бит назначение разное. - Kpoк(30.01.2026 10:43)
- А размер мантиссы? - Nikolay_Po(30.01.2026 10:49)
- 23 кажется - Kpoк(30.01.2026 16:29)
- А размер мантиссы? - Nikolay_Po(30.01.2026 10:49)
- Ну как не совместимый... у некоторых бит назначение разное. - Kpoк(30.01.2026 10:43)
- Так и я про то. А то мне говорят "нафиг ты переводишь целочисленные
во флоат??" А как иначе я передам 90000 отлитых сантилитров? А тем
более суммарник, где счет на миллионы - Лaгyнoв(30.01.2026 11:35)
- У флота32 мантисса 24 бита. Должно хватить для 65536, если
правильно настроить округление (или ограничить разряды после
десятичной точки). - Nikolay_Po(29.01.2026 21:28)
- Самое смешное во всей этой стандартизации то, что в так называемых
стандартах Модбаса нет ни слова о том как передавать данные
размером больше 16 бит. Единственное разумное решение в такой
ситуации - сохранять совместимость с уже имеющимся оборудованием.
Первые контроллеры Модикон с которых всё начиналось были big-endian. О таких высоких материях как порядок следования байт программисты
этих контроллеров не задумывались, просто читали/писали байты в том
порядке как они ЫЫyкпy(522 знак., 28.01.2026 20:52)
- вот именно, что тупо и уродливо. Я б с удовольствием в int16 всё
клал. Но надо так, как на картинке. И у нас так живут 10 из 10. Вот
еще пример счетчик-расходомер ЭМИС. Тоже float32. И вдруг тут я
вылезаю такой оригинальный. :-) Лaгyнoв(2 знак., 28.01.2026 13:27, картинка)
- Ваша проблема немного надумана. Перевод целочисленных значений в
плавучку (при необходимости) должен быть функцией SCADA-системы,
которая опрашивает modbus-регистры вашего прибора. - reZident(28.01.2026 13:51)
- Чтобы соответствовать общепринятым нормам в наших кругах. Вот к
примеру регистры Модбас у фирмы Сенсор. Каждый регистр и передается
побайтно в Модбасе Лaгyнoв(1 знак., 28.01.2026 13:14, картинка)
- Что скажет армянское радио? SciFi(1 знак., 28.01.2026 13:55, ссылка)