西门子plc300编写交通红绿灯程序梯形图

西门子plc300编写交通红绿灯程序梯形图,第1张

西门子plc300编写交通红绿灯程序梯形图如上图所示:

用西门子PLC300的计时块来搭建脉冲程序的具体 *** 作步骤如下:

1.首先要在画面上显示出总缆。

2.然后将总缆窗口拖至左侧,这样方便我们查找计时程序块。

3.这时候插入启动按钮,这里是做的一个简捷的按钮,在实际中做一个笛自锁比较好。

4.然后在总缆中插入时间计时块并输入脉冲时间及位号。

5.之后再加入两个时间常闭点,这样能实现互锁。

6.想要在硬件上调试的话,可以再加两个输出灯来进行调试。

PLC控制梯形图设计  

十字路口南北及东西方向均设有红、黄、绿三个信号灯,六个灯以一定的时间顺序循环往复工作。如下表所示:

方向

时间顺序

南北方向

南北绿(8s),东西红(8s)

南北黄(2.1s),东西红(2.1s),

南北红(10.1s),东西绿(8s),东西黄(2.1s)

东西方向

东西红(10.1s),南北绿(8s),南北黄(2.1s)

东西绿(8s),南北红(8s)

东西黄(2.1s),南北红(2.1s)

相应的元器件安排如下:

元器件

作用

X000

起动及循环起点,南北绿,东西红。

Y000

南北绿输出

Y001

南北黄输出

Y002

东西红输出

Y003

东西绿输出

Y004

东西黄输出

Y005

南北红输出

M0

中间继电器,把X000的状态保持。

T0

东西红定时

T1

东西绿定时

T2

东西黄定时

T3

南北绿定时

T4

南北黄定时   

T5

南北红定时

根据以上分析,其梯形图可设计如图1

思路:

红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。四个方向各有一个红、黄、绿显示和两个数码管。

东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。

三、硬件电路设计

此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。

四、软件程序(C语言)

以下是整个设计的软件程序,直接可以编译成*。Hex代码。通过以上电路,下载到单片机,可直接运行。

//*****************************//

//程序名:十字路口交通灯控制

//编写人:黄庭剑

//初写时间:2009年1月2日

//程序功能:南北为车行道,延时60秒东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.

//CPU说明:AT89C51型单片机 24MHZ晶体振荡器

//完成时间:2009年1月6日

//*****************************//

#include<stdio.h>

#include<reg51.h>

#include<intrins.h>

sfr p0   = 0x80

sfr p1   = 0x90

sfr p2   = 0xA0

sfr p3   = 0xb0      //这部分内容其实在“#include<reg51.h>”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。其实两者是一样的。

sbit  sw      = p0^0

sbit   OE    =P0^6

sbit   LE    =P0^7  //74LS373锁存器控制端定义

char  display[]={ 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99 } //p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出

//函数声明 begin

void  delay1(int count)

void  delay_long(int  number1,int number2)

void    people_car_drive()

//函数声明end

//***********************//延时子程序

void  delay1(int  count)

{ int  i

for(i=counti>0i--)

{ }

}

void  delay_long(int  number1,int number2)

{

int a,b

for(a=number1a>0a--)

{

for(b=number2b>0b--)

{ _nop_()     }

}

}

//**********************//延时子程序

void   people_car_drive()

{

int   p_1=2,i,j=9,p_2=6    //****************//行人通行时,延时20秒

p2=0x09                     //南北红灯亮

p3=0x24                     //东西绿灯亮

while(p_1-->0)

{ LE=1

OE=0

if(p_1==0){OE=1}            //当十位数减到0时,只显示个位数

p1=display[p_1]

delay1(1000)

LE=0

j=9

for(i=10i>0i--)

{

if(p_1==0&&j==3)break     //减到3时退出循环,让其黄灯闪烁显示

p1=display[j--]

delay_long(16000,2)

if(sw==1)return

}

}

//*******************************************************************************//

p2=0x12                  //南北黄灯闪烁三秒,以提醒行人注意

p3=0x12

p1=display[3]

delay_long(8000,1)

p2=0x00

p3=0x00

delay_long(14000,1)

p2=0x12

p3=0x12

p1=display[2]

delay_long(8000,1)

p2=0x00

p3=0x00

delay_long(14000,1)

p2=0x12

p3=0x12

p1=display[1]

delay_long(8000,1)

p2=0x00

p3=0x00

delay_long(14000,1)

//*****************以下是车辆通行时延时60秒//

p2=0x24                 //南北绿灯亮

p3=0x09                 //东西红灯亮

while(p_2-->0)

{ LE=1

OE=0

if(p_2==0){OE=1}       //当十位数减到0时,只显示个位数

p1=display[p_2]

delay1(1000)

LE=0

j=9

for(i=10i>0i--)

{

if(p_2==0&&j==3)break  //减到2时退出循环

p1=display[j--]

delay_long(16000,2)

if(sw==1)return

}

}

p2=0x12                //南北黄灯闪烁三秒,以提醒行人注意

p3=0x12

p1=display[3]

delay_long(8000,1)

p2=0x00

p3=0x00

delay_long(14000,1)

p2=0x12

p3=0x12

p1=display[2]

delay_long(8000,1)

p2=0x00

p3=0x00

delay_long(14000,1)

p2=0x12

p3=0x12

p1=display[1]

delay_long(8000,1)

p2=0x00

p3=0x00

delay_long(14000,1)    //南北黄灯闪烁三秒完毕

}

void  main()               //主函数入口处

{

p0=0x01

p1=0x00

p2=0x00

p3=0x00               //初始化各端口

{ while(1)

{

if(sw==0)

{  people_car_drive()}

else

{

p2=0x00

p3=0x00                    //关闭所有交通灯

}

}

}

}

详情访问:http://hi.baidu.com/hjiannew/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11058138.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存