西门子S7-1200PLC模块山东代理商

西门子S7-300/400的梯形图中的整数数学运算指令
改用整数数学运算指令实现式(3-1)的压力P(kPa)计算:
P= (10000×N)/27 648 (3-2)
在编程时一定要先乘后除,否则会损失原始数据的精度。应根据指令的输入、输出数据可能的值选用整数运算指令或双整数运算指令。
假设用于测量压力的AI模块的通道地址为PIW320,A/D转换后的数字N的值为0~27 648,乘以10 000以后乘积可能超过16位整数的允许范围,因此应采用双整数的乘法指令MUL_DI。除法指令中的被除数是双整数,因此应采用双整数除法指令DIV_DI。
首先用指令I_DI将PIW320中的原始数据(16位整数)转换为双整数(见图3-106和随书光盘中的例程“指令应用”),双字乘、除法指令中的常数应使用“L#”开始的32位的双整数常数。
图3-106 压力计算程序
如果某一方框指令的运算结果超出了整数运算指令的允许范围,状态位OV和OS将为1,使能输出ENO为0,不会执行该方框指令右边的指令。
双字除法指令DIV_DI的运算结果为双字,但是由式(3-2)可知运算结果实际上不会超过16位正整数的值32767,所以运算结果在MD26的低字MW28中。
浮点数(实数)数学运算指令(见表3-20)对累加器1和累加器2中的32位IEEE格式的浮点数进行运算,运算结果在累加器1。浮点数的数据类型为REAL。
表3-20 浮点数函数运算指令
语句表 | 梯形图 | 描 述 |
+R | ADD_R | 累加器1、2的浮点数相加,浮点数运算结果在累加器1 |
-R | SUB_R | 累加器2的浮点数减去累加器1的浮点数,浮点数运算结果在累加器1 |
*R | MUL_R | 累加器1、2的浮点数相乘,浮点数乘积在累加器1 |
/R | DIV_R | 累加器2的浮点数除以累加器1的浮点数,浮点数商在累加器1,余数被丢掉 |
ABS | ABS | 累加器1的浮点数取值,浮点数运算结果在累加器1 |
SQR | SQR | 求累加器1的浮点数的平方,浮点数运算结果在累加器1 |
SQRT | SQRT | 求累加器1的浮点数的平方根,浮点数运算结果在累加器1 |
EXP | EXP | 求累加器1的浮点数的自然指数,浮点数运算结果在累加器1 |
LN | LN | 求累加器1的浮点数的自然对数,浮点数运算结果在累加器1 |
SIN | SIN | 求累加器l的浮点数的正弦函数,浮点数运算结果在累加器1 |
COS | COS | 求累加器1的浮点数的余弦函数,浮点数运算结果在累加器1 |
TAN | TAN | 求累加器1的浮点数的正切函数,浮点数运算结果在累加器1 |
ASIN | ASIN | 求累加器1的浮点数的反正弦函数,浮点数运算结果在累加器1 |
ACOS | ACOS | 求累加器1的浮点数的反余弦函数,浮点数运算结果在累加器1 |
ATAN | ATAN | 求累加器1的浮点数的反正切函数,浮点数运算结果在累加器1 |
(1)语句表与梯形图中的整数乘法指令的区别
语句表中的整数乘法指令“*I”将累加器1、2低字的16位整数相乘,32位双整数运算结果在累加器1。如果整数乘法的运算结果超出了16位整数允许的范围,OV和OS位均为1。
梯形图中的整数乘法指令输出变量OUT的数据类型为INT(整数),所以梯形图中的整数乘法指令的乘积为16位,而不是32位。
(2)用带常数的加法指令“+”简化程序
加法指令“+”将累加器1低字的16位整数与指令中的16位常数(-32768~+32767)相加,16位整数运算结果在累加器1的低字。也可以将累加器1中的32位整数与指令中的32位常数相加,32位整数运算结果在累加器1。
下面的程序用来实现双整数运算MD20+MD24-200,运算结果送MD28。
L MD 20 //MD20的内容装入累加器1
L MD 24 //累加器1的内容装入累加器2,MD24的值装入累加器1
+D //累加器1、2的值相加,结果存放在累加器1
+ L# - 200 //累加器1的值减去200,结果储存在累加器1
T MD 28 //累加器1的运算结果传送到MD28
如果将上面程序中的指令“+ L#-200”改为没有操作数的双字减法指令“-D”,应在该指令的前面增加一条“L L#200”指令。
(3)求32位除法运算的余数
双整数除法指令能得32位的商,余数被丢掉。可以用MOD指令来求双整数除法的余数。
整数与浮点数数学运算指令对累加器1和累加器2的数据进行运算,运算结果保存在累加器1(见图3-105)。对于有4个累加器的CPU,累加器3的内容复制到累加器2,累加器4的内容传送到累加器3,累加器4原有的内容保持不变。数学运算指令影响状态位CC1、CC0、OV和OS,详细的情况见指令的在线帮助。

图3-105 数学运算中的累加器
整数数学运算指令的操作见表3-19。下面是整数加法运算的例子:
L IW 10 //IW10的内容装入累加器l的低字
L MW 14 //累加器1的内容装入累加器2,MW14的值装入累加器1低字
+I //累加器1与累加器2低字的值相加,结果在累加器1的低字
T DB1.DBW25 //累加器1低字中的运算结果传送到数据块DB 1的DBW25
在语句表中输入程序时,不能使用中文的加号和减号。
循环移位指令将累加器1的整个内容逐位循环左移或循环右移0~32位(见表3-17),即从累加器1移出来的位又送回累加器1另一端空出来的位,移出的位装入状态字的CC1位。循环移位的位数可以用指令中的参数<number>来指定,也可以放在累加器2的字节。移位位数等于0时,循环移位指令被当作NOP(空操作)指令来处理。
图3-103和图3-104给出了双字循环左移8位的例子。
表3-17 循环移位指令
图3-103 双字循环左移指令
西门子S7-1200PLC模块山东代理商