SCL计算每小时的均衡生产

描述

SHR:右移

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

SCL

"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小时的产量是多少.

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_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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分