微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于AT89C55单片机的PLC研究

基于AT89C55单片机的PLC研究

时间:01-19 来源:互联网 点击:

随着高职教育的迅速发展,将PLC技术引进高职教学并作为一门较为重要的课程,在高职教育中已达成共识,是课程建设现代化的重要措施。本文在研究 AT89C55单片机后,以该单片机为核心设计了一个综合PLC系统,集成了多路开关量I/O及模拟量输入,并可以通过RS232/RS485与上位机进行通讯,已经作为若干高校的实验设备使用,并且,在要求较高的工程项目中也得到了具体的应用。

1 PLC的硬件功能设计

该PLC的设计思想基于三菱PLC的操作语言,仿照三菱编程器的操作,利用AT89C55单片机作为主控芯片,辅以其它芯片完成相关功能,其逻辑图见图1所示。为了达到教学目的,在设计思路上和常规的PLC有几个不同点:一是为了使学生更多地接触不同的输出方式并进行相关的实验,设计了两种输出形式,即8路继电器输出和4路晶体管输出,而且,继电器输出的端子中有四路没有公共端子,三个端子完全引出,由学生自由组合,可扩大控制范围;二是在输入上,除了16路开关量输入外,还设计了2路模拟量输入和高速开关量计数器输入;三是源代码开放,工科院校自控和计算机专业都开设单片机课程,由于条件所限,学生将实践和学习相结合的机会并不多,鉴于这种情况,将源代码开放,学生可以学习、补充、修改程序,既完善了PLC程序,又锻炼了教师和学生。

在大部分PLC中,例如,三菱[1]、欧姆龙和西门子等,上述功能一般由独立的模块来实现。这里将各种功能集成到一个PLC 模块中,可以降低实验设备的成本。在图1中,为增加学生对输出模块的认识,可控硅模块可以和继电器模块互换,结构只是一个可控硅光耦(例如 MOC3023)驱动一个双向可控硅(例如BTA10-600)。

IC卡的目的是当学生使用编程器编程时,用来记录学生的程序,有利于程序的修改和调试以及教师评分,用于实际工程项目中的PLC省略此功能。串行通信接口支持RS232和RS485两种标准,拨码开关给出本机地址,使用RS485接口组成监控网络时使用。


2 单片机语言的选择及系统软件设计

一般说来,现在通用的单片机编程语言有汇编语言和C语言,C语言编程方便、易读,但需要占用较多的内存,从而导致执行速度变慢。PLC是以循环扫描程序行的方式来工作的,对实时性要求较高,一个扫描周期一般不大于20ms,这样,当程序较长时,速度就显得尤为重要了。因此,选择汇编语言作为PLC的系统设计语言。

由于PLC语言是面向用户的,可以支持的语言并不是单片机可识别的,而且要求可以由用户修改并下载到单片机的程序存储器中,因此需要一个译码模块,在执行中把每一行用户程序翻译成机器可识别的子程序或过程。具体实现的方法为:

用户程序4个字节为一帧:“XX XX XX XX”,其中第一字节为命令,例如,OR、 MOV、OUT等;第二字节为执行元件,例如,继电器、输入等;第三、四字节为相关数据,这与不同的命令内容相关,例如,“01 10 00 03”定义为“LD Y 03”,“00 XX XX XX”定义为“NOP”等。但是,数据区不足以表达数据,可以有后续数据,也是4字节为一帧,以FE为第一字节,例如,“FE XX XX XX”,这样,就将命令帧和数据帧区分了。用户程序下载到 EEROM(FM25640),由主程序依序读出,再交译码模块翻译后执行。

程序中较难实现的是继电器的上升沿或下降沿检测。在PLC语言中许多情况是要检测上升沿或下降沿的,有近千个继电器,在每个循环中对所有的继电器都进行检测记录,无论时间或记录位置(寄存器)都是难以实现的,故开辟了一个存储区,专门记录激活了(即使用中)的继电器状态,在程序运行前,先对继电器扫描,把激活的继电器依序登录,当程序运行到该继电器时就对该继电器进行当前状态同前一周期状态比较登记,当前一次状态与当前状态相反时便认为是上升沿(或下降沿)到达。

3 开关量I/O的软硬件设计

开关量I/O是PLC的重要内容,一般来说,为了提高抗干扰能力,输入与MCU之间是通过光耦隔离的,考虑到成本和尽量减少接口的占用,采用16选1模拟开关CD4067(U8),4条地址线用4个光耦521-1(U10-13)隔离。

由于受光耦响应速度和扫描周期的限制,不允许使用每个周期依序查询的办法,故在程序中设计了一毫秒定时(2)中断,每毫秒查询一个接口,同时将接口状态映射到BIT 30H-3FH,因此,只需要对BIT30H-3FH查询,便可知道接口状态。中断程序如下:

ORG 2BH

LJMPINPUT ;每毫秒中断一次

INPUT:PUSH PSW

PUSH ACC

PUSH DPL

PUSH DPH

MOV C, P1.4

MOV A, 25H

MOV DPTR, #INPUT1

RL A

RL A

JMP @A+DPTR

INPUT1: MOV 30H, C

SJMP INPUT2

MOV 31H, C

SJMP INPUT2

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top