「原創經驗」西門子PLC裡的計算和計算機裡的計算誤差挺大的!

最近在PLC(S7-1200)裡要計算點東西,同時,在計算機裡編了個小程序(C#),再次算了一下,發現誤差還挺大。

下面是PLC裡的計算公式:ld1、ld2、ld3都是LReal類型,i1、result是DInt類型

ld1:=DINT_TO_LREAL(i1); ld2:=SIN(ld1)*1000;

result:=ABS(LREAL_TO_DINT(ld2));

下面是計算機裡的程序:ld1、ld2、ld3都是Double類型,i1、result是Int32類型

ld1=(Double)i1; ld2=Sin(ld1)*1000;

result=Abs((Int32)ld2);

結果:發現result最後一位經常不一致。追蹤發現,PLC裡在實數轉整型時,進行了四捨五入,但是,計算機裡不是這樣的,是“四捨六入五成雙”(好複雜!)。

解決方案:在計算機裡將最後一句改成,即可:

result=(Int32)(Abs(ld2)+0.5);


2019年1月3日

說明:

1、本文是實踐經驗,非嚴格論文,與相關產品和理論可能不完全相符。

2、如需控制、三電相關幫助,交流,請關注本人,並加入技術討論QQ群:877456127,那裡有很多熱心同行。


分享到:


相關文章: