S71200几个SCL编写的功能块.docx
《S71200几个SCL编写的功能块.docx》由会员分享,可在线阅读,更多相关《S71200几个SCL编写的功能块.docx(11页珍藏版)》请在冰豆网上搜索。
S71200几个SCL编写的功能块
1200 AI数据采集功能块
FUNCTION_BLOCK"AI_convert"
{S7_Optimized_Access:
='FALSE'}
AUTHOR:
Tyfixn
VERSION:
0.1
VAR_INPUT
_inAW{ExternalAccessible:
='False';ExternalVisible:
='False';ExternalWritable:
='False'}:
Int; //AI输入采集端,对应硬件地址
_inHI:
Real:
=100.0; //AI量程上限
_inLi:
Real; //AI量程下限
_AlarmHiSP:
Real:
=90.0; //AI报警上限
_AlarmLiSP:
Real:
=0.0; //AI报警下限
_AlarmHHiSP:
Real:
=95.0; //AI报警上上限
_AlarmLLiSP:
Real; //AI报警下下限
END_VAR
VAR_OUTPUT
_out:
Real; //AI转换输出值,PV值
_Alarm_H:
Bool; //高报
_Alarm_L:
Bool; //低报
_Alarm_HH:
Bool; //高高报
_Alarm_LL:
Bool; //低低报
END_VAR
VAR
Err_Code:
Word; //转换错误代码,word字节中的第一位高报,第二位低报,第三位高高报,第四位底底报,第五位转发错误。
其中转换错误代码是Err_Code.
Err:
Bool; //报警数字输出
_out_N:
Real; //输出0-1之间的比例,
END_VAR
VAR_TEMP
"Var":
Word;
END_VAR
BEGIN
#_out_N:
=NORM_X(MIN:
=0,VALUE:
=#_inAW,MAX:
=27648);//将采集的信号缩放到0-1之间
#_out:
=SCALE_X(MIN:
=#_inLi,VALUE:
=#_out_N,MAX:
=#_inHI);//将采集的信号缩放到需要的量程范围内。
//当上上限小于上限时,更改上上限值为上限值。
//当下下限大于下限时,更改下下限值为下限值。
IF#_AlarmHHiSP<#_AlarmHiSPTHEN
#_AlarmHHiSP:
=#_AlarmHiSP;
END_IF;
IF#_AlarmLLiSP>#_AlarmLiSPTHEN
#_AlarmLLiSP:
=#_AlarmLiSP;
END_IF;
IF#_out>#_AlarmHiSPTHEN //高限报警触发。
#_Alarm_H:
=1;
#Err_Code:
=#Err_CodeOR16#1;
ELSE
#_Alarm_H:
=0;
#Err_Code:
=#Err_CodeAND16#fe;
END_IF;
IF#_out<#_AlarmLiSPTHEN //低限报警触发。
#_Alarm_L:
=1;
#Err_Code:
=#Err_CodeOR16#2;
ELSE
#_Alarm_L:
=0;
#Err_Code:
=#Err_CodeAND16#fd;
END_IF;
IF#_out>#_AlarmHHiSPTHEN //高高限报警触发。
#_Alarm_HH:
=1;
#Err_Code:
=#Err_CodeOR16#4;
ELSE
#_Alarm_HH:
=0;
#Err_Code:
=#Err_CodeAND16#fb;
END_IF;
IF#_out<#_AlarmLLiSPTHEN //低低限报警触发。
#_Alarm_LL:
=1;
#Err_Code:
=#Err_CodeOR16#8;
ELSE
#_Alarm_LL:
=0;
#Err_Code:
=#Err_CodeAND16#f7;
END_IF;
IF#Var<>0THEN //自带的Scale功能块运算错误报警
#Err_Code:
=#Err_CodeOR16#10;
ELSE
#Err_Code:
=#Err_CodeAND16#ef;
END_IF;
IF#Err_Code<>0THEN
#Err:
=1;
ELSE
#Err:
=0;
END_IF;
//word字节中的第一位高报,第二位低报,第三位转换错误,第四位高高报警,第五位低低报警。
END_FUNCTION_BLOCK
2、
1500AI采集功能块
FUNCTION_BLOCK"AI_convert"
{S7_Optimized_Access:
='FALSE'}
AUTHOR:
Tyfixn
VERSION:
0.1
VAR_INPUT
_inAW:
Int; //AI输入采集端,对应硬件地址
_inLi:
Real; //AI量程下限
_inHI:
Real:
=100.0; //AI量程上限
_AlarmLiSP:
Real:
=0.0; //AI报警下限
_AlarmHiSP:
Real:
=95.0; //AI报警上限
_AlarmLLiSP:
Real; //AI报警下下限
_AlarmHHiSP:
Real; //AI报警上上限
END_VAR
VAR_OUTPUT
_out:
Real; //AI转换输出值,PV值
_Alarm_L:
Bool; //低报
_Alarm_H:
Bool; //高报
_Alarm_LL:
Bool; //低低报
_Alarm_HH:
Bool; //高高报
END_VAR
VAR
Err_Code:
Word; //转换错误代码,word字节中的第一位高报,第二位低报,第三位转换错误。
其中转换错误代码是Err_Code.
Err:
Bool; //报警数字输出
_out_N:
Real; //输出0-1之间的比例,
END_VAR
VAR_TEMP
"Var":
Word;
END_VAR
BEGIN
#Var:
=SCALE(IN:
=#_inAW,HI_LIM:
=1.0,LO_LIM:
=0.0,BIPOLAR:
=0,OUT=>#_out_N); //将采集的信号缩放到0-1之间
#Var:
=SCALE(IN:
=#_inAW,HI_LIM:
=#_inHI,LO_LIM:
=#_inLi,BIPOLAR:
=0,OUT=>#_out); //将采集的信号缩放到需要的量程范围内。
IF#_out>#_AlarmHiSPTHEN //高限报警触发。
#_Alarm_H:
=1;
#Err_Code:
=#Err_CodeOR16#1;
ELSE
#_Alarm_H:
=0;
#Err_Code:
=#Err_CodeAND16#fe;
END_IF;
IF#_out<#_AlarmLiSPTHEN //低限报警触发。
#_Alarm_L:
=1;
#Err_Code:
=#Err_CodeOR16#2;
ELSE
#_Alarm_L:
=0;
#Err_Code:
=#Err_CodeAND16#fd;
END_IF;
IF#Var<>0THEN //自带的Scale功能块运算错误报警
#Err_Code:
=#Err_CodeOR16#4;
ELSE
#Err_Code:
=#Err_CodeAND16#fb;
END_IF;
IF#_out>#_AlarmHHiSPTHEN //高高限报警触发。
#_Alarm_HH:
=1;
#Err_Code:
=#Err_CodeOR16#8;
ELSE
#_Alarm_HH:
=0;
#Err_Code:
=#Err_CodeAND16#f7;
END_IF;
IF#_AlarmHHiSP<#_AlarmHiSPTHEN
#_AlarmHHiSP:
=#_AlarmHiSP;
END_IF;
IF#_out<#_AlarmLLiSPTHEN //低低限报警触发。
#_Alarm_LL:
=1;
#Err_Code:
=#Err_CodeOR16#10;
ELSE
#_Alarm_LL:
=0;
#Err_Code:
=#Err_CodeAND16#ef;
END_IF;
IF#_AlarmLLiSP>#_AlarmLiSPTHEN
#_AlarmLLiSP:
=#_AlarmLiSP;
END_IF;
IF#Err_Code<>0THEN
#Err:
=1;
ELSE
#Err:
=0;
END_IF;
//word字节中的第一位高报,第二位低报,第三位转换错误,第四位高高报警,第五位低低报警。
END_FUNCTION_BLOCK
3、
RTD采集功能块
FUNCTION_BLOCK"RTD_Convert"
{S7_Optimized_Access:
='FALSE'}
AUTHOR:
Tyfixn
VERSION:
0.1
VAR_INPUT
_inAW:
Int:
=0; //RTD输入采集端,对应硬件地址
_inLi:
Real:
=0.0; //RTD量程下限,供上位机使用
_inHI:
Real:
=100.0; //RTD量程上限,供上位机使用
_AlarmLiSP:
Real:
=0.0; //RTD报警下限
_AlarmHiSP:
Real:
=90.0; //RTD报警上限
_AlarmLLiSP:
Real:
=0.0; //RTD报警下下限
_AlarmHHiSP:
Real:
=95.0; //RTD报警上上限
END_VAR
VAR_OUTPUT
_out:
Real; //AI转换输出值,PV值
_Alarm_L:
Bool; //低报
_Alarm_H:
Bool; //高报
_Alarm_LL:
Bool; //低低报
_Alarm_HH:
Bool; //高高报
END_VAR
VAR
Err_Code:
Word; //转换错误代码
Err:
Bool; //word字节中的第一位高报,第二位低报,第三位转换错误。
其中转换错误代码是Err_Code.
_out_N:
Real; //将输出转换为0-1之间,供PID回路使用。
END_VAR
VAR_TEMP
"Var":
Word;
END_VAR
BEGIN
#_out:
=INT_TO_REAL(#_inAW)/10; //将温度采集的信号直接除以10,即可得到实际的温度数值。
#_out_N:
=#_out/#_inHI;
IF#_out>#_AlarmHiSPTHEN //高限报警触发。
#_Alarm_H:
=1;
#Err_Code:
=#Err_CodeOR16#1;
ELSE
#_Alarm_H:
=0;
#Err_Code:
=#Err_CodeAND16#fe;
END_IF;
IF#_out<#_AlarmLiSPTHEN //低限报警触发。
#_Alarm_L:
=1;
#Err_Code:
=#Err_CodeOR16#2;
ELSE
#_Alarm_L:
=0;
#Err_Code:
=#Err_CodeAND16#fd;
END_IF;
IF#_out>#_AlarmHHiSPTHEN //高高限报警触发。
#_Alarm_HH:
=1;
#Err_Code:
=#Err_CodeOR16#4;
ELSE
#_Alarm_HH:
=0;
#Err_Code:
=#Err_CodeAND16#fb;
END_IF;
IF#_out<#_AlarmLLiSPTHEN //低低限报警触发。
#_Alarm_LL:
=1;
#Err_Code:
=#Err_CodeOR16#8;
ELSE
#_Alarm_LL:
=0;
#Err_Code:
=#Err_CodeAND16#f7;
END_IF;
IF#Var<>0THEN //自带的Scale功能块运算错误报警
#Err_Code:
=#Err_CodeOR16#10;
ELSE
#Err_Code:
=#Err_CodeAND16#ef;
END_IF;
IF#Err_Code<>0THEN
#Err:
=1;
ELSE
#Err:
=0;
END_IF;
//word字节中的第一位高报,第二位低报,第三位转换错误,第四位高高报警,第五位低低报警。
END_FUNCTION_BLOCK
使用方法:
将文本复制到记事本里,另存为后缀为“xxx.scl"的文件。
再TIA中使用:
外部源文件添加同时生成块文件