概述:
由于浮點數的定義規則,導致浮點數不能通過二進制精確表示,所以在浮點數計算過程中,會出現兩個值一樣的浮點數進行比較相等計算時結果并不相等的情況。下面先設計一個實例說明該問題,并給出解決問題的方法。
第1步:
添加 PLC 設備。
設置 IP 地址:192.168.0.1。
子網掩碼:255.255.255.0
圖1添加 PLC 設備
第2步:
1. 添加全局數據塊。命名為:GdbData。
圖 2 浮點數全局數據塊
在以上全局數據塊中添加浮點數類型變量,tagA、tagB、tagC 和 tagSum,分別設置起始值 0.02、0.03、0.05 和 0.0。
2. 在主程序 Main 中添加接口變量。
圖 3 主程序 Main 的接口變量
3. 編寫程序,進行浮點數加法計算并將結果進行相等比較。
圖 4 編寫程序
可以看到浮點數 tagA + tagB = 0.05,和 tagC = 0.05 作相等比較,比較結果并不相等。
4. 在監控表中監視變量值。
圖 5 變量監視 - 浮點數
圖 6 變量監視 - 十六進制
可以看到監視到變量 tagSum 和 tagC 的浮點數值均為 0.05,值相等,而十六進制數值卻為 16#3D4C CCCC 和 16#3D4C CCCD,值不相等。在以上程序中浮點數相等的比較過程中實際上比較的是十六進制數,所以得到的結果并不相等。
第3步:
鑒于以上原因,在進行兩個浮點數相等比較計算時,可以先計算兩個數的差值,然后判斷該差值是否在一個很小的數值范圍以內,比如在 ±1.0E-6 以內,則認為這 兩個浮點數相等。
圖 7 比較兩個浮點數相等
第4步:
功能封裝。
定義一個 FC,命名為:RealEqual, 對以上功能進行封裝,在以后浮點數相等判斷時方便直接調用。
圖 8 功能封裝
封裝后的調用結果。
圖 9 功能調用
-
plc
+關注
關注
5013文章
13321瀏覽量
463979 -
西門子
+關注
關注
94文章
3046瀏覽量
116029 -
浮點數
+關注
關注
0文章
61瀏覽量
15875
原文標題:西門子 TIA Portal 如何比較兩個浮點數相等
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論