PDA

Просмотр полной версии : Число "не влазит" в счетчик



mc_
21.02.2013, 10:08
Подключаю расходомер через счетчик МВ-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, но это уже на усмотрение и зависит от конкретной задачи.
Успехов вам!

mc_
22.02.2013, 05:55
Спасибо, вроде бы все работает. Пришлось только убрать "старый" сброс в ноль между операциями (получался конфликт). При таком способе он уже не будет нужен.
Так что заодно и код попроще стал :)