SHR:右移
使用“右移”指令,可以将参数 IN 的内容按位向右移动,并将其作为函数值返回。参数 N 用于指定应将特定值移位的位数。如果参数 N 的值为“0”,则将参数 IN 的值作为结果。如果参数 N 的值大于可用位数,则参数 IN 的值将向右移动该位数个位置。操作数左边由于移位而空出的各个位将用零进行填充。
"Tag_Result" := SHR(IN := "Tag_Value",
N := "Tag_Number");
IN Tag_Value 0011 1111 1010 1111
N Tag_Number 3
函数值 Tag_Result = 0000 0111 1111 0101 右移3位
SFC 1 "READ_CLK"读取时间
使用SFC 1 "READ_CLK" (读取系统时钟),可以读取当前CPU系统时钟的日期和时间。
制作一个统计1小时产量的功能块.
1.输入用来给入,产量的计数.
2.输出用来发出,1小时的产量是多少.
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_2 THEN当时间的分钟是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;
END_FUNCTION_BLOCK
全部0条评论
快来发表一下你的评论吧 !