基于PLC的自动化立体仓库设计_第1页
基于PLC的自动化立体仓库设计_第2页
基于PLC的自动化立体仓库设计_第3页
基于PLC的自动化立体仓库设计_第4页
基于PLC的自动化立体仓库设计_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

1、滨州学院专科毕业设计(论文)程控制器,简称PC(programmable controller)。但由于PC容易与个人计算机(programmable computer)相混淆,故人们仍习惯地用PLC作为可编程器的缩写。1985年国际电工委员会(IEC)对PLC的定义如下:可编程控制器是一种进行数字运算操作的电子系统,专为在工业环境下的应用而设计,它采用了可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字或模拟式的输入和输出,控制各种类型机械的生产过程。PLC是继电器逻辑控制系统发展而来,所以它在数学处理、顺序控制方面具有一定优势。继电器在控

2、制系统中主要起两种作用:(1)逻辑运算(2)弱电控制强电。PLC是集自动控制技术,计算机技术和通讯技术于一体的一种新型工业控制装置,已跃居工业自动化三大支柱(PLC、ROBOT、CAD/CAM)的首位。可编程控制器,简称PLC。它在集成电路、计算机技术的基础上发展起来的一中新型工业控制设备。 具有:(1)可靠性高、抗干扰能力强(2)设计、安装容易,维护工作量少(3)功能强、通用性(4)开发周期短,成功率高(5)体积小,重量轻、功耗底等特点。已经广泛应用于自动化控制的各个领域,并已成为实现工业生产自动化的支柱产品。与继电接触器系统相比系统更加可靠;占位空间比继电接触器控制系统小;价格上能与继电接

3、触器控制系统竞争;易于在现场变更程序;便于使用、维护、维修;能直接推动电磁阀、触器与于之相当的执行机构;能向中央执行机构;能向中央数据处理系统直接传输数据等。因此,进行立体仓库的PLC控制系统的设计,可以推动机械手行业的发展,扩大PLC在自动控制领域的应用,具有一定的经济和理论研究的价值。1.2本课题设计的内容课题的主要任务是基于三菱FX2N系列PLC的自动化立体仓库控制系统的设计。仓位的主体框架除包括十二个库位外,还配有一个物品入口位和一个出口位,并在这十二个库位的底部均设置有检测开关,若库内有物品,则压制相应的检测开关使之闭合,若无物品,则相应的检测开关断开。1.3本课题设计的目的和意义传

4、统条件下的库房管理作业,主要依据人工装卸,特别是对于一些大型物资,不仅工作效率低,浪费大量的人力、物力,存在较大的安全隐患,同时还占据大量的库房面积。立体库的投入使用,彻底解决了这一难题。(1)由于能充分利用仓库的垂直空间,其单位面积存储量远远大于普通的单层仓库(一般是单层仓库的4-7倍)。目前,世界上最高的立体仓库可达40多米,容量多达30万个货位。(2)仓库作业全部实现机械化和自动化,一方面能大大节省人力,减少劳动力费用的支出,另一方面能大大提高作业效率。(3)采用计算机进行仓储管理,可以方便地做到先进先出,并可防止货物自然老化、变质、生锈,也能避免货物的丢失。(4)货位集中,便于控制与管

5、理,特别是使用电子计算机,不但能够实现作业的自动控制,而且能够进行信息处理。(5)能更好地适应黑暗、低温、有毒等特殊环境的要求。例如,胶片厂把胶片卷轴存放在自动化立体仓库里,在完全黑暗的条件下,通过计算机控制可以实现胶片卷轴的自动出入库。(6)采用托盘或货箱存储货物,货物的破损率显着降低。第二章 系统控制方案的确定2.1自动化立体仓库的概述自动化立体仓库是指在不直接进行人工处理的情况下,自动地完成物品仓储和取出的系统,它以高层立体货架为主体,以成套搬运设备为基础,是集自动控制技术、通信技术、机电技术于一体的高效率、大容量存储机构。自动化立体仓库的出现,实现了仓库功能从单纯保管型向综合流通型的转

6、变。用PLC控制的自动化立体仓库达到仓储技术的全面自动化。自动化立体库基本由以下部分组成:(1)土建及公用工程设施库房。库存容量和货架规格是库房设计的主要依据。消防系统。对于自动化立体仓库而言,由于库房规模大,存储的货物和设备较多且密度大,而仓库的管理和操作人员较少,所以仓库内一般都采用自动消防系统。照明系统。动力系统。通风及采暖系统。其他设施。如排水设施、避雷接地设施和环境保护设施等。(2)机械设备货架。货箱与托盘。巷道机。周边搬运设备。(3)电气与电子设备检测装置。信息识别设备。控制装置。监控及调度设备。计算机管理系统。数据通信设备。大屏幕显示器。2.2采用PLC控制立体仓库的优点(1)结

7、构灵活,使用方便。(2)传输质量高、速度快、带宽稳定,(3)范围广,无所不在的电力线网络也是这种技术的优势。(4)低成本(5)适用面广(6)可靠性强(7)抗干扰能力强2.3系统设计的基本步骤立体仓库系统设计与调试的主要步骤:(1)收集、研究用户的原始资料(2)确定自动化立体仓库的主要形式及相关参数(3)合理布置自动化立休仓库的总体布局及物流图 (4)选择机械设备类型及相关参数 (5)初步设计控制系统及仓库管理系统(WMS)的各功能模块(6)仿真模拟整套系统2.4系统控制方案立体仓库的结构示意图见下图2-1所示:9987654321自动堆垛机堆垛机伸叉称重仪供步进机驱动模块行走步进电机驱动模块升

8、降步进电机驱动模块堆垛机电源直流开头电源直流开头电源四层三列立体库紧停按钮 紧停 叉中 联动 单动 手动 复位 功能 伸叉 升降 行走 线位 联动 自动111012堆垛机动作指示灯堆垛机控制PLC:Fx-2n-80mr反射式传感器图2-1 立体仓库结构示意图本课题所设计的立体仓库具有以下功能:(1)堆垛机(机械手)要有三个自由度,即:前进、后退;上、下;左、右;(2)堆垛机的运动由步进电机驱动;(3)堆垛机前进(或后退)运动和上(或下)运动可同时进行;(4)堆垛机前进、后退和上、下运动时必须有超限位保护;(5)每个仓位必须有检测装置(微动开关),当操作有误时发出错误报警信号;(6)当按完仓位号

9、后,没按入或取前,可以按取消键进行取消该操作;(7)整个电气控制系统必须设置急停按钮,以防发生意外。2.5立体仓库技术参数的确定表2-1立体仓库具体参数出/入货柜台最重物品20Kg每个仓位的高度45M仓位的上下距离15M仓位的平行距15M仓位的体积4M3可编程控制器(PLC)电源24V DC堆垛机电源220V AC,50Hz第三章 系统硬件设计3.1控制系统结构设计本设计是运用PLC控制系统来控制立体仓库的运动的方式。能快速的对输入信号做出反应控制立体仓库,便于检修。控制系统结构图如图3-1所示。手动/自动手动/自动键键前进限制后退限制后退超过向上限制向下限制向下超过前时限制取出限制取出超过P

10、LC图3-1 控制系统结构图3.2可编程控制器(PLC)的选型3.2.1 PLC概述可编程控制器,英文称Programmable Controller,简称PLC, PLC是一种专门为在工业环境下应用而设计的数字运算操作的电子系统它源于继电器控制技术。它通过运行存储在其内存中的程序,把经输入电路的物理过程得到的输入信息,变换为所要求的输出信息,进而再通过输出电路的物理过程去实现对负载的控制。PLC有丰富的指令系统,有各种各样的I/O接口、通信接口,有大容量的内存,有可靠的自身监控系统,因而具有以下基本的功能:(1)逻辑处理功能;(2)数据运算功能;(3)准确定时功能;(4)高速计数功能;(5)

11、中断处理(可以实现各种内外中断)功能;(6)程序与数据存储功能;(7)联网通信功能;(8)自检测、自诊断功能。3.2.2 PLC的选型在PLC系统设计时,首先应确定控制方案,下一步工作就是PLC工程设计选型。工艺流程的特点和应用要求是设计选型的主要依据。因此,工程设计选型和估算时,应详细分析工艺过程的特点、控制要求,明确控制任务和范围确定所需的操作和动作,然后根据控制要求,估算输入输出点数、所需存储器容量、确定PLC的功能、外部设备特性等,最后选择有较高性能价格比的PLC和设计相应的控制系统。(1)输入输出(I/O)点数的估算(2)存储器容量的估算(3)控制功能的选择该选择包括运算功能、控制功

12、能、通信功能、编程功能、诊断功能和处理速度等特性的选择。根据本课题所设计的自动门控制的需要,主要介绍以下几种功能的选择。控制功能编程功能五种标准化编程语言:顺序功能图(SFC)、梯形图(LD)、功能模块图(FBD)三种图形化语言和语句表(IL)、结构文本(ST)两种文本语言。选用的编程语言应遵守其标准(IEC6113123),同时,还应支持多种语言编程形式,如C,Basic等,以满足特殊控制场合的控制要求。诊断功能PLC的诊断功能的强弱,直接影响对操作和维护人员技术能力的要求,并影响平均维修时间。3.2.3机型的选择结合实际情况,所选I/O点为80点。因此我所选型号为FX2N-80MR。3.3

13、步进电机步进电机是数字控制系统中的执行电机,当系统讲一个电脉冲信号到步进电机定子绕组时,转子就转一步,当电脉冲安某一相序加到电动机时,转子沿某一方向转动的步数等于电脉冲光个数。因此,改变输入脉冲的数目就能控制步进电机转子机械位移的大小;改变输入脉冲的通电相序,就能控制步进电机转子机械位移的方向,实现位置的控制,实现宽广范围内速度的无极平滑控制。步进电机可分为磁阻式、永磁式和混合式,步进电机的相数可分为:单相、二相、三相、四相、五相、六相和八相等多种。增加相数能提高步进电机的性能,但电动机的结构和驱动电源就会复杂,成本就会增加,应按需要合理选用。本系统用步进电机为42BYG250C型步进电机,其

14、电气技术数据为:表3-1 步进电机电气技术数据3.3.1步进电机驱动系统的基本组成和工作原理 为了驱动步进电机,必须由一个决定电动机速度和旋转角度的脉冲发生器(在该立体仓库控制系统中采用PLC作脉冲发生器进行位置控制)、一个使电动机绕组电流按规定次序通断的脉冲分配器、一个保证电动机正常运行的功率放大器,以及一个直流功率电源等组成一个驱动系统。步进电机驱动器是把控制系统发出的脉冲信号转化为步进电机的角位移,或者说:控制系统每发一个脉冲信号,通过驱动器就使步进电机旋转一步距角。所以步进电机的转速与脉冲信号的频率成正比。 所以设计中采用北京斯达特机电科技发展有限公司生产的SH系列步进电机驱动器,SH

15、-2H057。主要由电源输入部分、信号输入部分、输出部分组成。SH-2H057步进电机驱动器采用铸铝结构,此种结构主要用于小功率驱动器,这种结构为封闭的超小型结构,本身不带风机,其外壳即为散热体,所以使用时要将其固定在较厚、较大的金属板上或较厚的机柜内,接触面之间要涂上导热硅脂,在棋盘边加一个风机也是一种较好的散热办法。此步进电机驱动器的电气技术数据为: 表3-2 步进电机驱动器电气技术数据 3.4传感器在该立体仓库中采用欧姆龙EE-SPY402凹槽型、反射型接插件式传感器作货物检测,它采用能抗周围外来光干扰的变调光式;采用变调光式,与直流光式比,不易受外来光干扰的影响;电源电压为DC5-24

16、V的大量程电压输出型;带有容易调整的光轴标识;带有便于调整,动作确认入光显示灯;反射式传感器的时间图和输出回路图如图3-2所示。图3-2 反射式传感器的时间图和输出回路图它有三根连接线(红、蓝、黑),红色接电源的正极、黑色接电源的负极、蓝色为输出信号,当与挡块接近时输出电平为低电平,否则为高电平。需要注意检测距离不要离传感器太近,否则传感器不能动作;连接是采用接插件方式,千万不要对端子(读出头)进行焊接。3.5微动开关的选择在该立体仓库控制系统中共有13个仓位(四层十二个仓位加0号仓位)分别采用13只微动开关作为货物检测,当有货物时相应开关动作,其信号对应PLC的输入点是X22-X36;另外为

17、保险起见,在X轴的左限位和Y轴的下限位处还分别加装了1只微动开关作限位保护,以确保立体仓库在程序出错时不损坏;微动开关原理图如图3-3所示。图3-3 微动开关原理图3.6 PLC输入输出分配表根据本课题PLC输入输出的控制要求,得出PLC输入输出I/O分配,如表3-4所示。表3-4 PLC输入输出I/O分配X0启 动X24检验2号仓库Y0前 进X1手动/自动X25检验3号仓库Y1后 退X2取 出X26检验4号仓库Y2向 上X3送 进X27检验5号仓库Y3向 下X4取 消X30检验6号仓库Y4送 进X5急 停X31检验7号仓库Y5取 出X61号仓库的键X32检验8号仓库Y6显示取出X72号仓库的

18、键X33检验9号仓库Y7显示送进X103号仓库的键X34检验10号仓库Y10显示操作错误X114号仓库的键X35检验11号仓库Y11显示1号仓库X125号仓库的键X36检验12号仓库Y12显示2号仓库X136号仓库的键X37前进限制Y13显示3号仓库X147号仓库的键X40后退限制Y14显示4号仓库X158号仓库的键X41后退超过Y15显示5号仓库X169号仓库的键X42向上限制Y16显示6号仓库X1710号仓库的键X43向下限制Y17显示7号仓库X2011号仓库的键X44向下超过Y20显示8号仓库X2112号仓库的键X45前时限制Y21显示9号仓库X22检验0号仓库X46取出限制Y22显示1

19、0号仓库X23检验1号仓库X47取出超过Y23显示11号仓库Y24显示12号仓库 3.7电气原理图的设计指示灯Dc24vCP步指示灯Dc24vCP步进脉冲DIR方向电平OPTO公共阳端PLC FX2N-80MRX0 X5 X.2 X.3X4 X37 X40X41 X42 X43 X44X45 X46 X47 X6X21 X22X36 X1 COM COM Y6 Y7 Y10 Y11Y24 Y0 Y1 Y2 Y3 Y4 Y5SB1SB3SB2SB4SB5限制开关微动开关SB6SB21急停SB0启动手动/自动 图3-4电气原理图 第四章 系统控制软件设计4.1PLC梯形图概述梯形图是通过连线把PL

20、C指令的梯形图符号连接在一起的连通图,用以表达所使用的PLC指令及其前后顺序,它与电气原理图和相似。它的连线有两种:一为母线,另一为内部横竖线。开关量:按电压水平分,有220VAC、110VAC、24VDC,按隔离方式分,有继电器隔离和晶体管隔离。模拟量:按其精度可分为12bit、14bit、16bit等;按信号类型可分为电流型(4-20mA,0-20mA)、电压型(0-10V,0-5V,-10-10V)等。除了上述通用I/O外,还有特殊I/O模块,如热电阻、热电偶、脉冲等模块。梯形图两侧的垂直公共线称为母线(Bus bar)。根据梯形图中各触点的状态和逻辑关系,求出与图中各线圈对应的编程元件

21、的状态,称为梯形图的逻辑解算。梯形图中逻辑解算是按从左至右、从上到下的顺序进行的。 PLC与电气回路的接口,是通过输入输出部分(I/O)完成的。I/O模块集成了PLC的I/O电路,其输入暂存器反映输入信号状态,输出点反映输出锁存器状态。输入模块将电信号变换成数字信号进入PLC系统,输出模块相反。I/O分为开关量输入(DI),开关量输出(DO),模拟量输入(AI),模拟量输出(AO)等模块。 4.2系统流程图根据系统工作过程的分析得出,示意图4-1所示堆垛机初始化(复位)询问是否有要货单有货单发送货单(货物仓位号)堆垛机得到货单确定货物仓位号开始执行货单货物送到顶 层 堆垛机初始化(复位)询问是

22、否有要货单有货单发送货单(货物仓位号)堆垛机得到货单确定货物仓位号开始执行货单货物送到顶 层 蹭层顶层仓内有无货物伸叉到取放货物完成货单记录序号结束YYY 图4-1系统流程图4.3梯形图的设计本系统运用SWOPC-FXGP/WIN-C编程软件进行梯形图顺控程序编写,在编写梯形图的过程中遵循以下编程规则:1.每个继电器的线圈和它的触点均用同一编号,每个元件的触点使用时没有数量限制。2.梯形图每一行都是从左边开始,线圈接在最右边(线圈右边不允许再有触点)。3.线圈不能直接接在左边母线上。4.在梯形图中没有真实的电流流动,为了便于分析,假定在梯形图中有“电流”流动,这个“电流”只能在梯形图中单方向流

23、动。具体梯形图见附录。第五章 系统调试及结论5.1梯形图程序的下载5.1.1传输设置要将编制好的程序下载到PLC,必须先进行网络传输设置。先将PLC与计算机的串口互连,然后单击在线-传输设置,可以进入传输设置对话框,进行FX2n PLC设备与网络传输参数设定,可以进行PLC和计算机的串口通信口及通信方式的设定,可以进行其他网络站点的设定,还可以实现通信测试。5.1.2梯形图写入PLC单击在线-PLC写入,就可以打开“PLC写入”对话框,进行相关设置并执行,就可将GX Developer中已编好的程序写入PLC,如图5.1所示。选中要下载到PLC的内容,单击执行就可以将写好的梯形图程序下载到PL

24、C的CPU中。 图5-1 PLC写入5.2程序运行过程记录待程序全部写入PLC之后,首先运用PLC的编程软件进行模拟调试,模拟调试成功以后,接上外部接线进行现场调试,现场调试的具体情况如下表所示:表5-1 程序运行过程记录PLC元件状态运行结果X0ON启 动X1ON手动/自动X2ON取 出X3ON送 进X4ON取 消X5ON急 停X6ON1号仓库的键X7ON2号仓库的键X10ON3号仓库的键X11ON4号仓库的键X12ON5号仓库的键X13ON6号仓库的键X14ON7号仓库的键X15ON8号仓库的键X16ON9号仓库的键X17ON10号仓库的键X20ON11号仓库的键X21ON12号仓库的键X

25、22ON检验0号仓库X23ON检验1号仓库X24ON检验2号仓库X25ON检验3号仓库X26ON检验4号仓库X27ON检验5号仓库X30ON检验6号仓库X31ON检验7号仓库X32ON检验8号仓库X33ON检验9号仓库X34ON检验10号仓库X35ON检验11号仓库X36ON检验12号仓库X37ON前进限制X40ON后退限制X41ON后退超过X42ON向上限制X43ON向下限制X44ON向下超过X45ON前时限制X46ON取出限制X47ON取出超过5.3结论本系统主要以PLC为核心,利用PLC的强大的控制功能,实现了利用可编程控制器控制立体仓库的功能,具有接线简单、编程直观、扩展容易等特点。当

26、机械手的功能增加时,硬件接线上只需增加行程开关输入信号。通过本设计,我学习到了很多东西,在工作的细心上也得到了提高。并且,更了解了有关可编程控制器的功能。我选择这个设计,也是为了弥补以前学习上的不足。这次设计,使我了解到老师的用心良苦,并且从老师、朋友那学到了很多宝贵的东西。谢辞 通过这一阶段的努力,我的毕业论文终于完成了,这意味着大学生活即将结束。在大学阶段,我在学习上和思想上都受益非浅,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。在本论文的写作过程中,我的导师郝冠男老师倾注了大量的心血,从选题到开题报告,从写作提纲,到一遍又一遍地指出每稿中的具体问题,严格把关,

27、循循善诱,在此我表示衷心感谢。同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关心我的同学和朋友。写作毕业论文是一次再系统学习的过程,毕业论文的完成,同样也意味着新的学习生活的开始。我将铭记我曾是一名苏州工业职业技术学院学子,在今后的工作中把学院的优良传统发扬光大。感谢各位老师的批评指导。参考文献1张万忠主编,电器与PLC控制技术M,化学工业出版社,2003年2胡学林主编,可编程控制器教程M,电子工业出版社,2004年3周美兰主编,PLC电气控制与组态设计M,北京:科学出版社,2006年4曾庆波主编,监控组态软件及其应用技术M,哈尔滨工业出版社,2006年5龚中华,史建成,孙毅著,三

28、菱FX系列PLC应用技术M,北京:人民邮电出版社,20066严盈高主编,西门子S7-200PLC入门M,北京:人民邮电出版社,2007年7张孝冰,沈晓红,PLC在步进电机中的应用J,机电工程技术,2008.29(1),104-106附录 PLC设计的梯形图 附录资料:不需要的可以自行删除 C语言-INT10中断号视频服务程序00H(设置视频模式)输入: AH=00H AL=视频模式输出: 无 说明:视频服务程序00H用来设置视频配置为表10-l中列出之一。AL寄存器给定所需视频模式。若设置了新视频模式,则清除屏幕。 视频服务程序0lH(设置光标大小)输入: AH=01H CH=光标开始扫描行

29、CL=光标结束扫描行输出: 无说明:该服务程序用于正文模式。在一个字符单元内由一行或几行组成的光标将在字符显示位置得闪烁。该服务程序定义光标的显示行数。对CGA模式,8扫描行(07)用于光标。对EGA模式,使用14行(013)。MCGA和VGA适配器,光标可具有16扫描行(015)高。缺省设置如下: CGA: CH6,CL7 EGA: CHll,CL12 MCGA和VGA: CH量13,CL1 视频服务程序02H(设置光标位置)输入: AH=02H BH=光标页号 DH=光标行号 DL=光标列号输出: 无说明:该服务器序用于将光标移到指定行和列位置。该服务程序即可用于正文模式也可用于图形模式;

30、然而,仅在正文模式下才显示光标。屏幕左上角为坐标系统的原点。对支持多页的正文和图形模式,则必须指定页号,以保证光标位置正确。视频服务程序03H(读光标位置)输入: AH=03H BH=页号输出: CH=光标开始行 CL=光标结束行 DH=行号 DL列号说明:该服务程序用于获取光标大小和位置。BH给定了页号。CH中存放光标开始扫描行,而CL中为光标结束扫描行。DH中存放行位置,DL中为列位置。视频服务程序05H(设置活动显示页)输入: AH=05H AL=活动页号输出: 无 说明:该服务程序为正文和图形模式用来设置活动显示页号。AL指定所需页号。对多数正文模式,页号范围为0一7。对具有足够视频缓

31、冲EGA和VGA适配器,可支持多页图形。对所有正文和图形模式,缺省为0页。视频服务程序06H(向上翻滚活动窗口)。输入:AH=06HAL=翻滚行数BH=空白行属性CH左上角行号CL=左上角列号 DH右下角行号 Dl右下角列号输出: 无 说明:该服务程序用来创建和翻滚一正文窗口。CH和CL中给出了正文窗口左上角坐标,DH和DL中给出了正文窗口右下角坐标。AL中定义了翻滚的行数。若AL00H,则正文窗口为空白。当滚动窗口时,底部行是空白行,其属性由BH中指定。视频服务程序07H(向下翻滚窗口)输入:AH=07HAL=翻滚行数BH=空白行属性CH=左上角行号CL=左上角列号DH=右下角行号DL=右下

32、角列号输出: 无说明:该服务程序用来创建和翻滚一正文窗口。CH和CL中给出了正文窗口左上角坐标,DH和DL中给出了正文窗口右下角坐标。AL中定义了翻滚的行数。若AL00H,则正文窗口为空白。当滚动窗口时,顶部行为空白,其属性由BH中指定。视频服务程序08H(读字符和属性)输入: AH=08H BH=活动页号输出: AH=字符属性 AL=字符码说明:该服务程序用于读取正文或视频模式下,光标所在处字符。在图形模式下,获取的字符同图形模式下使用的字符生成表有关。在正文模式下,将获得字符的ASCII码。字符属性存放在AH中,字符ASCII码存放在AL中。图形模式下,AH中内容无意义.视频服务程序09H

33、(写字符和属性)输入: AH09H AL=写字符的ASCII码 BL=写字符的属性 BH=活动页号 CX=重复写字符和属性次数输出: 无 说明:该服务程序写一个字符到屏幕当前光标处。AL中指定字符码。正文模式下,BL中指定字符属性。图形模式下,BL指定背景颜色。字符可重复写。CX为写字符及属性的次数。视频服务程序0FH(取当前视频模式)输入: AH0FH输出: AH每行字符数 AL当前显示模式 BH活动页号说明:该服务程序用来获取当前视频模式,屏幕宽(以字符计),以及活动显示页号;视频显示模式存放在AL中。屏幕宽度(以字符计)存放在AH中,活动页号存放在BH中。文件相关函数函数名: fopen

34、功 能: 打开一个流用 法: FILE *fopen(char *filename, char *type);函数名: fclose功 能: 关闭一个流用 法: int fclose(FILE *stream); fopen()函数提供了几种打开文件的方式,这是由其字符指针参数type决定的。以下给出打开方式列表:参数作用R只读W新建、可写,如果文件存在则覆盖A存在则在文件后附加,如果不存在则新建后写r+更新一个存在的文件(读和写)w+增加一个新的文件更新(读和写),如果文件存在则覆盖a+存在则在文件后附加(读和写),如果不存在则新建后更新(读和写)*以文本模式打开一个存在或新建的文件,附加”

35、t”在参数后(rt, w+t, etc.)。*以二进制模式打开一个存在或者新建的文件,附加”b”在参数后(wb, a+b, etc.)。函数名: fseek功 能: 重定位流上的文件指针用 法: int fseek(FILE *stream,long offset,int fromwhere); 读取文件函数:函数名: fread功 能: 从一个流中读数据用 法: int fread( void *ptr, int size, int nitems, FILE *stream ); 写入文件函数:函数名: fwrite功 能: 写内容到流中用 法: int fwrite( void *ptr,

36、 int size, int nitems, FILE *stream ); fseek()函数提供了文件指针的三个初始位置,这是由其参数fromwhere决定的,以下给出其列表:常量值文件定位SEEK_SET0从文件头开始寻找SEEK_CUR1从文件当前位置开始寻找SEEK_END2从文件最后开始寻找函数名: fprintf功 能: 传送格式化输出到一个流中用 法: int fprintf( FILE *stream, char *format, argument,. );函数名: fscanf功 能: 从一个流中执行格式化输入用 法: int fscanf( FILE *stream, c

37、har *format,argument. );发声函数函数名: sound功 能: 以指定频率打开PC扬声器用 法: void sound(unsigned frequency);函数名: nosound功 能: 关闭PC扬声器用 法: void nosound(void);常规内存操作函数申请函数:malloc(),farmalloc(),calloc(),farcalloc(),realloc(),farealloc()函数名: malloc功 能: 内存分配函数用 法: void *malloc(unsigned size);函数名: farmalloc功 能: 从远堆中分配存储块用

38、法: void far *farmalloc(unsigned long size);函数名: calloc功 能: 分配主存储器用 法: void *calloc(size_t nelem, size_t elsize);函数名: farcalloc功 能: 从远堆栈中申请空间用 法: void far *farcalloc( unsigned long units, unsigned ling unitsz );函数名: realloc功 能: 重新分配主存用 法: void *realloc(void *ptr, unsigned newsize);函数名: farrealloc功 能:

39、 调整远堆中的分配块用 法: void far *farrealloc( void far *block, unsigned long newsize );使用函数:memcpy(),memset(),memmove(),movedata()函数名: memcpy功 能: 从源source中拷贝n个字节到目标destin中用 法: void *memcpy(void *destin,void *source,unsigned n);函数名: memset功 能: 设置s中的所有字节为ch, s数组的大小由n给定用 法: void *memset(void *s, char ch, unsign

40、ed n);函数名: memmove功 能: 移动一块字节用 法: void *memmove(void *destin,void *source,unsigned n);函数名: movedata功 能: 拷贝字节用 法: void movedata(int segsrc, int offsrc, int segdest, int offdest, unsigned numbytes);释放函数:free(),farfree()函数名: free功 能: 释放已分配的块用 法: void free(void *ptr);函数名: farfree功 能: 从远堆中释放一块用 法: void f

41、arfree(void);指针操作函数:MK_FP(),FP_OFF(),FP_SEG()函数名: MK_FP功 能: 设置一个远指针用 法: void far *MK_FP(unsigned seg, unsigned off);函数名: FP_OFF功 能: 获取远地址偏移量用 法: unsigned FP_OFF(void far *farptr);函数名: FP_SEG功 能: 获取远地址段值用 法: unsigned FP_SEG(void far *farptr);如果想知道还剩下多少常规内存,我们可以使用以下函数:函数名: coreleft()功 能: 获取空闲内存用 法: un

42、signed coreleft(void);函数名: farcoreleft()功 能: 获取远堆空闲内存用 法: unsigned long farcoreleft(void);XMS功能调用索引表:功能号功能版本功能00H功能01H功能02H功能03H功能04H功能05H功能06H功能07H功能08H功能09H功能0AH功能0BH功能0CH功能0DH功能0EH功能0FH功能10H功能11H取XMS版本号请求高内存区HMA释放高内存区HMA全程启用A20全程停用A20局部启用A20局部停用A20查询A20状态查询自由扩展内存分配扩展内存块释放扩展内存块移动扩展内存块锁住扩展内存块扩展内存块解

43、锁取EMB句柄信息重新分配扩展内存块请求上位存储块UMB释放上位存储块UMBXMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS功能调用函数1. 测试xms是否存在使用中断2fH的43H(AH)功能的00H(AL)子功能,可以获得是否安装了XMS驱动程序的信息,如果AL返回为80H则说明XMS安装了。以下给出具体函数:c

44、har test_xms() asm mov ax,0 x4300int 0 x2f if (_AL=0 x80) XMS=1; return(XMS);2. 获取xms驱动程序入口地址使用中断2fH的43H(AH)功能的10H(AL)子功能,可以获得xms驱动程序入口地址,返回的ES:BX便是具体的入口。以下给出具体函数:void get_driver_address() if (XMS) asm mov ax,0 x4310 /功能号43H int 0 x2f /调用中断2fH xms=(void (far *)()(long)(_ES)lock_count=_BH; handle_inf

45、o-free_handle=_BL; /获取可用的句柄handle_info-size=_DX; /获取句柄分配的块的容量 return(error_code); 18. 为句柄重新分配内存使用功能0FH(AH)可以为句柄重新分配内存,DX给入句柄,BX给入新的块的容量(单位:K),AX返回0001H表示成功、0000H表示失败,失败时BL返回错误代码,以下给出具体函数:char reallocate_xms_block(unsigned handle,unsigned size) char error_code=0 xff; if (XMS) asm mov ah,0 x0f mov dx,

46、handle mov bx,size xms();error_code=_BL; return(error_code); 19. 请求分配UMB使用功能10H(AH)可以请求分配UMB(upper memory block,即上位内存, 640K以上的非EMS内存),DX给入块的大小(单位:节, 即paragraphs, 为16个字节),AX返回0001H表示成功、0000H表示失败,BX返回分配UMB的段地址,DX返回块的实际容量actual size of block,失败时BL返回错误代码,以下给出具体函数:typedef struct UMB_info unsigned UMB_seg

47、ment; unsigned size; ui;char request_UMB(unsigned size,ui *info) char error_code=0 xff; if (XMS) asm mov ah,0 x10 mov dx,size xms();error_code=_BL;info-UMB_segment=_BX;/返回umb段地址info-size=_DX;/返回容量 return(error_code); 20. 释放UMB使用功能11H(AH)可以释放UMB(upper memory block),640K以上的非EMS内存),DX给入要释放的UMB内存的段地址,AX

48、返回0001H表示成功、0000H表示失败,失败时BL返回错误代码,以下给出具体函数:char release_UMB(unsigned segment) char error_code=0 xff; if (XMS) asm mov ah,0 x10 mov dx,segment xms();error_code=_BL; return(error_code); 这里值得一提的是HIMEM.SYS需要至少为256字节的栈空间。此外给出错误时BL返回的错误代码及其含义:返回错误代码含义80h没有提供的功能81h检测到虚拟盘(Vdisk)82h发生A20地址线错误8Eh一般驱动程序错误8Fh致命

49、的驱动程序错误90h高端内存(HMA)不存在91h高端内存(HMA)已被使用92hDX is less than the /HMAMIN= parameter93h高端内存(HMA)未被分配94hA20地址线已被激活A0h所有扩充内存已被分配A1h所有可用的句柄已被分配A2h无效的句柄A3h无效的源句柄A4h无效的源偏移A5h无效的目的句柄A6h无效的目的偏移A7h无效的长度A8h移动有非法的重叠A9h发生奇偶校验错误AAh块未加锁ABh块已被锁定ACh块锁定计数溢出ADh锁定失败B0h只有更小一些的UMB空间B1h没有可用的UMB空间EMS功能调用索引EMS功能调用索引:功能号功能功能40H

50、功能41H功能42H功能43H功能44H功能45H功能46H功能47H功能48H功能4BH功能4CH功能4DH取得EMS程序状态取得物理映射页面的段地址获取逻辑页页数信息分配句柄和内存内存映射释放句柄和内存获取EMM的版本号保存指定句柄映射关系恢复指定句柄映射关系获取EMM的句柄数获取指定句柄所分配的逻辑页页数获取所有句柄分配情况1. 测试EMS管理程序测试EMS管理程序, 找到返回1, 否则返回0,以下给出具体函数:char test_ems() int i; union REGS inregs,outregs; struct SREGS segs; struct DeviceHeader

51、struct DeviceHeader far *link;unsigned attributes;unsigned strategy_offset;unsigned interrupt_offset;char name_of_number_of_units8; far *dev; unsigned char major,minor,c13; inregs.x.ax=0 x3001;/dos中断功能30子功能01读取当前扩充内存是否有效 intdos(&inregs,&outregs);/DOS中断 major=outregs.h.al;/返回扩充内存状态 minor=outregs.h.ah

52、; if (majorattributes & 0 x8000) for (i=0;iname_of_number_of_unitsi; /取设备名称 if (!strcmp(c,EMMXXXX0) /将设备名称与扩充内存名字比较 EMS=1;/扩充内存存在 return(1); dev=dev-link; /指向下一个设备 return(0); 2. 取得管理程序状态在确认EMS存在时,使用中断67H功能40H(AH)可以取得管理程序状态,AH返回00H表示成功、否则返回错误代码。以下给出具体函数:char get_EMS_status() char tmp=0 xff; if (EMS)

53、asm mov ah,0 x40/功能号40h int 0 x67/调用中断67h mov tmp,ah/返回值 return(tmp); 3. 取得物理映射页面的段地址使用中断67H功能41H(AH)可以取得物理映射页面的段地址,AH返回00H表示成功、否则返回错误代码,BX返回物理映射页面的段地址。使用此功能可确定EMS在1Mb常规内存中的映射位置,此物理映射页面的大小为64K, 分为0-3页, 每页为16K,因为EMS逻辑页的大小为16K, 也就是说我们最多可同时将4 个EMS逻辑页映射到物理页上。以下给出具体函数:char get_page_frame_segment(unsigned

54、 *segment) char tmp=0 xff; if (EMS) asm mov ah,0 x41 int 0 x67 mov tmp,ah*segment=_BX;/取得段地址 return(tmp); 4. 获取逻辑页页数信息使用中断67H功能42H(AH)可以获取逻辑页页数信息,AH返回00H表示成功、否则返回错误代码,BX返回未分配的页数,DX返回页的总数。以下给出具体函数:char get_number_of_pages(unsigned *avail,unsigned *total) char tmp=0 xff; if (EMS) asm mov ah,0 x42 int

55、0 x67 mov tmp,ah *avail=_BX;/返回可用页数*total=_DX;/返回所有页数 return(tmp); 5. 分配句柄和内存使用中断67H功能43H(AH)可以分配句柄和内存,BX给入要求分配的逻辑页的页数(逻辑页每页的大小为16K),AH返回00H表示成功、否则返回错误代码,DX返回句柄。当程序退出运行时, 句柄将被非显式的关闭并无法回收。以下给出具体函数:char allocate_memory(unsigned *handle,unsigned page_numbers) char tmp=0 xff; if (EMS) asm mov ah,0 x43 m

56、ov bx,page_numbers int 0 x67 mov tmp,ah*handle=_DX;/返回句柄 return(tmp); 6. 内存映射使用中断67H功能44H(AH)可以进行内存映射,AL给入物理页页号 (0-3),BX给入要求分配的逻辑页的页数(逻辑页每页的大小为16K),DX给入句柄,AH返回00H表示成功、否则返回错误代码。以下给出具体函数:char map_memory(char physical_page,unsigned logical_page,unsigned handle) char tmp=0 xff; if (EMS) asm mov ah,0 x44

57、 mov al,physical_page /物理页数 mov bx,logical_page /逻辑页数 mov dx,handle int 0 x67 mov tmp,ah return(tmp); 7. 释放句柄和内存使用中断67H功能45H(AH)可以释放句柄和内存,DX给入EMM句柄,AH返回00H表示成功、否则返回错误代码。句柄必须被显示的释放, 否则分配的内存无法被其后的程序使用。如果不成功, 应重试这一操作。以下给出具体函数:char release_memory(unsigned handle) char tmp=0 xff; if (EMS) asm mov ah,0 x4

58、5 mov dx,handle int 0 x67 mov tmp,ah return(tmp); 8. 获取EMM的版本号使用中断67H功能46H(AH)可以获取EMM的版本号,AH返回00H表示成功、否则返回错误代码,AL返回EMM的版本号,高四位为主版本号(BCD码),低四位为副版本号(BCD码)。句柄必须被显示的释放, 否则分配的内存无法被其后的程序使用。如果不成功, 应重试这一操作。以下给出具体函数:char get_EMM_version(unsigned char *version) char tmp=0 xff; if (EMS) asm mov ah,0 x46 int 0

59、x67 mov tmp,ah*version=_AL; return(tmp); 9. 保存指定句柄映射关系使用中断67H功能47H(AH)可以保存指定句柄映射关系,DX给入句柄,AH返回00H表示成功、否则返回错误代码。一些TSR, ISR或设备驱动程序要使用EMS, 必须在操作前保存映射关系并在完成后恢复。以下给出具体函数:char save_mapping_context(unsigned handle) char tmp=0 xff; if (EMS) asm mov ah,0 x47 mov dx,handle int 0 x67 mov tmp,ah return(tmp); 10

60、. 恢复指定句柄映射关系使用中断67H功能48H(AH)可以恢复指定句柄映射关系,DX给入句柄,AH返回00H表示成功、否则返回错误代码。一些TSR, ISR或设备驱动程序要使用EMS, 必须在操作前保存映射关系并在完成后恢复。一些TSR, ISR或设备驱动程序要使用EMS, 必须在操作前保存映射关系并在完成后恢复。以下给出具体函数:char restore_mapping_context(unsigned handle) char tmp=0 xff; if (EMS) asm mov ah,0 x48 mov dx,handle int 0 x67 mov tmp,ah return(tm

温馨提示

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

评论

0/150

提交评论