|
SMArt Разработка интерфейсов пользователя |
|
Опции темы | Поиск в этой теме |
18.06.2015, 12:04 | #1 |
Новичок
Регистрация: Jul 2013
Сообщения: 1
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
SМart. Разрядность блока "Ввод числа"
Здравствуйте, Арсений!
Подскажите пожалуйста. Использую в Smart блок "Ввод числа" с возможностью вывода. Нужно сделать ввод числа с клавиатуры 8 знаков. Делаю ввод 66666660 получаю 66666664, 99999990 получаю 99999992, 99999999 получаю 100000000 ПОЧЕМУ??? Тип цифр LONG. Если использую Input number 2g, то вывод данных корректен. Использую последнюю версию smlogix, которая мне предложила прошить smh2gi, я прошил ничего не изменилось. Просьба помочь вопросе. |
18.06.2015, 12:20 | #2 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: SМart блок "Ввод числа"
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
17.07.2020, 15:16 | #3 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: SМart блок "Ввод числа"
1) то есть в ситуации, когда мне нужно принять по смс и сохранить в real число 1234,567 - в младшем разряде у меня будет абракадабра?
2) Коректно ли сохранится в real число 1234,0 - если оно придет по смс как "П=1234", т.е. без запятой и нуля? P.S. Есть ли шанс сделать абракадабру предсказуемой или хотя бы безопасной? (ну, то есть, понять логику, с которой будет корежиться 7-я цифра в числе) |
17.07.2020, 16:21 | #4 |
Сотрудник Сегнетикс
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 4 341
Благодарил(а): 0 раз(а)
Поблагодарили:
255 раз(а) в 251 сообщениях
|
Ответ: SМart. Разрядность блока "Ввод числа"
Эта тема дает исчерпывающий ответ на ваши вопросы?
__________________ Если ничто другое не помогает, прочтите, наконец, инструкцию |
18.07.2020, 16:32 | #5 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: SМart блок "Ввод числа"
Только еще больше запутывает.
Дело в том, что общепринятой практикой для Float (соответствующему вашему 32-битному Real) является 7-значная мантисса, и классически диапазон допустимых значений определяется для неё. Но не в Сегнетиксе. UPD: Я бы не задал свой вопрос, если бы не столкнулся с вот этим: А мне нужно 7 знаков . Последний раз редактировалось ailcat, 18.07.2020 в 16:46 |
20.07.2020, 11:22 | #6 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: SМart блок "Ввод числа"
Я ж написал, работает по стандарту. Привёл его номер. По нему же работают и все остальные машины, процессоры и т.д. Это уже де-факто полсотни лет и даже больше. Если вам в нём что-то не нравится, обратитесь я даже не знаю куда. Наверняка в преамбуле указаны его разработчики. Но я очень сомневаюсь, что весь мир под вас прогнётся
Если вы считаете, что float(32) даст вам 7 знаков и ваш опыт говорит, что это так - не проблема, используйте. Если работало на (тут список из миллиона производителей), будет работать и у нас. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
20.07.2020, 12:36 | #7 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: SМart блок "Ввод числа"
Даже если вы действительно соблюдали стандарт - то он допускает разное количество знаков мантиссы. И какую базу выбрали вы - одному черту известно (и вашему программисту).
Если в основе вашего Real лежит Float(32) из языка C/C++, то мантисса будет семизначной при лидирующей цифре от 0 до 7, и только при 8 и 9 - мантисса становится 6-значной (меня этот вариант полностью устраивает). Если что-то другое - уже не факт (тот же С#, по крайней мере в известной мне довольно устаревшей версии, при 7-значной мантиссе допускают лидирующей цифрой только 1, в остальных случаях мантисса становится 6-значной). P.S. Интересует именно в варианте для Matrix - у меня под рукой только SMH2, но у него другое ядро и, соответственно, результат может отличаться (так что на нем даже не проверял). Ну и, в любом случае, я так и не получил на второй вопрос (ответ на него мало связан со стандартом, но сильно зависит от обработчика ввода на устройстве, того самого Input number): какое число будет записано в Real при вводе "1234" вместо "1234,0"? |
20.07.2020, 12:42 | #8 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: SМart блок "Ввод числа"
Да какое "даже". Математический блок в процессоре работает в этом стандарте. У нас даже выбора нет
При выводе на экран выведется 1234.0 Число 1234 не очень хороший пример, знаков мало. Вот с 12345657890 уже будут сильные проблемы. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 20.07.2020 в 13:04 |
20.07.2020, 16:35 | #9 | |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: SМart блок "Ввод числа"
Цитата:
Значит, дополняете - и это хорошо. Неее, для Float(32) это более чем хороший пример. Потому что без промежуточной коррекции (в древние времена зависело от настроек компилятора) оно нещадно корежилось, будучи записанным без ",0" в конце. У вас - с коррекцией, то есть можно не париться при вводе. А я с этим дерьмом в древнейшие времена сталкивался - перестраховываюсь. Да ясен перец, вылазим за длину мантиссы. Но у меня самое большое число - 7777,999 (цифры до запятой - режим работы 4-х реле, после запятой - время в минутах). СМС-ка состоит из 6 параметров (по числу групп из 4 реле). Чтоб заведомо вписаться в допустимую длину - увы, извращаемся (вместо "А1=1, B1=2, C1=3, D1=4, t1=999" пишем просто "П1=1234,999", аналогично П2...П6, и разбираем это в FBD) |
|
20.07.2020, 17:10 | #10 | ||||
Senior Member
Регистрация: Aug 2013
Сообщения: 3 785
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: SМart. Разрядность блока "Ввод числа"
Цитата:
Цитата:
Цитата:
Цитата:
Но вот на кой хрен Вам простите вообще нужен float? Последний раз редактировалось ATS, 20.07.2020 в 17:26 |
||||
20.07.2020, 19:21 | #11 | |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: SМart. Разрядность блока "Ввод числа"
Цитата:
1) его просто разбирать с помощью ФБД (с учетом мощности матрикса), 2) логику записи достаточно просто объяснить "рабочему классу" (главному отправителю смсок) - что даже важней. |
|
20.07.2020, 19:46 | #12 | ||
Senior Member
Регистрация: Aug 2013
Сообщения: 3 785
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: SМart. Разрядность блока "Ввод числа"
Цитата:
2Gi - вот это 8388,6084. Для 9999.999 тоже не искажает. Цитата:
|
||
20.07.2020, 20:11 | #13 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: SМart. Разрядность блока "Ввод числа"
1. Хорошо, если так же будет и на матриксе
UPD: идиёты. Я вводил через запятую - получал NaN. Ну привык уже, что все современные проги и сайты либо приравнивают запятую и точку, либо явно ругаются на несоответствие. Даже у вас не сразу заметил правильный разделитель 2. Разобрать - да. Объяснить, что нужно использовать ноль как разделитель кода и времени - из области фантастики (поверьте моему опыту). Особенно в связи с желанием не вводить лишние цифры (чаще всего дёргаемое вручную реле - правое в четверке цифр. Самое редкодергаемое - левое. Ноль, введенный явно или опущенный - означает "ничего не менять"). Последний раз редактировалось ailcat, 20.07.2020 в 20:25 |
20.07.2020, 21:03 | #14 | ||
Senior Member
Регистрация: Aug 2013
Сообщения: 3 785
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: SМart. Разрядность блока "Ввод числа"
Цитата:
Они не идиёты, стандарт у них такой. floating point - я тоже привык к точке. Цитата:
|
||
20.07.2020, 21:26 | #15 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: SМart. Разрядность блока "Ввод числа"
|
20.07.2020, 21:48 | #16 | |
Senior Member
Регистрация: Aug 2013
Сообщения: 3 785
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: SМart. Разрядность блока "Ввод числа"
Цитата:
Так что только вариант a) Последний раз редактировалось ATS, 20.07.2020 в 22:00 |
|