从网上看到“如何使用PLC开方”一帖,看到大家讨论很热烈,也勾起我的兴趣,想起1983年搞单片机设计时,曾用多项式展开公式推导出开平方的数学模型,并编出流程图,用在6800微机上。找出流程图后,就在S7-200上按流程图编程,编程中发现PLC有它的特殊性,费了好大的劲,才把梯形图编写正确(被开方数是双字,最大数99999999),本想直接把梯形图拿出供大家分享,但考虑到这也是锻炼和提高编程者编程思维的好机会,就只拿出流程图,让大家参与按流程图编出PLC梯形图(哪种型号都可),对有上微机的可在与PLC通讯的编程软件里(如组态王)设置二个I/O变量,分别是PLC对应的被开方数与开方数,再设一个按钮做执行运算命令,这样你可在上微机上设置被开放的数,置好后,按一下运算按钮,就可看到被开方的数值。如只用PLC编程,外置被开方数可以这样做:用4个输入点分别接4个按钮,K1做清0按钮,即使被开放数存数区(如VD100)=0,防止置数错误时用;K2做置数按钮,即每按一下,被开放数+1;K3做移位按钮,即每按一下,被开放数左移4位。为防止打连发,K2与K3的输入应连接断电延时定时器(300-500ms延时),用定时器的后沿去做加1或移位运算;K4做运算命令,即按一下K4就执行一次运算。再要说明的是,置数应为16进制码,如十进制数“625”,它的16进制数为“271”,置数时这样操作:先按K1,使VD100=0,点击二下K2,VD100=2,点击一下K3,VD100=32,再点击7下K2,VD100=39,再点击一下K3,VD100=624,最后点击一下K2,VD100=625。(这是在程序运行中监视看到的),置好数后,按一下K4,就会看到,VD100=0,而开方数=25。下面就是开方程序流程图,欢迎大家积极参与,我会在适当时候粘贴我的梯形图的。谢谢大家1
MOVD ID0, #NN //装载操作数
MOVD 0, #MM //清零
MOVW 0, #n_sign //清零
MOVD #NN, #xx
LBL 1
SLD #xx, 2
INCW #n_sign
LDD<> #xx, 0
JMP 1
MOVD 1, #Tnumber
MOVW #n_sign, #Tcounter
LBL 2
LDW= #Tcounter, 0
JMP 3
*D 2, #Tnumber
DECW #Tcounter
JMP 2
LBL 3
MOVD #Tnumber, #Y1
//--------------------
MOVD 1, #Tnumber
*I 2, #n_sign
MOVW #n_sign, #Tcounter
LBL 7
LDW= #Tcounter, 0
JMP 6
*D 2, #Tnumber
DECW #Tcounter
JMP 7
LBL 6
MOVD #Tnumber, #Y2
LDD< #NN, #Y2
JMP 4
-D #Y2, #NN
+D #Y1, #MM
LBL 4
MOVD #MM, #Tnumber
*D #Y1, #Tnumber
MOVD #Tnumber, #xx
SRD #Y1, 1
SRD #Y2, 2
+D #Y2, #xx
LDD< #NN, #xx
JMP 5
-D #xx, #NN
+D #Y1, #MM
LBL 5
-I 1, #n_sign
LDW<> #n_sign, 0
JMP 4
END