zjun3001
級別: 探索解密
|
計(jì)數(shù)時(shí)超出高速計(jì)數(shù)器范圍時(shí),我是在高速計(jì)數(shù)器達(dá)到規(guī)定值時(shí)用脈沖指令觸發(fā)普通計(jì)數(shù)器計(jì)數(shù),再兩數(shù)相乘,F(xiàn)擔(dān)心計(jì)算結(jié)果有誤差,請問有什么好方法,請幫忙 |
---|---|
|
sjm213
有小知識,無大學(xué)問。
級別: 論壇版主
|
1,何種控制,會超出計(jì)數(shù)范圍? 2,為何擔(dān)心會有誤差呢? |
---|---|
|
zjun3001
級別: 探索解密
|
計(jì)數(shù)在20000000次左右,頻率10000,擔(dān)心在c251復(fù)位時(shí)的計(jì)數(shù)誤差,其中一部分這樣的,請大家?guī)兔?br />ld x0 ; set m1; ld m1; out c251 k9999; ld m1; dmov c251 d100; ld c251 out c100 k9999; rst c251; ld m1; dmov c100 d200; dmul d200 k10000 d202; dadd d100 d202 d204 |
---|---|
|
sjm213
有小知識,無大學(xué)問。
級別: 論壇版主
|
1,“計(jì)數(shù)在20000000次左右”,這個(gè)范圍C251沒有問題,-2,147,483,648~+2,147,483,647都OK; 2,“擔(dān)心在c251復(fù)位時(shí)的計(jì)數(shù)誤差”,它的復(fù)位也是在程序中進(jìn)行的,不知道為何會有此擔(dān)心? 3,這段程序,X0已經(jīng)被C251占用了,不應(yīng)該再次使用;而且M1被置位后不用復(fù)位,直接用M8000替代掉就好了; 4,C251計(jì)數(shù)到9999時(shí),就會將C100計(jì)數(shù)增1,而不是10000; 5,C251是高速計(jì)數(shù)的,不受PLC掃描周期影響,而RST指令是每掃描周期執(zhí)行一次,所以C251被復(fù)位前,它實(shí)際的計(jì)數(shù)值不可控,有可能已經(jīng)遠(yuǎn)遠(yuǎn)超出K10000了,但超出的數(shù)值都因復(fù)位程序而被丟掉,肯定會造成計(jì)數(shù)不準(zhǔn)確; 6,如果非要用這種方法控制,那么也要用高速計(jì)數(shù)器中斷,在中斷中累計(jì)C100的數(shù)值并復(fù)位C251。 |
---|---|
|
zjun3001
級別: 探索解密
|
請版主賜教,如這個(gè)數(shù)很大,既要計(jì)數(shù)盡可能正確又不加成本,該怎么編這個(gè)程序,請指點(diǎn)。 |
---|---|
|
sjm213
有小知識,無大學(xué)問。
級別: 論壇版主
|
1,直接使用C251,設(shè)置值可以隨便設(shè),反正它實(shí)際值會一直增大的;
2,超出-2,147,483,648~+2,147,483,647范圍的話,用高速計(jì)數(shù)器中斷, ld m1; dmov c251 d100; ld c251 out c100 k9999; rst c251; 這段程序?qū)懺谥袛喑绦蛑小?/div> |
---|---|
|