https://www.toutiao.com/article/7198795716062544419/?log_from=aed4699cc944c_1678808065917 在实际应用中我们经常会用到西门子的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 |
|
来自: 山峰云绕 > 《可编程控制器PLC自动化控制系统过程及对象》