Segnetics

Вернуться   Segnetics > Форум Segnetics > SMLogix

SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2022, 22:37   #1
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Не складывает real при больших значениях (нет проблемы)

Есть простой макрос (на изображении), все супер просто и он работает, но только если значения не большие. Но на 3000000, перестаёт работать сложение с 0.1 а складывает от 1, на 17000000 сложение от 2.
Есть ли какой-то способ избежать этого?
Я так понимаю, нужно разделить целую часть в long и дробную в int.
Но проблема в том, что нужно что была возможность, задавать значение счетчика, т.е. нужно будет из значения счетчика, опять разделять, но разделение на больших значениях не будет работать корректно.
Может есть какой то макрос для этого, я что не нашел на форуме, или может направление где смотреть.
Я конечно сталкивался с floating point accuracy, но обычно это происходит на больших числах, а тут я даже не знаю что придумать, пока.
Изображения
Тип файла: jpg 123.jpg (13.2 Кбайт, 13 просмотров)

Последний раз редактировалось Arsie, 30.06.2022 в 03:01 Причина: Удалил вложения за ненужностью
nick86 вне форума   Ответить с цитированием
Старый 26.06.2022, 23:26   #2
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях

Нашел данное сообщение https://forum.segnetics.com/showpost...27&postcount=2, это получается, что ограничение вообще в 1000000, а все что больше, уже с ними работать не реально и как тогда быть?
nick86 вне форума   Ответить с цитированием
Старый 27.06.2022, 03:07   #3
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях

В общем переделал макрос, возможно не самое правильное решение, но оно работает. Считаю просто в лонг, потом перевожу в реал и делю на цену импульса, попробовал и 10 миллионов и больше, считает, а большего мне и не надо.
Если будут предложения лучше, буду рад, если кто предложит.
Просто я пока сильно не тестил, но помню, что вроде так уже делал и со временем начинало глючить преобразование из лонг в реал, не из за превышения значения, а просто плк стоит считает и бац все, после преобразования значение не меняется, как зависает что.
Изображения
Тип файла: jpg 2332.jpg (90.5 Кбайт, 41 просмотров)
nick86 вне форума   Ответить с цитированием
Старый 27.06.2022, 09:12   #4
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 784
Благодарил(а): 12 раз(а)
Поблагодарили: 194 раз(а) в 190 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях

Цитата:
Сообщение от nick86 Посмотреть сообщение
Я конечно сталкивался с floating point accuracy, но обычно это происходит на больших числах
Ну для Float32 достоверных 7-8 десятичных знаков поэтому ваши примеры выше уже большие числа


__________________
Не являюсь сотрудником Segnetics !!!
ATS вне форума   Ответить с цитированием
Старый 27.06.2022, 11:30   #5
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от nick86 Посмотреть сообщение
Я конечно сталкивался с floating point accuracy, но обычно это происходит на больших числах, а тут я даже не знаю что придумать, пока.
Это происходит не на больших числах, а на широких. Для FPA что 123.45678, что 1.2345678, что 1234567.8 - одинаковы по "величине".


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 27.06.2022, 12:52   #6
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 784
Благодарил(а): 12 раз(а)
Поблагодарили: 194 раз(а) в 190 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от Arsie Посмотреть сообщение
Для FPA что 123.45678, что 1.2345678, что 1234567.8 - одинаковы по "величине".
На самом деле это совершенно разные числа.


__________________
Не являюсь сотрудником Segnetics !!!
ATS вне форума   Ответить с цитированием
Старый 27.06.2022, 15:12   #7
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

В общем мне помогло то решение, что выложил, вот немного допилил макрос счетчика, может кому пригодится, добавил туда средний расход из другого макроса. Всю ночь контролер стоял, щелкал на 5 миллионах, все считает не зависло.
Добавил еще макрос генератора импульсов, для тестов.
Время цикла, у меня 50мс, для 100 указано на изображении.

Последний раз редактировалось Arsie, 30.06.2022 в 03:01 Причина: Удалил вложения за ненужностью
nick86 вне форума   Ответить с цитированием
Старый 27.06.2022, 15:47   #8
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от nick86 Посмотреть сообщение
В общем мне помогло то решение, что выложил
Почему просто не умножить значение счётчика CNTR (аппаратного или из библиотеки макросов) на цену импульса?


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 27.06.2022, 16:19   #9
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от Arsie Посмотреть сообщение
Почему просто не умножить значение счётчика CNTR (аппаратного или из библиотеки макросов) на цену импульса?
Нужна возможность задавать значение, которое уже нащелкало на счетчике, а также его сохранять в случае отключении электроэнергии и продолжать с того же места при появлении электроэнергии и если отключение электроэнергии было долгим, то опять скорректировать значение, по физическому счетчику, что в общем то мой макрос и делает. В общем, это мои локальные заморочки, я понимаю, что возможно, это не всем нужно. Возможно есть более элегантное и простое решение, но я его найти не смог и времени на поиски дальше нет, если кто предложит, буду рад, а пока и так сойдет, главное, что работает.
nick86 вне форума   Ответить с цитированием
Старый 27.06.2022, 16:33   #10
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от nick86 Посмотреть сообщение
Нужна возможность задавать значение, которое уже нащелкало на счетчике, а также его сохранять в случае отключении электроэнергии и продолжать с того же места при появлении электроэнергии и если отключение электроэнергии было долгим, то опять скорректировать значение, по физическому счетчику, что в общем то мой макрос и делает. В общем, это мои локальные заморочки, я понимаю, что возможно, это не всем нужно. Возможно есть более элегантное и простое решение, но я его найти не смог и времени на поиски дальше нет, если кто предложит, буду рад, а пока и так сойдет, главное, что работает.
Память довольно-таки быстро угробите. Не делаются так счётчики энергонезависимые... Как минимизировать износ пямяти можно посмотреть в макросах счётчиков моточасов, в библиотеке макросов.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 28.06.2022, 16:23   #11
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от Arsie Посмотреть сообщение
Память довольно-таки быстро угробите. Не делаются так счётчики энергонезависимые... Как минимизировать износ пямяти можно посмотреть в макросах счётчиков моточасов, в библиотеке макросов.
В макросе написано.
'максимальный регистрируемый временной промежуток' также является временем
жизни блока памяти SMH2010, т.к. количество гарантированных записей в неё
ограничено - 800000 раз, поэтому нормальное время периода отсчётов должно быть
согласовано со сроком жизни контроллера. Рекомендуемое время 450 секунд, при этом
для достижения точности в 2% (средневзвешенной) ресурс устройства должен быть
не менее 1500 часов, для точности 5% (средневзвешенной) не менее 1000 часов и
для точности в 10% (средневзвешенной) не менее 750 часов. Ресурс памяти при
рекомендуемом времени периода (450 сек) составляет 11.5 лет (4167 дней).

Это справедливо и для SMH4?

Что если, я буду использовать так же запись в настройки, но не при каждом срабатывание счётчика, а по времени, например раз в 10 минут?
В общем переделаю сейчас макрос, благо это не долго.

Последний раз редактировалось nick86, 28.06.2022 в 16:39
nick86 вне форума   Ответить с цитированием
Старый 28.06.2022, 16:53   #12
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от nick86 Посмотреть сообщение
В макросе написано.

Это справедливо и для SMH4?
https://dl.segnetics.com/WebHelp/SML...ock_eeprom.htm

В лоджике более актуальная версия, там есть про SMH4.


Добавлено через 3 минуты


Цитата:
Сообщение от nick86 Посмотреть сообщение
Что если, я буду использовать так же запись в настройки, но не при каждом срабатывание счётчика, а по времени, например раз в 10 минут?
В общем переделаю сейчас макрос, благо это не долго.
Отталкиваться нужно от техпроцесса, какая ошибка является допустимой. И дальше уже понимать, как решать вопрос.

Ваш подход, когда вы отталкиваетесь от контроллера, в корне неправильный. При решении, как лечить человека от насморка, не отталкиваются от того, что в кладовке есть только топор и пила, а подыскивают нужного специалиста с нужным инструментарием.

Судя по тому, что вы делали ручную корректировку счётчика, контроллер выполняет вспомогательную роль. Т.е. требования к надёжности счёта задаются больше интервалами проверки системы оператором.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 28.06.2022, 17:48   #13
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от Arsie Посмотреть сообщение
https://dl.segnetics.com/WebHelp/SML...ock_eeprom.htm
В лоджике более актуальная версия, там есть про SMH4.
SMH4 2Гб 15 000 000 циклов записи, что при срабатывании раз в секунду, память проработает 12 лет, ну в общем то, проблемы особо никакой нет, пускай пишет раз в 10 секунд, этого будет достаточно, 120 лет.
nick86 вне форума   Ответить с цитированием
Старый 28.06.2022, 17:50   #14
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от nick86 Посмотреть сообщение
SMH4 2Гб 15 000 000 циклов записи, что при срабатывании раз в секунду, память проработает 12 лет, ну в общем то, проблемы особо никакой нет, пускай пишет раз в 10 секунд, этого будет достаточно, 120 лет.
Это при условии, что у вас это единственный источник записи. У вас же не журнала, ни меню нет, как я понимаю? И Хистори вы не используете?


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием
Старый 28.06.2022, 17:56   #15
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от Arsie Посмотреть сообщение
Это при условии, что у вас это единственный источник записи. У вас же не журнала, ни меню нет, как я понимаю? И Хистори вы не используете?
Журнал есть, и меню есть. Но журнал только для аварий. А так выводится HMI по умолчанию, в меню лазить только для настроек, по сути только на стадии отладки.

Буду писать значит раз в минуту или 10.
nick86 вне форума   Ответить с цитированием
Старый 28.06.2022, 19:43   #16
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Цитата:
Сообщение от Arsie Посмотреть сообщение
Это при условии, что у вас это единственный источник записи. У вас же не журнала, ни меню нет, как я понимаю? И Хистори вы не используете?
Переделал макрос, теперь пишет по времени, ну и по мелочам подправил.
Спасибо, что про циклы записи написали, я что то как то про это и не подумал.

Последний раз редактировалось Arsie, 30.06.2022 в 03:00 Причина: Удалил вложения за ненужностью
nick86 вне форума   Ответить с цитированием
Старый 28.06.2022, 20:41   #17
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

В макросе кое что подправил, для надежности.
Вложения
Тип файла: msl Счетчик 8.msl (38.0 Кбайт, 9 просмотров)
nick86 вне форума   Ответить с цитированием
Старый 03.07.2022, 00:37   #18
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Ту часть макроса, что отвечает за средний расход, я взял тут с форума, в общем чушь какую то он считает, не фига не правильно, буду переделывать.
nick86 вне форума   Ответить с цитированием
Старый 03.07.2022, 03:14   #19
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Переделал расчет расхода, теперь работает как надо.
Вложения
Тип файла: msl Счетчик 9.msl (89.9 Кбайт, 4 просмотров)
nick86 вне форума   Ответить с цитированием
Старый 03.07.2022, 16:40   #20
nick86
Senior Member
 
Аватара для nick86
 
Регистрация: Feb 2022
Сообщения: 128
Благодарил(а): 20 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Не складывает real при больших значениях (нет проблемы)

Переделал полностью расчет среднего расчета м3/час.
Вложения
Тип файла: msl Счетчик 10.msl (97.5 Кбайт, 18 просмотров)
nick86 вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 09:56.


Версия vBulletin: 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2024