从网上看到“如何使用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
//测试结果, NN = 4 MM =2.000000e+000
NN = 6 MM =2.000000e+000
NN = 1000 MM =3.100000e+001
NN = 6000 MM =7.700000e+001
NN = 20000 MM =1.270000e+002
TITLE =
VERSION : 0.1
VAR_INPUT
NN : INT ; //被开方数
n_sign : INT ; //开方数有效位数标志
END_VAR
VAR_OUTPUT
MM : REAL ; //开方数
END_VAR
VAR_TEMP
Y1 : DINT ; //2的n次方存数区
Y2 : DINT ; //2的2n次方存数区
Y1_real : REAL ;
Y2_real : REAL ;
xx_real : REAL ; //运算寄存器
Tcounter : INT ; //计数器
Tnumber : DINT ;
xx_int : INT ;
NN_real : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =
L 0.000000e+000;
T #MM;
L 0;
T #n_sign;
L #NN;
T #xx_int;
N1L1: L #xx_int;
SLD 2;
T #xx_int;
L #n_sign;
INC 1;
T #n_sign;
L #xx_int;
L 0;
==I ;
JCN N1L1;
//----------------
L 1;
T #Tnumber;
L #n_sign;
N1L2: T #Tcounter;
L 0;
==I ;
JC N1L3;
L 2;
L #Tnumber;
*D ;
T #Tnumber;
L #Tcounter;
DEC 1;
T #Tcounter;
JU N1L2;
N1L3: L #Tnumber;
T &