之前我曾寫過一篇文章介紹西門子S7-200 SMART的模擬量指令庫《S7-200 SMART怎樣添加和使用模擬量指令庫?》。今天這篇文章,結(jié)合我近期測(cè)試國產(chǎn)模擬量輸出模塊的實(shí)際經(jīng)驗(yàn),跟大家分享下該指令庫使用過程中要注意的幾個(gè)問題。本文主要包括如下幾個(gè)主題:
西門子plc STEP7中 模擬量指令S_RTR和S_RTI的區(qū)別
怎樣將實(shí)數(shù)轉(zhuǎn)換為無符號(hào)整數(shù)?
1、模擬量指令S_RTR和S_RTI的區(qū)別
指令S_RTR和S_RTI通常都是用來處理模擬量輸出。名稱中的"S"是"Scale"的縮寫,表示"量程";"R"是"Real"的縮寫,表示"實(shí)數(shù)";"T"是"To"的縮寫,表示轉(zhuǎn)換;"I"是"Integer"的縮寫,表示"整數(shù)"。因此,從名稱可以看出,S_RTR指令是把實(shí)數(shù)轉(zhuǎn)換成實(shí)數(shù),S_RTI指令是把實(shí)數(shù)轉(zhuǎn)換成整數(shù),通常情況下我使用的是S_RTI指令。
比如西門子 ET200 SP的模擬量輸出模塊AQ 2xI ST,它能輸出4~20mA的電壓信號(hào),其對(duì)應(yīng)的輸出整數(shù)的范圍為0~27648。對(duì)于這樣的模塊信號(hào)轉(zhuǎn)換,我們只需要輸入工程值和轉(zhuǎn)換值即可。舉個(gè)例子,某工程值速度信號(hào)的范圍為0.0~100.0 cm/min,其實(shí)際速度存放在VD100(actualSpeed)中,要求將實(shí)際速度轉(zhuǎn)換成相應(yīng)的電流信號(hào)進(jìn)行輸出,可以使用下面的代碼:
有些模擬量輸出模塊(比如我測(cè)試的這個(gè)國產(chǎn)模塊),它的輸出信號(hào)也是4~20mA,但是其對(duì)應(yīng)的整數(shù)范圍是0~65535。這種情況下,如果我們還是用這個(gè)公式,將"OSH"改成65535,就會(huì)出問題,如下圖:
"S_RTI"指令中"OSH"和"OSL"都是"16位有符號(hào)整數(shù)",其取值范圍為-32768~+32767。65535超出了其取值范圍,因此會(huì)產(chǎn)生溢出錯(cuò)誤,我們進(jìn)入其內(nèi)部代碼可以看的更清楚,如下圖所示:
這種情況下,我們應(yīng)該使用"S_RTR"指令,它的量程范圍均為實(shí)數(shù),如下圖所示:
不過"S_RTR"指令轉(zhuǎn)換的輸出值為實(shí)數(shù),而我們需要寫入的模擬量輸出地址為無符號(hào)整數(shù)類型,比如QW130,怎么把實(shí)數(shù)轉(zhuǎn)換成無符號(hào)整數(shù)呢?
2、怎樣將實(shí)數(shù)轉(zhuǎn)換為無符號(hào)整數(shù)
首先,我們可以使用Round指令將實(shí)數(shù)轉(zhuǎn)換成近似的雙整數(shù)。接下來就是問題的關(guān)鍵:怎樣把雙整數(shù)轉(zhuǎn)換成無符號(hào)整數(shù)?
如果我們直接使用系統(tǒng)提供的指令"DI_I"會(huì)出現(xiàn)錯(cuò)誤,因?yàn)檫@個(gè)雙整數(shù)超出了有符號(hào)整數(shù)的范圍。我找了半天,沒有發(fā)現(xiàn)能直接進(jìn)行轉(zhuǎn)換的指令。于是自己寫了一個(gè)函數(shù)(子程序)來實(shí)現(xiàn)這個(gè)功能。
打開STEP 7 Micro-WIN/SMART,在程序塊中添加子程序,名稱為Conv_DI2W,在其變量表中聲明變量如下圖所示:
在主程序中調(diào)用子程序Conv_DI2W,為其參數(shù)賦值即可,如下圖所示:
好了,關(guān)于S7-200 SMART模擬量輸出指令使用時(shí)注意問題就先介紹到這里。如果你想學(xué)習(xí)S7-200 SMART PLC ,可以看看這本書《西門子S7-200 SMART PLC應(yīng)用技術(shù)》