基于单片机的可编程逻辑控制设计_第1页
基于单片机的可编程逻辑控制设计_第2页
基于单片机的可编程逻辑控制设计_第3页
基于单片机的可编程逻辑控制设计_第4页
基于单片机的可编程逻辑控制设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

-.z1、需求分析21.1工程概述21.2本设计的需求与意义31.3本设计的前景和特色42本实训的概要设计52.1硬件电路52.2软件的使用与程序的编写7上位机对梯形图的录入7通信模块程序的编写8下位机梯形图解释器程序的编写12整体系统框架的搭建,以及LCD显示与按键程序的编写163、详细设计173.1程序完成对uC/OS-II操作系统的移植18的编写19的编写19203.2在系统中创立各模块并在主函数中添加各摸块任务。213.3在系统中编写key.c和display.c文件程序224、调试过程285、实训总结及感想305.1本次实训体会:305.2实训总结312°、LCD显示与按键程序的编写为了将单片机的运行状态表示出来,在系统中添加了key.c和display.c文件,通过调试板上的液晶屏及添加相应的驱动程序,当GPIOF的按键被按下时,在屏上对应的显示出相应的状态,分为三种:运行态,停顿态和故障态。使设备的运行态一目了然,同时也完善了工程工程的品质。3、详细设计作者在实训中承当完成系统框架的搭建,并移植uC/OS-II操作系统,以及完成对按键和显示两个模块程序的编写。μC/OS实时嵌入式操作系统的构造硬件层硬件层硬件驱动BSP实时操作系统内核RTOSFS文件系统、图形界面、系统管理接口应用层APP应用层各任务调用关系及参数传递3.1程序完成对uC/OS-II操作系统的移植uC/OS-II的代码大概分为3类,这3类分别为与处理器相关代码、uC/OS-II的配置代码和与处理器无关的代码。根据不同的处理器,我们需要修改的代码文件为OS_CPU.H、OS_CPU_A.ASM和OS_CPU_C.C,而在应用程序中使用uC/OS-II时,需要用户提供的是应用软件和uC/OS-II的配置局部。3.2.1OS_CPU.H的编写OS_CPU.H包括了用*define语句定义的、与处理器相关的常数、宏以及类型,栈增长方向定义,关中断和开中断定义,系统软中断的定义等等。。系统内核与移植过程是无关的,用户只需要在应用系统开发过程中,通过配置OCS_CFG.H文件来对内核进展裁剪,只使用应用系统需要的功能,使系统最小最优化。例如STM32的堆栈是从上往下递减的,所以要将常数变量OS_STK_GROWTH定义为1,即*defineOS_STK_GROWTH13.2.2OS_CPU_C.C的编写UC/OS中共定义了6个函数在该文件中.但是最重要的是OSTaskStkInit().其他都是对系统内核的扩展时用的.

OSTaskStkInit()是在用户建立任务时系统内部自己调用的,对用户任务的堆栈进展初始化.使建立好的进入就绪态任务的堆栈与系统发生中断并且将环境变量保存完毕时的栈构造一致.这样就可以用中断返回指令使就绪的任务运行起来.uC/OS-II的移植*例要求用户编写10个简单的C函数:OSTaskStkInit();OSTaskCreateHook();OSTaskDelHook();OSTaskSwHook();OSTaskIdleHook();OSTaskStatHook();OSTaskTickHook();OSInitHookBegin();OSInitHookEnd();OSTCBInitHook();3.2.3这局部需要对处理器的存放器进展操作。包括四个子函数:OSStartHighRdy(),OSCt*Sw(),OSIntCt*Sw(),OSTickISR().OSStartHighRdy()由多任务系统启动函数OSStart()中调用.完成的功能是:设置系统运行标志位OSRunning=TRUE;将就绪表中最高优先级任务的栈指针Load到SP中,并强制中断返回.使就绪的最高优先级任务调整至运行态一样,使得整个系统得以运转.

OSCt*Sw()在任务级任务切换函数中调用的.任务级切换是通过SWI或者TRAP人为制造的中断来实现的.ISR的向量地址必须指向OSCt*Sw().这一中断完成的功能:保存任务的环境变量(主要是存放器的值,通过入栈来实现),将当前SP存入任务TCB中,载入就绪最高优先级任务的SP,恢复就绪最高优先级任务的环境变量,中断返回.这样就完成了任务级的切换.

OSIntCt*Sw()在退出中断效劳函数OSIntE*it()中调用,实现中断级任务切换.由于是在中断里调用,所以处理器的存放器入栈工作已经做完,就不用作这局部工作了.具体完成的任务:调整栈指针(因为调用函数会使任务栈构造与系统任务切换时堆栈标准构造不一致),保存当前任务SP,载入就绪最高优先级任务的SP,恢复就绪最高优先级任务的环境变量,中断返回.这样就完成了中断级任务切换.

OSTickISR()系统时钟节拍中断效劳函数,这是一个周期性中断,为内核提供时钟节拍.频率越高系统负荷越重.其周期的大小决定了内核所能给应用系统提供的最小时间间隔效劳.一般只限于ms级(跟MCU有关),对于要求更加苛刻的任务需要用户自己建立中断来解决.该函数具体内容:保存存放器(如果硬件自动完成就可以省略),调用OSIntEnter(),调用OSTimeTick(),调用OSIntE*it(),恢复存放器,中断返回.uC/OS-II的移植实例要求用户编写4个简单的汇编语言函数:OSStartHighRdy();OSCt*SW();OSIntCt*Sw();OSTickISR();3.2在系统中创立各模块并在主函数中添加各摸块任务。主函数中依次完成:定义全局变量;声明个任务内函数.初始化uCOS-II,此函数中建立了空闲任务和统计任务,建立开场TaskStart任务,控制权交给uC/OS-II内核,开场运行多任务。实现对STM32的初始化,并建立多个任务,包括建立各任务的堆栈,以及设置优先级。创立各功能任务voidTaskE*plainer(void*pdata)解释器任务voidTask(void*pdata)通信任务voidTaskKey(void*pdata)按键任务voidTaskDisp(void*pdata)显示任务在系统框架中添加各任务的源文件Display.c、key.c、LCD驱动文件lcd_24.c程序框架如下列图:3.3在系统中编写key.c和display.c文件程序编程思想:在key.c文件中,按键按下时,通过IF语句的判断,实现对状态位state的设定。流程图如下:在display.c文件中,通过IF语句对状态位state的判断,在液晶屏上实现显示的功能,流程图如下:Key.c中按键与状态位的设置程序:voidKeyBoardScan(void){ if(GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_0)==0) State.Run=1; if(GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_2)==0) State.Stop=1; if(GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_3)==0) State.Wrong=1; }通过状态位state的设定,在显示display中实现显示功能:voidDispState(void){ if(State.Run==1) { LCD_PutString(148,200,"设备运行",MAGENTA,GREEN), LCD_PutString(75,55,"PLC设备状态",WHITE,BLUE), LCD_PutString(145,220,"",BLUE,BLUE),LCD_PutString(145,240,"",BLUE,BLUE), LCD_PutString(114,200,"R",MAGENTA,GREEN),LCD_PutString(114,220,"",BLUE,BLUE),LCD_PutString(114,240,"",BLUE,BLUE); State.Run=0; } if(State.Stop==1) { LCD_PutString(148,220,"设备停顿",WHITE,RED),LCD_PutString(75,55,"PLC设备状态",WHITE,BLUE), LCD_PutString(145,200,"",BLUE,BLUE), LCD_PutString(145,240,"",BLUE,BLUE), LCD_PutString(114,220,"S",WHITE,RED),LCD_PutString(114,200,"",BLUE,BLUE),LCD_PutString(114,240,"",BLUE,BLUE); State.Stop=0; } if(State.Wrong==1) { LCD_PutString(148,240,"设备故障",WHITE,RED),LCD_PutString(75,55,"PLC设备状态",WHITE,BLUE), LCD_PutString(145,200,"",BLUE,BLUE), LCD_PutString(145,220,"",BLUE,BLUE), LCD_PutString(114,240,"W",WHITE,RED),LCD_PutString(114,220,"",BLUE,BLUE),LCD_PutString(114,200,"",BLUE,BLUE); State.Wrong=0; } }在LCD上显示效果如下截图:运行状态停顿状态故障状态4、调试过程虚拟串行驱动程序(VSPD)是一个可在计算机(Windows)下操作的程序,此驱动程序会创造数个“虚拟〞的串行埠。由一般程序看来,这些虚拟的串行端口跟实体的串行端口一样,唯一不同于传统传输的地方是在于程序所送出的信息是透过TCP/IP局域网络送至虚拟串行端口,之后由EM100再将所收到的信息传达至串行设备。当串行设备要回传信息时,要先将信息传至EM100,而后再藉由局域网络将信息传回至位于计算机端的虚拟串行驱动程序,当虚拟串行驱动程序收到信息后,又会将其传回给程序,就如同传统串行线。mi*为工业控制设计的串口设备调试工具,已被许多同行使用,主要特点:1〕、能根据设备的通讯协议,方便地生成多种冗余校验如Modbus,并加上完毕符,适用于大多数串口通讯的工业设备;2〕、能够混合输入16进制数、10进制数、ASCII字符,这种功能通过转义符“\\〞实现;3〕、支持串口1~255,支持各种虚拟串口,可以自定义任意通讯参数组合,随时改变参数而不用关闭串口,支持不常用的波特率等;4〕、可以测出设备的响应间隔;5〕、通讯数据可保存到RTF文件,参数设置可保存到注册表reg文件。6〕、可切换中文/英文显示。首先用虚拟串口虚拟出来两个串口1和2,然后相连:然后用mi*模拟串口2:VSPD*P调试界面mi*调试界面串口的输出5、实训总结及感想5.1本次实训体会:〔1〕掌握了STM32常用模块的编程配置,并将相关的软硬件知识应用到实际工程中去,从动手实践中实际知识。〔2〕通过实训既掌握关于PLC梯形图等知识的应用又学习了STM32在工程上的应用,本次实训完成了从事工程工程工作的锻炼。〔3〕在学习uCOS的根底上,应用模块化对工程进展编程,以及完成了将uCOS操作系统移植到STM32中去的过程。〔4〕实训中,我们不仅有对软件编程的学习,也有我们对硬件实用电路的掌握,以及外围电路的搭建。〔5〕熟悉了将PLC的梯形图编入单片机过程以及在实际调试中实现工程要求,完成实现对对象的控制。〔6〕本实训重要的是初步参与掌握了完成一个工程工程的具体过程和步骤,以及面对一个工程的问题,如何分析解决困难的能力,对以后参加工作有着莫大的帮助。还掌握了平安用电的知识,学习了平安操作要领,培养了严谨的工作作风,培养了良好的工作习惯,也树立了正确的团队协作意识。5.2实训总结本次实训,首先要感谢指导教师李琦的精心指导帮助,在本次实训中,李教师针对在工程逐渐深入进展中出现的种种难题都给予了专题讲座,使同学们的困惑迎刃而解,使我们能够按时完成实训,在此让我们向认真负责的教师表示感谢。需求分析1.1工程概述本工程所设计的新型PLC系统由上下位机两局部组成,上位机为PLC编程软件系统,主要负责程序的编辑,编译和监控;下位机为PLC运行系统,主要负责接收上位机编译的程序,在硬件电路中运行。其主要任务是开发出一个符合IEC61131-3国际标准的新型PLC系统,在充分研究国内外知名PLC产品的根底上,对PLC系统进展了设计。整个系统下位机以STM32单片机作为核心控制芯片来开发,上位机以VisualCH6.0MFC为开发工具,实现了一个友好、高效的编程环境。具体任务功能工作如下:1°上位机编程软件系统的设计与实现:整个上位机编程软件可以实现编程语言的编辑、保存、转化、编译,具体可分为以下几个局部:(1)工程管理:以工程为单位,将梯形图保存在一个文件夹下,对用户程序进展管理,还根据用户的需要可以对工程进展加密管理。(2)梯形图的编辑:考虑到梯形图的动态编辑特性,实现梯形图图元的插入、删除、复制、剪切、粘贴和属性设置等功能。2°下位机运行系统的设计与实现:下位机以STM32单片机作为系统的核心控制芯片,根据PLC的根本构造设计硬件电路。下位机控制主要实现系统的初始化设置,指令执行,控制电路输出功能。3°上下位机之间通讯功能的设计与实现:按照上下位机之间约定的通讯协议,采用串口来实现上位机与下位机之间的通讯。通过串口通讯,上位机可以下载目标代码,监控PLC程序运行,查询I/O的状态。1.2本设计的需求与意义由于基于单片机的PLC本钱极低,实际应用时可以带来较好的经济效益,因而具有较强的实用性。当我们设计机电一体化产品或从事自动化装置设计时,有时会碰到这样两种需求和问题:第一种需求,机电一体化产品装置或自动化装置中需要进展较为复杂的梯形图逻辑控制,并且被控对象需要用强电来驱动。这时,我们自然会想到采用PLC作为逻辑控制器。但在*些机电一体化产品或自动化装置的设计中,要求逻辑控制器的本钱极低。这时假设采用现成的PLC很难实现极低本钱要求。当该机电一体化产品或自动化装置需要大大降低本钱时,现成的PLC的价格会显得太高。第二种需求,机电一体化产品或自动化装置中需要进展较为复杂的梯形图逻辑控制,但被控对象只需要用弱电来驱动。要求逻辑控制本钱极低。这时,该怎样实现极低本钱的、在弱电驱动条件下的较为复杂的梯形图逻辑控制的需求呢?上述两种需求的问题焦点都是要求设计出本钱极低,同时能完成较为复杂的梯形图逻辑控制的逻辑控制器。我们能不能在机电一体化产品或自动化装置中的硬件设计中直接用价格极低的单片机芯片来充当逻辑控制器,使其具备梯形图逻辑控制功能,并且设计出适合于单片机的电路,形成一个直接用单片机芯片来取代PLC、并能完成较为复杂的梯形图逻辑控制的系统呢?如果能,则它对降低机电一体化产品或自动化装置的本钱是极为有利的。这样的方法也可以应用到自动化控制的生产线上,用来降低自动化控制生产线的设备本钱。则,怎样才能使从市场上选来的新一代的单片机芯片最终具备梯形图逻辑控制功能呢?我们知道要具备梯形图逻辑控制功能就必须能执行PLC指令和程序。但是,单片机芯片只能执行单片机指令和程序,不能直接执行PLC指令和程序。因此,问题的关键就变成要研究和设计出可以将PLC指令源程序翻译成单片机目标程序的翻译程序。基于STM32的PLC设计工程是面向中小型冶金、石油、化工、建材、机械制造、电力、汽车、轻工等企业,目的是降低投入的生产本钱,提高生产效率和生产利润。可编程控制器的应用情况往往表达着一个国家的工业自动化水平,我国PLC国内市场虽然庞大,但是95%以上的市场份额都被国外品牌占据,其中大中型PLC市场主要被欧美产品占据,小型PLC市场主要被日系品牌占据,其本钱也是相当的昂贵,而国内厂商的市场份额几乎可以忽略。因此,大力开展拥有自主知识产权的PLC编程软件,逐步摆脱国内PLC市场被国外厂商和合资企业所垄断的局面,对于推动国内PLC市场的开展具有深远意义。1.3本设计的前景和特色(1)首先,当从市场上选来新一代的单片机STM32芯片作为执行符合梯形图逻辑控制的逻辑控制器,则从总体上来看,基于该单片机芯片的PLC编译程序的设计就和其他PLC的编译程序设计不同,没有一个现成的编译程序可以套用,必须做创造性的工作,独立完成基于该单片机的编译程序设计。编写基于该单片机的PLC编译程序,是本课题的主要工作任务之一。(2)其次,目标程序框架构造也不同。因为单片机芯片不同,内部的硬件资源也就不同,目标指令代码和目标程序框架构造也就不同。因此在编译程序编写前,必须根据单片机芯片编程的特点设定目标程序框架构造。有许多影响目标程序框架构造的因素,诸如CPU初始化、通信程序编译、接口的初始化等。设定目标程序框架构造,是本课题的另一项主要工作任务。总之,基于单片机STM32的PLC编译程序设计研究是一项具有创造性的工作,需要充分吸取前人的经历,开拓创新,建立新的模型、新的构造、新的方法。2本实训的概要设计2.1硬件电路件电路框图设计如下列图5所示:图5硬件电路框图设计硬件实物图如下所示:按键局部:开发板上有四个普通按键分别连在GPIOF0-3上以及一个复位键,方便使用。2.2软件的使用与程序的编写2.2.1上位机对梯形图的录入上位机编程软件在PC机上实现,主要实现编程软件选择梯形图和指令表作为编程语言,并将其录入到相应软件中,以便下载到下位机中,对工程工程进展相应的控制。利用MFC创立用户界面,使其具有梯形图的录入和修改,助记符语言的录入和修改,并且能实现他们的互相转化的功能。并且能够实现通过串口向下位机下载。处理流程:用户首先要创立一个新的文件,选择是通过助记符语言或者是梯形图语言。如果是选择梯形图语言,在标题栏下方就会有一些符号的选择。当录入完成之后可以保存,并且能够实现两种语言的转换。流程图如下:创立新文件创立新文件输入语言选择用户输入下位机PC读取用户输入一级代码二级代码保存到电脑语言转换梯形图录入:在编辑框的左边和右边分别有两个电源线,在两个电源线的中间进展梯形图元件的录入,包括原件的插入、删除、保存等操作。用户户在编辑区对各个梯形图元件进展属性的设置和改变。用户进展梯形图编辑的时候,各个梯形之间空出一行用来隔开。各个梯级主路之间空出一行用来隔开。各个梯级有ID号进展标识,ID号依次递增且唯一。每个梯级包含一个梯级主路,梯级主路带有一个左电源线,常开触点,常开线圈和右电源线,它们之间有很多的水平连线,用户在常开触电与常开线圈之间添加其他元件并联关系构成新的梯级,当然用户也可以将这个常开触点和常开线圈删除继而添加自己需要的元件。元件的编辑属性对话框中包含用户对元件名称,数据类型,变量*围,物理地址等属性的编辑。助记符的录入:可以实现一些助记符的录入,以文本的形式进展录入。指令包括LD,LDI,OR,ORI,OUT等。梯形图转化为一级代码:首先将梯形图界面划分成大小一样的网格,如下列图所示,每个网格包含一个梯形图根本元件或者为空,每个网格信息保存在一个构造体对象中,构造体数组就构成了一级代码。一级代码是构造体数组的形式,由于网格中存在大量的“空〞元件,这样一级代码中就包含很多零元素,如果以数组的形式保存在计算机中必然浪费很大的空间。同时考虑到串行化问题,先采用双向链表构造,链表中每一个节点是一个类对象,它存储一个梯形图元件的信息,这样节点中就不包含零元素,利用串行化方法将链表信息保存在计算机中,这样计算机可以节约很大的硬盘空间。当用户完成输入后进展下载时,双向链表先转为一级代码,然后经过解算过程,将一级代码转换为二级代码下载到下位机STM32中。解算:一级代码经过解算转化成二级代码才能下载到下位机STM32中,二进制代码指令用四个字节组成,前两个字节代表命令种类,后两个字节代表目标设备。2.2.2上位机与下位机通信程序的编写上位机向下位机的数据发送:代码要向下位机通过串口发送,包括PC机的串口通信和STM32的串口通信局部。首先上位机向下位机发送一个命令ENQ〔0*05H〕,当下位机准备好承受数据后,回复命令ACK。之后PC开场发送数据。在VC中,有以下几种方式可以实现串口的通信:方法一:使用VC++提供的串行通信控件MSm首先,在对话框中创立通信控件,假设Control工具栏中缺少该控件,可通过菜单Project-->AddtoProject-->ponentsandControl插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对Windows通讯驱动程序的API函数的接口。换句话说,只需要设置和监视MSm控件的属性和事件。方法二:在单线程中实现自定义的串口通信类。主要运用ReadFile〔〕与WriteFile〔〕API函数。方法三:多线程下实现串行通信。在很多工业控制系统中,常通过扩展串口连接多个外设,各外设发送数据的重复频率不同,要求后台实时无过失捕捉,采集,处理,记录各端口数据,这就需要在自定义的串行通信类中创立端口监视线程,以便在指定的事件发生时向相关的窗口发送通知消息。通信协议:通过RS232进展通信,波特率为9600bps。PC机与下位机通信协议如下:通信过程采用问答方式,主机询问,从机应答,一台主机可以同时询问多台从机,主机和从机的通信格式一样,如下表。字节序号说明内容备注报文起始位0*55开场标志0*AA地址Addr0*FF为播送地址命令Cmd数据长度高位低位数据区……N校验位低位奇偶〔CRC或和〕校验命令列表:序号命令类型码功能0*01读取*,Y,M,S,T,C,D的数据0*02向*,Y,M,S,T,C,D写数据0*07使能*,Y,M,S,T,C0*08失能*,Y,M,S,T,C0*EE错误应答0*01命令:读取目标设备内的数据命令请求格式:字节序号说明内容功能1设备代号选取设备*,Y,M,S,T,C,D2操作数高位3低位命令应答格式:字节序号说明内容功能1地址高位读取从这个地址开场的数据2低位3数据长度高位一共读取的字节数4低位5数据区6………0*02命令:向目标设备内写入数据命令请求格式:字节序号说明内容功能1设备代号选取设备*,Y,M,S,T,C,D2操作数高位向目标设备中写入的数据3低位命令应答格式:正确执行时无返回码,执行错误时返回错误码,详见0*EE错误应答格式。0*07命令:使能目标设备命令请求格式:字节序号说明内容功能1设备代号选取选取设备*,Y,M,S,T,C,D命令应答格式:正确执行时无返回码,执行错误时返回错误码,详见0*EE错误应答格式。0*07命令:失能目标设备命令请求格式:字节序号说明内容功能1设备代号选取选取设备*,Y,M,S,T,C,D命令应答格式:正确执行时无返回码,执行错误时返回错误码,详见0*EE错误应答格式。0*EE命令:失能目标设备字节序号说明内容功能1命令类型出错的命令类型2.2.3用户开发的梯形图程序代码通过串行口被传送入单片机,这些代码对下位机而言只是普通的十六进制数,下位机要想通过这些代码了解用户的意图,并按照用户意图完成对被控制对象的控制,就必须有解释程序对这些程序代码进展解释。通过此程序,将上位机下载下来的梯形图程序转化成单片机识别的机器程序,从而按照控制要求,完成相应的控制动作。解释程序的按以下步骤实现:1°定义变量,设置指令代码输入标志位,设置功能行输入标志位。2°读第一行程序的行输入标志位,有输入程序则读行中每个字节的指令代码,置位相应代码的标志位,无输入则程序转至步骤5〕。3°根据指令代码标志位的组合判断本行程序的功能,置位这个功能行输入的标志位;清楚本行指令代码标志位。4°根据功能行输入标志位调用实现其功能的子程序模块,实现这行的功能;去除行功能有输入标志位。5°读下一行程序的行输入标志位,转入步骤2〕循环执行,至所有行完毕。梯形图解释按如下原则进展:当PLC解释程序发现LD或者LDI取指令,将该指令之前的电路块解释的结果入栈保存在模拟堆栈中。当发现AND、ANI或者OR、ORI指令,该指令将指令所带的操作元件的状态和当前的结果进展与、与非或者或、或非逻辑运算。PLC解释程序解释完一个分支快后,结果发现指令ANB,说明这个分支块和其他的常开触点、常闭触点或者一个分支块串联,此时堆栈应该出栈,当前分支块的结果和出栈的值作逻辑与运算,将逻辑运算的结果保存堆栈的栈顶。PLC解释程序解释完一个分支块后,如果发现指令ORB,说明这个分支块和其他的常开触点、常闭触点或者一个分支块并联,此时堆栈应该出栈,当前分支块的结果和出栈的值作逻辑或运算,将逻辑运算的结果页保存堆栈的栈顶。另外还可以看出堆栈出栈和入栈的次数相等,在解释到输出指令时,堆栈恢复到原来的位置。//母线逻辑堆栈unsignedshortsys_logic_g[20];unsignedshortsys_logic_g_ptr;//主逻辑堆栈系统unsignedshortsys_logic_main[20];unsignedshortsys_logic_main_ptr;//逻辑行计数器e*ternunsignedshortsys_loc_cout;给FLASH中写入三条指令,进展解释: FLASH_Unlock(); FLASH_ErasePage(0*0800C000); FLASH_ProgramWord(0*0800C000,0*00000001); //LD*0.0 FLASH_ProgramWord(0*0800C004,0*00005013); //OUTY0.0 FLASH_ProgramWord(0*0800C008,0*0000001f); //END系统主程序:voidplc_main(void){ system_setup();//主无限循环程序while(1){//输入更新update_input();//逻辑堆栈复位logic_reset();//用户程序执行program_e*cute();//输出更新update_output();}}进展程序执行program_e*cute();//输出更新梯形图的PLC指令解释过程如下:〔logic_main_主逻辑系统堆栈,loc_cout_逻辑计数堆栈〕1°堆栈清零,loc_cout、logic_g和logic_main清零,第一条指令为LD,判断前置逻辑〔loc_cout〕是否完成,假设没有完成,则将logic_main值压栈,启用新一行逻辑,给loc_cout置1,将母线逻辑和读取位进展逻辑“与〞运算,将*0.0的状态保存在logic_main中,并置logic_main状态为1。2°下一条指令,发现指令为OUT,如果logic_mian为ON(1/0来判断),则Y0.0的值为ON,否则为OFF.3°最后一条指令为END,程序扫描周期完毕,将输出映象区的ON/OFF状态输出,称为实际的输出,然后开场新一轮扫描周期。根本逻辑指令解释方法的实现PLC指令解释主要有指令分析程序和指令解释子程序,指令分析子程序通过对指令的中间代码进展分析,当分析到*种指令的指令代码时,解释程序跳转到对应的解释子程序。解释子程序得到指令的操作数并计算操作数对应元件在系统中的存储地址,完成规定的指令功能后再分析下一条PLC指令,如此周而复始。4°AND指令发现指令为AND,将logic_mian堆栈里的值和e*e_read_bit〔*0.1〕进展逻辑与运算,逻辑运算结果保存在logic_main中,并置logic_main为1。5°OR指令发现指令为OR,将logic_mian堆栈里的值和e*e_read_bit〔*0.1〕进展逻辑或运算,逻辑运算结果保存在logic_main中,并置logic_main为1。任务堆栈:任务堆栈是任务的重要的组成局部。所谓堆栈,就是在存储器中按数据“先进后出〔LIFO〕〞的原则组织的连续存储空间。为了满足任务切换和响应中断时保存CPU存放器中的内容及任务调用其他函数时的需要,每个任务都应该配有自己的堆栈。所有系统任务的任务控制块中都含有一个指向该任务堆栈的指针。在PLC梯形图中,位元件即继电器对应的物理实体是存储单元中的*一位,称为位功能存储器。如果该位为1则表示对应的继电器线圈通电,其常开触点闭合,常闭触点断开。反之,如果该位为0,则表示对应的继电器线圈失电,将常开触点断开,常闭触点闭合。在解释梯形图指令时,CPU扫描用户程序的中间代码将各个元件的状态进展逻辑与、或、非等运算,运算结果ON或者OFF保存在元件对应的存

温馨提示

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

评论

0/150

提交评论