当前位置:首页 > 新型工业化 >西门子scl调用功能块(西门子scl语句表)

西门子scl调用功能块(西门子scl语句表)

声明部分的结构

块内的声明部分包含以下子域:

西门子scl调用功能块(西门子scl语句表)

常量:介于CONST 和END_CONST 之间。

输入参数:在VAR_INPUT和END_VAR之间。

输出参数:介于VAR_OUTPUT 和END_VAR 之间。

静态变量:介于VAR 和END_VAR 之间。还包括EVALUATE 块的本地实例的声明。

常量

限制:=7;

数量:=限制+ 1;

END_CONST

VAR_INPUT 输入变量声明

measval_in :INT; //新的测量值

纽瓦尔:BOOL; //环形缓冲区'measvals'中的测量值

度假村:BOOL; //对测量值进行排序

funct_sel :BOOL; //选择计算平方根/平方

新闻:BOOL; //获取输出地址

选择:WORD; //输出地址

END_VAR

VAR_OUTPUT 输出变量声明

结果输出:INT; //计算值

measval_out:INT; //对应的测量值

END_VAR

VAR 静态变量声明

measvals:ARRAY[0.LIMIT] OF INT :=8(0);

resultbuffer:ARRAY[0.LIMIT] OF

结构体

平方根:INT;

square:INT;

END_STRUCT;

指针:INT:=0;

oldval:BOOL:=真;

oldsort:BOOL:=TRUE;

oldsel:BOOL:=TRUE;地址:INT:=0; //转换后的输出地址

outvalues_instance: 评估; //定义本地实例

END_VAR

静态变量

由于某些数据将保留到下一个程序周期,因此选择FB 块类型。一些静态变量在声明部分“VAR,END_VAR”中声明。

静态变量是局部变量,其值在每个块处理过程中都保留。它们用于保留功能块值并存储在实例数据块中。

初始化变量

请记住在块初始化时(下载到CPU 之后)在变量中键入初始值。功能块EVALUATE 的本地实例也在声明子字段“VAR, END_VAR”中声明。它的名称用于后续调用和访问输出参数。共享实例ACQUIRE_DATA用于存储数据。

语句部分的结构

ACQUIRE的语句部分分为三个子部分:

获取测量值:

如果输入参数“newval”和“oldval”不同,则将新的测量值读入环形缓冲区。

开始排序和计算:

比较输入参数'resort'和'oldsort',当发生变化时,通过调用EVALUATE功能块开始排序和计算。

获取代码并准备输出:

逐字阅读代码。根据SIMATIC转换规则,这意味着上开关组(字节0)包含输入字的高8位,下开关组(字节1)包含输入字的低8位。下图显示了代码开关的位置。

计算地址

下图显示了如何计算地址: 检测到代码采集开关(位15)的边沿,输入字IW0 的位12 至14 包含读取的代码。使用标准函数SHR右移并用AND屏蔽相应位即可得到“地址”。

该地址用于将数组元素(计算结果和相应的测量值)写入输出参数。是基于均方还是平方值取决于“funct_sel”。

因为“newsel”和“oldsel”不同,所以检测到代码获取开关的边缘。

逻辑块的语句部分如下:

开始

(******************************************************** **********************

第1 部分:获取测量值。

如果“newval”值发生变化,则表明已输入测量值。 MOD 运算用于实现测量值的环形缓冲区。

****************************************************** *****************)

IF 新值旧值THEN

指针:=指针MOD数量;

measvals[指针] :=measval_in;

指针:=指针+1;

万一;

旧值:=新值;

(******************************************************** **********************

第2 部分:开始排序和计算

如果“度假村”发生变化,则开始对环形缓冲区进行排序并对测量值进行计算。

结果存储在一个名为“calcbuffer”的新数组中。

****************************************************** *****************)

IF 度假村oldsort 那么

指针:=0; //重置缓冲区指针

eval_instance(sortbuffer :=measvals); //调用评估

万一;

oldsort :=度假村;

resultbuffer :=eval_instance.calcbuffer; //平方值和均方根

(******************************************************** **********************

第3 部分:查找代码值并准备输出

如果'newsel'改变,计算用于输出的数组元素的寻址代码:mask 'selection'

相应的位并转换为整数。根据“funct_sel”开关的设置,选择“squareroot”或

'square' 用于输出。

****************************************************** *****************)

IF 新闻塞尔奥塞尔THEN

地址:=WORD_TO_INT(SHR(IN :=选择,N :=12) AND 16#0007);

万一;

oldsel :=新闻塞尔;

IF funt_sel 那么

result_out :=resultbuffer[地址].square;

别的

result_out :=resultbuffer[地址].squareroot;

万一;

measval_out :=measvals[地址]; //测量值显示

END_FUNCTION_BLOCK

审稿人:刘庆

最新资讯

推荐资讯