您现在所在的是:

人机界面

回帖:13个,阅读:2529 [上一页] [1] [2] [下一页]
* 帖子主题:

关于威纶通 宏指令

2864
cma_520
文章数:500
年度积分:50
历史总积分:2864
注册时间:2006/11/14
发站内信
发表于:2020/12/3 22:28:59
#0楼
附件 a.jpg

宏指令中如果减少 if语句的条件,改成如下格式的 就可以控制LB0;   为什么有 3个if语句的情况下 在离线模拟时LB0就不受控了。

                           if(表达式)语句1      
                             else
                                   语句2

宏指令也没有报错! 请各位帮我分析下!
     


       承接:非标自动化设备设计、旧设备改良与维修
2864
cma_520
文章数:500
年度积分:50
历史总积分:2864
注册时间:2006/11/14
发站内信
发表于:2020/12/3 23:33:20
#1楼
有朋友说不呢能用嵌套,要分开写,

系统时间和设置时间 ;用年 月 日 来进行比较的 有3种情况都要可以控制LB0,不知道怎么写了。
       承接:非标自动化设备设计、旧设备改良与维修
42315
YXBK 版主
文章数:19441
年度积分:2729
历史总积分:42315
注册时间:2007/4/14
发站内信
2015论坛优秀版主
2015春节活动
2013论坛优秀版主
2012论坛优秀版主
发表于:2020/12/4 7:47:12
#2楼
你说的不受控是什么意思,是不是在触摸屏上面按了不起作用,LB0现在是受宏指令控制的,你在触摸屏上面按是没用的。
大家一起学习
42315
YXBK 版主
文章数:19441
年度积分:2729
历史总积分:42315
注册时间:2007/4/14
发站内信
2015论坛优秀版主
2015春节活动
2013论坛优秀版主
2012论坛优秀版主
发表于:2020/12/4 8:12:15
#3楼
if语句嵌套的写法没问题,但实际逻辑不通呀,

第一个条件是 A>B 才能执行第二个条件,而第二个条件又是 A=B 才能执行第三个条件

这样的条件永远都无法执行到第三个里面去,因为既要大于又要等于,

臣妾做不到呀


如果你需要的是当前年月日都要大于设定年月日的话可以试试

a>d  and  b>e  and  c>f
大家一起学习
2864
cma_520
文章数:500
年度积分:50
历史总积分:2864
注册时间:2006/11/14
发站内信
发表于:2020/12/4 8:38:47
#4楼
以下是引用YXBK2020/12/4 7:47:12的发言:
你说的不受控是什么意思,是不是在触摸屏上面按了不起作用,LB0现在是受宏指令控制的,你在触摸屏上面按是没用的。
LB要受宏指令控制
我要做的类似停机锁屏(此处用LB0表示)的功能
分三种情况;1;如果 年 超期就直接锁屏(即LB0为ON),不考虑月份和日期的问题

         2;如果 是同年份 就接着看 月份 当前月份大于设置月份 也锁屏 不考虑日期的问题

         3; 如果是 同年 同月就看日期  日期到或超过设置日期是 同样锁屏(即LB0为ON)

      以上情况都不成立时(即设置时间没有到 在有效期内) 则   LB0为OFF状态。

现在的问题是该宏指令,如果写一种情况下可以执行,要是三种情况都写上 不知道怎么表达出来
       承接:非标自动化设备设计、旧设备改良与维修
2864
cma_520
文章数:500
年度积分:50
历史总积分:2864
注册时间:2006/11/14
发站内信
发表于:2020/12/4 8:45:03
#5楼
以下是引用YXBK2020/12/4 8:12:15的发言:
if语句嵌套的写法没问题,但实际逻辑不通呀,

第一个条件是 A>B 才能执行第二个条件,而第二个条件又是 A=B 才能执行第三个条件

这样的条件永远都无法执行到第三个里面去,因为既要大于又要等于,

臣妾做不到呀


如果你需要的是当前年月日都要大于设定年月日的话可以试试

a>d  and  b>e  and  c>f

IF 语句不是有种用法是;先判断表达式1的值,若为真,则执行语句1,跳过其它语句,

                                 若为假,则判断表达式2,

                                 依次类推
实际格式不知道怎么写 初学阶段,多多包函!!
       承接:非标自动化设备设计、旧设备改良与维修
42315
YXBK 版主
文章数:19441
年度积分:2729
历史总积分:42315
注册时间:2007/4/14
发站内信
2015论坛优秀版主
2015春节活动
2013论坛优秀版主
2012论坛优秀版主
发表于:2020/12/4 8:51:02
#6楼
回复 #4楼 cma_520
a>d  or  (a==d and b>e) or (a==d and b==e and c>f)
大家一起学习
42315
YXBK 版主
文章数:19441
年度积分:2729
历史总积分:42315
注册时间:2007/4/14
发站内信
2015论坛优秀版主
2015春节活动
2013论坛优秀版主
2012论坛优秀版主
发表于:2020/12/4 9:03:53
#7楼
以下是引用cma_5202020/12/4 8:45:03的发言:
以下是引用YXBK2020/12/4 8:12:15的发言:
if语句嵌套的写法没问题,但实际逻辑不通呀,

第一个条件是 A>B 才能执行第二个条件,而第二个条件又是 A=B 才能执行第三个条件

这样的条件永远都无法执行到第三个里面去,因为既要大于又要等于,

臣妾做不到呀


如果你需要的是当前年月日都要大于设定年月日的话可以试试

a>d  and  b>e  and  c>f

IF 语句不是有种用法是;先判断表达式1的值,若为真,则执行语句1,跳过其它语句,

                                 若为假,则判断表达式2,

                                 依次类推
实际格式不知道怎么写 初学阶段,多多包函!!


若为假,则判断表达式2,

那你的加 else 呀,在第一层就要加,这样才能到第二层去,为真直接输出LB0=1 ,为假LB0=0再去判断下一个表达式


if a>d  then
 SetData(on, "Local HMI", LB, 0, 1)
 else
 SetData(off, "Local HMI", LB, 0, 1)

if a==d and b>e  then
 SetData(on, "Local HMI", LB, 0, 1)
  else
SetData(off, "Local HMI", LB, 0, 1)

if a==d and b==e and c>f  then
SetData(on, "Local HMI", LB, 0, 1)
else
SetData(off, "Local HMI", LB, 0, 1)
end if
end if
end if


6楼的写法 一个if就可以了
[此贴子已经被作者于2020/12/4 9:04:53编辑过]
大家一起学习
6639
机栝
文章数:923
年度积分:807
历史总积分:6639
注册时间:2017/6/12
发站内信
发表于:2020/12/4 9:06:17
#8楼
按照你的要求,你这判断逻辑感觉有问题,下面给各参考,因为不了解威纶的宏编程规则,只能写个大概
if a>d then
SetData(on, "Local HMI", LB, 0, 1)
else
  if a==d and b>e then
  SetData(on, "Local HMI", LB, 0, 1)
  else
     if b==e and c>f then
     SetData(on, "Local HMI", LB, 0, 1)
     else
     SetData(off, "Local HMI", LB, 0, 1)
     end if
  end if
end if
[此贴子已经被作者于2020/12/4 9:18:30编辑过]
知行合一。
2864
cma_520
文章数:500
年度积分:50
历史总积分:2864
注册时间:2006/11/14
发站内信
发表于:2020/12/4 9:21:33
#9楼
多谢各位指点,没有C语言基础,弄这个宏指令,好吃力呀,
目前市面上关于宏指令的介绍又不是太通俗易懂,遇到问题就在这麻烦大家了,再次感谢!
       承接:非标自动化设备设计、旧设备改良与维修

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004