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