首页 上一页 1 2 下一页 尾页

提供流程图谁能编出正确的梯形图? 点击:3875 | 回复:27



wyb2866255

    
  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-10-11 17:28:22
楼主

从网上看到“如何使用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




sovish521

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 122回
  • 年度积分:0
  • 历史总积分:551
  • 注册:2008年12月11日
发表于:2010-10-11 23:16:15
1楼
呵呵,有意思,不过在s7-300下用STL编就太简单了。非要用梯形图嘛。要花点时间,我前排占位,后排继续(*^__^*)

lemonplc

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:25
  • 注册:2009年5月22日
发表于:2010-10-12 08:30:19
2楼

是啊,用L 和T还有跳转的话很方便的~

wanderwant

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 116回
  • 年度积分:0
  • 历史总积分:216
  • 注册:2010年9月10日
发表于:2010-10-12 13:20:47
3楼
我是 来学习的呵呵               

奥特曼带我走

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 394回
  • 年度积分:0
  • 历史总积分:2188
  • 注册:2010年4月22日
发表于:2010-10-12 13:45:24
4楼

学习的!!!!!

!!!!

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-10-13 12:29:37
5楼
1楼网友:可以用STL语句编程,也可用单片机编程,只要变得正确,你会感到乐趣与自足感的。

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-10-15 21:16:25
6楼

怎么还没有人编出开方梯形图,记住在处理循环运算时要考虑PLC的特殊性,热盼有人能编出它,我已又编出开立方的流程图和梯形图。如开平方能解决,按流程图编写开立方就不成问题了。

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-10-21 21:49:43
7楼
已过十天了,还没有人能编出开方梯形图?再顶一下!

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-10-27 08:59:26
8楼
热盼:有人能编出开方梯形图.

他山石

  • 精华:3帖
  • 求助:3帖
  • 帖子:169帖 | 2343回
  • 年度积分:4
  • 历史总积分:5792
  • 注册:2004年8月29日
发表于:2010-10-27 10:46:16
9楼
妤间富骞插悧,鐐嚜宸卞悧,鎯抽棶涓嬫湁澶氬ぇ鐢ㄥ

fankturkey

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 40回
  • 年度积分:0
  • 历史总积分:428
  • 注册:2007年6月29日
发表于:2010-10-27 11:15:56
10楼
我来试试吧

fankturkey

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 40回
  • 年度积分:0
  • 历史总积分:428
  • 注册:2007年6月29日
发表于:2010-10-27 12:15:24
11楼
in: NN real //被开方数 n_sign int //开方数有效位数标志 out: MM real //开方数 inout: Y1 int //2的n次方存数区 Y2 int //2的2n次方存数区 temp: xx real //运算寄存器 Tcounter int //计数器 Tnumber int //临时变量 Y1_real real Y2_real real L 0 T #MM T #n_sign L #NN T #xx N1L1: L #xx SLD 2 T #xx L #n_sign INC T #n_sign L #xx L 0.0 ==R JCN N1L1 //---------------- L 1 T #Tnumber L #n_sign N1L2: T #Tcounter L 0 ==I JC N1L3 L 2 L Tnumber *I T Tnumber L #Tcounter DEC JU N1L2 N1L3: L #Tnumber T #Y1 ITD DTR T #Y1_real //----------------- //---------------- L 1 T #Tnumber L #n_sign L 2 *I N1L2: T #Tcounter L 0 ==I JC N1L3 L 2 L Tnumber *I T Tnumber L #Tcounter DEC JU N1L2 N1L3: L #Tnumber T #Y2 ITD DTR T #Y2_real //----------------- L NN L Y2_real >=R JCN N1L4 L #NN L #Y2_real -R T #NN L #MM L #Y1_real +R T #MM N1L4: L #MM L #Y1_real *R T #xx L Y1_real SRD T Y1_real L Y2_real SRD T Y2_real L #xx L #Y2_real +R T #xx L #NN L #xx >=R JCN N1L5 L #NN L #xx -R T #NN L #MM L #Y1_real +R T #MM N1L5: L #n_sign L 1 -I T #n_sign L 0 ==I JCN N1L4 end: NOP 0

fankturkey

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 40回
  • 年度积分:0
  • 历史总积分:428
  • 注册:2007年6月29日
发表于:2010-10-27 12:20:18
12楼
in: NN real //被开方数 n_sign int //开方数有效位数标志 out: MM real //开方数 inout: Y1 int //2的n次方存数区 Y2 int //2的2n次方存数区 temp: xx real //运算寄存器 Tcounter int //计数器 Tnumber int //临时变量 Y1_real real Y2_real real L 0 T #MM T #n_sign L #NN T #xx N1L1: L #xx SLD 2 T #xx L #n_sign INC T #n_sign L #xx L 0.0 ==R JCN N1L1 //---------------- L 1 T #Tnumber L #n_sign N1L2: T #Tcounter L 0 ==I JC N1L3 L 2 L Tnumber *I T Tnumber L #Tcounter DEC JU N1L2 N1L3: L #Tnumber T #Y1 ITD DTR T #Y1_real //----------------- //---------------- L 1 T #Tnumber L #n_sign L 2 *I N1L2: T #Tcounter L 0 ==I JC N1L3 L 2 L Tnumber *I T Tnumber L #Tcounter DEC JU N1L2 N1L3: L #Tnumber T #Y2 ITD DTR T #Y2_real //----------------- L NN L Y2_real >=R JCN N1L4 L #NN L #Y2_real -R T #NN L #MM L #Y1_real +R T #MM N1L4: L #MM L #Y1_real *R T #xx L Y1_real SRD T Y1_real L Y2_real SRD T Y2_real L #xx L #Y2_real +R T #xx L #NN L #xx >=R JCN N1L5 L #NN L #xx -R T #NN L #MM L #Y1_real +R T #MM N1L5: L #n_sign L 1 -I T #n_sign L 0 ==I JCN N1L4 end: NOP 0

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-10-27 14:33:29
13楼
fankurkey:你好,非常感谢你的回帖,你是编出程序的第一人.由于我没搞过你用的机型语言,所以不能加以评论,你上机运行结果如何,有什么体会,能否在此讲一讲,会对其他网友有帮助的.如有需要,我可以把我编的程序发给你,作以比较与参考.谢谢!.

nyz5760

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 13回
  • 年度积分:0
  • 历史总积分:76
  • 注册:2007年6月27日
发表于:2010-10-27 14:39:45
14楼

 先按照你的程序流程画出顺序功能图,然后再把功能图转换为梯形图,就可以了!

nyz5760

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 13回
  • 年度积分:0
  • 历史总积分:76
  • 注册:2007年6月27日
发表于:2010-10-27 14:40:06
15楼
先按照你的程序流程画出顺序功能图,然后再把功能图转换为梯形图,就可以了!

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-10-27 15:43:25
16楼
nyz5760:你好!能否将你画出的顺序功能图及转换的梯形图上传过来,让大家学习学习,此流程图在计算机及单片机上编程是很容易实现的,但在PLC上编程要动点脑筋,编好程序后,最好实际运行一下,看看计算结果是否正确.这是我的一点看法.谢谢!

fankturkey

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 40回
  • 年度积分:0
  • 历史总积分:428
  • 注册:2007年6月29日
发表于:2010-10-28 08:32:44
17楼

//测试结果, 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 &

fankturkey

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 40回
  • 年度积分:0
  • 历史总积分:428
  • 注册:2007年6月29日
发表于:2010-10-28 10:10:17
18楼
N1L3: L #Tnumber;
T #Y1;
DTR ;
T #Y1_real;
//-----------------

//-----------------
L 1;
T #Tnumber;

L #n_sign;
L 2;
*I ;
N1L7: T #Tcounter;
L 0;
==I ;
JC N1L6;

L 2;
L #Tnumber;
*D ;
T #Tnumber;

L #Tcounter;
DEC 1;
T #Tcounter;
JU N1L7;
N1L6: L #Tnumber;
T #Y2;
DTR ;
T #Y2_real;
//-----------------

L #NN;
ITD ;
DTR ;
T #NN_real;


L #NN_real;
L #Y2_real;
>=R ;
JCN N1L4;

L #NN_real;
L #Y2_real;
-R ;
T #NN_real;

L #MM;
L #Y1_real;
+R ;
T #MM;

L #xx_int;
ITD ;
DTR ;
T #xx_real;


N1L4: L #MM;
L #Y1_real;
*R ;
T #xx_real;

L #Y1; //--
SSD 1;
T #Y1;
DTR ;
T #Y1_real;

L #Y2;
SSD 2;
T #Y2;
DTR ;
T #Y2_real;

L #xx_real;
L #Y2_real;
+R ;
T #xx_real;

L #NN_real;
L #xx_real;
>=R ;
JCN N1L5;

L #NN_real;
L #xx_real;
-R ;
T #NN_real;

L #MM;
L #Y1_real;
+R ;
T #MM;
N1L5: L #n_sign;
L 1;
-I ;
T #n_sign;

L 0;
==I ;
JCN N1L4;
NOP 0;

END_FUNCTION

fankturkey

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 40回
  • 年度积分:0
  • 历史总积分:428
  • 注册:2007年6月29日
发表于:2010-10-28 10:12:57
19楼

调试中问题比较多的是格式转换问题。位移时用长整型 与 浮点数进行运算。

@关于精度问题,我还是不太了解,小数点后都舍去了吗?

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-10-28 14:08:25
20楼
 fankurkey网友:很好!该流程图只适于整数运算,小数点后都舍去.你可将任意一个数X平方求得的数代入被开方数NN中,运算结果应等于X就可证明你编的程序是正确的.我编程是用双整数运算,不用浮点数运算.

热门招聘
首页 上一页 1 2 下一页 尾页