关于昆仑通态脚本的问题

查看 74|回复 6
作者:jsxzst   
各位大佬,我问一个问题,就是昆仑通态获取到的变量值如何让它保存到显示框内后续还不变化,就是我加到13的时候,等待十秒钟,保存一次数值到第一个显示框,保存后不变化,然后十五秒后这个值保存到第二个显示框内,不变化,实际上变量是一直变化的,我只是想保存那一瞬间的值,主要是现在!DataGetFloat(Data1,Float),获取到的值一直在变化,我不是用的PLC,如果用PLC的话 这个问题我就可以略过了,因为成本问题,所以就一个压力变送器,所以不用PLC,与昆仑通态直连的
下面是我写的脚本,大家帮看一下
IF 压力总>=13.34 THEN
!TimerRun(1)
计时=!TimerValue(1)
ENDIF
IF 计时>10 THEN
!DataGetFloat("压力总",稳定压力)
!TimerStop(1)
ENDIF
IF 稳定压力>0 THEN
!TimerRun(2)
计时=!TimerValue(2)        
ENDIF
IF 计时>15 THEN
!DataGetFloat("压力总",最终压力)
!TimerStop(1)
ENDIF
IF 最终压力>0 THEN
压差=稳定压力-最终压力        
ENDIF
IF 压差=0 THEN
检测结果=""
ELSE
IF 0

压力, 脚本

boy666   

感觉是比较小众的领域啊
jsxzst
OP
  


boy666 发表于 2024-7-5 10:51
感觉是比较小众的领域啊

哎 没办法  大众太贵了
shuisanyue   

不知道能不能解决楼主的问题,我试一试……
[color=]供参考

在昆仑通态这样的工业自动化软件中,通常可以通过脚本编程来实现特定逻辑,包括数据的读取、处理和显示。根据您的描述,您想要在变量值达到一定条件后,将这个瞬时值保存到显示框中,并确保这个值不再变化。以下是一个简化的示例,展示如何实现这一功能:
定义变量:定义一些变量来存储瞬时值和显示框的值。
Float 瞬时值;  // 用于存储瞬时获取的变量值
Float 显示框1; // 第一个显示框的值
Float 显示框2; // 第二个显示框的值
读取变量值:用昆仑通态的函数来读取实时的变量值。
!DataGetFloat("实时变量", 瞬时值);
条件判断和保存值:当变量值达到特定条件时,执行保存操作。
IF 瞬时值 >= 13 THEN
    // 等待10秒后保存到显示框1
    !TimerDelay(10000); // 延迟10秒,单位为毫秒
    显示框1 = 瞬时值;  // 将瞬时值保存到显示框1
    // 显示框1的值不再变化
ENDIF;
再次判断和保存值:在另一个时间点,将值保存到第二个显示框。
IF 显示框1 > 0 THEN
    // 等待15秒后保存到显示框2
    !TimerDelay(15000); // 延迟15秒,单位为毫秒
    显示框2 = 瞬时值;  // 将瞬时值保存到显示框2
    // 显示框2的值不再变化
ENDIF;
更新显示:昆仑通态中通常会有显示组件来显示这些变量的值,您需要在界面上设置这些显示组件,并将它们与显示框1和显示框2变量关联起来。
jsxzst
OP
  


shuisanyue 发表于 2024-7-5 11:23
不知道能不能解决楼主的问题,我试一试……供参考:
在昆仑通态这样的工业自动化软件中,通常可以通过脚 ...

我试着写一下
jsxzst
OP
  


shuisanyue 发表于 2024-7-5 11:23
不知道能不能解决楼主的问题,我试一试……供参考:
在昆仑通态这样的工业自动化软件中,通常可以通过脚 ...

试过了 还是不行 显示框的值还是在变化
shuisanyue   


jsxzst 发表于 2024-7-5 11:39
试过了 还是不行 显示框的值还是在变化

不知道这个思路行不行
定义标志位:定两个标志位控制何时更新显示框。
Bool 标志位1 = False;  // 控制是否更新显示框1
Bool 标志位2 = False;  // 控制是否更新显示框2
定义显示框变量:定两个变量存储显示框的值。
Float 显示框1;
Float 显示框2;
编写获取数据的逻辑:主循环或定时任务中,获取实时变量的值。
!DataGetFloat("实时变量", 瞬时值);
设置触发条件:当条件满足时,设置标志位,并更新显示框。
IF 瞬时值 >= 13 THEN
    // 触发事件A,等待10秒后保存到显示框1
    标志位1 = True;
    !TimerStart(Timer1, 10000);  // 启动计时器,10秒后触发
ENDIF;
编写计时器到期的逻辑:当计时器到期时,检查标志位,并更新显示框。
IF 标志位1 AND !TimerExpired(Timer1) THEN
    显示框1 = 瞬时值;  // 更新显示框1的值
    标志位1 = False;    // 重置标志位,防止再次更新
ENDIF;
设置第二个触发条件:当第一个显示框的值已经设置后,检查是否可以设置第二个显示框。
IF 显示框1 > 0 THEN
    // 触发事件B,等待15秒后保存到显示框2
    标志位2 = True;
    !TimerStart(Timer2, 15000);  // 启动另一个计时器,15秒后触发
ENDIF;
更新第二个显示框:当第二个计时器到期时,检查标志位,并更新显示框2。
IF 标志位2 AND !TimerExpired(Timer2) THEN
    显示框2 = 瞬时值;  // 更新显示框2的值
    标志位2 = False;    // 重置标志位,防止再次更新
ENDIF;
在界面上设置显示框:在昆仑通态的界面上,将显示框1和显示框2分别与显示框1和显示框2变量绑定。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部