




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于单片机的PLC系统研究绪论1.1背景介绍PLC和单片机这两门学科在是在高校中普遍开展教学的两门学科。不管是在编程上、还是具体的应用过程中,人们都很少会把它们联系在一起。但是如果简单的回顾下它们的发展史,就会发现PLC和单片机之间有着许多联系。基于单片机的PLC系统研究课题,打破了PLC和单片机这两门学科的传统界限,使得原本孤立、纯粹的两门学科紧密的联系了起来。不仅检验学生了解PLC和单片机基本知识深度,更重要的是要让学生清楚的了解PLC和单片机的本质区别,从而再将二者结合起来,提高对综合运用知识的能力[1]。目前我国PLC市场被国外垄断,国外厂家生产的PLC不但价格比较贵,而且都有很强的技术保密性,能披露的具体细节非常少,不管是软件还是硬件都不能实现互换性使用[2]。我国作为制造大国,PLC运用广泛,但是国产PLC还有很大的发展差距,任重而道远。本课题是在这样的背景下,结合所学PLC和单片机的基本知识,设计了一个以单片机作为控制芯片的简单PLC系统。本课题利用80C52设计了一个简单的PLC系统[3]。该PLC有16位独立的输入接口,8位独立的输出接口;为了提高系统的抗干扰能力,输入电路采用光电隔离技术,采用继电器隔离输出。该PLC内部还有96个软继电器以及32个定时/计数器。定时器可定时0~999.9s,计数器计数0~9999。同时为了实现模拟量的输入输出,本设计采用TLC549模数转换芯片[4]和LTC1451数模转换芯片[5],完成了对PLC模拟量输入输出扩展。1.2课题内容(1)了解国内外研究现状,调研相关研究方法,收集与课题相关资料,结合所学知识,提出初步设计方案。(2)用80C52单片机设计一个PLC系统。该系统包含CPU、存储器、编译器、电源、输入\输出接口电路。(3)使用Proteus设计基于单片机的PLC电路图,通过SPI技术实现模拟量输入、输出。(4)基于编译技术,设计PLC语句表到机器码的转换程序,使语句表能转化为单片机可识别的汇编语言。(5)PLC系统的硬件设计并通过相关实例模拟仿真。2单片机和PLC的简单介绍及模拟量输入输出2.1单片机和PLC的基本介绍2.1.1基本概念单片机也称微控制器(MCU),是微型计算机领域中发展而来的一个重要分支,其本质上也是一个微型计算机。它通常作为一个芯片,嵌入到系统中实现控制功能。PLC也称为可编程序逻辑控制器,顾名思义,“可编程序”即户可以根据不同的控制需求对程序进行编写。而“逻辑控制器”这一个概念的由来是由于最PLC初只是为了取代传统的工业控制继电器的逻辑控制功能。但在70年代由于微处理器引入,PLC不仅能实现逻辑控制,还可以进行运算和信息处理,成为了真正具有控制能力的计算机控制装置。PLC是建立在单片机之上的一个嵌入式系统,其核心硬件CPU,可由单片机芯片增加一些可靠性较强的保护电路制作而成。目前市场上的PLC,由单片机作为主控芯片,已应用到许多工程控制系统中,具有良好的发展前景[6]。2.1.2基本结构单片机和PLC的结构基本相同。单片机是一种芯片,运用集成电路技术把电源、CPU,存储器,输入输出接口等集成到一块很小芯片上,从而体现它的单片功能。PLC作为复杂的嵌入式系统,是一种专门为比较恶劣的工业环境下实现自动化控制要求而设计的。其硬件包含电源、CPU、存储器模块、输入输出模块、编程器等。单片机用直流5V作为工作电源,PLC可以使用220V交流电,其内部有一个稳压器,为PLC内部各部分提供24V的直流电源。CPU作为控制中枢,按照系统程序的指令功能起运算和控制的作用,由控制器、运算器和寄存器组成。存储器分为系统存储器、程序存储器和数据存储器。系统存储器是使用者不能更改的程序,用于存储制造商编写并固化的程序,使系统具有设计者规定的基本功能。用户程序存储器是用来存放用户为了实现根据控制要求而编写的程序。数据存储器是运行过程中需生成或调用中间结果数据,如输入/输出元件的状态数据、定时器、计数器的初始化等。除此之外,PLC对于不同控制系统的程序可通过专用的程序编辑器进行编程,将存储器中的程序清除并重新编写。单片机和PLC输入/输出接口电路有并行和串行两种输入输出方式,过扩展后还可以进行模拟量的输入输出。单片机能实现基本的输入输出,而PLC的输入输出接口电路由于采用了光电隔离技术和继电器隔离技术,具有很强的可靠性和抗干扰能力。2.1.3基本原理在系统运行后,PLC和单片机工作原理是类似的,CPU以一定速度对程序进行周期扫描。其一个扫描周期依次有三个阶段,即输入采样→程序执行→输出刷新三个阶段。输入采样阶段主要从输入接口接收来自外界的信息并存入存储器。这些信息主要包括两部分即开关量和进过模数转换后模拟量。用户程序执行阶段CPU根据存储器中的程序对输入的数据进行运算和处理。输出刷新将运算处理的结果通过输出接口送去控制执行机构。2.1.4编程方式单片机的的编程方式有汇编语言和C语言,PLC语言最常用的有梯形图语言和指令表语言。单片机的编程复杂,比较抽象,要求开发人员具备扎实的专业基基础。而PLC的编程主要面向用户,根据用户的要求完成控制需要,程序比较直观,简单易学,逻辑清晰,不要求用户具备对很强专业知识。2.1.5应用领域单片作为一个芯片,机集成度高,体积小,功能强,价格便宜,因而广泛微控制领域中。比如电视、冰箱洗衣机、手机等智能家电中都运用到单片机作为控制器。PLC作为一种自动化控制系统,具有很强的可靠性和抗干扰能力,并且简单易用,维护方便,在环境比较复杂的工业控制领域中广泛应用,如电梯控制、机床控制、流水线、生产线等。2.1.6输入/输出(I/O)接口电路单片机和PLC的输入输出接口电路包括数字量输入输出接口电路和经过扩展后的模拟量输入输出接口电路,有串行和并行两种输入输出方式。单片机输入输出接口电路是最简单的,实现基本的输入输出功能。而PLC输入输出接口是与工业设备之间的连接电路,一般采取了光电隔离、滤波等抗干扰技术,以提高其抗干扰能力和稳定性。输入接口电路输入端的信号,如信号传感器,按钮,行程开关变换成数字信号进入PLC;输出接口电路将运算结果转换为驱动输出设备如灯,信号控制接触器线圈,电磁阀。2.2模拟量输入输出单片机和PLC的输入输出接口电路包括数字量输入输出接口电路和经过扩展后的模拟量输入输出接口电路[7],有串行和并行两种输入输出方式。单片机输入输出接口口电路是简单的,实现基本的输入输出功能。而PLC输入输出接口是与工业设备之间的连接电路,一般采取了光电隔离、滤波等抗干扰技术,以提高其抗干扰能力和稳定性[8]。输入接口电路输入端的信号如信号传感器,按钮,行程开关变换成数字信号进入PLC;输出接口电路将运算结果转换为驱动输出设备如灯,信号控制接触器线圈,电磁阀。2.2.1模数(A/D)转换概述A/D转换包含三个部分:采样、量化和编码。在时间上离散化模拟量为采样,在幅度上离散化模拟量为量化,编码是用二进制代码显示量化后的值。A/D转换芯片种类很多,按其转换原理可以分为逐次逼近型、并行式、双积分型等[9]。主要性能参数:(1)分辨率:分辨率反映转换器的精度,二进制的位数越多,转换的精度越高。但是二进制位数越多,硬件成本越高,运算时间也越长。(2)精度:精度有绝对和相对精度。绝对精度是指数字量表示的模拟量与理想模拟量之差的最大值。相对精度是将这个差值标示为满量程模拟电压的百分比。(3)转换时间:完成一次转换所需要的时间。(4)转换速率:单位时间内完成转换数据的速度。(5)量程:所能转换的量的输入范围.2.2.2数模(D/A)转换概述在工业控制过程中,大多数的执行器都要求输入模拟驱动信号才能完成相应控制。所以这就需要把控制器处理后的数字量重新转换为模拟量,以便驱动各种执行器。D/A转换器的基本原理是用电阻网络将每位数码的权值转换成相应的模拟信号[10],然后用运算放大器求和电路将这些模拟量相加就完成了数模转换。常用的有T型和倒T型电阻网络。主要性能参数:分辨率:单位数字量变化引起模拟量输出变化值,为满量程电压与最小输出电压分辨值之比。转换时间:数字量输入到模拟量输出所用的时间。转换精度:表示实际值与理想值之间的误差。3硬件设计3.1硬件设计概述本课题主要利用80C52设计一个简单PLC系统。通过SPI技术[11],使用TLC549实现模拟量输入,LTC1451实现模拟量输出,同时还具有0-9999的计数功能。该PLC有16位独立的输入,8路独立的输出;该PLC还有32个独立的计数器。3.2最小单片机系统单片机最小系统是使单片机能够实现基本的输入输出及运算处理功能的最少器件构成的系统。80C52单片机最小系统主要由单片机、振荡电路、复位电路、电源等部分组成。3.2.180C52芯片介绍80C52是英特尔公司开开发的MCS-51系列HYPERLINK"/view/1012.htm"\t"/_blank"单片机的产品,它是一种高性能8位单片机,采用CHMOS工艺技术制造,具有高速及低功耗特点。它属于80C51单片机增强型版本,使用MCS-51系列HYPERLINK"/view/1012.htm"\t"/_blank"单片机通用的体系结构和HYPERLINK"/view/178189.htm"\t"/_blank"指令语言,具有定时功能和加减计数器功能。80C52采8位的中央处理器作为CPU。内部数据存储器RAM共有256个单元,其中低128单元地址从00H~7FH,作为供用户使用的内存单元,高128单元地址从80H~FFH,作为专用寄存器。80C52共有8kHYPERLINK"/view/421016.htm"\t"/_blank"程序存储器ROM,用来存放程序和原始数据,无需扩展,更能体现单片机“单片”特点。此外80C52还具有5个两级中断结构、32个双向I/O口及片内振荡电路。它采用44pin和40pin两种封装形式。3.2.2单片机的内部结构图3.180C52单片机结构图80C52单片机的基本结构包括CPU、定时/计数器、I/O、数据存储器、程序存储器、、时钟单路、中断系统等。其结构如图3.2所示。图3.180C52单片机结构图图3.180C52内部结构图3.2.3单片机的引脚图及功能80C52共有40个引脚,可以分为4类:I/O引脚、控制、电源和时钟。引脚图如下:图3.280C52引脚排列图VCC:芯片电源端。GND:接地端。XTAL1:振荡电路反相输入端。XTAL2:振荡电路输出端。ALE/EQ\*jc0\*"Font:TimesNewRoman"\*hps12\o(\s\up11(_____________),PROG):地址锁存允许端。PSEN:外部ROM读选通信号。RST:复位引脚。EQ\*jc0\*"Font:TimesNewRoman"\*hps12\o(\s\up11(————),EA)/VPP:内外ROM选择。I/O引脚:80C52单片机共有4个I/O端口,每个端口8位,共32个可编程I/O引脚。3.2.4复位电路单片机启动时和遇到故障时需要复位,复位就像电脑重启一样,使CPU和系统中的其他部件都恢复到最初状态,并从这个状态开始工作。所以复位电路的设计功能包括上电复位和系统运行时按键复位功能[12]。基本RC复位电路如图3.3在此系统中单片机的复位靠外部电路实现的,80C52单片机有一个高电平有效的复位引脚RST。即只要RST保持高电平,ALE/PSEN、P0、P1、P2、P3口都输出高电平,单片机复位。RST变成低电平后,CPU开始正常工作,退出复位状态。复位操作不影响片内RAM的内容。此复位电路有两种工作方式系统上电复位和手动RESET复位。系统上电时瞬间会提供复位信号复位。当人为按下RESET按键RST获得高电平,单片机复位,当松开按键,系统退出复位状态,实现手动复位。图3.3复位电路图3.2.5振荡电路振荡电路的作用是产生时钟频率,使系统各部分能够按照节拍保持同步工作。振荡电路由晶振和电容、电阻相结合而成[13]。晶振频率决定了单片机运行速度的快慢,但是晶振频率越高,功耗越大,系统越不稳定,所以还是适用就好。80C52单片机虽然也有内部振荡电路但是稳定性较差,不精确,一般使用外接振荡电路。通常情况下,为了保持各部分保持同步工作,一个系统只使用单独的晶振。在本次设计中为了能准确分频,选用11.0592MHz的晶振作为振荡源,电容容量为30pF。振荡电路图如图3.4图3.4振荡电路图3.3模拟量输入输出的设计为了实现模拟量的输入输出,选择我们TLC549作为模数转换的芯片,选择LTC1451作为数模转换的芯片,采用SPI技术实现转换芯片与单片机的连接。3.3.1在80C52单片机中模拟SPI的方法80C52并没有硬件SPI接口及,但是通过软件程序设计,实现模拟SPI的功能,从而实现数据的串行输入输出。如图3.5所示。图3.5SPI接线图在此图中,我们设定DIN对应P1.0口,DOUT对应P1.3口,SCK对应P1.1口,SS对应P1.2口。即P1.0为单片机数据输入端;P1.3为单片机数据输出端;P1.1为时钟信号输出端,在上升沿时输入数据,在下降沿时输出数据;P1.2为片选信号输出端,为1时表示未选中外围芯片,为0时表示选中外围芯片。单片机P1.2置0选中外围芯片,P1.1位由低电平变为高电平,将使外围接口芯片数据串行左移,从而输出1位数据到80C52单片机的P1.0口。此后再置P1.1低电平,单片机从P1.3输出1位数据(先高后低)至串行接口芯片,从而实现模拟1位数据的输入输出。此后再置P1.1为高电平1,模拟下1位数据的输入输出,循环8次后,就可以实现8位数据的串行输入输出。SPI串行输入输出程序见附件13.3.2模数转换TLC549芯片介绍TLC549是一种8位模数转换器,它的价格便宜、准换速度快。它能通过CLK、CS、DATAOUT三个接口与具有串行外围接口(SPI)的单片机连接,实现模模拟量的输入。(2)TLC549引脚及功能图REF+:正HYPERLINK"/subview/2127779/2127779.htm"\t"/_blank"基准电压输入端2.5V≤REF+≤6V(按照转换范围需求设置电压大小)。REF-:负基准电压输入端(一般接地)。VCC:系统电源3V≤VCC≤6V。HYPERLINK"/subview/961504/13628081.htm"\t"/_blank"GND:接地端。图3.6TLC549引脚图/CS:片选信号端,低电平有效。DATAOUT:数据串行输出端,先高后低原则进行输出。ANALOGIN:电压信号输入端。HYPERLINK"/subview/300881/11169495.htm"\t"/_blank"I/OCLOCK:时钟信号输入端,由程序决定。(2)工作原理当/CS变为HYPERLINK"/subview/1937556/1937556.htm"\t"/_blank"低电平,TLC549芯片被选中,每当HYPERLINK"/subview/300881/11169495.htm"\t"/_blank"I/OCLOCK出现一次上升沿信号,前次转换数据从最高位到最低为自DATAOUT端依次输出,循环8次。在第4个I/OCLOCK信号由高至低的跳变之后,内部电路开始对输入HYPERLINK"/subview/1152876/1152876.htm"\t"/_blank"模拟量采样,第8个I/OCLOCK信号的HYPERLINK"/subview/345334/345334.htm"\t"/_blank"下降沿启动HYPERLINK"/subview/404970/404970.htm"\t"/_blank"A/D转换,/CS变为HYPERLINK"/subview/1299029/1299029.htm"\t"/_blank"高电平。由此可见,一个完整的转换流程包括:读入前次A/D转换结果;对输入HYPERLINK"/view/38288.htm"\t"/_blank"模拟信号采样;启动本次A/D转换。时序图如图3.7。图3.7TLC549时序图3.3.3数模转换LTC1451芯片介绍是LTC1451是凌力尔特公司开发的一种采用SO-8封装,低耗能,高性能可以完成单通道轨到轨输出的12位数模转换器。他们包括运算放大器和3个串行接口(CLK、DIN、CS/LD)。其DIN数据输入将12位二进制数据通过CLK时钟脉冲逐位地输入到LTC1451的寄存器中进行D/A转换,并将转换后的模拟信号,由VOUT引脚输出。(2)引脚图及引脚功能CLK:时钟信号输入端。DIN:串行数据输入端。/CS:片选信号端,低电平有效。DOUT:移位寄存器的输出。GND:接地。
VOUT:电压输出端。REF:运算放大器基准电压输入端。
VCC:系统电源4.5V≤VCC≤5.5V。
图3.8LTC1451引脚功能图工作原理LTC1451与TLC549工作原理基本相同。其中LTC1451包含一个运算放大器可以使输出电压放大1倍,转换精度为12位。LTC1451工作时序图如下:图3.9LTC1451时序图3.4硬件设计电路图根据前面的介绍与分析,结合本课题的设计目标。最终得到硬件设计电路图如图3.10.该电路包括具有震荡电路和复位电路。本电路具有P2、P3口输入,P1口输出。其中P3.7口扩展为模拟量输入端,P1.7口我模拟量输出端,P1.4为LTC1451芯片选择输入端,低电平有效,P1.5为TLC549芯片选择输入端,低电平有效,P1.6为TLC549和LTC1451共用的时钟信号输出端。除此之外,TLC549REF-端接地,REF+端接正5V电压。LTC1451REF+端接正5V电压。系统运行时,TLC549会不断将转换后的数据输入到84H地址单元中。LTC1451会不断从85H地址单元中读取数据转换输出。模拟量输入输出程序见附件2图3.10电路原理图为了验证模拟量输入输出的可行性,TLC549输入端外接了一个可变电阻,以此提供可变电压,时钟信号输入端(SCLK)、数字量输出端(SDO)、片选信号端分(CS)别接示波器A、B、C端口。LTC1451数字量输入端(DIN)接示波器D端口。接线图如图3.11。用Keil编译模拟量输入输出转换程序,生成HEX文件,用Proteus仿真后得到波形图如图3.12。改变模拟量输入大小,模拟量输出也随之变化,转换完成。图3.11模拟量转换接线图3.12模拟量输入输出波形图4系统软件设计4.1软件设计原理为了使本课题设计的PLC能够按照设计工作,必须对它进行编程。把设计方案画成梯形图,并根据梯形图编写语句表。然后用转换程序对语句表进行编译,并用Proteus模拟仿真。本课题设计的PLC使用直接将语句表转换成单片机所能执行的机器代码的方法,设计转换程序。软件设计流程图如图4.1:图4.1软件设计流程图PLC本身可以理解为一个由许多继电器组成的系统,我们有时称之为软继电器。编程的工作就相当于在这些继电器之间连接线路使之成为一个完整的控制电路。具体的实现方是:(1)16个输入输出端口的编号为104-119(2)8个输出端口编号为96-103)(3)96个内部软继电器编号为0~95(4)32个定时/计数器编号为0~314.2编译原理根据以上编译结果及流程图设计了转换程序,使用Python工具来实现。Python是一种语法简洁且清晰,解释型计算机语言,具有丰富和强大的类库。不同于javascript和vbscript等只能在浏览器中使用或者嵌入宿主程序中运行的脚本语言,Python的库很完整,支持丰富的数据结构,可以独立开发大型工程。Python语法最大的特点是使用缩进来表示程序块,这确保了其代码具备良好的可读性。通过完善的标准库,Python可以非常方便地使用操作系统提供的功能,而且Python的标准库包括单元测试、文档和日志工具。除了标准库外,Python还拥有大量的第3方库和工具,比如Zope是一个使用Python编写的应用序服务器,可以免费使用,支持多种操作平台,适合开发基于web的应用程序;Boa-constructor是用Python编写的一个带窗体设计器的集成开发环境,适合开发桌面应用程。在面向对象方面,Python支持很完善,而且Python可以和其他组件模型,如com、corba交互。这些都使得Python具有极高的开发效率[14]。使用它能够迅速的得到需要的转换程序。4.3PLC指令介绍目前生产PLC的厂家很多,虽然不同厂家PLC指令的的表达式和格式不一样,编程思想和表达意思基本相同。为了方便认识,我们统一采用欧姆龙CPM1A系列PLC指令[15]。下面我们介绍其指令。4.3.1PLC基本指令表4-0PLC基本指令表指令名称指令符功能取LD读入逻辑行或电路块的第一个常开接点取反LDNOT读入逻辑行或电路块的第一个常闭接点与AND串联一个常开接点与非ANDNOT串联一个常闭接点或OR并联一个常开接点或非ORNOT并联一个常闭接点电路块与ANDLD串联一个电路块电路块或ORLD并联一个电路块输出OUT输出逻辑运算结果输出求反OUTNOT逻辑运算结果求反输出置位SET置继电器触点为闭合状态复位RSET使继电器复位为断开定时TIM接通延时定时器设定时间0~999.9S计数CNT减法计数器设定值0~9999次4.3.2常用的功能指令(1)空操作指令NOP不进行任何逻辑操作,在程序中留出一个地址。(2)结束指令END本指令为程序结束的标志指令,是程序的最后一条指令,表示程序到此结束。微分二进制加法指令@ADBYYH,XX当接收到一次脉冲信号时,将地址位YYH的内容和立即数XX进行二进制带进位加法运算,结果存入YYH中。微分二进制减法指令@SBBYYH,XX当接收到一次脉冲信号时,将地址为YYH的内容和立即数XX进行二进制带进位减法运算,结果存入YYH中。(5)微分二进制乘法指令@MLBYYH,XXH当接收到一次脉冲信号时,将地址为YYH和XXH内容的8位无符号数进行二进制乘法运算,乘积送回到YYH、XXH中。其中YYH存放高字节,XXH存放低字节。(6)微分二进制除法指令@DVBYYH,XXH当接收到一次脉冲信号时,将地址为YYH和XXH内容的8位无符号数进行二进制除法运算,商放在YYH中,余数放在XXH中。(7)微分传送指令@MOVYYH,XX当接收到一次脉冲信号时,将立即数XX送到地址为YYH的内容中。(8)数值比较初始加载指令(LD+<,LD+>=)LD+<YYH,XX:数值比较初始加载指令相当于一个触点。将YYH中的内容与立即数XX作比较,如果YYH的内容小于XX,触点闭合,否则置断开。LD+>=YYH,XX:数值比较初始加载指令相当于一个触点。将YYH中的内容与立即数XX作比较,如果YYH的内容大于或等于XX,则触点闭合,否则置断开。(9)数值比较逻辑与指令(AND+<,AND+>=)AND+<YYH,XX:当串联的触点闭合时,将YYH中的内容与立即数XX作比较,如果YYH的内容小于XX,则触点闭合,否则断开。ANDD+>=YYH,XX:当串联的触点闭合时,将YYH中的内容与立即数XX作比较,如果YYH的内容大于或等于XX,则触点闭合,否则断开。(10)数值比较初逻辑或指令(OR+<,OR+>=)OR+<YYH,XX:并联一个触点,将YYH中的内容与立即数XX作比较,如果YYH的内容小于XX,则触点闭合,否则断开。OR+>=YYH,XX:并联一个触点,将YYH中的内容与立即数XX作比较,如果YYH的内容大于或等于XX,则触点闭合,否则断开。4.4转换程序的设计本课题设计的PLC的运行程序有三大部分。第一部分是初始化部分,这些程序是由编译程序自动生成的,和PLC指令程序没有关系。它只在开机或者复位时执行一次,系统正常运行后不会被再次执行。这段程序规定了80C52的内存分配方式,对I/O口初始化及部分内设置初始值等[16]。第二部分为主循环程序部分,这部分程序包含有固定程序以及编译程序根据PLC指令编译生成汇编代码。转换程序的设计由以上二个部分做为基础进行设计总体分析后得到转换程序流程图如图4.3。由此流程图来作为转换程序设计的依据。图4-2转换程序流程图4.4.1初始化部分转换程序运行后要生成目标程序的初始化程序,首先要完成对80C52的的内存分配才能对初始化程序进行分析。80C52单片机内存单元有低128字节的内存和高128字节的内存称为内部数据存储器RAM[17]。低128单元内存地址从00H到7FH。通用工作寄存器区从00~1FH单元,位寻址区从20H~2FH,其余的内存单元为以字节为单位的常规内存,地址为由30~7FH。高128内存单元地址从80H~F0H。80C52共有21个特殊功能寄存器,他们离散的分布在80H~FFH的高128单元区域,并未完全占满,我们可以通过间接寻址的方式对空余的内存单元进行访问。80C52低128单元内存的状态和位地址如图4-3.图4-380C52片内RAM的状态和地址本PLC使用了80C52片内RAM的绝大部分。内存分配和使用情况如下:70H~7FH这16个字节的RAM用作系统堆栈。30H~6FH这64个字节的RAM用作存储32个定时器/计数器的值,每一个定时器/计数器占用2个字节。例如0号定时器/计数器的值是保存在30H和31H中,其中30H是低字节,31H是高字节。2FH这个字节中的8个二进制位作为程序运行中的标志位。2DH和2EH这两个字节RAM中存放由80C52,P2口和P3口输入的数据。2DH和2EH位地址68H~77H中的数据对应于PLC中104~119号输入端的状态。1表示输入触点闭合,0表示输入触点断开。2CH这个字节中存放的数据将由8255芯片PC口输出。它的位地址60H~67H中的数据对应于96~103号输出继电器的状态。数据1为继电器吸合,数据0为继电器释放。20H~2BH这12个字节用作软继电器。对应位地址从00H~5FH,这96个位地址单元中的数据相应于0~95号软继电器的状态。数据1表示软继电器触得电,常开触点闭合,常闭触电断开。数据0表示软继电器失电,其常开触点断开,常闭触点闭合。14H~17H这4个字节共有32位,用作标志。每一位标志了一个定时器/计数器的具体功能。如果其中某位为1则表明该位对应的是一个定时器,如果该位为0则表明对应的是一个计数器。08H~0FH这8个字节为1区的R0~R7,用于中断服务程序。00H~07H这8个字节为0区的R0~R7,节用于主程序。对于高128单元,我们规定84H单元用来存储TLC549输入的数据。85H单元为LTC1451读取数据单元。其余未使用的内存单元通过间接寻址作为常规内存使用。根据内存分配方案,要完成的编译程序要生成的初始化程序见附件3。4.4.2主循环程序部分主循环程序部分的固定程序主要是I/O的循环扫描部分。我们规定了P2、P3作为输入口,P3作为输出口,其中P1.4、P1.5、P1.6、P1.7已经被占用。固定程序段见附件4。编译程序部分要根据PLC指令进行编译生成相应的汇编代码。4.4.3基本指令的编译(1)“LD”和“LD-NOT”指令的编译LD语句的梯形图意义为与母线相连的最左边的常开触点。要完成“LD”指令的编译分为两种情况:一种是引用软硬继电器的常开触点,触点编号XX为十进制数,取值范围为0~119,所占的资源可以96个内部软继电器,和16个输入端口和8个输出端口。即可用20H~2BH、2CH、2DH、2EH这些字节的RAM地址。首先在为了保存之前的数据,将进位标志“C”存入地址1FH的bit0,需要三行指令,然后把LD语句相对应的位地址中的数据送给进位标志C。此位地址的数据表示对应继电器的状态。所以一共编译生成4行汇编指令,YY是XX化为十六进制数的结果,也是RAM中的位地址。一种是引用定时器或计数器的输出常开触点,触点编号为CNTXX或TIMXX,其中XX为十进制数,取值范围为0~31。根据内存分配状况,可用30H~6FH这64个字节的RAM。首先和LD语句一样应存之前的数据,然后将对应地址中的数据写入进位标志C。所以编译生成5行汇编指令。编译结果如表4-1:表4-1“LD”指令的编译PLC指令相应的汇编代码LDXXMOVA,1FHRLCAMOV1FH,AMOVC,YYHLDCNTXXorLDTIMXXMOVA,1FHRLCAMOV1FH,AMOVA,YYHMOVC,ACC.6LD-NOT指令的编译结果与LD的编译结果正好相反。LD-NOT指令所代表的是常闭触点,与常开触点的执行结果应该是相反的,所以只需要在LD指令编译结果的基础上加一条取反指令“CPLC”即可。如表4-2表4-2“LD-NOT”指令的编译PLC指令相应的汇编代码LD-NOTXXMOVA,1FHRLCAMOV1FH,AMOVC,YYHCPLCLD-NOTCNTXXorLD-NOTTIMXXMOVA,1FHRLCAMOV1FH,AMOVA,YYHMOVC,ACC.6CPLC(2)“OUT”和“END”指令的编译“OUT”指令是PLC语言的输出指令,“END”指令是PLC源程序的结束指令。“OUT”指令在汇编程序中即是一条输出的指令代码。“OUT”指令中的XX是输出线圈编号,为十进制数,取值范围是0~103。YY是XX化为十六进制数的结果,也是RAM中的位地址。即要将进位标志C的数据存放到YY所指的位地址中。在主循环程序中,程序是从0400H开始的,所以END指令的编译结果是使程序有0400H地址处开始执行。编译结果如表4-3表4-3“OUT”和“END”PLC指令相应的汇编指令OUTMOVYYH,CENDLJMP0400H(3)“AND”和“AND-NOT”指令的编译AND指令的编译分为两种情况,一种是引用软硬继电器的常开触点,触点编号XX为十进制数,取值范围为0~119,所占的资源和LD指令一样。AND在梯形图中表示与前一条指令相串联的常开触点,即串联线路的元件都闭合才能输出1。可用汇编指令中的ANL进行实现,这条汇编指令的作用是将两个操作数按位进行逻辑“与”运算,并将结果存入直接寻址的内RAM单元。YY是XX化为十六进制数的结果,也是RAM中的位地址。一种是引用定时器或计数器的输出常开触点,ANDTIM或ANDCNT指令是指,相应编号的定时器/计数器的输出常开触点与前一条PLC指令所指的触点是串联关系。所以需要将对应RAM地址中的相应高低字节中的数据与进位标志C进行逻辑与,并将结果存入C中。所以编译结果如表4-4:表4-4“AND”指令的编译PLC指令相应的汇编指令ANDXXANLC,YYHANDTIMXX或ANDCNTXXMOVA,YYHANLC,ACC.6“AND-NOT”指令的编译结果与AND指令相反。因为AND-NOT指令所代表的是常闭触点,与常开触点的执行结果是相反的。所以“AND-NOT”指令的编译结果与AND指令的编译结果相比只是最后一条指令改为先将数据取反再和进位标志C进行逻辑与运算。编译结果如表4-5。表4-5“AND-NOT”指令的编译PLC指令相应的汇编指令AND-NOTXXANLC,/YYHAND-NOTTIMXXAND-NOTCNTXXMOVA,YYHANLC,/ACC.6(4)“OR”和“OR-NOT”指令的编译OR指令的编译分为两种情况,一种是引用软硬继电器的常开触点,触点编号XX为十进制数,取值范围为0~119,所占的资源可以96个内部软继电器,和16个输入端口和8个输出端口。即可用20H~2BH、2CH、2DH、2EH这些字节的RAM地址。OR指令表示在梯形图中与前一条指令所指的触点相并联的常开触点,只有两者都为0时才会输出0。在硬件上表示为接在相应编号的输出口上的常开按键。这种结果在汇编语言中可用ORL指令来完成。ORL指令是逻辑“或”指令,功能是:两个操作数进行逻辑“或”运算,并将结果存入直接寻址的内RAM单元。YY是XX化为十六进制数的结果,也是RAM中的位地址。一种是引用定时器或计数器的输出常开触点,ORTIM或ORCNT指令是指,相应编号的定时器/计数器的输出常开触点与前一条PLC指令所指的触点是并联关系。所以需要将对应RAM地址中的相应高低字节中的数据与进位标志C进行逻辑或,并将结果存入C中。指令的编译结果如表4-6。表4-6“OR”指令的编译PLC指令相应的汇编指令ORXXORLC,YYHORTIMXX或ORCNTXXMOVA,YYHORLC,ACC.6“OR-NOT”指令的编译结果与AND指令相反。因为OR-NOT指令所代表的是常闭触点,与常开触点的执行结果是相反的。所以“OR-NOT”指令的编译结果与OR指令的编译结果相比只是最后一条指令改为先将数据取反再和进位标志C进行逻辑与运算。指令的编译结果如表4-7。表4-7“OR-NOT”指令的编译PLC指令相应的汇编指令OR-NOTXXORLC,/YYHOR-NOTTIMXX或OR-NOTCNTXXMOVA,YYHORLC,/ACC.6计数器指令“CNT”的编译本次我们设计了一个二进制减计数器(CNT)。计数器有两个输入端,标有CP的输入端为计数端,标有RST的输入端为复位。两个输入端分别和两个常开触点(X1,X2)串联。当按下X1,CP端输入一个正脉冲信号,计数器会从其原值中减1.如果计数器的值被减到0时,计数器输出端动作(相当于继电器吸合),计数器常开触点闭合。任何时刻一旦按下X2,RST端输入一个正脉冲信号,计数器的常开触点恢复为断开状态,计数值恢复为初值。该计数器占用2个字节,内存地址从30H~31H,计数范围0~9999。高字节的最高两位为状态位,其中最高位表示输入状态,CP得电时最高位为0,CP失电时最高位为1。次高位表示输出状态,当计数器初值减到0时,次高位置1,否则次高位写0。计数器的RST端得到一个正脉冲信号时,次高位恢复为0,最高位恢复为1,计数器的值恢复为初始值。CNT程序编译流程图如下:图4-4CNT程序编译流程图此图可以看出这段程序有4次判断转移。第一次判断中,查看进位标志C的值,它实际上表示的是RST输入端状态。当C=1时,表示RST端得电,这是计数器应复位使其值恢复为初始值,并使最高两位恢复为10.若RST=0,即RST端不得电,则使进位标志C记录CP输入端状态。C=0表示CP端不得电,C=1表示CP端得电,然后开始第2个条件判断。若计数值为0,表明计数已经减到0,置计数器的次高位为1。若计数值不为0,继续计数。这时要判断CP输入端电平状态,若C不为0表明CP输入端为得电状态,应对计数器最高位写0。若C为0,表明CP端输入状态为失电状态,这时要进一步判断数据的最高位。最高位为1表示主程序循环CP端本来就是失电状态,本次仍然失电,计数值不变。若最高位为0,表示上一次主程序循环执行到这里时计数端是得电。这种情况表明,计数器CP端的状态由上次主循环的得电变为本次循环的失电。这正是CP端接收到的计数正脉冲的下降沿。计数器值在这种情况下进行减1,最高位置1。计数器程序见附件5。(6)二进制运算指令的编译ADB、SBB、MLB、DVB进行运算时会占用内存单元。但由于80C52的低128单元的内存已经被完全分配,所以我们只能用高128单元的内存。80C52共有21个特殊功能寄存器,他们离散的分布在80H~FFH的高128单元区域,并未完全占满,我们可以通过间接寻址的方式对空余的内存单元进行访问。编译结果如下:表4-8“@ADB”和“@SBB”的编译PLC指令相应的汇编指令ADBYYH,XX(ABBYYH,XX)JCL1MOVR0,#87HMOVA,@R0MOVC,ACC.7JNCL2MOVR1,#85HMOVA,@R1CLRCADDCA,#XX(SUBBYYH,XX)MOV@R1,AMOVR0,#87HMOVA,@R0CLRACC.7MOV@R0,ASJMPL2L1:MOVR0,#87HMOVA,@R0SETBACC.7MOV@R0,ASJMPL2L2:NOP判断本次输入端状态,如果为1,保存到87H的bit7中,如果为0,继续判断上一次输入端状态。如果为1,则为下降沿,进行带进位二进制加减运算并且把输入状态保存到87H的bit7中,如果为0结束。(7)“@MOV”的编译判断本次输入端的状态,如果为1,本次状态保存到87H的bit6中,如果为0,继续判断上一次的输入端状态。如果上一次输入端状态为1,则为下降沿,传送立即数,并且把当前状态保存到bit6中,若果为0结束。指令编译如下:表4-9微分传送指令“@MOV”的编译PLC指令相应的汇编指令@MOVYYH,XXJCK1MOVR0,#87HMOVA,@R0MOVC,ACC.6JNCK2MOVR1,#YYHMOVA,@R1CLRCMOVA,#XXMOV@R1,AMOVR0,#87HMOVA,@R0CLRACC.6MOV@R0,ASJMPK2K1:MOVR0,#87HMOVA,@R0SETBACC.6MOV@R0,ASJMPK2K2:NOP“LD+<、LD+>=”的编译表4-10“LD+<、LD+>=”的编译PLC指令相应的汇编指令LD+<YYH,XXMOVR0,#YYHMOVA,@R0CJNEA,#XX,D1D1:NOPLD+>=YYH,XXMOVR0,#YYHMOVA,@R0CJNEA,#XX,D2;D2:CPLC“AND+<、AND>=”的编译表4-10“AND+<、AND+>=”的编译PLC指令相应的汇编指令AND+<YYH,XXJNCD3MOVR0,#YYHMOVA,@R0CJNEA,#XX,D3D3:NOPAND+>=YYH,XXJNCD4MOVR0,#YYHMOVA,@R0CJNEA,#XX,D5;D5:CPLCD4:NOP数值比较逻辑或指令“OR+<、OR>=”的编译表4-10“OR+<、OR+>=”的编译PLC指令相应的汇编指令OR+<YYH,XXJCD6MOVR0,#YYHMOVA,@R0CJNEA,#XX,D6D6:NOPOR+>=YYH,XXJCD7MOVR0,#YYHMOVA,@R0CJNEA,#XX,D8;D8:CPLCD7:NOP5基于Proteus的软件仿真5.1仿真原理完成了软硬件的设计后,我们就可以根据控制要求,编写PLC指令程序,使用Python编好的转换程序转换为汇编语言,并用Proteus进行仿真实验。Proteus是世界上著名单片机电路仿真软件,它能模拟单片机及外围器件,极大的方便了单片机应用开发领域的专员人员,以及教学领域的运用[18]。5.2仿真实验根据设计结果,这个简单的PLC系统已经具有开关量的逻辑控制功能以及对模拟量进行输入输出和简单的处理功能。为了验证设计的准确性,我们做了几个简单例子,在Proteus上模拟仿真。5.2.1计数器仿真测试本计数器我们使用0号计数器,L04作为输入端,105为复位端,计数3下输100线圈得电。梯形图和指令表如下:LD104;计数端(CP)LD105;复位端(RST)CNT0#3;设定计数器计数3次LDCNT0;计数器常开触点OUT98;输出线圈END;图5-1计数器实例将PLC源程序写入转换程序中可得到仿真结果。104(P3.0)按键按三后下,100号线圈(P3.0)得电。如果按下105(P3.1)键计数器复位。5.2.2模拟量仿真测试模拟量的输入输出以及相关指令的编译是整个设计中最难实现的部分。不仅设计涉及的知识面更广,而且相关的资料介绍也都大多是介绍整个模拟量模块的使用,很少涉及具体的设计方法及指令运用。因此只做了简单的算术运算,比较指令。下面我们通过两个例子来具体验证。(1)电机启停及加减速我们设计了一个电机转速控制列子其中104为启动按钮,105停止按钮,106、107为加减速按钮。其中85H为数模转换读取数据的地址,每个扫描周期LTC1451都会从85H的内存单元中读取数据,转换输出。将PLC源程序写入转换程序中可得到仿真结果。按下104启动,按下107加速,按下108减速。梯形图和指令表如下:LD104;@MOV85H,#128;赋初值,启动LD105@MOV85H,#0;赋0,停止LD107;加速@ADB85H,#32LD108;减速@ABB85,#32如图5-2电机加减速END(2)中央空调温度控制在这个设计中,首先通过温度传感器检测周围温度然后转化为电压,输出给TLC549模数转换模块。我们设定当温度检测传感器的温度检测范围是0~50℃,输出给TLC549的电压为范围为0~5V。当温度低于15℃,时启动制热功能,当温度高于35℃,启动制冷功能。所以对应的温度值分别为1.5V、3.5V。转换后对应的数字量约为76、179。其中84H单元为模数转换后的数字量输入地址,每个扫描周期TLC549都会输出数据到85H内存单元中。PLC源程序写入转换程序中可得到仿真结果。梯形图和指令表如下:LD104;总开关OR0AND-NOT105OUT0LD0LD+<84H,76;检测温度是否小于15℃OUT98;制热如图5-3中央空调控制LD0LD+>=84H,179;OUT99;检测温度是否大于35℃END6总结本课题主要通过对单片机与PLC的对比研究,利用PLC编程简单易学及单片机性价比高的特点,提出利用80C52单片机设计了一个简单的PLC系统。该PLC内部有96个软继电器以及32个计数器,有16位独立的输入,8位独立的输出,具有基本的逻辑控制控制功能、计数功能及对模拟量的简单处理功能。最终通过Proteus的仿真验证,基本实现了设计的目标。在设计的过程中基本逻辑控制功能的实现相对来说是比较简单直观的,使用起来也方便,但对于模拟量的处理却比想象中复杂,而且相关资料较少,因此只实现了简单的算数及比较功能。此外,由于时间有限,进行测试及仿真的例子较少,不代表系统可应用于所有情况下,系统的可靠性需要进一步的仿真与实验。参考文献[1]廖艳娥,毛哲.培养学生创新能力的PLC实验教学内容改革[J].中国电力教育,2004[2]姜琳.基于单片机的PLC设计与实现[D].南京:东南大学,2008[3]王建明,刘丽君.基于AT89C55单片机的PLC研究[J].中文核心期刊,2007,23(1-2)[4]李庭贵基.于TLC549A/D转换器与AT89S52单片机的数字电压表设计[J]自动化技术与应用.2012[5]LinearTechnologyInc.LTC1451/LTC1452/LTC145312-bitrail-to-railmicropowerDACsinSO-8[EB/OL].2011[6]赵小娟.浅析单片机仿真PLC的原理[J].信息科技,2010[7]葛守峰,杜鑫,余胜利.PLC模拟量控制的应用[J].平顶山工学院报,2007[8]胡健主编.单片机原理及接口技术[M].北京:机械工业出版社,2004[9]蔡向东.单片机软件模拟SPI接口的解决方案[J].自动化技术与应用.2012[10]孙明江.用MCS—51单片机实现PLC功能的软硬件设计[J].上海电力学院报,1994,04:49-54[11]金永贤.80C31单片机应用系统的低功耗设计[J].华东交通大学报,1998,03[12]舒畅,黎洪生.使用Python实现基于Web的水资源监测系统[J].武汉理工大学学报,2006,05:38[13]李舫等编.自装可编程控制器[M].西安:西安交通大学出版社,1999[14]朱清慧,张凤蕊.Proteus教程—电子线路设计、制版与仿真[D].清华大学出版社,2008,9[15]陈洁.现代PLC控制技术与发展[J].精密制造与自动化,2004(4).[16]李晓龙,基于MCS-51单片机的PLC仿真器[J].合肥工业大学报,2002,04:637-640[17]葛守峰,杜鑫,余胜利.PLC模拟量空置的应用[J].平顶山工学院报,2007[18]张梅菊.基于PLC工业控制试验系统研究[J].南京理工大学,2012致谢附录附件1:(SPI串行输入输出程序)MCU串行输入子程序:CLRP1.2;选择从机SETBP1.1;使P1.1(时钟)输出为1MOVR1,#08H;置循环次数SPIIN1:CLRP1.1;使P1.1(时钟)输出为0NOP;延时NOPMOVC,P1.3;下降沿输出RLCA;把C存入到累加器中SETBP1.1;使P1.0(时钟)输出为1DJNZR1,SPIIN1;判断是否循环8次(8位数据)MOVR0,A;8位数据送R0RETMCU串行输出子程序:SETBP1.1;使P1.1(时钟)输出为1CLRP1.2;选择从机MOVR1,#08H;置循环次数MOVA,R0;8位数据送累加器ACCSPIOUT1:CLRP1.1;使P1.1(时钟)输出为0NOP;延时NOPRLCA;左移至累加器ACC最高位至CMOVP1.0,C;进位C送从机输入SPISI线上SETBP1.1;使P1.1(时钟)输出为1DJNZR1,SPIOUT1;判是否循环8次RET附件2(模拟量输入输出程序);模数转换,结果保存到84H中TLC549_ADC:CLRACLRCLKCLRCS;选中TLC549MOVR6,#8TLCAD_L1:NOPNOPNOPSETBCLKNOPNOPNOPMOVC,DAT;1位数据输入RLCACLRCLK;DAT0;为读出下一位数据作准备DJNZR6,TLCAD_L1MOVR1,#84HMOV@R1,ASETBCS;禁能TLC549再次启动AD转换SETBCLK;数模转换,从85H中读取数据LTC1451_DAC:MOVR1,#85HMOVA,@R1MOVR4,#0MOVR5,AMOVR0,#04HMOVA,R5SWAPAXCHDA,@R0;将8位数据转换为对应的12位数据MOVR5,ACLRAMOVR6,#4;MOVA,R4;SWAPA;CLRCS_DA;SETBCLK;TLCDA_L1:RLCAMOVDIN,C;CLRCLK;NOPNOPNOPNOPSETBCLK;SCK_POSTDJNZR6,TLCDA_L1;高
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加盟保洁公司合同范本
- 2024年盐城市滨海县招聘教师考试真题
- 农村房屋共建合同范例
- 2024年梧州市龙圩区招录公益性岗位人员考试真题
- 公司之间供货合同范本
- 动产转让合同范本
- 2024年普洱市墨江县教体系统所属事业单位紧缺招聘考试真题
- 2024年绵阳市投资控股有限公司招聘笔试真题
- 第12课 宋元时期的都市和文化(教学设计)七年级历史下册同步备课系列(部编版)
- 做代理合同范本
- 中国传媒大学全媒体新闻编辑:案例教学-课件-全媒体新闻编辑:案例教学-第7讲
- 生理学泌尿系统6学时课件
- PySide学习教程
- 数据结构英文教学课件:chapter1 Introduction
- 人教三年级数学下册表格式全册
- 事业单位综合基础知识考试题库 综合基础知识考试题库.doc
- 优秀教研组评比制度及实施细则
- 物业交付后工程维修工作机制
- 农作物病虫害专业化统防统治管理办法
- JJF 1752-2019全自动封闭型发光免疫分析仪校准规范(高清版)
- GB 1886.300-2018 食品安全国家标准 食品添加剂 离子交换树脂(高清版)
评论
0/150
提交评论