基于单片机的plc编译程序设计研究1本科毕设论文.docx
《基于单片机的plc编译程序设计研究1本科毕设论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的plc编译程序设计研究1本科毕设论文.docx(74页珍藏版)》请在冰豆网上搜索。
基于单片机的plc编译程序设计研究1本科毕设论文
毕业设计(论文)
题目:
基于单片机的PLC编译程序设计研究
基于单片机的PLC编译程序设计研究
摘要
自动化装置和机电一体化产品的设计和开发中有时需要采用一种成本极低的逻辑控制器。
为了满足这种需要,作者开展了用单片机直接实现梯形图逻辑控制的硬件和软件研究。
其中最为关键的一项技术是如何设计出基于单片机的PLC编译程序,将符合梯形图逻辑的PLC指令源程序翻译成单片机目标程序。
本文论述了基于单片机的PLC编译程序设计的理论和方法,研究了基于单片机的PLC的单片机程序模块和目标程序框架,对编译程序结构进行了分析,阐述了查错模块设计方法以及目标代码装配方法,对基于单片机的PLC的编译程序的调试实验系统组成和实验结果进行了分析。
首先,进行了基于单片机的PLC的单片机程序模块研究,构建了独具特点的目标程序框架结构。
然后,定义了基于单片机的PLC的源程序语句标准集合,提出了源程序语句标准集合的数组表示方法;定义了目标代码集合,提出了用口映射来建立源程序语句标准集合和目标代码集合之间的关系,为编译程序结构的实现提供了条件和方法;提出了盲码预填和盲码修正的思想提出了依据M数组对源程序查错的思路,通过列表文件名和列表文件的建立、整句识别、语句语法检查中的M数组逐行搜索、核对关键词是否相等、核对语句长度是否正确等一系列环节,实现对源程序的查错处理;论述了翻译过程中向目标文件里装配固定代码的过程;论述了翻译和装配活动代码的整体思路和流程;运用M数组进行源程序语句的类型识别,初步实现了盯映射的预定位;有效定义了引用名(位地址)的字符转化函数;分别给出了实现盯映射的第一种程序结构和第二种程序结构,有效的完成了简单活动代码和复杂活动代码的翻译和目标文件的装配任务;提出并论述了第一类盲码修正和第二类盲码修正的程序实现方法。
建立了基于单片机的PLC的编译程序设计研究的实验系统,对该编译程序的各项功能进行了验证和比对。
经过多个程序的试验表明,该编译程序能够正确地将基于单片机的PLC源程序翻译成单片机可以直接执行的、符合梯形图逻辑控制要求的目标程序。
实验结果表明,本文所设计的基于单片机的PLC编译程序完全符合设计要求,可以用于项目开发。
由于基于单片机的PLC成本极低,实际应用时可以带来较好的经济效益,因而具有较强的实用性。
关键词:
单片机,可编程逻辑控制器,编译程序,盲码,源程序,目标程序
Abstract
Sometimes,onekindofextremelyinexpensivelogiccontrollerisneededindesignandthedevelopmentoftheautomationdeviceandtheintegrationoelectro—mechanicalproduct.Inordertomeetthiskindofneeds.theauthorcarriedOllthehardwareandthesofhvareresearchofhavingdirectlyrealizedtheladderdiagramlogiccontrolwiththemonolithicmicrocomputer.Inwhich.mostessentialtechnologyishowtodesignthecompilerforPLCbasedonmonolithicmicrocomputer,andishowtotranslatePLCinstructionsourceprogramwhichconf01Tnladderdiagramlogicintomonolithicmicrocomputertargetprogram.ThispaperelaborateddesigntheoryandthemethodofthecompilerforPLCbasedonthemonolithicmicrocomputer,hasstudiedthemonolithicmicrocomputerprogrammoduleandthetargetprogramframeforPLCbasedonthemonolithicmicrocomputer,hascriedontheanalysistothecompiler.structure.elaborateddesignmethodforthecheckingmistakenmoduleaswellastheassemblymethodforgoalcode,hascarriedontheanalysistoexpedmentalresultanddebuggingexperimentsystemcompositionforthecompilerforPLCbasedonthemonolithicmicrocomputer.First,theresearchonthemonolithicmicrocomputerprogrammoduleforPLCbasedonthemonolithicmicrocomputerhasbeenconducted.Thealonecharacteristicframeconstructionfortargetprogramhasbeenconstructed.Then.thepaperhasdefinedthestandardsetofthesourceprogramsentenceforPLCbasedonthemonolithicmicrocomputer,proposedthearrayexpressionmethodforthestandardsetofthesourceprogramsentence.Thegoalcodesethasbeendefined.Establishingtherelationsbetweenthesourceprogramsentencestandardsetandthegoalcodesetwithsigmathemappinghasbeenproposed,sothattheconditionandthemethodforrealizationofthecompilestructurehasbeenprovided.Athoughtofthefillingblindcodeinadvanceandtherevisingblindcodehasbeenproposed。
AmentalityofcheckingmistakentothesourceprogramaccordingtotheMarrayhasbeenproposed.TheprocessingofthecheckingmistakentothesourceprogramhasbeenrealizedthroughaseriesofproceduresuchastheestablishmentoflistfilenameandlistdocumenLtherecognitiontoentiresentence.thesearchbylineusingMarrayinsentencegrammarinspection,thecheckuptokeywordwhetherequal,thecheckuptosentencelengthwhethercorrectandsoon.Theprocessofassemblingthefixedcodeintothegoaldocumentduringthetranslationhasbeenelaborated.Overallmentalityandtheprocedureofthetranslationandtheassemblycodehavebeenelaborated.Thepre-localizationofthesigmamappingbycarryingonthetyperecognitiontosourceprogramsentencedependonthearrayMhasinitiallybeenrealized.Thecharactertransformationfunctionforquotationname(bitaddress)hasbeendefinedeffectively,efirstkindofprocedurestructureandthesecondkindofprocedurestructureforrealizationsigmamappinghasseparatelybeengiven,sothatthetranslationofthesimpleactivecodeandthecomplexactivecodehaseffectivebeencompleted,andthattheassemblyofthegoaldocumenthasbeencompleted.Theprocedurerealizationmethodforthefirstkindofblindcoderevisionandthesecondkindofblindcoderevisionhasbeenproposedandelaborated.TheexperimentalsystemwhichusingtheresearchofcompilerdesignforPLCbasedonmonolithicmicrocomputerhasbeenestablished.Wehadcarriedontheconfirmationandcomparetotheeachfunctionofthecompiler.AftertheseveraIproceduretrials。
indicatedthatthecompilercantranslatecorrectlythe
sourceprogramofPLCbasedonmonolithicmicrocomputerintothetargetprogramwhichisenabletobeexecutedbymonolithicmicrocomputerandtalliestherequestofladderdiagramlogiccontr01.TheexperimentalresultprovedthatthecompilerdesignedforPLCbasedonthemonolithicmicrocomputer
conformstothedesignrequirementcompletely,mayuseintheprojectdevelopment.BecausethePLCbasedonthemonolithicmicrocomputerisextremelyinexpensiveincost,itmaybringthegoodeconomic
efficiencywhenpracticalapplication,thushasthestrongusability.
Keywords:
Monolithicmicrocomputer,programmablelogiccontroller,compiler,blindcode,sourceprogram,targetprogram
前言
前人在单片机应用研究和PLC应用研究方面已经取得了丰硕的成果。
当今计算机
技术发展很快,编译程序设计技术也在不断发展。
世界上现成的PLC产品很多,每一
个PLC产品都有一个PLC编译程序。
我们要问,本课题“基于单片机的PLC编译程序’’
和其他的PLC编译程序雷同吗?
答案是不同。
为了大大降低成本,实现如前所述的,在
机电一体化产品和自动化装置的设计中直接用单片机芯片作为符合梯形图逻辑的逻辑控制器,就必须设计出可以将PLC指令源程序翻译成单片机目标程序的编译程序。
在从事这项研究时我们发现,本课题“基于单片机的PLC编译程序设计’’在应用研究方法和具体内容上都和前人有许多不同之处。
(1)首先,当从市场上选来新~代的单片机芯片作为执行符合梯形图逻辑控制的
逻辑控制器,那么从总体上来看,基于该单片机芯片的PLC编译程序的设计就和其他
PLC的编译程序设计不同,没有一个现成的编译程序可以套用,必须做创造性的工作,
独立完成基于该单片机的编译程序设计。
编写基于该单片机的PLC编译程序,是本课题的主要工作任务之一。
(2)其次,目标程序框架结构也不同。
因为单片机芯片不同,内部的硬件资源也
就不同,目标指令代码和目标程序框架结构也就不同。
因此在编译程序编写前,必须根据单片机芯片编程的特点设定目标程序框架结构。
有许多影响目标程序框架结构的因素,诸如CPU初始化、内部硬件定时器设定、中断结构、接口的初始化等。
设定目标程序框架结构,是本课题的另一项主要工作任务。
(3)本课题的一项有特色的工作是在应用研究基础上,构建基于单片机的PLC
的源程序代码标准集合和目标程序代码集合,并且用集合和映射的方法为基于单片机的PLC源程序代码、目标代码以及翻译方法建模。
此外在设计中采用盲码预填及修正技术。
总之,基于单片机的PLC编译程序设计研究是一项具有创造性的工作,需要充分吸收前人经验,开创创新,建立新的模型,新的结构,新的方法
1基于单片机的PLC的单片机程序模块研究及其目标程序框架的构建
基于单片机的PLC编译程序的功能是将基于单片机的PLC源程序翻译成单片机目
标程序。
为了设计出基于单片机的PLC编译程序,首先要构建出每一条源程序指令所
对应的单片机程序模块。
基于单片机的PLC的源程序指令采用可编程序逻辑控制器最
基本指令的助记符,包括AND,ANI,OR,ORI,LD,LDI,OUT,STORE,TIM,
CNT,RST,PLS,DIN,SFT,END等基本逻辑指令。
但是,这些基本逻辑指令所对
应的单片机程序模块的程序长短不一,有的只有l~2条单片机指令组成,有的则需十几条或几十条单片机指令组成。
1.1基于单片机的PLC常用的单片机程序模块的构建
大部分PLC指令的单片机程序模块只需l~2条单片机指令组成。
AND、ANI、OR、
ORI、LD、LDI、OUT、STORE指令的单片机程序(指令)如表2.1所示。
由于选择
了Atmel公司的AT89C52单片机芯片作为处理器,所以单片机程序使用MCS.51单片机指令系统(AT89C52单片机采用了MCS.51单片机指令系统)。
表1.1基于单片机的PLC中常用PLC逻辑指令的单片机程序模块序号PLC逻辑指令单片机程序模块(指令)目标程序代码
序号
PLC逻辑指令
单片机模块(指令)
目标程序代码
1
LDbit
MOVC,bit
A2,bit
2
LDIbit
MOVC,bit
CPLC
A2,bit
B3
3
ANDbit
ANLC,bit
82,bit
4
ANIbit
ANLC,bit
B0,bit
5
ORbit
ORLC,bit
72,bit
6
ORIbit
ORLC,bit
A0,bit
7
STOREbit
MOVC,bit
92,bit
8
OUTbit
CPLC
MOVbit,C
B3
92,bit
表1.1基于单片机的PLC中常用PLC逻辑指令的单片机程序模块
在表1.1的逻辑指令中,运算都围绕位累加器C进行。
表中的bit表示位地址,它
们都是单片机中片内RAM中可直接位寻址的位(位地址)。
(如延时计时器类、脉冲微分类、计数器类、移位类等)的单片机程序模块需十几条或几十条单片机指令组成。
下面是对此类PLC逻辑指令的单片机程序模块建立过程的分析。
1.2基于单片机的PLC的TIMTi语句的单片机程序模块构建
1.2.1围绕TIMTi片内硬件资源的配置
梯形图中的延时计时器通常可以有多个,它们需要有一个统一的时钟。
在基于单片机的PLC中用AT89C52芯片内的T0来作统一的时钟。
TO设定成定时0.1s,每隔O.1sT0中断一次。
在To中断服务程序中依次将多个延时计时器的软加l计数器加l。
实现TIM指令所需要的片内资源有:
①延时计时器的逻辑位Ti,位地址30H.3FH;②延时计时器的状态标志位Si,位地址40H.4FH;⑨延时计时器的软加1计数器Zi,Zi由两字节寄存器组成,由TO中断服务程序对其实行加1计数,可记录4位BCD数,字节
地址50H,51H,52H,53H,··.,6EH,6FH。
④延时计时器延时时间常数寄存器Z;Z;也由两字节寄存器组成,可记录4位BCD数,字节地址为30H,31H,·..,4EH,4FH。
。
1.2.2
TIMTi所需的To中断服务程序
单片机初始化时,将To设定成定时方式l,并开放To中断。
To的初值计算公式为:
图1.1TO中断服务程序流程图
TO的定时方式和初值在单片机初始化时设定,TO中断服务程序依次扫描16个延
时计时器,先判断Si是否为“1",即该计时器是否已被开启,只对开启的计时器的软
加1计数器Zi实行加1操作。
其流程见图2.1。
1.2.3TIMTi模块的流程分析和建立
与梯形图中延时计时器所对应的TIMTi逻辑指令的单片机程序模块流程见图
1.2。
这是一个对第i个延时计时器进行逻辑运算处理的模块,运算的依据是已知的当前逻辑运算值(在累加器C中)。
开动延时计时器(实行Si—l的操作)的条件是:
当
C=I,同时Si=0(第i个延时计时器还未处于开动状态时),同时Ti≠1(延时计时器逻
辑位还未置“1")。
图1.2TIMTi逻辑指令的单片机程序模块流程图
1.3CNTCi语句的单片机程序模块的构建
计数器和计时器使用相同的片内资源。
在用PLC指令编程时,同一个引用名不能
同时作计数器和计时器。
CNT指令的单片机程序模块用Ci表示计数器的逻辑位,位地
址30H.3FH;用ni表示计数器的计数脉冲前沿识别位,位地址50H一5FH;用Di(双字节寄存器)表示软加1计数器,Di由Di,0和Di,1组成;用D’i表示计数器的预置值寄存器(双字节寄存器),D'i由D’i,0和D’i,i组成;另外,由RSTC指令实现计数器的清零。
CNTCi计数指令的单片机程序模块如下:
1.4PLS.8Yi脉冲微分语句的单片机程序模块的构建
本系统共设有8个脉冲微分寄存器。
脉冲微分类运算的单片机程序模块所占的片内资源较少。
它们分别是:
①脉冲微分寄存器的逻辑位Yi,位地址08H.0FH;②用于寄存前次输入的寄存器Pi,位地址18H.1FH。
PLS脉冲微分的单片机程序模块流程见图2.3。
程序中通过对本次输入(累加器C)和前次输入(Pi)进行判断,当C=I同时
Pi=0时才产生脉冲微分信号(Yi=1)。
由于扫描梯形图时,主程序在总体上是循环结构,
所以微分脉冲宽度等于梯形图扫描周期。
1.5移位类语句的单片机程序模块的构建
共提供了4个8位移位寄存器。
移位类运算的单片机程序模块所占的片内资源有:
①移位寄存器,用Mi表示,字节地址分别为2CH,2DH,2EH,2FH;②移位输入暂
存位,用Gi表示;③移位脉冲前沿识别位Hi,位地址28H,29H,2AH,2BH。
移位类
运算程序由三个程序模块组成。
一个是对应于DINMi的单片机程序模块。
其功能是将
输入端的逻辑值暂存在Gi中,供SFT指令使用;第二个是对应于SFTMi的移位操作
程序模块,其功能是依据已知的当前逻辑运算值(在累加器C中),以及Hi的值,判断
移位脉冲是否到;当移位脉冲到时,将输入暂存位Gi中的值移入移位寄存器Mi。
第三
个是对应于RSTS指令的移位寄存器复位程序模块。
DINMi指令的单片机程序模块如下:
MOVGi,C;仅仅一条单片机指令。
SFTMi移位操作指令的单片机程序模块如下:
1.6
1.6基于单片机的PLC目标程序框架的构建
基于单片机的PLC编译程序的功能是将基于单片机的PLC的源程序语句翻译成单片机的目标程序。
在基于单片机的PLC编译问题中,目标程序框架和单片机的芯片编程相关,诸如CPU初始化、内部硬件定时器设定、接口的初始化等。
根据基于单片机的PLC的要求,建立目标程序框架结构,如表1.6所示。
其中,固定代码的编译结果基本是固定的。
活动代码是和源程序语句对应的目标程序代码。
固定代码和活动代码均采用单片机的机器指令代码。
当基于单片机的PLC编译程序工作时,对表1.6中固定代码的装配过程较简单。
而活动代码的装配则涉及到对源程序语句的识别、查错、翻译生成目标代码等过程,是编译程序主要需要解决的问题。
活动代码具体装配的内容由1.1–1.5中的内容根据源程序的顺序来决定。
表1.6基于单片机的PLC目标程序框架结构
在表1.6所示的基于单片机的PLC目标程序框架结构中,专用地址矢量、延时
20ms子程序、CPU和接口初始化子程序、定时器初值设定子程序、TO中断服务子程序、主程序开始初始化设定、输入刷新,这些均属于固定目标代码。
它们又被分为两种:
一种为纯固定目标代码,例如专用地址矢量、延时20ms子程序、CPU和接口初始化子程序、TO中断服务子程序、主程序开始初始化设定、输入刷新;另一种为含盲码、待修正的固定目标代码,例如定时器初值设定子程序。
0066H.00C5H单元共96个字节用于定时器初值设定子程序预留空间。
先用盲码
值00H填充。
等编译程序中执行“扫描源程序文件,逐条翻译..."时,得到源程序
提供的定时器初值,再在用正式代码(以MOV指令目标代码的形式,并含定时器初值)
代替相应位置上的盲码。
关于盲码,3.5中还要叙述。
表1.6中入口符号地址THTL处为TO中断服务子程序。
在2.2.2中已经叙
述了TO中断服务子程序的流程。
它们的具体程序如下:
2基于单片机的PLC编译程序总体设计方法
基于单片机的PLC编译程序总体设计方法碰到的第一个问题是源程序指令模板和目标代码模板在编译程序中如何表达?
接着第二个问题是如何根据已知的源程序指令正确的找到目标代码程序?