首页 上一页 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




fankturkey

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

我是用300 写的, 200还不知道怎么写。

fankturkey

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

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

fankturkey

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 40回
  • 年度积分:0
  • 历史总积分:428
  • 注册:2007年6月29日
发表于:2010-10-28 17:06:48
23楼
好久不用200写了,没有实验台。可能有错误。

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-10-28 20:50:53
24楼
fankurkey  网友:200与300编程语句相似,用300编也可以,我是常用300编程,但习惯用梯形图编,对你这种用语句编程看得费劲,但不管用哪种编程语言,在处理循环语句时,都要考虑扫描周期的影响,如果你忽略了它,象在计算机上处理循环程序那样的编程,肯定是不对的,不用试验台也可验证程序正确, 只用PLC与编程器(计算机)就行:程序下载后,运行程序,监视开方于被开方数的数据区就行。再有你的被开方数是通过ID0送入NN里,占用的输入口太多了,如果你有组态王这类编程软件,直接设置一个变量连接NN,在组态王中输入输给该变量就可以了。如计算机只能做编程用,你可按我原文说的方法用4个按钮,4个输入口,就可把数据置入NN里。祝你成功!

fankturkey

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 40回
  • 年度积分:0
  • 历史总积分:428
  • 注册:2007年6月29日
发表于:2010-10-28 21:38:31
25楼
计算和跳转如果比较多的话,我认为还是用语句表比较好。控制逻辑用梯形图来编比较方便。300里,不是所有的STL命令在梯形图里有,尤其是处理数据计算的时候,用L 和 T 比较方便。循环可以有两种形式,一种是使用系统循环来做,比如每个系统循环计数器+1,或者累加系统时间,自己就可以做定时器了。

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-10-29 09:28:42
26楼
我编的程序没有用JMP转移指令,使用比较指令来判断程序的走向,利用PLC的扫描周期进行循环处理,运算均采用整数运算,你再使把劲,把此程序搞出,当每次输入的数都能运算正确时,你会感到非常欣悦的。我再等等,看还有没有人能参与编程于讨论,最后我会把我编的梯形图贴出的。

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2011-02-24 10:41:34
27楼
       一晃有4个月没有人回帖,我遵守诺言,今天把我编的梯形图贴出来供大家参考讨论,编写此程序的目的不是为了使用(S7200有开方指令),而是解决象该流程图这样的循环语句如何用PLC编程实现,这里我起个抛砖引玉的作用,望大家参与讨论!
        (为想使此题目变为擂台项目,故暂将该程序撤掉一部分,请谅解)
          验证程序时,如有上位机,可用上位机对被开方数VD100置入新数据,再把开放数上传计算机,按一下I1.0按钮,就可看到开方数值。
         如没有上位机,只用PLC运行时也可:增加3个按钮,分别连接PLC的I1.1、I1.2、I1.3三个输入点,I1.3用作被开方数清0 ,I1.1用作置数,I1.2用作移位,举例:程序为运行状态,监视主程序第2条中的VD100(被开方数)和MW6(开方值),如果被开方数为625,先求出它的16进制数:271。
         操作:1、置数前按一下I1.3,使VD100=0
       2、置数:按2下 I1.1,此时VD100=2,再按一下 I1.2,此时VD100=32,再按7下 I1.1,此时VD100=39,再按一下    I1.2, 此时VD100=624,再按7下 I1.1, 此时VD100=625,置数完毕。
       3、运算:按一下 I1.0 ,观看第2条:VD100=0       MW6=25(开方值) 



热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页