声明部分的结构(structure of the declaration section)
块中的声明部分包含以下子域:
常量:在const和end_const之间。
输入参数:在var_input和end_var之间。
输出参数:在var_output和end_var之间。
静态变量:在var和end_var之间。也包括对evaluate块的本地实例的声明。
const
limit := 7;
quantity := limit + 1;
end_const
var_input 输入变量声明
measval_in : int ; // 新测量值
newval : bool; // 在环形缓冲区measvals中的测量值
resort : bool; // 对测量值进行排序
funct_sel : bool; // select calculation square root/square
newsel : bool; // 取得输出地址
selection : word; // 输出地址
end_var
var_output 输出变量声明
result_out : int; // 计算值
measval_out : int; // 相应的测量值
end_var
var 静态变量声明
measvals : array[0..limit] of int := 8(0);
resultbuffer: array[0..limit] of
struct
squareroot : int;
square : int;
end_struct;
pointer : int := 0;
oldval : bool := true;
oldsort : bool := true;
oldsel : bool := true;
address : int := 0; // 转换后的输出地址
outvalues_instance: evaluate; // 定义本地实例
end_var
静态变量(static variables)
因为某些数据要保留到下一个程序循环,所以选择fb块类型。有些静态变量在声明部分var, end_var中声明。
静态变量是本地变量,其值保留贯穿每个块处理过程。他们用来保留功能块的值,且存贮在实例数据块中。
初始化变量(initializing variables)
记住当块被初始化时(下载到cpu之后),在变量中键入初始值。功能块evaluate的本地实例也在声明子域var, end_var中声明。其名字是以后调用和存取输出参数使用的。共享的实例acquire_data用来存贮数据。
语句部分的结构(structure of the statement section)
acquire的语句部分分为三个子部分:
获取测量值:
如果输入参数newval与oldval不同,则读入一个新测量值到环形缓冲区。
启动排序和计算:
比较输入参数resort和oldsort,发生改变时,通过调用evaluate功能块启动排充和计算。
求取代码并准备输出:
按字读取代码。根据simatic转换规则,意思是上开关组(字节0)包含输入字的高8位,下开关组(字节1)包含低8位。下图显示代码开关的位置。
计算地址(calculating the address)
下图显示如何计算地址:检测到取码开关(位15)一个边沿,输入字iw0的12至14位包含了读入的代码。用标准函数shr右移并用and屏蔽相应的位得到“地址”。
地址用来将数组元素(计算结果和对应测量值)写入输出参数。是均方根据,还是平方值决定于funct_sel。
检测到取码开关的一个边沿,是因为newsel和oldsel不同。
逻辑块的语句部分如下:
begin
(*****************************************************************
第1部分:获取测量值。
如果newval值发生改变,则输入了测量值。mod运算是用来实现测量值用的环形缓冲区。
******************************************************************)
if newval oldval then
pointer := pointer mod quantity;
measvals[pointer] := measval_in;
pointer := pointer + 1;
end_if;
oldval := newval;
(*****************************************************************
第2部分:启动排序和计算
如果resort发生改变,则启动对环形缓冲区的排序和运行对测量值的计算。
结果存贮在一个新的叫calcbuffer的数组里。
******************************************************************)
if resort oldsort then
pointer := 0; //复位缓冲区指针
eval_instance(sortbuffer := measvals); //调用evaluate
end_if;
oldsort := resort;
resultbuffer := eval_instance.calcbuffer; //平方值和均方根
(*****************************************************************
第3部分:求代码值和准备输出
如果newsel发生改变,则计算用来输出的数组元素的寻址代码:屏蔽selection
的相应位并转换为整数。依据funct_sel开关的设置,选择squareroot或
square用于输出。
******************************************************************)
if newsel oldsel then
address := word_to_int(shr(in := selection, n := 12) and 16#0007);
end_if;
oldsel := newsel;
if funct_sel then
result_out := resultbuffer[address].square;
else
result_out := resultbuffer[address].squareroot;
end_if;
measval_out := measvals[address]; //measured value display
end_function_block
数据传送药片:实时追踪消防队员体征参数
土壤养分速测仪研究植物生长缺少养分出现症状
如何用COMSOL软件对扬声器驱动器执行非线性失真分析
不断提升PCB技术有多么重要
控制阀安装方法及注意事项
西门子SCL建立功能块ACQUIRE的步骤
感应加热用中高频电源技术的新进展
什么是智能电网?智能电网在安全建设时有哪两个重点?
iPhone或重新使用Touch ID,苹果到底是如何打算的?
GPS卫星发射信号能在月球上使用吗
泰克PA1000单相分析仪的性能指标、特点及应用
高级安全驾驶员辅助系统为自动驾驶发展铺平道路
能拍银河的华为P30是怎么造出来的
5G将加速推动超高清视频产业的发展
努比亚z11mini怎么样 小屏智能手机新选择
疫情影响让会议显示这一细分领域愈发受市场青睐
5G时代来临,RFFE模组产值突破300亿美元
声加科技亮相2021亚洲蓝牙耳机展,推SVE+SAE解决方案
电阻应变片直流电桥测量电路攻略
工业物联网解决方案:输气站发电机组故障监测远程报警系统