1,根本原因在于你用了DADDP,這是個(gè)32位的指令。實(shí)際計(jì)算過(guò)程是把[D351 D350]與[T1 T0]相加后放入了[D351 D350];
2,仿真與實(shí)機(jī)的區(qū)別在于,仿真默認(rèn)掃描周期是100ms的,而實(shí)機(jī)的掃描周期會(huì)原低于這個(gè)數(shù)。這就造成仿真在T0計(jì)時(shí)到后,其輸出觸點(diǎn)驅(qū)動(dòng)了T1計(jì)時(shí),T1的數(shù)值馬上變成了1,所以掃描到達(dá)T0的上升沿,執(zhí)行加法處理時(shí),就是00000000+00010014--》00010014(都用16進(jìn)制表示)的計(jì)算過(guò)程,這個(gè)十六進(jìn)制的數(shù)換成十進(jìn)制就是65556;執(zhí)行到第八遍的時(shí)候,這個(gè)數(shù)就是65556*8=524448。而因?qū)崣C(jī)的掃描周期遠(yuǎn)低于100ms,則在實(shí)機(jī)上執(zhí)行該程序,T0計(jì)時(shí)到達(dá),掃描到T1時(shí),該數(shù)值還沒(méi)有累積到0.1S,所以T1的數(shù)值還是0沒(méi)有變成1,繼續(xù)執(zhí)行加法處理時(shí),就是00000000+00000014--》00000014的計(jì)算過(guò)程,這個(gè)十六進(jìn)制的數(shù)換成10進(jìn)制就是20,得到了想要的結(jié)果;
3,將DADDP指令換成16位的ADDP指令可以避免這種情況;
4,將T0上升沿后做加法運(yùn)算這一句緊放在T0輸出線圈這一句后面可以避免這種情況;T0輸出線圈這一句放在RST T0這段后面更好。