在实际应用中我们经常会用到西门子的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.变量声明

西门子tiaportal15.1如何打开(西门子TIA自定义电机块FB的)(1)

变量调用

2.FB的调用

西门子tiaportal15.1如何打开(西门子TIA自定义电机块FB的)(2)

FB调用

3.FB块内容

西门子tiaportal15.1如何打开(西门子TIA自定义电机块FB的)(3)

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

,