有類型和無類型常量的解釋
常量是具有固定值的數(shù)據(jù),其值在程序運行期間不能更改。常量在程序執(zhí)行期間可由各種程序元素讀取,但不能被覆蓋。常量值有指定的表示法,具體取決于數(shù)據(jù)類型和數(shù)據(jù)格式。分為有類型和無類型的表示法。
建議在數(shù)學函數(shù)中不要混用有類型和無類型常量,否則可能會發(fā)生不需要的隱式轉換,從而導致生成不正確的值。
編程示例
在以下編程示例中,可以看到使用有類型和無類型常量的運算。
創(chuàng)建一個 SCL 函數(shù)塊并將其命名為“FB_MathsFunctions”。
在塊接口的“Temp”部分聲明“Variable_DINT”變量。
編寫以下程序代碼:
Variable_DINT := INT#1 +50000;
在此數(shù)學運算中,將有類型常量 INT#1 與無類型常量 50000 相加。無類型常量 50000 在軟件中將帶黃色下劃線,指示常量值超出了 INT 數(shù)據(jù)類型允許的范圍。
要查看結果,請轉至在線。
通過右鍵單擊“編譯 》 軟件(僅更改)”(Compile 》 Software (only changes) 命令執(zhí)行此命令來編譯 SCL 函數(shù)塊“FB_MathsFunctions”。
使用“下載到設備 》 軟件(僅更改)”(Download to device 》 Software (only changes)) 命令下載塊。
轉至在線并監(jiān)視塊。
有類型常量的數(shù)據(jù)類型定義加法的數(shù)據(jù)類型。這意味著加法是在 INT 數(shù)據(jù)類型區(qū)域中執(zhí)行。在第一步中,無類型常量 50000 將隱式轉換為 INT 數(shù)據(jù)類型。但這種轉換會導致生成負值 (-15536)。然后該值將添加到有類型常量 (INT#1)。結果是 -15535。由于將寫入加法運算結果的變量被聲明為 DINT 數(shù)據(jù)類型,因此數(shù)字 -15535 將隱式轉換為 DINT 數(shù)據(jù)類型,并寫入到變量“Variable_DINT”。但結果仍為負數(shù)。
1. 可能的解決方案
避免得到錯誤結果的一種方法是兩個常量都采用有類型常量。如果兩個常量都采用有類型常量,較長的數(shù)據(jù)類型將確定計算結果。
在“FB_MathsFunctions”SCL 函數(shù)塊中編寫以下程序代碼:
在此計算操作中,將有類型常量 INT#1 與有類型常量 DINT#50000 相加。
要查看結果,請轉至在線。
通過右鍵單擊“編譯 》 軟件(僅更改)”(Compile 》 Software (only changes) 命令執(zhí)行此命令來編譯 SCL 函數(shù)塊“FB_MathsFunctions”。
使用“下載到設備 》 軟件(僅更改)”(Download to device 》 Software (only changes)) 命令下載塊。
轉至在線并監(jiān)視塊。
常量 INT#1 將轉換為 DINT 數(shù)據(jù)類型,并且兩個常量的相加將在 DINT 數(shù)據(jù)類型區(qū)域中執(zhí)行。
2. 可能的解決方案
避免得到錯誤結果的另一種方法是兩個常量都采用無類型常量。如果兩個常量都采用無類型常量,它們在當前 CPU 上將被解釋為最寬的可能數(shù)據(jù)類型。這意味著在 S7-1500 系列 CPU上,這兩個常量都解釋為 LINT 數(shù)據(jù)類型。
在“FB_MathsFunctions”SCL 函數(shù)塊中編寫以下程序代碼:
在此計算操作中,將無類型常量 1 與無類型常量 50000 相加。
要查看結果,請轉至在線。
通過右鍵單擊“編譯 》 軟件(僅更改)”(Compile 》 Software (only changes) 命令執(zhí)行此命令來編譯 SCL 函數(shù)塊“FB_MathsFunctions”。
使用“下載到設備 》 軟件(僅更改)”(Download to device 》 Software (only changes)) 命令下載塊。
轉至在線并監(jiān)視塊。
常量 1 和 50000 將解釋為 LINT 數(shù)據(jù)類型,相加的結果將再次轉換為 DINT 數(shù)據(jù)類型。
審核編輯:黃飛
-
西門子
+關注
關注
94文章
3039瀏覽量
115874 -
函數(shù)
+關注
關注
3文章
4331瀏覽量
62618 -
數(shù)據(jù)類型
+關注
關注
0文章
236瀏覽量
13624 -
SCL
+關注
關注
1文章
239瀏覽量
17081
原文標題:西門子博途:使用 SCL 中的常量進行計算
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論