| 作者 | 主题 |
|---|---|
|
yming 至圣
经验值:138363 发帖数:23137 精华帖:880 |
楼主
主题:关于使用全局变量和指针
请教一下:在200和300PLC中,使用V(M)变量和使用地址指针是不是效率一样?
我感觉(没验证)地址指针好像就是绝对地址。应该存取更快。 那位知道此判断是否正确?
学而时习之,不亦说乎?温故而知新,不亦乐乎?
|
|
yming 至圣 经验值:138363 发帖数:23137 精华帖:880 |
楼
主题:回复:关于使用全局变量和指针
是呀。一开始只要程序能正确运行就可以了。
慢慢地就开始做库程序,程序模块化,以此提高工作效率。 再慢慢地追求程序执行的效率。
学而时习之,不亦说乎?温故而知新,不亦乐乎?
|
|
yanxiao 版主 经验值:28603 发帖数:12143 精华帖:46 |
楼
主题:回复:关于使用全局变量和指针
呵呵,求同存异。
你先说你的扫描时间是指什么? |
|
无名 侠士 经验值:1768 发帖数:904 精华帖:11 |
楼
主题:回复:关于使用全局变量和指针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 |
楼
主题:回复:关于使用全局变量和指针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 |
楼
主题:回复:关于使用全局变量和指针
形成指针后以绝对地址访问,速度肯定要快,但是形成指针的代价比较高,因为使用指针实际上要访问两个地址的变量,所以最终它的速度要比直接使用变量慢。目前好象也无法完全编译,否则就不能上载梯形图了。
“程序长短和扫描时间没有必然的联系”这总问题是没必要去扣字眼的,理解起来很简单:直接写1000条赋值语句,和用指针加循环来赋值,前者程序远远长于后者,但执行时间反而要短。当然,反驳这句话所用的结论本身也是成立的,但跟这句话并不冲突。
生命存在的方式只有两种:腐烂或燃烧
|