1、S71200几个SCL编写的功能块1200 AI数据采集功能块FUNCTION_BLOCK AI_convert S7_Optimized_Access := FALSE AUTHOR : TyfixnVERSION : 0.1 VAR_INPUT _inAW ExternalAccessible := False; ExternalVisible := False; ExternalWritable := False : Int; / AI输入采集端,对应硬件地址 _inHI : Real := 100.0; / AI量程上限 _inLi : Real; / AI量程下限 _AlarmHiS
2、P : 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; / 转
3、换错误代码,word字节中的第一位高报,第二位低报,第三位高高报,第四位底底报,第五位转发错误。其中转换错误代码是Err_Code. Err : Bool; / 报警数字输出 _out_N : Real; / 输出0-1之间的比例, END_VAR VAR_TEMP Var : Word; END_VARBEGIN#_out_N := NORM_X(MIN := 0, VALUE := #_inAW, MAX := 27648); /将采集的信号缩放到0-1之间#_out := SCALE_X(MIN:=#_inLi, VALUE:=#_out_N, MAX:=#_inHI); /将采集的信号
4、缩放到需要的量程范围内。/当上上限小于上限时,更改上上限值为上限值。/当下下限大于下限时,更改下下限值为下限值。IF #_AlarmHHiSP #_AlarmLiSP THEN #_AlarmLLiSP := #_AlarmLiSP;END_IF;IF #_out #_AlarmHiSP THEN /高限报警触发。 #_Alarm_H := 1; #Err_Code := #Err_Code OR 16#1;ELSE #_Alarm_H := 0; #Err_Code := #Err_Code AND 16#fe;END_IF;IF #_out #_AlarmHHiSP THEN /高高限报警
5、触发。 #_Alarm_HH := 1; #Err_Code := #Err_Code OR 16#4;ELSE #_Alarm_HH := 0; #Err_Code := #Err_Code AND 16#fb;END_IF;IF #_out #_AlarmLLiSP THEN /低低限报警触发。 #_Alarm_LL := 1; #Err_Code := #Err_Code OR 16#8;ELSE #_Alarm_LL := 0; #Err_Code := #Err_Code AND 16#f7;END_IF;IF #Var 0 THEN /自带的Scale功能块运算错误报警 #Err_
6、Code := #Err_Code OR 16#10;ELSE #Err_Code := #Err_Code AND 16#ef;END_IF;IF #Err_Code 0 THEN #Err := 1;ELSE #Err := 0;END_IF;/word字节中的第一位高报,第二位低报,第三位转换错误,第四位高高报警,第五位低低报警。END_FUNCTION_BLOCK2、1500 AI采集功能块FUNCTION_BLOCK AI_convert S7_Optimized_Access := FALSE AUTHOR : TyfixnVERSION : 0.1 VAR_INPUT _inAW
7、 : 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; / 高报
8、 _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_VARBEGIN#Var := SCALE(IN := #_inAW, HI_LIM := 1.0, LO_LIM := 0.0, BIPOLAR := 0, OUT
9、 = #_out_N); /将采集的信号缩放到0-1之间#Var := SCALE(IN := #_inAW, HI_LIM := #_inHI, LO_LIM := #_inLi, BIPOLAR := 0, OUT = #_out); /将采集的信号缩放到需要的量程范围内。IF #_out #_AlarmHiSP THEN /高限报警触发。 #_Alarm_H := 1; #Err_Code := #Err_Code OR 16#1;ELSE #_Alarm_H := 0; #Err_Code := #Err_Code AND 16#fe;END_IF;IF #_out #_AlarmLi
10、SP THEN /低限报警触发。 #_Alarm_L := 1; #Err_Code := #Err_Code OR 16#2;ELSE #_Alarm_L := 0; #Err_Code := #Err_Code AND 16#fd;END_IF;IF #Var 0 THEN /自带的Scale功能块运算错误报警 #Err_Code := #Err_Code OR 16#4;ELSE #Err_Code := #Err_Code AND 16#fb;END_IF;IF #_out #_AlarmHHiSP THEN /高高限报警触发。 #_Alarm_HH := 1; #Err_Code :
11、= #Err_Code OR 16#8;ELSE #_Alarm_HH := 0; #Err_Code := #Err_Code AND 16#f7;END_IF;IF #_AlarmHHiSP #_AlarmHiSP THEN #_AlarmHHiSP := #_AlarmHiSP;END_IF;IF #_out #_AlarmLiSP THEN #_AlarmLLiSP := #_AlarmLiSP;END_IF;IF #Err_Code 0 THEN #Err := 1;ELSE #Err := 0;END_IF;/word字节中的第一位高报,第二位低报,第三位转换错误,第四位高高报警,
12、第五位低低报警。END_FUNCTION_BLOCK3、RTD 采集功能块FUNCTION_BLOCK RTD_Convert S7_Optimized_Access := FALSE AUTHOR : TyfixnVERSION : 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
13、:= 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字节中的第一位高报,
14、第二位低报,第三位转换错误。其中转换错误代码是Err_Code. _out_N : Real; / 将输出转换为0-1之间,供PID回路使用。 END_VAR VAR_TEMP Var : Word; END_VARBEGIN#_out := INT_TO_REAL(#_inAW) / 10; /将温度采集的信号直接除以10,即可得到实际的温度数值。#_out_N := #_out / #_inHI;IF #_out #_AlarmHiSP THEN /高限报警触发。 #_Alarm_H := 1; #Err_Code := #Err_Code OR 16#1;ELSE #_Alarm_H :
15、= 0; #Err_Code := #Err_Code AND 16#fe;END_IF;IF #_out #_AlarmHHiSP THEN /高高限报警触发。 #_Alarm_HH := 1; #Err_Code := #Err_Code OR 16#4;ELSE #_Alarm_HH := 0; #Err_Code := #Err_Code AND 16#fb;END_IF;IF #_out #_AlarmLLiSP THEN /低低限报警触发。 #_Alarm_LL := 1; #Err_Code := #Err_Code OR 16#8;ELSE #_Alarm_LL := 0; #
16、Err_Code := #Err_Code AND 16#f7;END_IF;IF #Var 0 THEN /自带的Scale功能块运算错误报警 #Err_Code := #Err_Code OR 16#10;ELSE #Err_Code := #Err_Code AND 16#ef;END_IF;IF #Err_Code 0 THEN #Err := 1;ELSE #Err := 0;END_IF;/word字节中的第一位高报,第二位低报,第三位转换错误,第四位高高报警,第五位低低报警。END_FUNCTION_BLOCK使用方法:将文本复制到记事本里,另存为后缀为“xxx.scl的文件。再TIA中 使用:外部源文件 添加 同时生成块文件
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1