在实际应用中我们经常会用到西门子的1200或1500 PLC,特别是在污水、自来水项目等等。
一个项目中会有很多阀门、电机等。在编程时我们可以将这个阀门、电机的控制根据自己的要求和思路 封装成一个自定义的FB ,然后直接调用,有多少电机就调用多少。这样会大大节省编程我们工作时间,避免更多的深夜义务加班。还可以建立自己的电机结构体变量,方便与HMI 或者上位机数据关联。
下面我将讲述我自己定义的电机FB块,朋友们也可以根据自己的思路封装自己的FB。(本人只是个菜鸟工程师,不喜可以不看 勿喷 哦!!!)
用到软件为TIA17 (最新版本TIA18)
输入端Input : 联动单控 BOOL (0:联动 1:单控)
急停信号 BOOL(外部I点)
其他联锁 BOOL(外部的液位/压力/阀门等)
联动命令 BOOL(由其他自动程序中判断过来的启泵命令,如果发生开启关闭故障可以在自动程序里面去处理复位联动命令)
运行FK BOOL(外部I点)
故障FK BOOL(外部I点)
报警复位SB BOOL(上位机 或者HMI画面的虚拟按钮)
开故障延时T Real(上位机 或者HMI画面设置的延时报警时间)
关故障延时T Real(上位机 或者HMI画面设置的延时报警时间)
输出端Output : Out.Q BOOL (输出信号Q,可直接关联Q点)
开故障报警T0.ET Time(可以观察Q输出后电机无反馈计时,无实际应用)
关故障报警T1.ET Time(观察Q无输出后电机任然有反馈计时,无实际应用)
输入输出端 InOut : 单控命令 BOOL (上位机或者HMI 的虚拟按钮,放到INOUT里面有故障时直接复位单控命令)
电机开故障Fau BOOL (电机输出Q后没有反馈信号延时报警)
电机关故障Fau BOOL (电机无输出Q后有反馈信号延时报警)
综合故障Fau BOOL (开故障 关故障及 硬故障)
还有一些其他的 中间变量啊,定时器啥的 可以在Static 中声明定义。
1.变量声明
变量调用
2.FB的调用
FB调用
3.FB块内容
FB块内程序
//程序如下,
REGION 运行必要条件
#运行条件OK := NOT #急停信号 AND #其他联锁;
END_REGION
REGION HMI或上位机单控启停
IF #运行条件OK AND #联动单控 AND #单控命令 AND NOT #综合故障Fau THEN
#单控命令中继M := 1;
ELSE
#单控命令中继M := 0;
END_IF;
END_REGION
REGION 联动命令启停
IF #运行条件OK AND NOT #联动单控 AND #联动命令 AND NOT #综合故障Fau THEN
#联动命令中继M := 1;
ELSE
#联动命令中继M := 0;
END_IF;
END_REGION
REGION Q输出
#"Out.Q" := #单控命令中继M OR #联动命令中继M;
END_REGION
REGION 电机故障分析
//如果有电机启动输出Q后电机在几秒内没有运行信号
#T0(IN := #"Out.Q" AND NOT #运行FK,
PT := DINT_TO_TIME(REAL_TO_DINT(1000 * #开故障延时T)),
ET => #"开故障报警T0.ET");
IF #T0.Q THEN
#电机开故障Fau := 1;
END_IF;
//如果电气启动输出Q消失,电机在设定时间内还没有停止下来有运行反馈信号,则判断关故障
#T1(IN := NOT #"Out.Q" AND #运行FK,
PT := DINT_TO_TIME(REAL_TO_DINT(1000*#关故障延时T)),
ET => #"关故障报警T0.ET");
IF #T1.Q THEN
#电机关故障Fau := 1;
END_IF;
#综合故障Fau := #电机开故障Fau OR #电机关故障Fau OR #故障FK;
IF #综合故障Fau THEN
#单控命令 := 0;
END_IF;
//复位按钮复位
IF #报警复位SB THEN
#电机开故障Fau := 0;
#电机关故障Fau := 0;
END_IF;
END_REGION
,