Просмотр полной версии : Число "не влазит" в счетчик
Подключаю расходомер через счетчик МВ-110-16ДН. Там INT:-32768..32767 (16 бит), а по-хорошему надо ловить порядка 100 000 импульсов (Kfactor больше сотни, а нацедить надо около тонны). То есть DINT бы туда...
Как лучше реализовать счет "на несколько оборотов", и какие могут быть подводные камни?
ПЛК63, язык ST.
Александр86
21.02.2013, 11:03
Можно реализовать следующим образом:
Заводим переменные, например X(разница импульсов между опросами),Y(кол-во импульсов до опроса) и M(суммарное кол-во импульсов), первая и вторая формата Integer, третья - dword(чтобы все 100000 вместились и осталось куча места) Да, кстати ту переменную в которой идет накопление импульсов обзовём Z, она тоже Integer. И делаем следующие операции:
X:=Z-Y; {выделяем сколько прошло импульсов с предыдущего опроса}
If X<0 then X:=32768-Y+Z; end_if; {Если произошло обнуление, т.е. переполнение Z, выделяем остатки}
M:=M+X; {суммируем}
Y:=Z; {нормализуем}
Их надо выполнять по времени(поставить таймер или завести отдельную подпрограмму) с расчетом, что за это время, Z точно не успеет переполнится за 32 768. По мне как - чем чаще тем лучше!)
Со временем надо будет обнулять и M, но это уже на усмотрение и зависит от конкретной задачи.
Успехов вам!
Спасибо, вроде бы все работает. Пришлось только убрать "старый" сброс в ноль между операциями (получался конфликт). При таком способе он уже не будет нужен.
Так что заодно и код попроще стал :)
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot