SCL计算每小时的均衡生产

SHR:右移
使用“右移”指令,可以将参数 IN 的内容按位向右移动,并将其作为函数值返回 。参数 N 用于指定应将特定值移位的位数 。如果参数 N 的值为“0”,则将参数 IN 的值作为结果 。如果参数 N 的值大于可用位数,则参数 IN 的值将向右移动该位数个位置 。操作数左边由于移位而空出的各个位将用零进行填充 。

SCL计算每小时的均衡生产
文章插图
"Tag_Result" := SHR(IN := "Tag_Value",
N := "Tag_Number");
INTag_Value0011 1111 1010 1111
NTag_Number3
函数值 Tag_Result= 0000 0111 1111 0101 右移3位
SFC 1 "READ_CLK"读取时间
使用SFC 1 "READ_CLK" (读取系统时钟),可以读取当前CPU系统时钟的日期和时间 。
制作一个统计1小时产量的功能块.
1.输入用来给入,产量的计数.
2.输出用来发出,1小时的产量是多少.

SCL计算每小时的均衡生产
文章插图
FUNCTION_BLOCK FB6
VAR_input
n : INT;// 输入变量
END_VAR
VAR_OUTPUT
out : INT;// 输出变量
END_VAR
VAR_TEMP
// 临时变量
END_VAR
VAR
V_1:BOOL;
V_2:BOOL;
n_1:INT;
n_2:INT;
RTC_MINUTES: INT;
RET_VAL_SFC: INT;返回值
DAT: DATE_AND_TIME;
TMP_DAT AT DAT: STRUCT建立时间结构
Jahr: BYTE;
Monat: BYTE;
TAG: BYTE;
STUNDE: BYTE;
MINUTE: BYTE;
SEKUNDE: BYTE;
MILLISEKUNDE: BYTE;
MS_WOCHENTAG: BYTE;
END_STRUCT;
END_VAR
RET_VAL_SFC := READ_CLK (CDT := DAT);读取PLC的系统时将使用SFC1
RTC_MINUTES:= BYTE_TO_INT(TMP_DAT.MINUTE& BYTE#15) + (BYTE_TO_INT(SHR(IN:=(TMP_DAT.MINUTE& BYTE#240),N:=4))*10); 提取系统时间的分钟数
IF (RTC_MINUTES = 0) & NOT V_1& NOT V_2THEN当时间的分钟是0时记录一次产量数
n_1:=n; 记录第一次时间分钟为0时的记录计数器值
V_1:=true;
V_2:=true;
END_IF;
IF (RTC_MINUTES = 1) & V_1 THEN当分钟数变成1时记录数改变
V_1:=false;
END_IF;
IF (RTC_MINUTES = 0) & NOT V_1 & V_2 THEN 第二次分钟为0时开始计算,并完成计算输出.
n_2:=n;
out:=n_2 - n_1 ;
V_2:=false;
END_IF;
【SCL计算每小时的均衡生产】 END_FUNCTION_BLOCK

    推荐阅读