0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用SCL中的常量進(jìn)行計算

機(jī)器人及PLC自動化應(yīng)用 ? 來源:機(jī)器人及PLC自動化應(yīng)用 ? 2023-06-18 10:38 ? 次閱讀

有類型和無類型常量的解釋

常量是具有固定值的數(shù)據(jù),其值在程序運(yùn)行期間不能更改。常量在程序執(zhí)行期間可由各種程序元素讀取,但不能被覆蓋。常量值有指定的表示法,具體取決于數(shù)據(jù)類型和數(shù)據(jù)格式。分為有類型和無類型的表示法。

建議在數(shù)學(xué)函數(shù)中不要混用有類型和無類型常量,否則可能會發(fā)生不需要的隱式轉(zhuǎn)換,從而導(dǎo)致生成不正確的值。

編程示例

在以下編程示例中,可以看到使用有類型和無類型常量的運(yùn)算。

1. 創(chuàng)建一個 SCL 函數(shù)塊并將其命名為“FB_MathsFunctions”。

2. 在塊接口的“Temp”部分聲明“Variable_DINT”變量。

07518a20-0c42-11ee-962d-dac502259ad0.png

3. 編寫以下程序代碼

Variable_DINT := INT#1 +50000;

在此數(shù)學(xué)運(yùn)算中,將有類型常量 INT#1 與無類型常量 50000 相加。無類型常量 50000 在軟件中將帶黃色下劃線,指示常量值超出了 INT 數(shù)據(jù)類型允許的范圍。

0773004c-0c42-11ee-962d-dac502259ad0.png

要查看結(jié)果,請轉(zhuǎn)至在線。

1. 通過右鍵單擊“編譯 > 軟件(僅更改)”(Compile > Software (only changes) 命令執(zhí)行此命令來編譯 SCL 函數(shù)塊“FB_MathsFunctions”。

2. 使用“下載到設(shè)備 > 軟件(僅更改)”(Download to device > Software (only changes)) 命令下載塊。

3. 轉(zhuǎn)至在線并監(jiān)視塊。

077c904e-0c42-11ee-962d-dac502259ad0.png

有類型常量的數(shù)據(jù)類型定義加法的數(shù)據(jù)類型。這意味著加法是在 INT 數(shù)據(jù)類型區(qū)域中執(zhí)行。在第一步中,無類型常量 50000 將隱式轉(zhuǎn)換為 INT 數(shù)據(jù)類型。

但這種轉(zhuǎn)換會導(dǎo)致生成負(fù)值 (-15536)。然后該值將添加到有類型常量 (INT#1)。結(jié)果是 -15535。

由于將寫入加法運(yùn)算結(jié)果的變量被聲明為 DINT 數(shù)據(jù)類型,因此數(shù)字 -15535 將隱式轉(zhuǎn)換為 DINT 數(shù)據(jù)類型,并寫入到變量“Variable_DINT”。但結(jié)果仍為負(fù)數(shù)。

1. 可能的解決方案

避免得到錯誤結(jié)果的一種方法是兩個常量都采用有類型常量。如果兩個常量都采用有類型常量,較長的數(shù)據(jù)類型將確定計算結(jié)果。

在“FB_MathsFunctions”SCL 函數(shù)塊中編寫以下程序代碼:

0787de22-0c42-11ee-962d-dac502259ad0.png

在此計算操作中,將有類型常量 INT#1 與有類型常量 DINT#50000 相加。

要查看結(jié)果,請轉(zhuǎn)至在線。

1. 通過右鍵單擊“編譯 > 軟件(僅更改)”(Compile > Software (only changes) 命令執(zhí)行此命令來編譯 SCL 函數(shù)塊“FB_MathsFunctions”。

2. 使用“下載到設(shè)備 > 軟件(僅更改)”(Download to device > Software (only changes)) 命令下載塊。

3. 轉(zhuǎn)至在線并監(jiān)視塊。

079e64f8-0c42-11ee-962d-dac502259ad0.png

常量 INT#1 將轉(zhuǎn)換為 DINT 數(shù)據(jù)類型,并且兩個常量的相加將在 DINT 數(shù)據(jù)類型區(qū)域中執(zhí)行。

2. 可能的解決方案

避免得到錯誤結(jié)果的另一種方法是兩個常量都采用無類型常量。如果兩個常量都采用無類型常量,它們在當(dāng)前 CPU 上將被解釋為最寬的可能數(shù)據(jù)類型。這意味著在 S7-1500 系列 CPU上,這兩個常量都解釋為 LINT 數(shù)據(jù)類型。

在“FB_MathsFunctions”SCL 函數(shù)塊中編寫以下程序代碼:

07f3a62a-0c42-11ee-962d-dac502259ad0.png

在此計算操作中,將無類型常量 1 與無類型常量 50000 相加。

要查看結(jié)果,請轉(zhuǎn)至在線。

1. 通過右鍵單擊“編譯 > 軟件(僅更改)”(Compile > Software (only changes) 命令執(zhí)行此命令來編譯 SCL 函數(shù)塊“FB_MathsFunctions”。

2. 使用“下載到設(shè)備 > 軟件(僅更改)”(Download to device > Software (only changes)) 命令下載塊。

3. 轉(zhuǎn)至在線并監(jiān)視塊。

08036466-0c42-11ee-962d-dac502259ad0.png

常量 1 和 50000 將解釋為 LINT 數(shù)據(jù)類型,相加的結(jié)果將再次轉(zhuǎn)換為 DINT 數(shù)據(jù)類型。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SCL
    SCL
    +關(guān)注

    關(guān)注

    1

    文章

    239

    瀏覽量

    17115
  • S7-1500
    +關(guān)注

    關(guān)注

    3

    文章

    300

    瀏覽量

    6470

原文標(biāo)題:使用 SCL 中的常量進(jìn)行計算

文章出處:【微信號:gh_a8b121171b08,微信公眾號:機(jī)器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Go語言常量的聲明

    在 Go 語言中, 常量 表示的是固定的值,常量表達(dá)式的值在編譯期進(jìn)行計算,常量的值不可以修改。例如:3 、 Let's go 、
    發(fā)表于 07-20 15:24 ?423次閱讀

    IAR與KEIL如何直接定義常量到EEPROM的經(jīng)驗(yàn)分享

      分享了這篇在IAR與KEIL如何直接定義常量到EEPROM的經(jīng)驗(yàn)分享。其實(shí)方法和之前本人分享過的經(jīng)驗(yàn)分享“KE02在CW中使用常量形式初始化EEPROM值”合為姐妹篇,當(dāng)然這種
    發(fā)表于 09-16 10:39 ?18次下載

    java 常量池靜態(tài)變量詳解

    Java常量池,實(shí)際上分為兩種形態(tài):靜態(tài)常量池和運(yùn)行時常量池。 所謂靜態(tài)常量池,即*.class文件
    發(fā)表于 09-27 13:01 ?10次下載
    java <b class='flag-5'>常量</b>池靜態(tài)變量詳解

    如何使用S7-SCL的“AT”指令?

    什么是“AT”指令,如何使用? AT指令是S7-SCL特有的一個指令,初學(xué)者可能會忽略此指令,或者對其理解不夠深刻。AT指令在S7-SCL中有著非常重要的地位,很多應(yīng)用程序都必須使用此指令。下面
    的頭像 發(fā)表于 04-04 18:14 ?1.1w次閱讀
    如何使用S7-<b class='flag-5'>SCL</b><b class='flag-5'>中</b>的“AT”指令?

    請問怎樣在SCL中去使用浮點(diǎn)數(shù)進(jìn)行計算?

    例如,數(shù)據(jù)類型 REAL 在程序以 6 位小數(shù)的精度進(jìn)行指定和計算
    的頭像 發(fā)表于 07-04 11:32 ?2487次閱讀

    使用SCL函數(shù)塊編寫計算保質(zhì)期的應(yīng)用程序

    在以下部分,將創(chuàng)建 SCL 函數(shù)塊“SCL_Best_before_date” 。 可使用 SCL 函數(shù)塊計算保質(zhì)期。
    的頭像 發(fā)表于 10-18 15:15 ?1097次閱讀

    西門子SCL語言編程案例之計算方差

    在統(tǒng)計數(shù)據(jù),經(jīng)常用到方差來代表數(shù)據(jù)的離散程序,我們用SCL語言編寫一個計算方差的FB塊。
    的頭像 發(fā)表于 01-09 09:45 ?1404次閱讀

    對S7-SCL的AT指令進(jìn)行詳細(xì)講解

    AT指令是S7-SCL特有的一個指令,初學(xué)者可能會忽略此指令,或者對其理解不夠深刻。
    的頭像 發(fā)表于 02-03 14:53 ?4890次閱讀

    淺談指針常量常量指針

    這節(jié)課我們來講一講指針常量常量指針。
    的頭像 發(fā)表于 02-21 09:27 ?1095次閱讀

    C語言的常量-2

    在C語言中,字符型常量是最特別的一種常量。他的特別之處在于我們需要對其使用指定的定界符對其進(jìn)行限制。定界符為 ‘’ 。字符型常量可以分為兩種,一種是字符
    的頭像 發(fā)表于 02-21 15:02 ?669次閱讀
    C語言的<b class='flag-5'>常量</b>-2

    SCL中使用浮點(diǎn)數(shù)REAL和LREAL進(jìn)行計算

    例如,數(shù)據(jù)類型 REAL 在程序以 6 位小數(shù)的精度進(jìn)行指定和計算。在計算浮點(diǎn)數(shù)(REAL和 LREAL)時,請注意此精度通常應(yīng)用于每個計算
    的頭像 發(fā)表于 05-30 09:40 ?1800次閱讀
    在<b class='flag-5'>SCL</b>中使用浮點(diǎn)數(shù)REAL和LREAL<b class='flag-5'>進(jìn)行</b><b class='flag-5'>計算</b>

    SCL的 EN/ENO 機(jī)制概述

    SCL 的 EN/ENO 機(jī)制概述 在 SCL 程序段,可以通過賦值來改變 ENO。為此,請寫入“ENO:=TRUE”或“ENO:=FALSE”,或使用 BOOL 數(shù)據(jù)類型的變量。
    的頭像 發(fā)表于 08-23 10:08 ?2804次閱讀

    什么是常量折疊?Python如何優(yōu)雅地實(shí)現(xiàn)它

    每種編程語言為了表現(xiàn)出色,并且實(shí)現(xiàn)卓越的性能,都需要大量編譯器級的優(yōu)化。 一種著名的優(yōu)化技術(shù)是“ 常量折疊 ”(Constant Folding):在編譯期間,編譯器會設(shè)法識別出常量表達(dá)式,對其進(jìn)行
    的頭像 發(fā)表于 10-30 11:10 ?572次閱讀
    什么是<b class='flag-5'>常量</b>折疊?Python如何優(yōu)雅地實(shí)現(xiàn)它

    西門子博途之SCL常量的運(yùn)算運(yùn)用

     建議在數(shù)學(xué)函數(shù)不要混用有類型和無類型常量,否則可能會發(fā)生不需要的隱式轉(zhuǎn)換,從而導(dǎo)致生成不正確的值。
    的頭像 發(fā)表于 01-24 11:21 ?2226次閱讀
    西門子博途之<b class='flag-5'>SCL</b><b class='flag-5'>常量</b>的運(yùn)算運(yùn)用

    微波檢測的關(guān)鍵物理常量是指

    微波檢測是一種利用微波技術(shù)進(jìn)行物理量測量的方法,廣泛應(yīng)用于通信、雷達(dá)、遙感等領(lǐng)域。在微波檢測,關(guān)鍵物理常量是指那些對測量結(jié)果有顯著影響的物理量。本文將詳細(xì)介紹微波檢測的關(guān)鍵物理常量,
    的頭像 發(fā)表于 05-28 14:44 ?430次閱讀