Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Предлагаю такой вариант.
Вложение 14292
Для вычислений kwt_summ с двойной точностью использую функции R2_ADD из OSCAT. При этом kwt_summ удалил из глобальных переменных, скорей всего она там не нужна.
Для вычислений с двойной точностью используется пользовательский тип данных REAL2
Предлагаю еще один из вариантов для коррекции начального значения kwt_summ - использовать действие.Код:TYPE REAL2 : STRUCT R1 : REAL; (* small value *) RX : REAL; (* big value *) END_STRUCT END_TYPE
Вложение 14293
По этому для программы PR2 добавил действие CORRECT
Получилось так
Вложение 14292
В основной программе используется функция R2_SET из OSCAT для преобразования начальных значений kwt_start из REAL в формат с двойной точностью REAL2.
Вроде все работает.
Вложение 14294
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Да, проблема остается, как petera говорит.
А какие ПЛК от ОВЕН работают с LREAL ? 110-й работает ?
В принципе я на 100-ке обойду это тем, что буду сбрасывать раз в сутки счет и прибавлять уже к конечному значению, то есть от обратного пойду, но конечно меня такое поведение удивило....
Попробую с оскатовской библиотекой. На выходе да, точность 99999.99 достаточна, вроде счетчик больше и не показывает.
Важно при расчете и чтобы собственно считало...
А почему не хотите готовым примером воспользоваться из поста #3253?
Хочу заметить, что здесь проблема в точности вычислений глубже. При использовании REAL в Вашей формуле kwt:=kwt+(IN/3600000); будет накапливаться систематическая ошибка из-за ограничения разрядной сетки, при чем чем больше накопленная величина kwt, тем больше погрешность.
Ваш счетчик энергии врать будет безбожно. Я бы вернулся к формуле из поста http://www.owen.ru/forum/showthread....l=1#post143899
summa:=summa+IN;
kwt:=summa/3600000;
И перешел бы на арифметику с фиксированной точкой для вычисления summa.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
http://www.owen.ru/forum/showthread.php?t=10285&page=5 это мое первое вложение из сохранившихся на этом форуме. Помню где то ешается проблема используя целую часть как дворд,а знаки после запятой как реал, и для визуализации получается строковая переменная как конкат этих значений
подскажите пожалуйста будет ли работать опрос на ПЛК160, если у меня будет на одном 485 порту в конфигурации 2 мастера, один RTU, второй ASCII? При этом в одном цикле опрашиваем одно устройство, в другом другое. Или одну секунду одно устройство, вторую сек. другое устройство и т.д.
Чтобы понять рекурсию нужно понять рекурсию
А слейвам как будете объяснять что запрос рту или аскии, они то просто слушают порт и ждут нужную комбинацию байт
Поидее слейв должен ингнорировать непонятный для него запрос
Попробовал сейчас, используя лектус как 2 слейв устройства. Вроде работает
Чтобы понять рекурсию нужно понять рекурсию