微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OSCAT BUILDING 功能块 BLIND_NIGHT 似乎不起作用

如何解决OSCAT BUILDING 功能块 BLIND_NIGHT 似乎不起作用

我遇到了 BLIND_NIGHT 问题。这个功能块在我的情况下似乎不起作用。日落时分我已经连接到 PLC 什么也没发生 我的代码如下所示:

FUNCTION_BLOCK Blind
VAR_INPUT
   xBlindDown: BOOL;
   xBlindUp: BOOL;
   xAutoSunset: BOOL := FALSE;
   xAutoSunrise: BOOL := FALSE;
   tSunsetoffset: TIME;
   tSunriSEOffset: TIME;
END_VAR
VAR_OUTPUT
   xBlindControlUp: BOOL;
   xBlindControlDown: BOOL;
END_VAR
VAR
   BlindInput: OSCAT_BUILDING.BLIND_INPUT := (SINGLE_SWITCH := FALSE,MAX_RUNTIME := T#25S,MANUAL_TIMEOUT := T#60M,MASTER_MODE := TRUE,IN := TRUE);
   BlindControl: OSCAT_BUILDING.BLIND_CONTROL_S := (T_UP:=T#20S,T_DN:=T#18S);
   BlindNight: OSCAT_BUILDING.BLIND_NIGHT;
   BlindSecurity: OSCAT_BUILDING.BLIND_Security;
   
   SunTime: OSCAT_BASIC.SUN_TIME := (LATITUDE := rLatitude,LONGITUDE := rLongitude);
   CurrentDateTimeUTC: DATE_AND_TIME;
   CurrentDateUTC: DATE;   
END_VAR

这是代码

CurrentDateTimeUTC := FuGetDateAndTime();
CurrentDateUTC := TO_DATE(CurrentDateTimeUTC);

SunTime(UTC := CurrentDateUTC);

BlindInput(
   POS:= BlindControl.POS,S1:= xBlindUp,S2:= xBlindDown,);

//GVL.xInit is a global variable which is set to true after first PLC cycle
//this switch of IN state is required to stop moving of blinds after a power failure of PLC update
IF (GVL.xInit = TRUE) THEN
   BlindInput.IN := FALSE;
END_IF

BlindNight(
   UP := BlindInput.QU,DN := BlindInput.QD,S_IN := BlindInput.STATUS,PI := BlindInput.PO,DTIN := CurrentDateTimeUTC,SUNRISE := SunTime.SUN_RISE,SUNRISE_OFFSET := tSunriSEOffset,SUNSET := SunTime.SUN_SET,SUNSET_OFFSET := tSunsetoffset,E_NIGHT := xAutoSunset,E_DAY := xAutoSunrise
);

BlindSecurity(
   UP := BlindNight.QU,DN := BlindNight.QD,S_IN := BlindNight.STATUS,PI := BlindNight.PO
);

// in order to stop moving blinds after a power failure or PLC update we need to check if PLC has been initialized
BlindControl(
   UP := BlindSecurity.QU AND GVL.xInit,DN := BlindSecurity.QD AND GVL.xInit,S_IN := BlindSecurity.STATUS,PI := BlindSecurity.PO
);

xBlindControlDown := BlindControl.MD;
xBlindControlUp := BlindControl.MU;

我也遇到了一个问题,即断电后百叶窗会自动打开 - 我不希望这就是我引入 xInit 全局变量的原因,该变量认为 false 并在第一个之后设置为 true PLC循环。多亏了 PLC 的这种重启,百叶窗不会向上移动。 我正在使用 IN := FALSE for BLIND_INPUT 测试整个代码,但它也没有帮助,BLIND_NIGHT 不起作用。

您发现这里有什么明显的问题吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?