技术论坛

 帮我看看,为啥这个子程序里面的时间跑的特别快。

返回主题列表
作者 主题
zbhdm
至圣

经验值: 12635
发帖数: 1579
精华帖: 1
楼主    2021-06-03 19:04:53
主题:帮我看看,为啥这个子程序里面的时间跑的特别快。 精华帖  精编帖 

用SMW22在子程序中用于计时,就是对SMW22不断的累加。下载程序发现,这个累加的时间跑的的特别快,大约是正常时间的两倍。也就是定时5000ms,大约用时2s就到了。通过监控“时间”变量连接的vw100,也就2秒钟,就跑到了5000多了。

请教各位老师,这个程序编的有问题,还是SMW22用的不合适?




努力学习西门子
YUKJ
至圣

经验值: 17172
发帖数: 2944
精华帖: 6
1楼    2021-06-03 19:58:53
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

 SMW22是PLC的最后一次扫描的扫描时间,只要PLC运行它就在每个周期周期都在刷新,它与星-三角的工况无关。也就是说,这里用错了计时方法。

应该使用时间间隔定时器(开始间隔时间指令、计算间隔时间指令),也可以使用普通的计时器。

 

zbhdm
至圣

经验值: 12635
发帖数: 1579
精华帖: 1
2楼    2021-06-03 22:29:50
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

谢谢YUKJ老师的帮助。

程序中,我用了SMW22进行累计,变相的把它当成一个定时器使用。您说的“用错了计时方法”,我不是很理解,能详细说说哪里用错了吗?

再次感谢。

努力学习西门子
yanxiao
至圣

经验值: 26133
发帖数: 11970
精华帖: 43
3楼    2021-06-03 23:28:30
精编帖  主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

使用SMW22似乎也有道理,就是不知SMW22有多精准。


使用32位的1ms定时器更好,不会产生定时不准问题。

BITIM、CITIM

zbhdm
至圣

经验值: 12635
发帖数: 1579
精华帖: 1
4楼    2021-06-04 08:12:14
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

再次感谢yanxiao版主的帮助。

用BITIM、CITIM指令没问题的。

至于用SMW22作为子程序中的定时器,这个还是在网上看到D版的200smart的VIP视频,西门子官方老师给的建议。

努力学习西门子
YUKJ
至圣

经验值: 17172
发帖数: 2944
精华帖: 6
5楼    2021-06-04 09:00:51
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

  SMW22是PLC的最后一次扫描的扫描时间,它的定时精度是1mS。当我们在查看PLC的扫描周期时里面有3个数据:最大、最小和最近(或者当前),这个最最近(或者当前)的数值就是来自SMW22。

在某种特殊的情况下 SMW22也可以用来作为计时器使用,例如用来统计PLC运行时间。

但是楼主的星-三角题目是要计时从星形启动后 延时多少时间后转入三角形运行(猜想的),当然不能使用SMW22进行累计。

holdkcsxyz
至圣

经验值: 13008
发帖数: 1814
精华帖: 22
6楼    2021-06-04 15:53:42
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

程序里要有最基本的安全互锁,时序互锁,工艺互锁等,按版主讲的用间隔定时器。

winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
7楼    2021-06-04 17:58:14
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

建议楼主实际测试一下你这段程序运行的时候扫描周期最大,最小,最后分别是多少。拉长扫描周期也许时间偏差会小些。

工控爱好者
芳季
至圣

经验值: 66574
发帖数: 14746
精华帖: 100
8楼    2021-06-04 18:37:20
精华帖  精编帖  主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

我问你一个问题,扫描周期0.9毫秒,那么这个计时器会写多少毫秒?它只能显示一毫秒,所以一个扫描周期白白多了0.1毫秒,误差就是这么来的了。

你们都没有感觉到有这个问题的吗?用这个来做计时,怎么会准的嘞?

芳季
至圣

经验值: 66574
发帖数: 14746
精华帖: 100
9楼    2021-06-05 06:37:12
精编帖  主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

问题是22是增量,Citime是亚绝对。假设扫描周期是0.5毫秒,22只能最少显示1。3个周期,用22计算的计得3毫秒了。用Citime计算的第一个周期得0毫秒时差,第二周期得1毫秒时差,第三个周期可能还是1毫秒时差。这就是区别了。

22到底刷不刷新都是显示1。你就把这个1加进去了。

winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
10楼    2021-06-05 08:19:46
精编帖  主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

      假设一程序扫描周期为1.4毫秒且是恒稳的周期,观察下面的数据

时刻       0  1.4  2.8  4.2  5.6  7

增量A         1     1     2     1    2(只对时刻的整数部分进行计算)

增量B         1     2     1     2    1  (对时刻数据小数部分四舍五入变成整数后进行计算)

      如果把增量AB拿来做累计都可以得到7这一结果,据此SMW22的数值采用的同样的获取方法的话楼主的程序应该是可以准确计时的。

      假设一程序扫描周期为0.4毫秒且是恒稳的周期,观察下面的数据

时刻       0  0.4  0.8  1.2  1.6  2

增量A         0     0     1     0    1(只对时刻的整数部分进行计算)

增量B         0     1     0     1    0  (对时刻数据小数部分四舍五入变成整数后进行计算)

      如果把增量AB拿来做累计都可以得到2这一结果,据此SMW22的数值采用的同样的获取方法的话楼主的程序也应该是可以准确计时的。

      问题就是SMW22的数值获取机制我们是不得而知的,尤其是后一种情形当扫描周期小于1毫秒时出现增量为0,此时是否还按上面的数据规律给出就有待验证了。如果不是楼主的程序计时在扫描周期小于1毫秒时会有问题。

工控爱好者
winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
11楼    2021-06-05 08:46:43
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。
工控爱好者
zbhdm
至圣

经验值: 12635
发帖数: 1579
精华帖: 1
12楼    2021-06-05 12:45:55
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

明白了,再次感谢winter938老师的帮助。

努力学习西门子
芳季
至圣

经验值: 66574
发帖数: 14746
精华帖: 100
13楼    2021-06-05 13:57:23
精编帖  主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

你什么时候看见过22会显示0的?我估计无论什么小数位,都会被进位。就算5.01毫秒也写6毫秒。

有四舍五入当然误差没有那么大。四舍五入的实质是计算内部值是精确的,仅仅舍了出来的值用于非精密用途,所以舍弃也没什么所谓。

但是计时这事情,是不能舍的,每个周期都是3.5毫秒,无论你舍还是进,结果都是错误的,舍了,一直累加3毫秒,少了很多。进了,一直累加4毫秒。多了很多。都错。

唯独citime指令尺度是亚绝对的。随时来读取都是绝对值。0.5毫秒的扫描周期可能读得两个0的结果,

winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
14楼    2021-06-05 15:38:00
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

      鉴于对SMW22的未知,在主程序中加入下面一段,楼主的子程序中用SMW22的地方换成下面程序中的VD8.此段程序占用VD0,VD4,VD8.

LD SM0.0

BITIM VD0

MOVD VD0,AC0

-D VD4,AC0

MOVD AC0,VD8

MOVD VD0,VD4

      在扫描周期大于1毫秒的情况下每个扫描周期中SMW22应该都有非0的数值因此13楼芳季的担心是不是可以缓解一些?以前的老200扫描周期很少小于1毫秒,smart 的快了很多楼主的程序如果就那些的话这个是否小于1毫秒需要实测。

工控爱好者
芳季
至圣

经验值: 66574
发帖数: 14746
精华帖: 100
15楼    2021-06-05 16:08:03
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

我可以说,我没有担心过。因为从来都不理解22的计时原理,从来都不使用22这个数据。

我的问题点是当扫描周期是有小数位的时候,这个小数位它怎么处理我不知道。比如6.5毫秒,是算几毫秒?

不懂,我就避开。也没想过去测试证明它。

我想22这个数据仅仅用来了解一下扫描周期,不能用来计时的。

可能有个被载入史册的测频率的程序会影响了很多人。(况且,这个库不能多次调用的。)

Zane
至圣

经验值: 76200
发帖数: 19331
精华帖: 377
16楼    2021-06-05 22:14:21
精编帖  主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

扫描周期越大,使用SMW22的误差就越小,

10毫秒扫描周期的误差是< 10% , 

20毫秒扫描周期的误差是< 5%

Zane 注册自动化系统工程师 Always save before download
Kapok_ZXM
奇侠

经验值: 7248
发帖数: 556
精华帖: 2
17楼    2021-06-05 22:20:48
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

 是不是你的子程序中全部使用局部变量导致的哦?还全局变量试试?

低调做人 高调做事
winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
20楼    2021-06-07 09:50:00
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

建议楼主把自己的程序加一段连续若干个扫描周期读取SMW22并记录的程序,上机实际观测一下SMW22究竟是怎样变化的,比猜测更有实际意义,对参与这个帖子讨论的人也有帮助。

工控爱好者
winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
22楼    2021-06-09 08:16:28
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

楼主把下面图片中的程序放到你的主程序中即可,观察VW100到VW398的100个数据就是连续的100个扫描周期记录的SMW22数值。可在程序运行一段时间后让CPU处于STOP状态再观察以避免数据的变化影响观察分析。



工控爱好者
winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
30楼    2021-06-11 09:51:05
精编帖  主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

 假设一程序扫描周期为1.4毫秒且是恒稳的周期,观察下面的数据

时刻                          0  1.4  2.8  4.2  5.6  7

增量A                            1     1     2     1    1或2(只对时刻的整数部分进行计算)

增量B                            1     2     1     2    1  (对时刻数据小数部分四舍五入变成整数后进行计算)

增量C                            2     1     2     1    1或2   (对时刻数据向上取整后进行计算)

可能的SMW22增量       2     1     2     1    1或2      (SMW22最小为1)


 假设一程序扫描周期为3.4毫秒且是恒稳的周期,观察下面的数据

时刻                     0   3.4  6.8  10.2  13.6  17

增量A                        3     3     4      3       3或4(只对时刻的整数部分进行计算)

增量B                        3     4     3      4       3  (对时刻数据小数部分四舍五入变成整数后进行计算)

增量C                        4     3     4      3       3或4    (对时刻数据向上取整进行计算)

可能的SMW22增量   4     3     4      3       3或4      (SMW22最小为1)


 假设一程序扫描周期为0.4毫秒且是恒稳的周期,观察下面的数据

时刻                      0  0.4  0.8  1.2  1.6  2

增量A                        0     0     1     0    0或1(只对时刻的整数部分进行计算)

增量B                        0     1     0     1    0  (对时刻数据小数部分四舍五入变成整数后进行计算)

增量C                        1     0     1     0    0或1    (对时刻数据向上取整进行计算)

可能的SMW22增量   1     1      1     1    1      (SMW22最小为1)

        

 假设一程序扫描周期为0.8毫秒且是恒稳的周期,观察下面的数据

时刻                      0  0.8  1.6  2.4  3.2  4

增量A                        0     1     1     1    0或1(只对时刻的整数部分进行计算)

增量B                        1     1     0     1    1  (对时刻数据小数部分四舍五入变成整数后进行计算)

增量C                        1     1     1     1    0或1    (对时刻数据向上取整进行计算)

可能的SMW22增量   1     1      1     1    1      (SMW22最小为1)


 假设一程序扫描周期为0.3毫秒且是恒稳的周期,观察下面的数据

时刻                      0  0.6  0.9  1.2  1.5  1.8  2.1   2.4  2.7  3

增量A                        0     0     1     0    0     1      0    0     0或1(只对时刻的整数部分进行计算)

增量B                        1     0     0     1    0     0      0    1     0(对时刻数据小数部分四舍五入变成整数后进行计算)

增量C                        1     0     1     0    0     1      0    0     0或1(对时刻数据向上取整进行计算)

可能的SMW22增量   1     1      1     1    1    1      1     1     1(SMW22最小为1



鉴于以上数据建议楼主把程序扫描周期拉长到1毫秒以上再观察。可能会有意想不到的效果。

工控爱好者
zbhdm
至圣

经验值: 12635
发帖数: 1579
精华帖: 1
32楼    2021-06-11 12:31:25
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。

再上传两个图片。。

反正以后我是不会用SMW22做定时了。。。。




努力学习西门子
winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
33楼    2021-06-11 13:02:32
主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。
从这个数据看其实定时比较一致,做一个更长时间的定时再观察一下一致性。如果没问题我觉得可以放心用。
工控爱好者
winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
34楼    2021-06-13 10:37:45
精编帖  主题:回复:帮我看看,为啥这个子程序里面的时间跑的特别快。
工控爱好者
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。