西門子S7-1200PLC模塊山東代理商

西門子S7-300/400的梯形圖中的整數(shù)數(shù)學(xué)運算指令
改用整數(shù)數(shù)學(xué)運算指令實現(xiàn)式(3-1)的壓力P(kPa)計算:
P= (10000×N)/27 648 (3-2)
在編程時一定要先乘后除,否則會損失原始數(shù)據(jù)的精度。應(yīng)根據(jù)指令的輸入、輸出數(shù)據(jù)可能的大值選用整數(shù)運算指令或雙整數(shù)運算指令。
假設(shè)用于測量壓力的AI模塊的通道地址為PIW320,A/D轉(zhuǎn)換后的數(shù)字N的值為0~27 648,乘以10 000以后乘積可能超過16位整數(shù)的允許范圍,因此應(yīng)采用雙整數(shù)的乘法指令MUL_DI。除法指令中的被除數(shù)是雙整數(shù),因此應(yīng)采用雙整數(shù)除法指令DIV_DI。
首先用指令I_DI將PIW320中的原始數(shù)據(jù)(16位整數(shù))轉(zhuǎn)換為雙整數(shù)(見圖3-106和隨書光盤中的例程“指令應(yīng)用”),雙字乘、除法指令中的常數(shù)應(yīng)使用“L#”開始的32位的雙整數(shù)常數(shù)。
圖3-106 壓力計算程序
如果某一方框指令的運算結(jié)果超出了整數(shù)運算指令的允許范圍,狀態(tài)位OV和OS將為1,使能輸出ENO為0,不會執(zhí)行該方框指令右邊的指令。
雙字除法指令DIV_DI的運算結(jié)果為雙字,但是由式(3-2)可知運算結(jié)果實際上不會超過16位正整數(shù)的大值32767,所以運算結(jié)果在MD26的低字MW28中。
浮點數(shù)(實數(shù))數(shù)學(xué)運算指令(見表3-20)對累加器1和累加器2中的32位IEEE格式的浮點數(shù)進(jìn)行運算,運算結(jié)果在累加器1。浮點數(shù)的數(shù)據(jù)類型為REAL。
表3-20 浮點數(shù)函數(shù)運算指令
語句表 | 梯形圖 | 描 述 |
+R | ADD_R | 累加器1、2的浮點數(shù)相加,浮點數(shù)運算結(jié)果在累加器1 |
-R | SUB_R | 累加器2的浮點數(shù)減去累加器1的浮點數(shù),浮點數(shù)運算結(jié)果在累加器1 |
*R | MUL_R | 累加器1、2的浮點數(shù)相乘,浮點數(shù)乘積在累加器1 |
/R | DIV_R | 累加器2的浮點數(shù)除以累加器1的浮點數(shù),浮點數(shù)商在累加器1,余數(shù)被丟掉 |
ABS | ABS | 累加器1的浮點數(shù)取值,浮點數(shù)運算結(jié)果在累加器1 |
SQR | SQR | 求累加器1的浮點數(shù)的平方,浮點數(shù)運算結(jié)果在累加器1 |
SQRT | SQRT | 求累加器1的浮點數(shù)的平方根,浮點數(shù)運算結(jié)果在累加器1 |
EXP | EXP | 求累加器1的浮點數(shù)的自然指數(shù),浮點數(shù)運算結(jié)果在累加器1 |
LN | LN | 求累加器1的浮點數(shù)的自然對數(shù),浮點數(shù)運算結(jié)果在累加器1 |
SIN | SIN | 求累加器l的浮點數(shù)的正弦函數(shù),浮點數(shù)運算結(jié)果在累加器1 |
COS | COS | 求累加器1的浮點數(shù)的余弦函數(shù),浮點數(shù)運算結(jié)果在累加器1 |
TAN | TAN | 求累加器1的浮點數(shù)的正切函數(shù),浮點數(shù)運算結(jié)果在累加器1 |
ASIN | ASIN | 求累加器1的浮點數(shù)的反正弦函數(shù),浮點數(shù)運算結(jié)果在累加器1 |
ACOS | ACOS | 求累加器1的浮點數(shù)的反余弦函數(shù),浮點數(shù)運算結(jié)果在累加器1 |
ATAN | ATAN | 求累加器1的浮點數(shù)的反正切函數(shù),浮點數(shù)運算結(jié)果在累加器1 |
(1)語句表與梯形圖中的整數(shù)乘法指令的區(qū)別
語句表中的整數(shù)乘法指令“*I”將累加器1、2低字的16位整數(shù)相乘,32位雙整數(shù)運算結(jié)果在累加器1。如果整數(shù)乘法的運算結(jié)果超出了16位整數(shù)允許的范圍,OV和OS位均為1。
梯形圖中的整數(shù)乘法指令輸出變量OUT的數(shù)據(jù)類型為INT(整數(shù)),所以梯形圖中的整數(shù)乘法指令的乘積為16位,而不是32位。
(2)用帶常數(shù)的加法指令“+”簡化程序
加法指令“+”將累加器1低字的16位整數(shù)與指令中的16位常數(shù)(-32768~+32767)相加,16位整數(shù)運算結(jié)果在累加器1的低字。也可以將累加器1中的32位整數(shù)與指令中的32位常數(shù)相加,32位整數(shù)運算結(jié)果在累加器1。
下面的程序用來實現(xiàn)雙整數(shù)運算MD20+MD24-200,運算結(jié)果送MD28。
L MD 20 //MD20的內(nèi)容裝入累加器1
L MD 24 //累加器1的內(nèi)容裝入累加器2,MD24的值裝入累加器1
+D //累加器1、2的值相加,結(jié)果存放在累加器1
+ L# - 200 //累加器1的值減去200,結(jié)果儲存在累加器1
T MD 28 //累加器1的運算結(jié)果傳送到MD28
如果將上面程序中的指令“+ L#-200”改為沒有操作數(shù)的雙字減法指令“-D”,應(yīng)在該指令的前面增加一條“L L#200”指令。
(3)求32位除法運算的余數(shù)
雙整數(shù)除法指令能得32位的商,余數(shù)被丟掉??梢杂?/span>MOD指令來求雙整數(shù)除法的余數(shù)。
整數(shù)與浮點數(shù)數(shù)學(xué)運算指令對累加器1和累加器2的數(shù)據(jù)進(jìn)行運算,運算結(jié)果保存在累加器1(見圖3-105)。對于有4個累加器的CPU,累加器3的內(nèi)容復(fù)制到累加器2,累加器4的內(nèi)容傳送到累加器3,累加器4原有的內(nèi)容保持不變。數(shù)學(xué)運算指令影響狀態(tài)位CC1、CC0、OV和OS,詳細(xì)的情況見指令的在線幫助。

圖3-105 數(shù)學(xué)運算中的累加器
整數(shù)數(shù)學(xué)運算指令的操作見表3-19。下面是整數(shù)加法運算的例子:
L IW 10 //IW10的內(nèi)容裝入累加器l的低字
L MW 14 //累加器1的內(nèi)容裝入累加器2,MW14的值裝入累加器1低字
+I //累加器1與累加器2低字的值相加,結(jié)果在累加器1的低字
T DB1.DBW25 //累加器1低字中的運算結(jié)果傳送到數(shù)據(jù)塊DB 1的DBW25
在語句表中輸入程序時,不能使用中文的加號和減號。
循環(huán)移位指令將累加器1的整個內(nèi)容逐位循環(huán)左移或循環(huán)右移0~32位(見表3-17),即從累加器1移出來的位又送回累加器1另一端空出來的位,后移出的位裝入狀態(tài)字的CC1位。循環(huán)移位的位數(shù)可以用指令中的參數(shù)<number>來,也可以放在累加器2的低字節(jié)。移位位數(shù)等于0時,循環(huán)移位指令被當(dāng)作NOP(空操作)指令來處理。
圖3-103和圖3-104給出了雙字循環(huán)左移8位的例子。
表3-17 循環(huán)移位指令
圖3-103 雙字循環(huán)左移指令
西門子S7-1200PLC模塊山東代理商