[西门子] 西门子博途模拟量输入自定义SCL程序测试

[复制链接]
查看98101 | 回复0 | 2024-4-10 09:12:07 | 显示全部楼层 |阅读模式
最近收到一个朋友的留言,希望能够出一下SCL的模拟量处理程序功能块,便于移植,也起到抛砖引玉的功效,大家学习博途编程的时候,可做参考:

首先,我们定义管脚:



其次我们编写功能块程序:

//模拟量输入标准化

//信号异常判断

IF (#Current_Value > 27648) AND (#Current_Value < 0) THEN  //通道值正常

    #Bad_Quality := 1;

ELSE

    #Bad_Quality := 0;

END_IF;

IF (#Current_Value < 0) THEN  //当通道值小于0时,默认为通道输入为0

    #stat3 := 0;

END_IF;

IF (#Current_Value > 27648) THEN  //当通道值大于27648时,默认为通道输入为27648

   

    #stat3 := 27648;

   

END_IF;

IF (#Current_Value <= 27648) AND (#Current_Value >= 0) THEN  //通道值正常

   

    #stat3 := #Current_Value;

   

END_IF;

//数据转换

#stat4:=INT_TO_DINT(#stat3);

#stat5 := DINT_TO_REAL(#stat4);

#stat6 := #Limit_High - #Limit_Low;

#stat7 := #stat5 / 27648.0;

#stat8 := #stat7 * #stat6;

#stat0 := #stat8 + #Limit_Low;

//数据输出

#Engineering_Value := #stat0;

//高报警判断

IF #Alarm_second_P = 1 AND  #stat0>#Setpoint_H AND  #Alarm_H=0 THEN

   

    #Alarm_H_T := #Alarm_H_T + 1;

    IF #Alarm_H_T > 5 THEN  //如果大于高报警设定值5秒,则发出报警信号

        #Alarm_H := 1;

        #Alarm_H_T := 0;

    END_IF;

END_IF;

IF #stat0 < #Setpoint_H THEN

    #Alarm_H := 0;

    #Alarm_H_T := 0;

END_IF;

//低报警判断

IF #Alarm_second_P = 1 AND #stat0 < #Setpoint_L AND #Alarm_L <> 1 THEN

   

    #Alarm_L_T := #Alarm_L_T + 1;

   

    IF #Alarm_L_T > 5 THEN  //如果大于高报警设定值5秒,则发出报警信号

      

        #Alarm_L := 1;

        #Alarm_L_T := 0;

    END_IF;

END_IF;

IF #stat0 > #Setpoint_L THEN

    #Alarm_L := 0;

    #Alarm_L_T := 0;

END_IF;



最后我们来测试一下功能:





以上仅供参考,如有问题,大家自行修改,提高能力。

更多关注:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则