毕业设计(论文)基于AT89S52单片机的小型PLC的设计与实现36076.doc
基于AT89S52单片机的小型PLC的设计与实现the designation and accomplishment of the small PLC which is based on AT89s52 Singlechip摘 要可编程控制器(PLC)以抗干扰性强、可靠性高和编程灵活等特点在工业上得到广泛应用。其缺点是价格比较昂贵。单片机也以其价格低廉,编程灵活,控制能力强等优点广泛应用于工业控制领域。把两者的优点结合起来,利用PLC的编程思想和实现方法,结合单片机价格低,编程灵活的特点,设计了一种小型可编程控制器。本文介绍了基于AT89s52单片机的小型PLC的设计,阐述了软硬件结构和实现的基本方法。关键字 可编程序控制器(PLC);单片机Abstract Programmable Logic Controller (PLC) has been widely applied in industry because its strong antidisturbance, high reliability and flexible. Its disadvantage is very expensive. But Single Chip Microcomputer has been widely applied because its low price flexible and strong control ability.Combining their advantage together, this paper designs a smart PLC with using the method of PLC programmer and advantage of Single Chip Microcomputer. This paper introduce a hardware and software design method of smart PLC based on MCS-8051。 Keyword Programmable Logic Controller (PLC); Single Chip;1.引言可编程序控制器(PLC)是按照成熟的继电器控制思想,结合计算机技术、自动化技术、通讯技术来实时控制的先进控制系统。PLC广泛应用于工业生产,在工业控制领域占有重要地位,与机器人、CAD/CAM并称为当代工业自动化的三大支柱。可靠性高、接口类型丰富、能适应各种复杂的工业环境是PLC的突出优点,同时PLC采用面向过程的编程语言,编程简单直观,易学易懂,使用灵活方便,工程技术人员经过短期学习即能上手。但它也存在不少缺点:内存有限,编程优化调试困难;产品多为进口,价格昂贵;针对性比较差。特别是当环境条件尚佳,控制量不大,控制逻辑不太复杂,控制要求不高时,它的优势不能完全发挥出来,而且会提高系统的成本。鉴于此,根据可编程序控制器的实现思想和理念,设计小型的PLC控制系统具有较大的实际意义。本文中笔者借鉴PLC的实现思想和运行原理,利用性价比比较高的AT89s52单片机设计了了一种小型PLC。2.硬件设计 此次设计笔者在PLC结构和实现思想的基础上进行了一些尝试,把系统程序和用户程序合并到一起,即不区别系统存储区和用户存储区,不设常驻CPU的系统程序,而是在上位机通过编程软件将用户程序和系统程序合并在一起。此方法简化了硬件结构了,整个硬件系统由单片机AT89s52以及外围接口电路构成。其硬件结构图如图1所示:2.1 CPUPLC常用的CPU有8位16位及32位通用微处理器和单片机。自从单片机问世以来,已有不少产品采用单片机制造可编程控制器,如常见的MSC-8051系列单片机,就被一些公司用来制造小型可编程序控制器,特别是该系列的单片机具有较强的布尔处理机,更适合用来制造PLC。此次采用的AT89s52单片机即是MSC-8051系列的衍生产品。2.2 I/O单元I/O接口的数量是衡量CPU性能的主要标准之一。本系统的设计定位是:应用于控制量较小,控制要求不高的控制场合的微型可编程控制器,故本系统设置了8个输入点和8个输出点,这种设计完全可以满足该工况的需要。PLC工作于工业控制现场,而工业控制现场往往环境恶劣,存在着电磁、噪声、振动等各种干扰,因此PLC要正常工作必须具备良好的抗干扰性能。工业现场中,电磁干扰是较为严重的,因此为了实现良好的抗干扰性能必须把I/O接口和CPU从物理上隔离开来,以防止干扰信号的串入。PLC产品为了实现接口电路与CPU隔离通常采用光电耦合器隔离的方法。本设计已采用了这种方法,使用光电耦合器把输入输出接口同CPU隔离开来。光电隔离电路如图2所示:图1 硬件电路图AT89S52P2.7 P2.0LEDR1CR210K+5VSW 图1 光电隔离电路图2.3 电源部分为了取材方便节约成本,电源部分采用二手的计算机开关电源,取+5V供给单片机,+12V供给接口电路。为了避免干扰的串入,控制部分和接口电路分离供电,分别用两块电源供给,提高了抗干扰性能。3.软件设计软件系统的设计思想是:编程软件将编制的助记符指令翻译为MCS-8051的汇编语言,用户只需通过文本编辑软件建立助记符程序源文件并存为.PLC格式,即可直接运行翻译程序进行翻译,生成.ASM格式的文件,再通过汇编器的编译后生成目标码.HEX文件,最后装入单片机。3.1系统运行程序依照PLC循环扫描、集中采集输入、集中输出的设计思想,设计了系统运行程序。由于单片机并行口在上电复位后都为高电平,而输出设计为高电平有效,因而在程序运行一开始首先向输出口P1写“1”,将输出口电平拉低。而后调用MOV 20H,#00H将输入映像区20H清空,随后进入一个“读输入逻辑运算写输出”循环周期。在每个循环的开始调用MOV P2,#0FFH 和MOV 20H,P2两条指令读取输入口的状态,由于系统逻辑运算部分设计为高电平有效,而输入状态扫描设计为低电平有效,所以当我们采集输入点信息并读入输入映像区后,首先要将输入映像区的值全部取反,再进行逻辑运算。逻辑与运算完毕后将进入写输出操作,由于在翻译逻辑运算的同时已经将输出量写到了输出映像区24H的对应位,因而在循环末尾只需调用MOV P1,24H将输出缓冲区全部写到引脚即可。3.2 翻译程序设计软件设计的思路是设计翻译程序将助记符程序.PLC翻译成为汇编语言程序.ASM。通过研究我们不难发现PLC助记符程序和MCS-51汇编语言存在着一定的对应关系,我们可以利用这一对应关系进行翻译。 具体方法是:先确定PLC助记符指令语句与汇编语句组的队医关系,翻译时派发地址即可。PLC助记符指令与MCS-51汇编指令对应表如表3所示:整个翻译程序共分为四个模块:文件扫描、错误检查、逻辑翻译、结果输出。逻辑翻译模块式翻译程序的核心。翻译是通过I/O映像区地址表的建立,操作数字段操作数类型与标号的分离,操作码字段翻译,I/O点对应的位地址的确定等几个阶段完成的。翻译是通过函数Interpreter()的调用实现的。PLC助记符程序MCS-51汇编语言-LDMOV C , BITLDNOTMOV C , BIT CPL CORORL C , BITORNOTORL C , /BITANDANL C , BITANDNOTANL C,/BITORLDORL C , 22H.0ANDLDANL C , 22H.0OUTMOV 24H.X , C表1 PLC助记符指令与MCS-51汇编指令对应表(1)I/O映像区地址表的建立输入输出映像区地址表中包含了目标程序中全部可用的输入输出点的位地址。首先建立输入映像区地址表和输出映像区地址表,表结构定义如下:typedef struct IBitadress char *b; int Iid; Iadress;/*输入映像区定义*/字符指针分别指向输入缓冲区20H和输出缓冲区24H,Iid标示输入缓冲区每一位的位地址标号,Xid标示输出缓冲区每一位的位地址标号。究竟怎样表示的呢,让我们看一下输入映像区表和输出映像区表的初始化:Iadress Ibit8= "20H.00",0, "20H.10",1, "20H.20",2, "20H.30",3, "20H.40",4, "20H.50",5, "20H.60",6, "20H.70",7, ;/*输入映像区表初始化*/由该初始化过程我们可以发现:输入(输出)表的Iid字段和位地址与每字节位地址的位标号是相对应的,如输入(输出)映像区地址“20H.0(24H.0)”对应的标号Iid为“0(0)”,与“20H.1(24H.1)”对应的Iid为“1(0)”。 在翻译的时候我们通过源文件链表节点中的I/O点类型来决定从那个映像表中取用地址,再结合输入点号最终唯一确定一个位地址作为程序地址。(2)源文件操作码类型和I/O点号的分离当遍历到一个节点时,从节点数据域中取出操作数(Poprand)字段,并对操作数字段的I/O点类型和I/O点号进行分离,具体方法是:先取出Poprand字段第一个字符Poprand0存入变量Poprand_1,该字段表示了I/O点的类型,“I”是输入点,“X”代表输出点,“0”是ORLD/ANDLD指令使用的固定操作码。然后取出Poprand字段的第二个字符Poprand1存入变量Poprand_1,该字段表示了I/O点的标号。(3)操作码字段翻译当扫描到节点时,首先取出节点的操作码字断Popcode 进行判别,通过判别可以确定最终翻译生成的汇编代码的操作码字断和操作数字段中的某一个,表示位地址的操作码字段,须通过分离后的Poprand_2和Poprand_1共同确定。在生成目标程序的操作数字段的时候,逻辑量的暂存选用了程序状态字PSW的最高位Cy,这是由位寻址指令的特点决定的。逻辑节点组暂存选用了位地址22H.0。源文件操作码字段Popcode 的翻译分以下三种情况:1)目标代码地址固定的语句的翻译ORLD 0. 译为 ORL C,22H.0ANDLD 0. 译为 ANL C,22H.0这类指令中的位地址是不变的,因而翻译是固定的,表示将组节点并联时的中间结果存入固定的暂存区22H.0.2)通过操作码字段的翻译后只需确定位地址的语句的翻译 OR(ORNOT) I1. 译为 ORL C,I1(ORL C,/I1)AND(ANDNOT) I1. 译为 ANL C,I1(ANL C,/I1)这两句中已确定了目标程序的操作码字段和操作数字段的一个值,只剩下I/O点地址I1等待确定。3)需保存中间结果的语句的翻译 遇到成组串并联的情况,需先将上一组逻辑的结果存入暂存区。即翻译为:当ldflag=0时 LD I1 译为 MOV C,I1当ldflag=1时 LD I1 译为 MOV 22H.0,C MOV C,I1 两句需要指出的是在进行判断的时候需要先判断条件(ldfalg=1)再判断条件(ldfalg=0),否则可能漏掉需要暂存的中间点。当遇到OUT指令时,把ldflag清零,因为OUT表示一个逻辑回路的结束(4)I/O点对应的位地址的确定经过对源文件操作码字段的分析翻译后,少量源程序的语句已经被完整的翻译出来,这些语句涉及的位置都是固定地址。多数已经得到了目标程序也就汇编代码的操作码字段和一个操作数字段, 剩下一个位地址字段等待确定。确定了位地址以后,整个程序的翻译也就都完成了。这是翻译中最关键的一步。这里就用到了前面建立的I/O映像区地址表,和分离源文件操作数字段Poprand的得到的I/O点标号Poprand_1。确定位地址的方法是首先分析分离得到的Poprand_0,若Poprand_0为”I”则查找输入映像区,这时再用变量Poprand_1和输入映像区地址表的Iid字段匹配,匹配成功则取出Iid对应的位地址,这样就完成了位地址的确定。系统程序分别在逻辑翻译之前和之后导入到输出链表,最后输出的就是具备了完整控制功能的程序。通过后接汇编编译器翻译为.HEX文件,用下载器下载到单片机即可。翻译软件部分运行图片如图4、5、6、7所示。图4 主程序界面图5 读入PLC源程序图6 错误检查图7 翻译结果4.结论本设计是在分析可编程控制系统的工作原理和实现思想后,通过查阅相关资料完成的。实践证明,用单片机仿真可编程序控制器是合理可行的。软、硬件部分均实现了预想的功能。将PLC的设计实现思想用于单片机系统的设计,降低了系统造价,缩短了开发周期,并具有良好的经济性,实验室样板的造价大约在70至80元,远低于市场同类产品,具有很高的性能价格比,在一些要求不高,控制量不大的控制场合完全能够满足要求。5.参考文献1 范策 周世平 胡潇琨等 算法与数据结构 北京:机械工业出版社,20042 胡汉才 单片机原理及接口技术(第二版),北京:清华大学出版社,20043 江秀汉,汤 楠 可编程控制器原理及应用(第二版),西安:西安电子科技大学出版社,20034 谭浩强 C程序设计(第二版),北京:清华大学出版社,19995 赵建东 智能化嵌入式可编程控制器及其集成开发系统的研制,西安交通大学硕士学位论文,19996 孙明江 用MCS-51单片机实现PLC功能的软硬件设计,上海电力学院学报 第十卷 第四期,1994.12