基于PikePLCStudio用FBD图形化编程语言开发了一个用于控制交通灯的简单示例。
本文最后的ST源代码是FBD编译器将FBD转换为ST语言后的结果。
说明:本示例主要是为了演示使用PikePLCStudio基于FBD开发PLC程序的能力,至于交通灯控制程序逻辑本身,不排除还会有其它更好的逻辑算法。另外,本人不保证FBD程序逻辑的正确性[憨笑]
例子描述如下:
十字路口有南北向和东西向四个红绿灯。南北向和东西向的红灯亮时长为30秒。南北向和东西向的绿灯亮时长为27秒,黄灯亮时长为3秒。当电源控制开关接通后,南北向的先绿灯亮,东西向的红先灯亮。当电源控制开关断开后,所有的红绿灯都关闭。
定义变量
PROGRAMTrafficLight3VARpowerAT%:BOOL;//电源控制开关snRedAT%:BOOL;//南北向红灯snGreenAT%:BOOL;//南北向绿灯snYellowAT%:BOOL;//南北向黄灯weRedAT%:BOOL;//东西向红灯weGreenAT%:BOOL;//东西向绿灯weYellowAT%:BOOL;//东西向黄灯time0:TIME;time1:TIME;time2:TIME;time3:TIME;time4:TIME;time5:TIME;END_VARVARR_TRIG0:R_TRIG;//接通电源,上升沿触发红绿灯开始工作F_TRIG0:F_TRIG;//关闭电源,下降沿触发将所有红绿灯都关闭TON0:TON;//控制南北向路灯亮27秒的定时器TON1:TON;//控制南北向黄灯亮3秒的定时器TON2:TON;//控制南北向红灯亮30秒的定时器TON3:TON;//控制东西向红灯亮30秒的定时器TON4:TON;//控制东西向的绿灯亮27秒的定时器TON5:TON;//控制东西向的黄灯亮3秒的定时器END_VAREND_PROGRAM
程序逻辑

基于FBD的程序逻辑部分
PikePLCStudio界面截图
FBD编译器生成的ST代码
PROGRAMTrafficLight3VARpowerAT%:BOOL;//红绿灯控制开关snRedAT%:BOOL;//南北向红灯snGreenAT%:BOOL;//南北向绿灯snYellowAT%:BOOL;//南北向黄灯weRedAT%:BOOL;//东西向红灯weGreenAT%:BOOL;//东西向绿灯weYellowAT%:BOOL;//东西向黄灯time0:TIME;time1:TIME;time2:TIME;time3:TIME;time4:TIME;time5:TIME;END_VARVARR_TRIG0:R_TRIG;//接通电源,上升沿触发红绿灯开始工作F_TRIG0:F_TRIG;//关闭电源,下降沿触发将所有红绿灯都关闭TON0:TON;//控制南北向路灯亮27秒的定时器TON1:TON;//控制南北向黄灯亮3秒的定时器TON2:TON;//控制南北向红灯亮30秒的定时器TON3:TON;//控制东西向红灯亮30秒的定时器TON4:TON;//控制东西向的绿灯亮27秒的定时器TON5:TON;//控制东西向的黄灯亮3秒的定时器OR_OUT:BOOL;AND_OUT:BOOL;END_VAR//STARTNETWORK_1R_TRIG0(CLK:=power);OR_OUT:=OR(IN1:=R_,IN2:=snGreen);snGreen:=OR_OUT;OR_OUT:=OR(IN1:=R_,IN2:=weRed);weRed:=OR_OUT;//ENDNETWORK_1//STARTNETWORK_2F_TRIG0(CLK:=power);AND_OUT:=AND(IN1:=F_,IN2:=power);OR_OUT:=OR(IN1:=AND_OUT,IN2:=snGreen);snGreen:=OR_OUT;OR_OUT:=OR(IN1:=AND_OUT,IN2:=snRed);snRed:=OR_OUT;OR_OUT:=OR(IN1:=AND_OUT,IN2:=snYellow);snYellow:=OR_OUT;OR_OUT:=OR(IN1:=AND_OUT,IN2:=weGreen);weGreen:=OR_OUT;OR_OUT:=OR(IN1:=AND_OUT,IN2:=weRed);weRed:=OR_OUT;OR_OUT:=OR(IN1:=AND_OUT,IN2:=weYellow);weYellow:=OR_OUT;//ENDNETWORK_2//STARTNETWORK_3TON0(IN:=snGreen,PT:=t3s,ET=time1);OR_OUT:=OR(IN1:=,IN2:=snRed);snRed:=OR_OUT;OR_OUT:=OR(IN1:=OR_OUT,IN2:=snGreen,IN3:=NOT(IN:=power));snYellow:=OR_OUT;time1:=;//ENDNETWORK_4//STARTNETWORK_5TON2(IN:=snRed,PT:=t30s,ET=time3);OR_OUT:=OR(IN1:=,IN2:=weGreen);weGreen:=OR_OUT;OR_OUT:=OR(IN1:=OR_OUT,IN2:=weYellow,IN3:=NOT(IN:=power));weRed:=NOT(IN:=OR_OUT);time3:=;//ENDNETWORK_6//STARTNETWORK_7TON4(IN:=weGreen,PT:=t3s,ET=time5);OR_OUT:=OR(IN1:=,IN2:=weRed);weRed:=OR_OUT;OR_OUT:=OR(IN1:=OR_OUT,IN2:=weGreen,IN3:=NOT(IN:=power));snYellow:=NOT(IN:=OR_OUT);time5:=;//ENDNETWORK_8END_PROGRAM
感谢您对国产PLC软件的支持![谢谢]