我做了简单的测试 works2 1.77f
在函数内写了以下句子
IF ok<In_1 THEN
Par:=TRUE;
ELSE IF ok>In_2 THEN
Par:=FALSE;
END_IF;
END_IF;
函数:=Par;
在主程序调用了以上函数
传入参数:函数(ok,In_1,In_2) ok,In_1,In_2参数都是word型 函数返回值bool型
点位1:=函数(ok,5,9);
点位2:=函数(ok,11,20);
我理解情况是:
1:设定ok值为 0 那么 点位1 点位2 都为true
2:设定ok值<5那么 点位1为true 点位2true
3: 设定ok值>=5且<9 那么 点位1为false 点位2true
4:设定ok值为11~20 那么 点位1为false 点位2false
5: 设定ok值为>=20 那么点位1false 点位2false
实际情况是:
1:设定ok值为 0 那么 点位1 点位2 都为true
2:设定ok值<5那么 点位1为true 点位2true
3: 设定ok值>=5且<9 那么 点位1为true 点位2true
4:设定ok值为11~20 那么 点位1为false 点位false
5: 设定ok值为>=20 那么点位1false 点位2false
为什么实际情况下ok值未超过20时 点位2却false了呢 ??
如果上面的问题是因为函数释放了 ok值取值在11~20时未运行 点位2复位为初始false状态
那么点位1 为什么在ok值取值为5~9时 点位1又为ture状态
是程序运行问题吗?
用西门子scl使用同样代码他的结果是函数未得到运行则无论点位1,点位2都初始为false的情况
楼主最近还看过
"小楼居士" 的回复,发表在1楼
对内容: 【你少了个ELSEIF ok
-----------------------------------------------------------------
首先感谢老铁的热心回复但是 我看的手册IF语句里面的用法
根据下列规则处理 IF 语句:
1.如果第一个表达式的值为 TRUE,执行在 THEN之后的语句 在 END_IF之后恢复程序。
2.如果第一个表达式的值为 FALSE,ELSIF分支的表达式将估算。如果 ELSIF分支的一个布 尔表达式为 TRUE, 执行在 THEN之后的语句 在 END_IF之后恢复程序。
3. 如果没有 ELSIF分支的布尔表达式为 TRUE,执行在 ELSE之后的语句(或,如果没有 ELSE 分支,无更多的语句可执行) 在 END_IF之后恢复程序。 ELSIF语句的任意数字都可以被编程。
注意可以没有任意的 ELSIF分支和 /或 ELSE分支。可以用同样的方式解释犹如没有语句证 明分支的存在。