[转帖]一款基于AVR单片机的控制系统,类PLC的

[复制链接]
查看2227 | 回复8 | 2008-12-11 23:48:00 | 显示全部楼层 |阅读模式
由于时常接到用户要求开发单片机控制项目,为了简化工作,专门设计了一款基于AVR单片机的控制系统。
为了提高通用性,设计思想是模拟PLC,采用光藕隔离输入,继电器晶体管混合输出,适用大部分工业控制场合:

设计规范:
电源:适合工业标准的24V直流输入,带反接保护
8路输入:其中2路可以中断,2路可以使用模拟量
8路输出:4路大电流晶体管,其中一路可以PWM,另4路继电器输出,可以直接带市电负载
通信:RS485

为了简化使用时的开发工作,输入输出的功能预先写好子程序,使得使用变得简单快捷

使用实例:交通信号灯演示程序。

以下是完整的主程序文件,主c语言程序不要包含main(), 并且要使用大写BEGIN()函数,看头文件就明白了。

#include "EC0608RT.H"

void BEGIN(void)
{
if(LD_B(MW32, BIT6))OUT_Y6;
if(LD_B(MW32, BIT7))OUT_Y7;
STL
tmr1S[1] = 15;
SET_STEP = 1;
S1
// 方向1绿灯状态
SET_Y0;
RST_Y2;
RST_Y4;
SET_Y5;
if(tmr1S[1] == 0){tmr1S[1] = 5; SET_STEP = 2;}
S2
if(timer_c2 >= 50)OUT_Y0;
if(tmr1S[1] == 0){tmr1S[1] = 2; SET_STEP = 3;}
S3
RST_Y0;
SET_Y1;
if(tmr1S[1] == 0){tmr1S[1] = 15; SET_STEP = 4;}
S4
// 方向2绿灯状态
RST_Y1;
SET_Y2;
SET_Y3;
RST_Y5;
if(tmr1S[1] == 0){tmr1S[1] = 5; SET_STEP = 5;}
S5
if(timer_c2 >= 50)OUT_Y3;
if(tmr1S[1] == 0){tmr1S[1] = 2; SET_STEP = 6;}
S6
RST_Y3;
SET_Y4;
if(tmr1S[1] == 0){tmr1S[1] = 15; SET_STEP = 1;}
SEND

MB[0] = PORTB;
MB[1] = PORTD;
MB[2] = tmr1S[1];
MW[3] = Cn[7];
MW[4] = Cn[6];
MW[5] = MADC[1];
return;
}
[upload=zip,一种基于avr的控制系统.zip]viewFile.asp?ID=4604[/upload]
[upload=rar,原理图.rar]viewFile.asp?ID=4605[/upload]
[upload=jpg,实物.jpg]UploadFile/2008-12/2008121123471646631.jpg[/upload]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
xianqiquan | 2009-1-10 21:14:00 | 显示全部楼层

谢谢了

shihw88 | 2009-3-18 11:03:00 | 显示全部楼层

??

学习,顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
shihw88 | 2009-3-18 11:05:00 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
shihw88 | 2009-3-18 11:05:00 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
shihw88 | 2009-3-18 11:06:00 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
shihw88 | 2009-3-18 11:06:00 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
kar98k | 2009-4-9 10:33:00 | 显示全部楼层

看着比较简洁实用,下来学习一下.

bkkman | 2009-5-9 18:59:00 | 显示全部楼层

从软件结构看还称不上类PLC.

从硬件上看,PLC和一般以逻辑控制的MCU系统相差并不大,就是各PLC厂商之间,除IC型号不同外,从系统架构看,差别也是不大的.主要是软件结构区别甚大.

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则