您的位置:控制工程论坛网论坛 » PLC与PAC » 300教程之六

ytzidonghua

ytzidonghua   |   当前状态:在线

总积分:11263  2025年可用积分:0

注册时间: 2006-09-18

最后登录时间: 2024-08-02

空间 发短消息加为好友

300教程之六

ytzidonghua  发表于 2007/5/12 18:04:54      1673 查看 0 回复  [上一主题]  [下一主题]

手机阅读

3.6.1  整数数学运算指令
 
L     IW10         //IW10的内容装入累加器1的低字
L     MW14         //累加器1的内容装入累加器2,MW14的值装入累加器1的低字
/I              //累加器2低字的值除以累加器1低字的值,结果在累加器1的低字
T     DB1.DBW2    //累加器1低字中的运算结果传送到数据块DB1的DBW2中

表3-16  整数数学运算指令
语句表    梯形图    描   述
+I -I *I / I ++D -D *D / D MOD    ADD_ISUB_IMUL_IDIV_I——ADD_DISUB_DIMUL_DIDIV_DIMOD_DI    将累加器1,2低字中的整数相加,运算结果在累加器1的低字中累加器2中的整数减去累加器1中的整数,运算结果在累加器1的低字将累加器1,2低字中的整数相乘,32位双整数运算结果在累加器1中累加器2的整数除以累加器1的整数,商在累加器1的低字,余数在累加器1的高字累加器的内容与16位或32位常数相加,运算结果在累加器1中将累加器1,2中的双整数相加,双整数运算结果在累加器1中累加器2中的双整数减去累加器1中的双整数运算结果在累加器1中将累加器1,2中的双整数相乘,32位双整数运算结果在累加器1中累加器2中的双整数除以累加器1中的双整数,32位商在累加器1中, 累加器2中的双整数除以累加器1中的双整数,32位余数在累加器1中
3.6.2  浮点数数学运算指令
表3-17  浮点数数学指令
语句表    梯形图    描述
+R-R*R/RABSSQRSQRTEXPLNSINCOSTANASINACOSATAN     ADD_RSUB_RMUL_RDIV_RABSSQRSQRTEXPLNSINCOSTANASINACOSATAN    将累加器1,2中的浮点数相加,浮点数运算结果在累加器1中累加器2中的浮点数减去累加器1中的浮点数,运算结果在累加器1中将累加器1,2中的浮点数相乘,浮点数乘积在累加器1中累加器2中的浮点数除以累加器1中的浮点数,商在累加器1,余数丢掉取累加器1中的浮点数的绝对值求浮点数的平方求浮点数的平方根求浮点数的自然指数求浮点数的自然对数求浮点数的正弦函数求浮点数的余弦函数求浮点数的正切函数求浮点数的反正弦函数求浮点数的反余弦函数求浮点数的反正切函数
OPN    DB17         //打开数据块DB17
L         DBD0 //数据块DB17的DBD0中的浮点数装入累加器1
SQR//求累加器1中的浮点数的平方,运算结果在累加器1中
AN        OV            //如果运算时没有出错
JC        OK            //跳转到标号OK处
BEU                    //如果运算时出错,功能块无条件结束
OK:    T         DBD4        //累加器1中的运算结果传送到数据块DB17的DBD4中

求以10为底的对数时,应将自然对数值除以2.302585(10的自然对数值)。例如
lg100=ln100/2.302585=4.605170/2.302585=2
【例3-6】用浮点数对数指令和指数指令求5的立方。计算公式为:
 
L         L#5
DTR
LN
L        3.0
*R
EXP
RND
T        MW40
浮点数三角函数指令的输入值为弧度,角度值乘以p/180,可转换为弧度值。
 
【例3-7】压力变送器的量程为0~10MPa,输出信号为4~20mA,S7-300的模拟量输入模块的量程为4~20mA,转换后的数字量为0~27 648,设转换后的数字为N,试求以kPa为单位的压力值。
    解:0~10MPa(0~10 000kPa)对应于转换后的数字0~27 648,转换公式为
P =(10 000 ´ N)/ 27 648  (kPa)                     (3-1)
值得注意的是在运算时一定要先乘后除,否则会损失原始数据的精度。假设A/D转换后的数据N在MD6中,以kPa为单位的运算结果在MW10中。图3-58是实现式(3-1)中的运算的梯形图程序。  
 
图3-58  算术运算指令
语句表中“*I”指令的运算结果为32位整数,梯形图中MUL_I指令的运算结果为16位整数。A/D转换后的最大数字为27 648,所以要使用MUL_DI。双字除法指令DIV_DI的运算结果为双字,运算结果不会超过16位正整数的最大值(32 767)。
3.6.3  移位与循环移位指令
表3-20  移位指令(对累加器1中的数操作,结果在累加器1中)
名称    语句表    梯形图    描述
有符号整数右移有符号双整数右移16位字左移16位字右移16位双字左移16位双字右移    SSISSDSLWSRWSLDSRD    SHR_ISHR_DISHL_WSHR_W SHL_DWSHR_DW    整数逐位右移,空出的位添上符号位双整数逐位右移,空出的位添上符号位字逐位左移,空出的位添0字逐位右移,空出的位添0双字逐位左移,空出的位添0双字逐位右移,空出的位添0
双字循环左移双字循环右移双字+CC1循环左移双字+CC1循环右移    RLDRRDRLDARRDA    ROL_DWROR_DW- -    双字循环左移双字循环右移双字通过CC1(一共33位)循环左移双字通过CC1(一共33位)循环右移
(1)用指令中的参数<number>来指定移位位数,16位移位指令为0~15,32位移位指令为0~32。如果<number>等于0,移位指令被当作NOP(空操作)指令来处理。
(2)指令没有参数<number>,移位位数放在累加器2的最低字节中(0~255)。如果移位位数等于0,移位指令被当作NOP(空操作)指令来处理。
有符号字的移位位数>16时,移位后被移位的数的各位全部变成了符号位。
L         MW4      //将MW4的内容装入累加器1的低字
SSI        6         //累加器1低字中的有符号数右移6位,结果仍在累加器1的低字中
T         MW8    //累加器1低字中的运算结果传送到MW8中
表3-21  整数右移6位前后的数据
内容    累加器1的高字    累加器1的低字
移位前    0101 1111 0110 0100     1001 1101 0011 1011
右移6位后    0101 1111 0110 0100     1111 1110 0111 0100
L         +3        //将+3装入累加器1 
L        MW20        //将累加器1的内容装入累加器2,MW20的内容装入累加器1 
SSI                //累加器1低字中的有符号数右移3位 
JP        NEXT        //如果最后移入CC1的位为1,跳转到标号NEXT处
表3-23  字右移6位移位前后的数据 
内容    累加器1的高字    累加器1的低字
移位前    0101 1111 0110 0100    0101 1101 0011 1011
右移6位后    0101 1111 0110 0100    0000 0001 0111 0100
表3-24  双字循环左移4位前后累加器中的数据
内容    累加器1的高字    累加器1的低字
移位前    0101 1111 0110 0100     0101 1101 0011 1011
右移4位后    1111 0110 0100 0101     1101 0011 1011 0101
表3-25  双字通过CC1循环左移1位前后累加器中的数据
内容    CC1    累加器1的高字    累加器1的低字
移位前    X    0101 1111 0110 0100     0101 1101 0011 1011
左移后    0    1011 1110 1100 1000    1011 1010 0111 011X
 
图3-60  有符号数右移指令
3.6.4  字逻辑运算指令
表3-26  字逻辑运算指令
语句表    梯形图    描   述
AWOWXOWADODXOD    WAND_WWOR_WWXOR_WWAND_DWWOR_DWWXOR_DW    字与字或字异或双字与双字或双字异或
表3-27  字逻辑运算的结果
位    15                 0
逻辑运算前累加器1的低字    0101 1001 0011 1011
逻辑运算前累加器2的低字或常数    1111 0110 1011 0101
“与”运算后累加器1的低字    0101 0000 0011 0001
“或”运算后累加器1的低字    1111 1111 1011 1111
“异或”运算后累加器1低字    1010 1111 1000 1110
L     QW10         //QW10的内容装入累加器1的低字
L     W#16#000F     //累加器1的内容装入累加器2, W#16#000F装入累加器1的低字
OW                //累加器1低字与W#16#000F逐位相或,结果在累加器1的低字中
T     QW10        //累加器1低字中的运算结果传送到QW10中
 
MB9是MW8中的低字节,M9.1和M9.2对应于输入信号I0.1和I0.2。
3.6.5 累加器指令
表3-28  累加器指令
语句表    描  述
TAKPUSHPOPENTLEAVEINCDEC+AR1+AR2BLDNOP 0NOP 1    交换累加器1,2的内容入栈出栈进入ACCU堆栈离开ACCU堆栈累加器1最低字节加上8位常数累加器1最低字节减去8位常数AR1的内容加上地址偏移量AR2的内容加上地址偏移量程序显示指令(空指令)空操作指令空操作指令
 
【例3-9】用语句表程序实现浮点数运算(DBD0+DBD4)/(DBD8–DBD12)。
L     DBD0         //DBD0中的浮点数装入累加器1 
L     DBD4         //累加器1的内容装入累加器2,DBD4中的浮点数装入累加器1 
+R                //累加器1,2中的浮点数相加,结果保存在累加器1中
L    DBD8        //累加器1的内容装入累加器2,DBD8中的浮点数装入累加器1
ENT                //累加器3的内容装入累加器4,累加器2的中间结果装入累加器3     
L    DBD12        //累加器1的内容装入累加器2,DBD12中的浮点数装入累加器1
–R                //累加器2的内容减去累加器1的内容,结果保存在累加器1中
LEAVE            //累加器3的内容装入累加器2,累加器4的中间结果装入累加器3
/R                //累加器2的(DBD0+DBD4)除以累加器1的(DBD8–DBD12)
T    DBD16        //累加器1中的运算结果传送到DBD16
3.加、减8位整数指令
L     MB4         //MB4的内容装入累加器1的最低字节
INC 1            //累加器1最低字节的内容加1,结果存放在累加器1的最低字节
T     MB4        //运算结果传回MB4
1楼 0 0 回复