技术论坛

 回复:关于使用全局变量和指针

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

经验值:138365
发帖数:23138
精华帖:880
楼主    2008-02-26 22:32:36
主题:关于使用全局变量和指针
请教一下:在200和300PLC中,使用V(M)变量和使用地址指针是不是效率一样?
我感觉(没验证)地址指针好像就是绝对地址。应该存取更快。
那位知道此判断是否正确?
学而时习之,不亦说乎?温故而知新,不亦乐乎?
yming
至圣

经验值:138365
发帖数:23138
精华帖:880
    2008-02-28 09:56:34
精华帖  主题:回复:关于使用全局变量和指针
是呀。一开始只要程序能正确运行就可以了。
慢慢地就开始做库程序,程序模块化,以此提高工作效率。
再慢慢地追求程序执行的效率。

学而时习之,不亦说乎?温故而知新,不亦乐乎?
yanxiao
版主

经验值:28603
发帖数:12143
精华帖:46
    2008-02-28 11:12:24
精华帖  主题:回复:关于使用全局变量和指针
呵呵,求同存异
你先说你的扫描时间是指什么?
无名
侠士

经验值:1768
发帖数:904
精华帖:11
    2008-02-28 16:47:49
精华帖  主题:回复:关于使用全局变量和指针
quote:以下是引用yming在2008-02-28 15:20:10的发言:
还是取了一个224xp试了一下。报告如下:
1、使用Fill 填充255个连续字, 程序中连续执行10次。扫描周期9-10ms。
2、使用BMW 移动255个连续字,程序中连续执行10次。扫描周期22-23ms。
3、使用指针 每次源、目标指针+2,程序中连续执行10次。使用BITIM计时255次。扫描周期1-2ms。但是全部完成要260ms,原因是要在255次扫描才能完成。
有很大的区别。要是在260ms内源数据发生变化了呢?两种结果将会完全不同。

对第3项,提出些异议,yming老师说的是"每次源、目标指针+2" 这种是异步的方式,每次只移动一个字;实际也可以在每个扫描周期内移动5个字,25个字,或者一起全部移完(即:同步方式),这样就保证了数据的一致性,全部移完的时间也大大降低,但扫描周期的时间增加了,但绝对比260ms要少的多.这就看是对数据一致性的要求高,还是对扫描的效率要求更高了.
师出无名
yanxiao
版主

经验值:28603
发帖数:12143
精华帖:46
    2008-02-28 20:05:48
精华帖  主题:回复:关于使用全局变量和指针
quote:以下是引用yming在2008-02-28 12:37:18的发言:
在S7-200中如果你使用那个“顺序控制继电器”SCR和使用V变量判断执行工序步结果是完全不同的。S变量位没有置一的程序段是根本不会扫描到的,因此尽管全部程序指令很多,但是扫描执行的指令却很少,因此是非常快的。

1、关于这一句“S变量位没有置一的程序段是根本不会扫描到的”再商榷。
我曾研究过S=0时指令有没被扫到这个问题,大要在1年前有个关于有条件执行指令的贴中也贴过具体的例子,那个贴子的结论是:S=0时指令一样被扫描,只是大多数的指令执行条件不成立而不执行。
我现在临时想一个例子,可以下到PLC中去验证:
network 1
ld sm0.0
r S0.0,1
s Q0.0,1
network 2
lscr S0.0
network 3
ldn sm0.0
= q0.0
network 4
scre
我预测一下结果,那个Q0.0置不了1,因为在S0.1的体内被清零了!
有兴趣的朋友可以下载下去试。
2、程序不被扫到我认为有两种情况:1)子程序不调用时里面的指令不会扫到,因此是整个跳过而不费时间;2)被JMP指令跳过的指令也不被扫描。
醉书生
侠士

经验值:1348
发帖数:718
精华帖:25
    2008-02-29 00:24:18
精华帖  主题:回复:关于使用全局变量和指针
形成指针后以绝对地址访问,速度肯定要快,但是形成指针的代价比较高,因为使用指针实际上要访问两个地址的变量,所以最终它的速度要比直接使用变量慢。目前好象也无法完全编译,否则就不能上载梯形图了。
“程序长短和扫描时间没有必然的联系”这总问题是没必要去扣字眼的,理解起来很简单:直接写1000条赋值语句,和用指针加循环来赋值,前者程序远远长于后者,但执行时间反而要短。当然,反驳这句话所用的结论本身也是成立的,但跟这句话并不冲突。
生命存在的方式只有两种:腐烂或燃烧
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。