技术论坛

跟我一起玩200 smart PLC 关于指针及循环指令的应用续3

作者 主题
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
主题:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 楼主 2017-05-13 08:08:36

跟我一起玩200 smart PLC

关于指针及循环指令的应用续3

   昨天下午,看到“找答案”版区有一个网友提问,说200smart的指针如何使用问题,问题链接:http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=160093&cid=1029

并帖出一程序,问题描述非常详细,给回答省却许多不必要的误解。我看了一下,感觉没有太大的程序错误语法,仅仅只是指定指针地址偏移处出现了地址区的错误,就回了一个贴,居然还被认可了。仔细想了想感觉不妥,似乎在那里出了一点状况(大汗淋漓)。在回帖时写了一句需要验证,又特将此程序剪切下来,回到家里仔细看起来问题还真不少。

网友的原程序: 经过提示,网友已经意识到错误的出处。

LD     Clock_1s
EU                                       //上升沿
LBL    1                                 //标记
MOVD   &VB200, VD100
MOVW   *VD100, VW300
+D     +2, VD200                     //寻址加2
+I     +1, VW400                     //循环+1次

AW>   VW400, 10                    //大于等于10次
=      M0.0
LDN    M0.0                                                     //LD   M0.0
JMP    1                                 //标记                              //当循环10次上 调至标记1处,

                                                        重新进行循环,显然无法清除循环次数。

                                                               

MOVW   +0, VW400                   //重置循环计数器
MOVD   +0, VD100                  //改此处??        //重置寻址起始位置 //                

网友提问的本意应该是想通过指针的地址偏移,将地址自VW200开始的10个数据利用SM0.1标志位的上升沿、指针偏移方式依次写入到数据存储地址VW300中。

 

上述程序的错误:

首先,取初始指针地址不能每一个秒脉冲都取一次。可以调用SM0.1取一次初始指针地址或者每10个循环到达后再调用(这个方法我经常用的)。

其次,LDN M0.0,根据网友意图是当经过10秒后,清除循环次数及指针返回。但是,如果在此处使用LDN,则意义刚好相反,变为没有到达10始终清零。

再次,调用跳转指令JMP,显然有驳于原编程思路,当循环计数10到达后,调用JMP上跳至标记“1”处,反而无法将循环次数与指针返回。索性删除这个跳转,因为没有必要,原因是循环10次到达后,可以通过双整数指令的减法将指针返回了初始指针地址。

另外,我在初次回复中也强调过关于循环次数比较指令的应用。如果是采用AW>10时,指针返回需要上移22个字;如果是采用AW = 10时,指针返回上移20个字的地址,实际上仅仅是循环10次与11次的区别,如果采用的是AW = 10,最后应该数据VW218只能显示一个扫描周期时间。反之,如果采用的是AW > 10,则有1秒的时间显示,这个可以根据实际需要选择。

于是,修改了一下网友的程序,将程序下载到cpu验证,图示:

修改后的程序如下所示:



启用“状态图表”监控程序运行情况:



   看似一个简单的指针调用,实际上里面的内涵还是蛮深奥的,曾经有一位资深大侠的那一句话,我一直记在心里“书读的越多,才知道这个书会变的越厚”。希望那位网友能够看到此贴后改正程序的不合理处,特将此贴通过整理发上来,让大家来看看,加深对西门子200(200smart)指针应用的理解。



 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1394823&b_id=64&s_id=0&num=19

奇侠

经验值: 7405
发帖数: 1268
精华帖: 3
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 1楼 2017-05-13 08:34:40

不错学习了,建议少用等于指令,因为会存在扫描周期问题,可能会使程序不能执行


新手到来 多多指教
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 楼主 2楼 2017-05-13 09:42:16
以下是引用海上漂1在2017-05-13 08:34:40的发言 >1楼

不错学习了,建议少用等于指令,因为会存在扫描周期问题,可能会使程序不能执行

具体问题具体分析,在这里可以。因为这个周期需要数据500mS。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 3楼 2017-05-14 21:47:21

多断电几次,你看看你的程序有没有问题?


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 5313
发帖数: 617
精华帖: 0
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 4楼 2017-05-14 22:16:17

看不习惯IL,比较习惯LD、ST。


决不为短期利益而牺牲未来
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 楼主 5楼 2017-05-15 08:34:53
以下是引用shine在2017-05-14 21:47:21的发言 >3楼

多断电几次,你看看你的程序有没有问题?

还真没有测试过进行多次断电后重新上电的,如果说可能的问题,那只有这些数据的初始化。

shine侠:您能够说说?


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 6楼 2017-05-15 10:40:52
以下是引用WWCWWC在2017-05-15 08:34:53的发言 >

还真没有测试过进行多次断电后重新上电的,如果说可能的问题,那只有这些数据的初始化。

shine侠:您能够说说?

sm0.1,vd100初始化了,但VW400没有。

在VW400>=10的时候,VW400用的move 0,但VD100用的是-22。如果断电的时候VW400不为0呢?V区都是默认断电保持的。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3246
发帖数: 460
精华帖: 0
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 7楼 2017-05-15 10:59:31

谢谢楼主挂念,不过我还有几个疑惑,本来想到项目上实际测试,为节约时间还是麻烦你了。

1、我看SMATER指针帮助大部分是以读为例子,不知道写的话有没有别的要求?

2、SMATER有离线的仿真器没有?

3、还有几个问题在图片上,请看一下!!




不退 不降 不悔
以下网友喜欢您的帖子:

  
侠圣

经验值: 3246
发帖数: 460
精华帖: 0
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 8楼 2017-05-15 11:01:19

对了,储存区间隔是14字节,所以每次+14!


不退 不降 不悔
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 楼主 9楼 2017-05-15 11:08:25
以下是引用花O花在2017-05-15 10:59:31的发言 >7楼

谢谢楼主挂念,不过我还有几个疑惑,本来想到项目上实际测试,为节约时间还是麻烦你了。

1、我看SMATER指针帮助大部分是以读为例子,不知道写的话有没有别的要求?

2、SMATER有离线的仿真器没有?

3、还有几个问题在图片上,请看一下!!



你好:

  我有时间可以测试一下的,但让我一直无法理解的是你究竟有没有仔细的看过我任何的回帖呢?

是否一直停留在你说你的,我又讲我的那些事情。

哦,对了,你是那位在找答案中提问的那位?



 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 楼主 10楼 2017-05-15 11:13:11
以下是引用shine在2017-05-15 10:40:52的发言 >6楼

sm0.1,vd100初始化了,但VW400没有。

在VW400>=10的时候,VW400用的move 0,但VD100用的是-22。如果断电的时候VW400不为0呢?V区都是默认断电保持的。

以下是引用WWCWWC在2017-05-15 08:34:53的发言 >:还真没有测试过进行...

引用详细内容:

还真没有测试过进行多次断电后重新上电的,如果说可能的问题,那只有这些数据的初始化。

shine侠:您能够说说?

你的担心不无道理,可这个问题的起因是我上面已经说过,这个仅仅是网友程序中其中的一个片段,我也是仅仅按这个片段做的一些回复,程序的完整性当然需要进一步验证。

  因为我没有那位网友的完整程序,也仅仅是按上面的一段程序做了一些自己的判断。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 11楼 2017-05-15 11:25:00
以下是引用花O花在2017-05-15 10:59:31的发言 >7楼

谢谢楼主挂念,不过我还有几个疑惑,本来想到项目上实际测试,为节约时间还是麻烦你了。

1、我看SMATER指针帮助大部分是以读为例子,不知道写的话有没有别的要求?

2、SMATER有离线的仿真器没有?

3、还有几个问题在图片上,请看一下!!



这句“节约时间”用的真好


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 12楼 2017-05-15 11:48:56
以下是引用WWCWWC在2017-05-15 11:13:11的发言 >10楼

你的担心不无道理,可这个问题的起因是我上面已经说过,这个仅仅是网友程序中其中的一个片段,我也是仅仅按这个片段做的一些回复,程序的完整性当然需要进一步验证。

  因为我没有那位网友的完整程序,也仅仅是按上面的一段程序做了一些自己的判断。

以下是引用shine在2017-05-15 10:40:52的发言 >6楼:sm0.1,vd100初始化...

引用6楼详细内容:

sm0.1,vd100初始化了,但VW400没有。

在VW400>=10的时候,VW400用的move 0,但VD100用的是-22。如果断电的时候VW400不为0呢?V区都是默认断电保持的。

以下是引用WWCWWC在2017-05-15 08:34:53的发言 >:还真没有测试过进行...

引用详细内容:

还真没有测试过进行多次断电后重新上电的,如果说可能的问题,那只有这些数据的初始化。

shine侠:您能够说说?

其实你不要用-22复位指针,而是直接用MOVD & 就可以了


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 楼主 13楼 2017-05-15 12:03:26
以下是引用shine在2017-05-15 11:48:56的发言 >12楼

其实你不要用-22复位指针,而是直接用MOVD & 就可以了

以下是引用WWCWWC在2017-05-15 11:13:11的发言 >10楼:你的担心不无道理,...

引用10楼详细内容:

你的担心不无道理,可这个问题的起因是我上面已经说过,这个仅仅是网友程序中其中的一个片段,我也是仅仅按这个片段做的一些回复,程序的完整性当然需要进一步验证。

  因为我没有那位网友的完整程序,也仅仅是按上面的一段程序做了一些自己的判断。

以下是引用shine在2017-05-15 10:40:52的发言 >6楼:sm0.1,vd100初始化...

引用6楼详细内容:

sm0.1,vd100初始化了,但VW400没有。

在VW400>=10的时候,VW400用的move 0,但VD100用的是-22。如果断电的时候VW400不为0呢?V区都是默认断电保持的。

以下是引用WWCWWC在2017-05-15 08:34:53的发言 >:还真没有测试过进...

引用详细内容:

还真没有测试过进行多次断电后重新上电的,如果说可能的问题,那只有这些数据的初始化。

shine侠:您能够说说?

区别在哪里?

我这样使用的目的是让楼主能够看清楚指针是怎么样一件东西。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 14楼 2017-05-15 12:42:31
以下是引用WWCWWC在2017-05-15 12:03:26的发言 >13楼

区别在哪里?

我这样使用的目的是让楼主能够看清楚指针是怎么样一件东西。

以下是引用shine在2017-05-15 11:48:56的发言 >12楼:其实你不要用-22复位...

引用12楼详细内容:

其实你不要用-22复位指针,而是直接用MOVD & 就可以了

以下是引用WWCWWC在2017-05-15 11:13:11的发言 >10楼:你的担心不无道理,...

引用10楼详细内容:

你的担心不无道理,可这个问题的起因是我上面已经说过,这个仅仅是网友程序中其中的一个片段,我也是仅仅按这个片段做的一些回复,程序的完整性当然需要进一步验证。

  因为我没有那位网友的完整程序,也仅仅是按上面的一段程序做了一些自己的判断。

以下是引用shine在2017-05-15 10:40:52的发言 >6楼:sm0.1,vd100初始...

引用6楼详细内容:

sm0.1,vd100初始化了,但VW400没有。

在VW400>=10的时候,VW400用的move 0,但VD100用的是-22。如果断电的时候VW400不为0呢?V区都是默认断电保持的。

以下是引用WWCWWC在2017-05-15 08:34:53的发言 >:还真没有测试过进...

引用详细内容:

还真没有测试过进行多次断电后重新上电的,如果说可能的问题,那只有这些数据的初始化。

shine侠:您能够说说?

如果断电再上电,VD100初始化了,指向vw300,VW400没有初始化,假设其等于5,执行6次之后,vw400>10,vw400复位为0,VD100减22之后就寻址到了vb190了,如果多断电几次,就可能出现间接寻址错误了。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 楼主 15楼 2017-05-15 13:03:56
以下是引用shine在2017-05-15 12:42:31的发言 >14楼

如果断电再上电,VD100初始化了,指向vw300,VW400没有初始化,假设其等于5,执行6次之后,vw400>10,vw400复位为0,VD100减22之后就寻址到了vb190了,如果多断电几次,就可能出现间接寻址错误了。

以下是引用WWCWWC在2017-05-15 12:03:26的发言 >13楼:区别在哪里?我这样...

引用13楼详细内容:

区别在哪里?

我这样使用的目的是让楼主能够看清楚指针是怎么样一件东西。

以下是引用shine在2017-05-15 11:48:56的发言 >12楼:其实你不要用-22复...

引用12楼详细内容:

其实你不要用-22复位指针,而是直接用MOVD & 就可以了

以下是引用WWCWWC在2017-05-15 11:13:11的发言 >10楼:你的担心不无道理...

引用10楼详细内容:

你的担心不无道理,可这个问题的起因是我上面已经说过,这个仅仅是网友程序中其中的一个片段,我也是仅仅按这个片段做的一些回复,程序的完整性当然需要进一步验证。

  因为我没有那位网友的完整程序,也仅仅是按上面的一段程序做了一些自己的判断。

以下是引用shine在2017-05-15 10:40:52的发言 >6楼:sm0.1,vd100初始...

引用6楼详细内容:

sm0.1,vd100初始化了,但VW400没有。

在VW400>=10的时候,VW400用的move 0,但VD100用的是-22。如果断电的时候VW400不为0呢?V区都是默认断电保持的。

以下是引用WWCWWC在2017-05-15 08:34:53的发言 >:还真没有测试过...

引用详细内容:

还真没有测试过进行多次断电后重新上电的,如果说可能的问题,那只有这些数据的初始化。

shine侠:您能够说说?

看到这里,我必须要跟正一下了,指针不是初始化,指针地址不包含数据!而是指定指针的起始位置。

假设,你的可能成立,你这个VB190是如何算得?没有将数据寄存器和循环次数初始化的可能错误的结果是第一次循环计算可能会出现数据错误,但第二次循环时这些错误将不复存在!

实际上你这些说明也都是一些自己的疑问?如果按你的意思当循环结束指针返回用movd &,指针会按你的意思返回到起始地址?这些你的问题你都做过验证?更本性的实质问题,我已经在这个开始回复中强调了。



 
以下网友喜欢您的帖子:

  
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 16楼 2017-05-15 14:05:48

好吧,我错了,VD100指向VB200的话,不会出现间接寻址错误,因为每次上电还会有初始化,不会累积,但起始数据可能是VW180到vw200之间的一个地址,根据上次断电时vw400的值而定。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19840
发帖数: 8834
精华帖: 39
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 17楼 2017-05-15 14:12:10

我告诉你190是怎么算出来的。

假设上次断电时vw400=5,V区断电保持

SM0.1时 VD100指向VB200

执行6次,VW400=11,VD100指向VB212,然后执行vw400=0,vd100-22后,VD100指向了VB190,然后就是循环从VW190到VW208传递数据到VW300了

如果不是用-22,而是直接取地址给VD100,就不会取错数据,只不过不是从VW200开始取数据,而是从VW200到VW218之间的其中一个数值开始取,但会一直在这个区间内取值。

这就是用-22 和直接取地址的区别


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3723
发帖数: 486
精华帖: 1
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 18楼 2017-05-15 18:40:26

来学习学习,对指针还不够熟悉。


永无止境!
以下网友喜欢您的帖子:

  
侠圣

经验值: 3246
发帖数: 460
精华帖: 0
回复:跟我一起玩200 smart PLC 关于指针及循环指令的应用续3


只看楼主 19楼 2017-05-22 08:51:38
以下是引用shine在2017-05-15 11:25:00的发言 >11楼

这句“节约时间”用的真好

以下是引用花O花在2017-05-15 10:59:31的发言 >7楼:谢谢楼主挂念,不过...

引用7楼详细内容:

谢谢楼主挂念,不过我还有几个疑惑,本来想到项目上实际测试,为节约时间还是麻烦你了。

1、我看SMATER指针帮助大部分是以读为例子,不知道写的话有没有别的要求?

2、SMATER有离线的仿真器没有?

3、还有几个问题在图片上,请看一下!!



哈哈哈哈,俗话说的好,得了一寸想一尺!!!!!


不退 不降 不悔
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
跟我一起玩200 smart PLC 关于指针及循环指令的应用续3
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。