哇!终于让我遇到了传说中的程序跑飞。。。 点击:13608 | 回复:59



chinacupor

    
  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-03-07 22:28:34
楼主

故事是这样的。。。

 

      为了偷懒,我做了个限制参数设定范围的子程序。总共涉及3个局部变量,上限、下限(这俩是IN型)、地址(这个是IN/OUT型)

因为都是实数类型,所以LD0/LD4/LD8三个双字地址被占用。

 

      很简单的子程序,无非就是地址大于上限,将上限写入地址。地址小于下限,将下限写入地址。当发生任何强制写入的时候,都将激活一个超限位。

      然后,我的设定项有点多。。。大概有个二十多条吧(貌似这也不算多吧。。。)

 

      然后就在一个网络中,把这个子程序调用了二十多遍。。。用SM0.0来导入,然后很二的把那个公共超限开关导出到Q0.4上。

 

      开CPU,正发愣的工夫,就听见我的二手PLC跟打铃似的,嗷嗷的!然后手忙脚乱把CPU关了。心疼半天把那个超限放到一个M位上,然后把最前面的SM0.0换成I0.3,先跑跑程序看看排除其他的问题。等其他的问题都搞定了,回过头来再强制I0.3闭合,然后实时监测子程序的进出数据。很快就发现不对劲了,因为我的设定项都在数据块里做过定义了,绝对没有任何一条超出上下限范围的。而且在开始的时候这些数据还是很正常的,但跑了大概有两三秒之后,所有的设定项都逐渐变成了不是上限就是下限。。。而且有的是这个设定值成了另一个设定值的上限或者下限之类的。。。到所有设定项都沦陷时,我才发现我连开机都没开,系统还在待机状态下。。。

 

      这算是打摆子打疯了么?我那个子程序编的确实有点像打摆子。。。

 

      然后一怒之下,把那个上下限子程序删了,然后把所有的计算内容都放到主程序里面来摆桌面上,一个临时地址都不用,我看T娘D谁还犯毛病!还是用SM0.0做导游,然后并上N条通路,后来一个网络都放不下了,分两个网络才放完。。。

 

      开CPU,一次性通过。。。在TD里试验了一下超限设置,发现还不错,一旦确认了超限值,立马写成最大值或者最小值。

 

      感想:

1、以后临时变量能不用就不用吧,出于井绳心理,真心不大敢了。。。反正V区地址多得是,老子以后都用全局地址,看你还跟我来劲?

2、TD组态怎么那么占地方?我不过搞了二十多个设定和显示项,数据块就5K多个字节了,就跟写小说似的。。。我有那么啰嗦么?另外,这数据块都存在哪里啊?是EEPROM么?那不是要跟我的掉电保持和程序块争地方?




qqhhdd1

  • 精华:0帖
  • 求助:10帖
  • 帖子:18帖 | 48回
  • 年度积分:0
  • 历史总积分:130
  • 注册:2012年2月28日
发表于:2013-03-09 18:51:22
21楼
太深奥了,不过等我以后遇到类似问题,我会细细体会楼主的这篇好文章,这里先赞你了,向你学习。

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2013-03-09 22:05:36
22楼

LD     SM0.0
LPS
AR>    #地址:LD8, #上限:LD0
MOVR   #上限:LD0, #地址:LD8
AENO
=      #超限:L12.0
LPP
AR<    #地址:LD8, #下限:LD4
MOVR   #下限:LD4, #地址:LD8
AENO
=     #超限:L12.0

 

如果以上程序完全对应下面的图片,请楼主再考虑一下程序逻辑是否有点问题?


zwm00306

  • 精华:0帖
  • 求助:0帖
  • 帖子:16帖 | 1541回
  • 年度积分:0
  • 历史总积分:5963
  • 注册:2001年10月22日
发表于:2013-03-10 08:34:38
23楼
是要跟我的掉电保持和程序块争地方

chinacupor

  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-03-10 10:46:45
24楼
引用 winter938 的回复内容: LD     SM0.0LPSAR>    #地址:LD8, #上限:LD0MOVR   #上限:LD0, #地址:LD8AENO=      #超限:L12.0LPPAR<    #地址:LD8, #下限:LD4MOVR   #下限:LD4, #地址:LD8AENO=     #超限:L12.0 如果以上程序完全对应下面的图片,请楼主再考虑一下程序逻辑是否有点问题?


对呀,那个出毛病的子程序就是这样的啊,在主程序里的一个网络之内调用了二十多遍。。。。这个程序的逻辑上存在问题么?

 

哦,你是说应该把超限位放在下面而不是后面,对么?不过这个问题也不至于导致跑飞啊。。。

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2013-03-10 21:24:44
25楼
楼主:假如上限为10,下限为0,当设置输入为15时,你的子程序运行结果是LD8为10,L12.0为OFF(双线圈以最后执行的结果为准)得不到应有的报警输出.注意程序是自上而下自左而右的顺序执行的,程序中前后的LD8值可能会根据程序变化的,两个比较指令中的LD8即是如此.

chinacupor

  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-03-10 23:34:14
26楼
引用 winter938 的回复内容: 楼主:假如上限为10,下限为0,当设置输入为15时,你的子程序运行结果是LD8为10,L12.0为OFF(双线圈以最后执行的结果为准)得不到应有的报警输出.注意程序是自上而下自左而右的顺序执行的,程序中前后的LD8值可能会根据程序变化的,两个比较指令中的LD8即是如此.


哦,你说的有道理。超限开关应该是置位,而不是线圈。超限开关嗷嗷叫的原因就在于此了,谢谢你,是我马虎了!

 

至于说LD8的值前后不一。。。在我看来,程序走得每一步他都有一个唯一的值啊。比如说,输入15,ENTER确认,此时开始就是15了,然后走到大于的比较器那里还是15,于是激活大于比较,然后走完传送就是10了,再给出超限输出,然后下来一行,小于比较的时候,LD8就是10啊,于是没有激活小于比较,然后往下走了,这个过程不是很正常么?

 

可我在数据块设置的初始值绝对是非常安全的值,既不超上限也不超下限。可走个几秒就都给我甩到上下限去了。。。

qinghang

  • 精华:0帖
  • 求助:3帖
  • 帖子:20帖 | 1090回
  • 年度积分:5
  • 历史总积分:3153
  • 注册:2010年8月04日
发表于:2013-03-11 10:16:17
27楼

刚开始看的有点迷糊,渐渐的看的就有点行道了,学习一下楼主的经验

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2013-03-11 10:54:37
28楼

楼主:超限开关不能用置位指令,修改后的程序如下:

一桶江湖

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 4回
  • 年度积分:0
  • 历史总积分:55
  • 注册:2013年3月11日
发表于:2013-03-11 10:57:56
29楼

学习了,慢慢看,就能看懂了

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2013-03-13 10:00:21
30楼

楼主的问题可解决了?甩到上下限估计还是程序还有其他的问题

阿水--王者之师

  • 精华:24帖
  • 求助:348帖
  • 帖子:1616帖 | 22281回
  • 年度积分:37
  • 历史总积分:98482
  • 注册:2007年3月22日
发表于:2013-03-13 10:14:50
31楼
学习了,还没有看懂是什么意思,好像是所有输出闪烁吧? 200 系列 PLC?

sfx8723

  • 精华:0帖
  • 求助:8帖
  • 帖子:91帖 | 455回
  • 年度积分:0
  • 历史总积分:6079
  • 注册:2012年2月16日
发表于:2013-03-13 10:22:56
32楼
偷懒不是好事情    

竹子--

  • 精华:0帖
  • 求助:9帖
  • 帖子:19帖 | 606回
  • 年度积分:0
  • 历史总积分:2154
  • 注册:2009年11月26日
发表于:2013-03-23 18:58:04
33楼

学习了,慢慢看,就能看懂了

jilingr888

  • 精华:0帖
  • 求助:2帖
  • 帖子:5帖 | 161回
  • 年度积分:62
  • 历史总积分:1383
  • 注册:2012年7月19日
发表于:2013-04-12 10:57:54
34楼

能做好就很可以了,挺行的,

mldmo

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 17回
  • 年度积分:19
  • 历史总积分:881
  • 注册:2012年9月01日
发表于:2013-04-18 12:34:18
35楼

内存分配的问题,估计是真地盘

hjx3110253

  • 精华:0帖
  • 求助:4帖
  • 帖子:7帖 | 130回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2008年5月16日
发表于:2013-04-24 20:42:30
36楼

楼主自己买的二手PLC学习啊?我现在做设备维护,也想学学西门子

flylovemore--王者之师

  • 精华:0帖
  • 求助:4帖
  • 帖子:11帖 | 329回
  • 年度积分:5
  • 历史总积分:1026
  • 注册:2011年2月23日
发表于:2013-04-24 21:48:43
37楼

能做好就很可以了,挺行的

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2013-04-25 09:11:21
38楼

貌似程序不完整吧?  注意前后执行 逻辑。 查看一下系统标志为 

10年一杯

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 25回
  • 年度积分:0
  • 历史总积分:48
  • 注册:2012年6月15日
发表于:2013-05-07 15:50:55
39楼

登陆信箱fescez@126.com,密码:20122012。有好书下载。

kapoktang

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2008年5月18日
发表于:2013-07-18 19:24:03
40楼

太高深了,没有看懂,有机会多了解了解


热门招聘
相关主题

官方公众号

智造工程师