SCL中常量計算注意事項

有類型和無類型常量

常量值有指定的表示法,具體取決於數據類型和數據格式,分爲有類型和無類型的表示法。
數學函數中運算有類型和無類型常量一定要慎重,否則可能會發生不需要的隱式轉換,從而導致生成不正確的值。看下面的例子:
DInt類型: Variable_DINT := Int# 2 +50000;
計算結果: Variable_DINT= -15534;
原因分析:有類型常量的數據類型決定了無類型常量的數據類型。 這意味着加法是在 INT 數據類型區域中執行。 在第一步中,無類型常量 50000 將隱式轉換爲 INT 數據類型。 但這種轉換會導致生成負值 (-15536)。 然後該值將添加到有類型常量 (INT#2)。 結果是 -15534。由於將寫入加法運算結果的變量被聲明爲 DINT 數據類型,因此數字 -15534 將隱式轉換爲 DINT 數據類型,並寫入到變量“Variable_DINT”。 但結果仍爲負數。
解決方案

  1. 將兩個常量都採用有類型常量。 如果兩個常量都採用有類型常量,較長的數據類型將確定計算結果。
    Variable_DINT := Int# 2 +DInt# 50000;在此計算操作中,將有類型常量 INT#1 與有類型常量 DINT#50000 相加。常量 INT#2 將轉換爲 DINT 數據類型,並且兩個常量的相加將在 DINT 數據類型區域中執行,最終得到正確的結果。
  2. 另一種方法是兩個常量都採用無類型常量。 如果兩個常量都採用無類型常量,它們在當前 CPU 上將被解釋爲最寬的可能數據類型。 這意味着在 S7-1500 系列 CPU上,這兩個常量都解釋爲 LINT 數據類型。
    Variable_DINT := 2 +50000;常量 2 和 50000 將解釋爲 LINT 數據類型,相加的結果將再次轉換爲 DINT 數據類型,最終也能得到正確的結果。
    常量設置類型要慎重!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章