基于单片机的PLC编译程序设计研究毕业设计论文.doc_第1页
基于单片机的PLC编译程序设计研究毕业设计论文.doc_第2页
基于单片机的PLC编译程序设计研究毕业设计论文.doc_第3页
基于单片机的PLC编译程序设计研究毕业设计论文.doc_第4页
基于单片机的PLC编译程序设计研究毕业设计论文.doc_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文)题目:基于单片机的plc编译程序设计研究目 录摘 要6关键词6abstract7key words8前 言81 基于单片机的plc的单片机程序模块研究及其目标程序框架的构建91.1 基于单片机的plc常用的单片机程序模块的构建91.2 基于单片机的plc的tim ti语句的单片机程序模块构建10121 围绕tim ti片内硬件资源的配置1012. 2 tim ti所需的to中断服务程序11123 tim ti模块的流程分析和建立1213 cnt ci 语句的单片机程序模块的构建1314 pls8 yi 脉冲微分语句的单片机程序模块的构建141. 5 移位类语句的单片机程序模块的构建151. 6 基于单片机的plc目标程序框架的构建162 基于单片机的plc编译程序总体设计方法1921 采用数组技术构建基于单片机的plc源程序语句标准集合19211 基于单片机的plc源程序语句标准集合的定义19212 基于单片机的plc源程序语句标准集合的数组表达2022 基于单片机的plc目标代码集合的构建2223 建立基于单片机的plo源程序语句和目标代码之间的关系2224 基于单片机的plo编译程序结构2325 盲码的预先填入及修正技术233 基于单片机的plc编译程序查错模块设计2431 编译过程中列表文件名和列表文件的建立24311 用strcat建立列表文件名25312 列表文件(1st)的建立253. 2 查错模块程序流程2633 整句识别2634 语句语法检查27341 m数组逐行搜索28343 核对语句长度是否正确29344 错误标记写入错误信息文件3035 查错模块程序运行结果304 固定代码的装配3041 基于单片机的plc编译过程中目标文件的建立31411 目标文件名的建立31412 目标文件(bin)的建立3242 建立固定代码数组3243 向目标文件中装配固定代码345 活动代码的翻译和装配3451 活动代码翻译和装配的整体思路3452 源程序语句的类型识别35521 ckhh存放着当前被翻译的源程序语句36522 当前源程序语句的类型识别3653 简单活动代码的装配37531 引用名(位地址)字符转化函数cvt(x,y)的定义37532 实现映射f i=口(mi)的第一种程序结构38533 ldi语句的目标代码装配38534 and语句的目标代码装配39535 ani语句的目标代码装配39536 or语句的目标代码装配40537 ori语句的目标代码装配40538 store语句的目标代码装配41539 out语句的目标代码装配4154 复杂活动代码的装配及其盲码的修正42541 tim语句的目标代码的装配及其盲码的修正425411 tim模块中的f数组赋值435412 tim模块中第二种盲码的修正445413 针对tim的第一种盲码的修正445414 目标文件bin装配时两种地址的切换方法4554. 15 tim模块的目标代码装配46542 cnt语句的目标代码的装配及其盲码的修正465421 cnt模块中的f数组的赋值485422 cnt模块的目标代码装配48543 rstc语句的目标代码的装配及其盲码的修正485431 rstc语句翻译模块中的盲码修正495432 rstc模块中f数组的赋值和目标代码的装配49544 pls语句的目标代码的装配及其盲码的修正505441 pls语句翻译模块中的盲码修正515442 pls模块中f数组的赋值和目标代码的装配51545 din语句的目标代码的装配及其盲码的修正515451 din语句翻译模块中的盲码修正525452 din模块的目标代码装配52546 sft语句的目标代码的装配及其盲码的修正535461 sft语句翻译模块中的盲码修正535462 sft模块中f数组的赋值和目标代码的装配54547 rsts语句的目标代码的装配及其盲码的修正545471 rsts语句翻译模块中的盲码修正555472 rsts模块中f数组的赋值和目标代码的装配5555 end语句的处理566 基于单片机的pl c编译程序的实验研究5661 实验研究系统的建立5662 基于单片机的plo源程序的编辑和编译5763 结论58参考文献59致谢61基于单片机的plc编译程序设计研究摘 要自动化装置和机电一体化产品的设计和开发中有时需要采用一种成本极低的逻辑控制器。为了满足这种需要,作者开展了用单片机直接实现梯形图逻辑控制的硬件和软件研究。其中最为关键的一项技术是如何设计出基于单片机的plc编译程序,将符合梯形图逻辑的plc指令源程序翻译成单片机目标程序。本文论述了基于单片机的plc编译程序设计的理论和方法,研究了基于单片机的plc的单片机程序模块和目标程序框架,对编译程序结构进行了分析,阐述了查错模块设计方法以及目标代码装配方法,对基于单片机的plc的编译程序的调试实验系统组成和实验结果进行了分析。首先,进行了基于单片机的plc的单片机程序模块研究,构建了独具特点的目标程序框架结构。然后,定义了基于单片机的plc的源程序语句标准集合,提出了源程序语句标准集合的数组表示方法;定义了目标代码集合,提出了用口映射来建立源程序语句标准集合和目标代码集合之间的关系,为编译程序结构的实现提供了条件和方法;提出了盲码预填和盲码修正的思想提出了依据m数组对源程序查错的思路,通过列表文件名和列表文件的建立、整句识别、语句语法检查中的m数组逐行搜索、核对关键词是否相等、核对语句长度是否正确等一系列环节,实现对源程序的查错处理;论述了翻译过程中向目标文件里装配固定代码的过程;论述了翻译和装配活动代码的整体思路和流程;运用m数组进行源程序语句的类型识别,初步实现了盯映射的预定位;有效定义了引用名(位地址)的字符转化函数;分别给出了实现盯映射的第一种程序结构和第二种程序结构,有效的完成了简单活动代码和复杂活动代码的翻译和目标文件的装配任务;提出并论述了第一类盲码修正和第二类盲码修正的程序实现方法。建立了基于单片机的plc的编译程序设计研究的实验系统,对该编译程序的各项功能进行了验证和比对。经过多个程序的试验表明,该编译程序能够正确地将基于单片机的plc源程序翻译成单片机可以直接执行的、符合梯形图逻辑控制要求的目标程序。实验结果表明,本文所设计的基于单片机的plc编译程序完全符合设计要求,可以用于项目开发。由于基于单片机的plc成本极低,实际应用时可以带来较好的经济效益,因而具有较强的实用性。关键词: 单片机,可编程逻辑控制器,编译程序,盲码,源程序,目标程序abstract sometimes,one kind of extremely inexpensive logic controller is needed in design and the development of the automation device and the integration oelectromechanical productin order to meet this kind of needsthe author carried oll the hardware and the sofhvare research of having directly realized the ladder diagram logic control with the monolithic microcomputerin whichmost essential technology is how to design the compiler for plc based on monolithic microcomputer,and is how to translate plc instruction source program which conf01tn ladder diagram logic into monolithic microcomputer targetprogramthis paper elaborated design theory and the method of the compiler for plc based on the monolithic microcomputer,has studied the monolithic microcomputer program module and the target program frame for plc based on the monolithic microcomputer,has c ried on the analysis to thecompiler.structureelaborated design method for the checking mistaken module as well as the assembly method for goal code,has carried on the analysis to expedmental result and debugging experiment system composition for the compiler for plc based on the monolithicmicrocomputerfirst,the research on the monolithic microcomputer program module for plc based on the monolithic microcomputer has been conductedthe alone characteristic frame construction for targetprogram has been constructedthenthe paper has defined the standard set of the source program sentence for plc based on the monolithic microcomputer,proposed the array expression method for the standard setof the source program sentencethe goal code set has been definedestablishing the relations between the source program sentence standard set and the goal code set with sigma the mapping has been proposed,so that the condition and the method for realization of the compile structure has been provideda thought ofthe filling blind code in advance and the revising blind code has been proposed。a mentality of checking mistaken to the source program according to the marray has been proposedthe processing of the checking mistaken to the source program has been realized through a series of procedure such as the establishment of list filename and list documenl the recognition to entire sentencethe search by line using m array in sentence grammar inspection,the checkup to key word whether equal,the checkup to sentence length whether correct and so onthe process of assembling the fixed code into the goal document during the translation has been elaboratedoverall mentality and the procedure of the translation and the assembly code have been elaboratedthe pre-localization of the sigma mapping bycarrying on the type recognition to source program sentence depend on the array m has initially beenrealizedthe character transformation function for quotation name(bit address)has been definedeffectively,e first kind of procedure structure and the second kind of procedure structure for realizationsigma mapping has separately been given,so that the translation of the simple active code and the complex active code has effective been completed,and that the assembly of the goal document has been completedthe procedure realization method for the first kind of blind code revision and the second kind of blind code revision has been proposed and elaboratedthe experimental system which using the research of compiler design for plc based on monolithic microcomputer has been establishedwe had carried on the confirmation and compare to the each function of the compilerafter the severai procedure trials。indicated that the compiler can translate correctly thesource program of plc based on monolithic microcomputer into the target program which is enable to be executed by monolithic microcomputer and tallies the request of ladder diagram logic contr01the experimental result proved that the compiler designed for plc based on the monolithic microcomputerconforms to the design requirement completely,may use in the project developmentbecause the plc based on the monolithic microcomputer is extremely inexpensive in cost,it may bring the good economicefficiency when practical application,thus has the strong usabilitykey words: monolithic microcomputer,programmable logic controller,compiler,blind code,source program,target program前 言前人在单片机应用研究和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等基本逻辑指令。但是,这些基本逻辑指令所对应的单片机程序模块的程序长短不一,有的只有l2条单片机指令组成,有的则需十几条或几十条单片机指令组成。1.1 基于单片机的plc常用的单片机程序模块的构建大部分plc指令的单片机程序模块只需l2条单片机指令组成。and、ani、or、ori、ld、ldi、out、store指令的单片机程序(指令)如表21所示。由于选择了atmel公司的at89c52单片机芯片作为处理器,所以单片机程序使用mcs51单片机指令系统(at89c52单片机采用了mcs51单片机指令系统)。表11 基于单片机的plc中常用plc逻辑指令的单片机程序模块序号plc逻辑指令单片机程序模块(指令) 目标程序代码序号plc逻辑指令单片机模块(指令)目标程序代码1ld bitmov c, bita2, bit2ldi bitmov c, bitcpl ca2, bitb33and bitanl c,bit82, bit4ani bitanl c, bitb0, bit5or bitorl c, bit72, bit6ori bit orl c, bita0, bit7store bit mov c, bit92, bit8out bitcpl cmov bit, cb392, bit 表11 基于单片机的plc中常用plc逻辑指令的单片机程序模块在表11的逻辑指令中,运算都围绕位累加器c进行。表中的bit表示位地址,它们都是单片机中片内ram中可直接位寻址的位(位地址)。(如延时计时器类、脉冲微分类、计数器类、移位类等)的单片机程序模块需十几条或几十条单片机指令组成。下面是对此类plc逻辑指令的单片机程序模块建立过程的分析。1.2 基于单片机的plc的tim ti语句的单片机程序模块构建121 围绕tim ti片内硬件资源的配置梯形图中的延时计时器通常可以有多个,它们需要有一个统一的时钟。在基于单片机的plc中用at89c52芯片内的t0来作统一的时钟。to设定成定时01s,每隔o1st0中断一次。在to中断服务程序中依次将多个延时计时器的软加l计数器加l。实现tim指令所需要的片内资源有:延时计时器的逻辑位ti,位地址30h3fh;延时计时器的状态标志位si,位地址40h4fh;延时计时器的软加1计数器zi,zi由两字节寄存器组成,由to中断服务程序对其实行加1计数,可记录4位bcd数,字节地址50h,51h,52h,53h,6eh,6fh。延时计时器延时时间常数寄存器z;z;也由两字节寄存器组成,可记录4位bcd数,字节地址为30h,31h,4eh,4fh。12. 2 tim ti所需的to中断服务程序单片机初始化时,将to设定成定时方式l,并开放to中断。to的初值计算公式为:图11 to中断服务程序流程图to的定时方式和初值在单片机初始化时设定,to中断服务程序依次扫描16个延时计时器,先判断si是否为“1,即该计时器是否已被开启,只对开启的计时器的软加1计数器zi实行加1操作。其流程见图21。123 tim ti模块的流程分析和建立与梯形图中延时计时器所对应的tim ti逻辑指令的单片机程序模块流程见图12。这是一个对第i个延时计时器进行逻辑运算处理的模块,运算的依据是已知的当前逻辑运算值(在累加器c中)。开动延时计时器(实行sil的操作)的条件是:当c=i,同时si=0(第i个延时计时器还未处于开动状态时),同时ti1(延时计时器逻辑位还未置“1)。 图12 tim ti逻辑指令的单片机程序模块流程图13 cnt ci 语句的单片机程序模块的构建计数器和计时器使用相同的片内资源。在用plc指令编程时,同一个引用名不能同时作计数器和计时器。cnt指令的单片机程序模块用ci表示计数器的逻辑位,位地址30h3fh;用ni表示计数器的计数脉冲前沿识别位,位地址50h一5fh;用di(双字节寄存器)表示软加1计数器,di由di,0和di,1组成;用di表示计数器的预置值寄存器(双字节寄存器),di由di,0和di,i组成;另外,由rstc指令实现计数器的清零。cnt ci计数指令的单片机程序模块如下:14 pls8 yi 脉冲微分语句的单片机程序模块的构建本系统共设有8个脉冲微分寄存器。脉冲微分类运算的单片机程序模块所占的片内资源较少。它们分别是:脉冲微分寄存器的逻辑位yi,位地址08h0fh;用于寄存前次输入的寄存器pi,位地址18h1fh。pls脉冲微分的单片机程序模块流程见图23。程序中通过对本次输入(累加器c)和前次输入(pi)进行判断,当c=i同时pi=0时才产生脉冲微分信号(yi=1)。由于扫描梯形图时,主程序在总体上是循环结构,所以微分脉冲宽度等于梯形图扫描周期。 1. 5 移位类语句的单片机程序模块的构建共提供了4个8位移位寄存器。移位类运算的单片机程序模块所占的片内资源有:移位寄存器,用mi表示,字节地址分别为2ch,2dh,2eh,2fh;移位输入暂存位,用gi表示;移位脉冲前沿识别位hi,位地址28h,29h,2ah,2bh。移位类运算程序由三个程序模块组成。一个是对应于din mi的单片机程序模块。其功能是将输入端的逻辑值暂存在gi中,供sft指令使用;第二个是对应于sft mi的移位操作程序模块,其功能是依据已知的当前逻辑运算值(在累加器c中),以及hi的值,判断移位脉冲是否到;当移位脉冲到时,将输入暂存位gi中的值移入移位寄存器mi。第三个是对应于rsts指令的移位寄存器复位程序模块。din mi指令的单片机程序模块如下:mov gi,c ;仅仅一条单片机指令。sft mi移位操作指令的单片机程序模块如下:1.6 1. 6 基于单片机的plc目标程序框架的构建基于单片机的plc编译程序的功能是将基于单片机的plc的源程序语句翻译成单片机的目标程序。在基于单片机的plc编译问题中,目标程序框架和单片机的芯片编程相关,诸如cpu初始化、内部硬件定时器设定、接口的初始化等。根据基于单片机的plc的要求,建立目标程序框架结构,如表16所示。其中,固定代码的编译结果基本是固定的。活动代码是和源程序语句对应的目标程序代码。固定代码和活动代码均采用单片机的机器指令代码。当基于单片机的plc编译程序工作时,对表16中固定代码的装配过程较简单。而活动代码的装配则涉及到对源程序语句的识别、查错、翻译生成目标代码等过程,是编译程序主要需要解决的问题。活动代码具体装配的内容由11 1.5中的内容根据源程序的顺序来决定。表16 基于单片机的plc目标程序框架结构在表16所示的基于单片机的plc目标程序框架结构中,专用地址矢量、延时20ms子程序、cpu和接口初始化子程序、定时器初值设定子程序、to中断服务子程序、主程序开始初始化设定、输入刷新,这些均属于固定目标代码。它们又被分为两种:一种为纯固定目标代码,例如专用地址矢量、延时20ms子程序、cpu和接口初始化子程序、to中断服务子程序、主程序开始初始化设定、输入刷新;另一种为含盲码、待修正的固定目标代码,例如定时器初值设定子程序。0066h00c5h单元共96个字节用于定时器初值设定子程序预留空间。先用盲码值00h填充。等编译程序中执行“扫描源程序文件,逐条翻译时,得到源程序提供的定时器初值,再在用正式代码(以mov指令目标代码的形式,并含定时器初值)代替相应位置上的盲码。关于盲码,35中还要叙述。表16中入口符号地址thtl处为to中断服务子程序。在222中已经叙述了to中断服务子程序的流程。它们的具体程序如下:2 基于单片机的plc编译程序总体设计方法基于单片机的plc编译程序总体设计方法碰到的第一个问题是源程序指令模板和目标代码模板在编译程序中如何表达?接着第二个问题是如何根据已知的源程序指令正确的找到目标代码程序?如何建立单片plc源程序语句和目标代码之间的关系?为了在编译时有一个对源程序语句的识别、查错的标准,需要就基于单片机的plc的and、ani、or、ori、ld、ldi、out、store、tim、cnt、rst、pls、din、sft、end等基本逻辑指令,建立基于单片机的plc源程序语句标准集合。21 采用数组技术构建基于单片机的plc源程序语句标准集合211 基于单片机的plc源程序语句标准集合的定义定义1:m是集合,在基于单片机的plc编译程序中用数组表示。m ij是其元素,m i j m,m i j为1字节ascii字符,且有子集mi mmi:mmi2,mik (1)mi为m数组行元素集合,其前k1个字符组成的字符串记为:string mi=mi1mi2mik-1假如string mi的值等于基于单片机的plc某种源程序语句(简称为“源语句)助记符串中的标识符串,并且mi中的元素mi k的值等于这种源语句长度的ascii值,则称子集mi为这种源语句的标准子集。例如:基于单片机的plc的ld语句为:ld 20,其长度值=5,标识符串为stringmi_h,d, ),故ld源语句标准子集为mi=l,d, ,5。又如:pls语句为:pls 09,其长度值=6,标识符串为string mi=(p,l,s, ,故pls源语句标准子集为mi=p,l,s, ,6)定义2:在mi cm的条件下,mi是一种源语句标准子集。又:m=mt,m2,m。),式中入为基于单片机的plc源语句标准的条数,则称集合m为基于单片机的plc源语句标准集合。基于单片机的plc编译程序中用m数组来构建源语句标准集合,便使问题得到简化。m数组是进行源程序查错时的对照标准,也是进行翻译时的判别标准。m数组提供了源语句样板。性质1:m数组为二维数组,由于基于单片机的plc源语句的关键词(标识符)长短不一,导致m数组的各行长短不一。性质2:根据定义2,有:m数组的每一行对应于不同的基于单片机的plc的源语句定义。性质3:m数组的行数等于基于单片机的plc语句的条数。基于单片机的plc的指令系统较简单,语句条数不多,所以m数组行数不大,共16行。性质4:集合m中的各个子集mi没有一个重复。这是因为定义基于单片机的plc源语句时是不可能重复定义的。212 基于单片机的plc源程序语句标准集合的数组表达把基于单片机的plc源程序指令,依据上述string mi和mi k的格式进行表述,我们就可以得到,当i=l,2,3,16时,子集mi分别为:ml=l,d, ,5m2=l,d,i, ,6m3=a,n,d, ,6m4=a,n,i, ,6m5=0,r, ,5m6=0,r,i, ,6m7=s,t,0,r,e, ,8m8=o,u,t, ,6m9=t,i,m, ,6m10=c,n,t, ,6m11=r,s,t,c, ,7m12=p,l,s, ,6m13=d,i,n, ,6m14=s,f,t, ,6m15=r,s,t,s, ,7m16=e,n,d, ,6上述集合的全体就是基于单片机的plc源程序语句标准集合。其中每个子集中的最后一个数字表示该源程序语句的ascii字符长度标准。例如,源程序语句ld 20共5个ascii字符(空格算一个ascii字符),所以,子集m1=l,d, ,5)中的最后一个数字为5。建立基于单片机的plc源程序语句标准集合的目的是为了确定一个进行源程序查错时的对照标准,以及进行翻译时的判别标准。为此,在基于单片机的plc编译程序中用c语言实现m数组所表达的基于单片机的plc源程序语句标准集合。m数组的各元素赋值如下:m11=l;ml2=d:m13=;ml4=x05:m21=l:m22=d:m23=i:m24=:m25=x06:m31=a:m32=n:m33=d:m34=:m35=x06:m41_a:m42=n:m43=i:m44=:m45=x06:m51=0:m52=r,:m53=:m54=x05:m6儿1=0:m62=r:m63=i:m64=:m65=x06:m71=s:m72=t:m73=0:m74=r:m75=e:m76=:m77=x08:m81=0:m82=u:m83=t:m84=:m85=x06:m91=t:m92=i:m93=m:m94=:m95=xod:m101=c;m102=n:m103=t;m104=:m105=xod:m111=r;m112=s:m113=t;m114=c:m115=:m116=x07:m121=p;m122=l:m123=s;m124=:rail25=x06:m31=d:m132=i:m133=n;m134=:m135=x06:m141=s:m142=f;m143=t;m144=:m145=x06:m151=r;m152=s:m153=t;m154=s:m155=:m156=x07:m161=e;m162=n;rail63=d;m164=:m165=x09:22 基于单片机的plc目标代码集合的构建定义3:f是集合,fij是其元素,fijef,fij是一字节16进制数。如果有子集fi f, 即:f i=fi1,fi2,fi。) (2)假如f i所代表的子集元素代码等于第i条基于单片机的plc语句所对应的目标机器代码子集,则称子集f i为基于单片机的plc目标代码子集。定义4: 在f i c f的条件下,有f=f。,f1,fx)。如果f i(i-1,2,入)都一一对应等于所定义的各单片plc语句的目标机器代码子集,则称集合f为基于单片机的plc的目标代码集合。基于单片机的plc的目标代码和目标芯片有关。目标代码都是16进制代码。对不同的基于单片机的plc源语句,其目标代码的字节数不同,并且差别很大。例如,对于源程序语句ld 20,其目标代码子集为:f i=a2h,20h,(实际编译程序中引进变量q,为:ld 20;fi=a2h,q),q=20h)而对于源程序语句pls 09,其目标代码子集为:f i=50h,0dh,20h,p,06i-i,d2h,y,d2h,p,80h,08h,c2h,y,80h,04h,c2h,y,c2h,p,00h,00h,00h其中:p=19h,y=09h。值得指出的是,目标代码子集中的元素在编译前,并非全部为常数,少数是变量。例如ld的目标代码子集中的q,pls的目标代码子集中的p和y。这些变量的值经过编译后才得到确定的值。23 建立基于单片机的plo源程序语句和目标代码之间的关系定理1:设m为基于单片机的plc源语句标准集合,且mim,f为基于单片机的plc的目标代码集合,且f i c f,于是必有f为m的一个l一1映射,其子集映象关系为:f i= (mi) (3)其中,表示映射。证明:根据定义1,m;为基于单片机的plc某个源语句的标准子集;根据定义3,fi为对应于该源语句的目标代码子集;若f i (mi)成立,则结果和定义3矛盾。因此,必有f i_ (mi)成立。再根据211中的性质4,各mi没有一个重复,故由f i-仃(mi)知,f i也没有重复,因此f为m的一个11映射成立。定理1证毕。定理1为基于单片机的plc编译方法的简化提供了条件。在这种小型应用系统编译程序的设计中,可以省略生成中间代码这一阶段,直接得到目标代码。公式(3)表明,对用户的某一个plc源语句x,要找到对应的fi,只需找到相应的mt即可。f i =(mi)成了编译过程中装配活动代码的依据。24 基于单片机的plo编译程序结构基于单片机的plc编译程序结构如图31所示。其特点是:翻译时, 一次扫描源程序文件,逐条翻译,依fi=a(mi)装配活动代码。25 盲码的预先填入及修正技术定义5:将目标代码各模块模板中字节数已定但内容暂未确定的代码称为盲码。有两种情况需要采用盲码技术。第一种情况:在编译过程中,固定代码段不完全固定,需要修正。在修正过程中需要采用盲码技术。当图21中装配固定代码时,对表16中固定代码的定时器初值设定子程序段,先以盲码填入,代替正式代码,等图21中扫描源程序文件,逐条翻译,得到源程序提供的定时器初值以后,再用正式代码(含定时器初值的mov指令机器代码)代替相应位置上的盲码,从而完成固定代码的修正。第二种情况:图21中f数组只是提供了和源程序语句对应的目标代码的模板,该模板中的某些位置上原先也用盲码(符号上用变量)代替。当图21中依照f;_盯(m i)装配活动代码时,这些盲码才被相应参数值取代。实际参数也来自源程序。例如,前面曾提到,对于源程序语句pls 09,其目标代码子集为:f i=50h,odh,20h,p,06h,d2h,y,d2h,p,80h,08h,c2h,y,80h,04it,c2h,y,c2h,p,00h,00h,00h,式中的p、y位置为盲码位置,符号用变量p和y表示,值为:p=19h。y=09h,其中,09h值是从源语句pls 09中的参数09得到,19h是计算得到。图2.1基于单片机的plc编译程序结构3 基于单片机的plc编译程序查错模块设计基于单片机的plc编译程序的设计过程,就是将上述总体设计方法用于具体设计的过程。在上文中,为了确定一个进行源程序查错时的对照标准,已经建立了基于单片机的plc源程序语句标准集合,并且用m数组表达基于单片机的plc源程序语句标准集合,用c语言实现了m数组的赋值。在查错模块程序设计中,确定了以下设计思路:先根据源程序文件名建立一个列表文件名,然后分别打开源程序文件和列表文件。列表文件用来存放查错结果和错误标记。接下来,从源程序文件中依次读入源程序语句,并进行整句识别。一旦识别出一个整句,就进行语句语法检查,并将查错结果写入列表文件。读入源程序语句、整句识别、语句语法检查,这些过程在循环进行,直到出现源程序结尾标记才结束。31 编译过程中列表文件名和列表文件的建立建立列表文件的目的是为了用来存放查错结果。为此,先建立列表文件名。311 用strcat建立列表文件名用a数组记录源程序文件名,用b数组记录列表文件名。在基于单片机的plc编译程序开始的时候,已经通过键盘输入将源程序文件名输入到a数组中。所以,下面程序的已知条件是源程序文件名在a数组中。 strcpy(b,a) while(bi!.)&(i36)b1=2;goto next4b i+1= 0:bi+2=0 bi+3=0strcat(b,”list”);strcpy(b,a)的作用是将a数组的内容拷贝给b数组。源程序文件的扩展名是asm,而列表文件的扩展名应该是1st。所以在上述程序中用bi+1=o: bi+2=0:bi+3=0:bi+4=0:四条语句将已拷贝给b数组中的asm清除,再通过strcat(b,”lst”)语句将1st拼接到b数组中。结果,实现了用b数组记录一个文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论