大家好!
如下是CASE指令帮助文本的部分内容,我对其内容没有什么疑问,但是想使用其例子来改进,来表达我对该指令的疑问,
示例
以下示例说明了该指令的工作原理:
SCL
CASE "Tag_Value" OF
0 :
"Tag_1" := 1;
1,3,5 :
"Tag_2" := 1;
6...10 :
"Tag_3" := 1;
16,17,20...25 :
"Tag_4" := 1;
ELSE
"Tag_5" := 1;
END_CASE;
SCL
改进的例子问题表达如下:
这个程序是 根据 "Tag_Value"步调编号来对相应的 变量进行赋值
例如 "Tag_Value"=0 时 "Tag_1" := 1;
"Tag_Value"=1 时 "Tag_1" := 2;
CASE "Tag_Value" OF
0 :
"Tag_1" := 1;
"Tag_Value":=1
1 :
"Tag_1" := 2;
"Tag_Value":=2
2 :
"Tag_1" := 3;
"Tag_Value":=3
3:
"Tag_1" := 4;
"Tag_Value":=0
ELSE
"Tag_1" := 0;
END_CASE;
大家可能看出来了,这是一个顺序控制程序,根据 "Tag_Value"=X对 "Tag_1"进行不同的赋值
与STL 的JL 应用是一个思路,那么问题来了,例如 "Tag_Value"=0 时 执行0: 这一步 "Tag_1" := 1;
那么这一步执行完成以后程序还会去扫描 1: 2: 3:下面这几步的程序吗?当然条件不满足是不会去执行的,但是程序会不会去做判断?还是说执行第0:这一步以后也不进行下一步的判断,程序就直接跳回块开始的地方继续执行?
如果每一步都去进行判断,那么是不是会非常浪费资源?STL使用了JU +BEU等等条件来使状态进行跳转,这样只执行相应的步调编号的程序,而没有过多的去执行那些无畏的判断。
我知道SCL肯定可以做到,但是我不知道如何去灵活应用,在论坛看到几个帖子说是使用了CASE指令导致CPU的扫描周期延长,我想是不是这方面的应用不恰当引起的呢?如果能够搭配STL一样的JU + BEU等等指令是不是就可以减少无畏的判断呢?因为顺序控制,基本上一个扫描周期也只可能执行一个步号,所以没有必要去判断哪些无畏的条件,条件满足只执行满足条件的步号,其余的一概不执行,等下一个扫描周期再做判断,如果步号改变,再执行对应的步号的程序。周而复始。。。
希望大家讨论一下,多多指教!!