|
SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании |
|
Опции темы | Поиск в этой теме |
26.06.2022, 22:37 | #1 |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Не складывает real при больших значениях (нет проблемы)
Есть простой макрос (на изображении), все супер просто и он работает, но только если значения не большие. Но на 3000000, перестаёт работать сложение с 0.1 а складывает от 1, на 17000000 сложение от 2.
Есть ли какой-то способ избежать этого? Я так понимаю, нужно разделить целую часть в long и дробную в int. Но проблема в том, что нужно что была возможность, задавать значение счетчика, т.е. нужно будет из значения счетчика, опять разделять, но разделение на больших значениях не будет работать корректно. Может есть какой то макрос для этого, я что не нашел на форуме, или может направление где смотреть. Я конечно сталкивался с floating point accuracy, но обычно это происходит на больших числах, а тут я даже не знаю что придумать, пока. Последний раз редактировалось Arsie, 30.06.2022 в 03:01 Причина: Удалил вложения за ненужностью |
26.06.2022, 23:26 | #2 |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях
Нашел данное сообщение https://forum.segnetics.com/showpost...27&postcount=2, это получается, что ограничение вообще в 1000000, а все что больше, уже с ними работать не реально и как тогда быть?
|
27.06.2022, 03:07 | #3 |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях
В общем переделал макрос, возможно не самое правильное решение, но оно работает. Считаю просто в лонг, потом перевожу в реал и делю на цену импульса, попробовал и 10 миллионов и больше, считает, а большего мне и не надо.
Если будут предложения лучше, буду рад, если кто предложит. Просто я пока сильно не тестил, но помню, что вроде так уже делал и со временем начинало глючить преобразование из лонг в реал, не из за превышения значения, а просто плк стоит считает и бац все, после преобразования значение не меняется, как зависает что. |
27.06.2022, 09:12 | #4 |
Senior Member
Регистрация: Aug 2013
Сообщения: 3 795
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: Не складывает real при больших значениях
Ну для Float32 достоверных 7-8 десятичных знаков поэтому ваши примеры выше уже большие числа
__________________ Не являюсь сотрудником Segnetics !!! |
27.06.2022, 11:30 | #5 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 183
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Это происходит не на больших числах, а на широких. Для FPA что 123.45678, что 1.2345678, что 1234567.8 - одинаковы по "величине".
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
27.06.2022, 12:52 | #6 |
Senior Member
Регистрация: Aug 2013
Сообщения: 3 795
Благодарил(а): 12 раз(а)
Поблагодарили:
194 раз(а) в 190 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
На самом деле это совершенно разные числа.
__________________ Не являюсь сотрудником Segnetics !!! |
27.06.2022, 15:12 | #7 |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
В общем мне помогло то решение, что выложил, вот немного допилил макрос счетчика, может кому пригодится, добавил туда средний расход из другого макроса. Всю ночь контролер стоял, щелкал на 5 миллионах, все считает не зависло.
Добавил еще макрос генератора импульсов, для тестов. Время цикла, у меня 50мс, для 100 указано на изображении. Последний раз редактировалось Arsie, 30.06.2022 в 03:01 Причина: Удалил вложения за ненужностью |
27.06.2022, 15:47 | #8 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 183
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Почему просто не умножить значение счётчика CNTR (аппаратного или из библиотеки макросов) на цену импульса?
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
27.06.2022, 16:19 | #9 |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Нужна возможность задавать значение, которое уже нащелкало на счетчике, а также его сохранять в случае отключении электроэнергии и продолжать с того же места при появлении электроэнергии и если отключение электроэнергии было долгим, то опять скорректировать значение, по физическому счетчику, что в общем то мой макрос и делает. В общем, это мои локальные заморочки, я понимаю, что возможно, это не всем нужно. Возможно есть более элегантное и простое решение, но я его найти не смог и времени на поиски дальше нет, если кто предложит, буду рад, а пока и так сойдет, главное, что работает.
|
27.06.2022, 16:33 | #10 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 183
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
28.06.2022, 16:23 | #11 | |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Цитата:
'максимальный регистрируемый временной промежуток' также является временем жизни блока памяти SMH2010, т.к. количество гарантированных записей в неё ограничено - 800000 раз, поэтому нормальное время периода отсчётов должно быть согласовано со сроком жизни контроллера. Рекомендуемое время 450 секунд, при этом для достижения точности в 2% (средневзвешенной) ресурс устройства должен быть не менее 1500 часов, для точности 5% (средневзвешенной) не менее 1000 часов и для точности в 10% (средневзвешенной) не менее 750 часов. Ресурс памяти при рекомендуемом времени периода (450 сек) составляет 11.5 лет (4167 дней). Это справедливо и для SMH4? Что если, я буду использовать так же запись в настройки, но не при каждом срабатывание счётчика, а по времени, например раз в 10 минут? В общем переделаю сейчас макрос, благо это не долго. Последний раз редактировалось nick86, 28.06.2022 в 16:39 |
|
28.06.2022, 16:53 | #12 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 183
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
https://dl.segnetics.com/WebHelp/SML...ock_eeprom.htm
В лоджике более актуальная версия, там есть про SMH4. Добавлено через 3 минуты Цитата:
Ваш подход, когда вы отталкиваетесь от контроллера, в корне неправильный. При решении, как лечить человека от насморка, не отталкиваются от того, что в кладовке есть только топор и пила, а подыскивают нужного специалиста с нужным инструментарием. Судя по тому, что вы делали ручную корректировку счётчика, контроллер выполняет вспомогательную роль. Т.е. требования к надёжности счёта задаются больше интервалами проверки системы оператором. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
28.06.2022, 17:48 | #13 | |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Цитата:
|
|
28.06.2022, 17:50 | #14 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 183
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Это при условии, что у вас это единственный источник записи. У вас же не журнала, ни меню нет, как я понимаю? И Хистори вы не используете?
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
28.06.2022, 17:56 | #15 | |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Цитата:
Буду писать значит раз в минуту или 10. |
|
28.06.2022, 19:43 | #16 | |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Цитата:
Спасибо, что про циклы записи написали, я что то как то про это и не подумал. Последний раз редактировалось Arsie, 30.06.2022 в 03:00 Причина: Удалил вложения за ненужностью |
|
28.06.2022, 20:41 | #17 |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
В макросе кое что подправил, для надежности.
|
03.07.2022, 00:37 | #18 |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Ту часть макроса, что отвечает за средний расход, я взял тут с форума, в общем чушь какую то он считает, не фига не правильно, буду переделывать.
|
03.07.2022, 03:14 | #19 |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Переделал расчет расхода, теперь работает как надо.
|
03.07.2022, 16:40 | #20 |
Senior Member
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Не складывает real при больших значениях (нет проблемы)
Переделал полностью расчет среднего расчета м3/час.
|