基于单片机的机械手系统设计.docx

上传人:b****2 文档编号:2256630 上传时间:2023-05-03 格式:DOCX 页数:23 大小:363.24KB
下载 相关 举报
基于单片机的机械手系统设计.docx_第1页
第1页 / 共23页
基于单片机的机械手系统设计.docx_第2页
第2页 / 共23页
基于单片机的机械手系统设计.docx_第3页
第3页 / 共23页
基于单片机的机械手系统设计.docx_第4页
第4页 / 共23页
基于单片机的机械手系统设计.docx_第5页
第5页 / 共23页
基于单片机的机械手系统设计.docx_第6页
第6页 / 共23页
基于单片机的机械手系统设计.docx_第7页
第7页 / 共23页
基于单片机的机械手系统设计.docx_第8页
第8页 / 共23页
基于单片机的机械手系统设计.docx_第9页
第9页 / 共23页
基于单片机的机械手系统设计.docx_第10页
第10页 / 共23页
基于单片机的机械手系统设计.docx_第11页
第11页 / 共23页
基于单片机的机械手系统设计.docx_第12页
第12页 / 共23页
基于单片机的机械手系统设计.docx_第13页
第13页 / 共23页
基于单片机的机械手系统设计.docx_第14页
第14页 / 共23页
基于单片机的机械手系统设计.docx_第15页
第15页 / 共23页
基于单片机的机械手系统设计.docx_第16页
第16页 / 共23页
基于单片机的机械手系统设计.docx_第17页
第17页 / 共23页
基于单片机的机械手系统设计.docx_第18页
第18页 / 共23页
基于单片机的机械手系统设计.docx_第19页
第19页 / 共23页
基于单片机的机械手系统设计.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的机械手系统设计.docx

《基于单片机的机械手系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的机械手系统设计.docx(23页珍藏版)》请在冰点文库上搜索。

基于单片机的机械手系统设计.docx

基于单片机的机械手系统设计

第1章绪论

1.1机械手系统概述

机械工业是国民的装备部,是为国民经济提供装备和为人民生活提供耐用消费品的产业。

不论是传统产业,还是新兴产业,都离不开各种各样的机械装备,机械工业所提供装备的性能、质量和成本,对国民经济各部门技术进步和经济效益有很大的和直接的影响。

机械工业的规模和技术水平是衡量国家经济实力和科学技术水平的重要标志。

因此,世界各国都把发展机械工业作为发展本国经济的战略重点之一。

工业机械手是近几十年发展起来的一种高科技自动化生产设备。

工业机械手的是工业机器人的一个重要分支。

它的特点是可通过编程来完成各种预期的作业任务,在构造和性能上兼有人和机器各自的优点,尤其体现了人的智能和适应性。

机械手作业的准确性和各种环境中完成作业的能力,在国民经济各领域有着广阔的发展前景。

机械手是在机械化,自动化生产过程中发展起来的一种新型装置。

在现代生产过程中,机械手被广泛的运用于自动生产线中,机械人的研制和生产已成为高技术邻域内,迅速发展起来的一门新兴的技术,它更加促进了机械手的发展,使得机械手能更好地实现与机械化和自动化的有机结合。

机械手虽然目前还不如人手那样灵活,但它具有能不断重复工作和劳动,不知疲劳,不怕危险,抓举重物的力量比人手力大的特点,因此,机械手已受到许多部门的重视,并越来越广泛地得到了应用。

机械手技术涉及到力学、机械学、电气液压技术、自动控制技术、传感器技术和计算机技术等科学领域,是一门跨学科综合技术。

机械手是一种能自动化定位控制并可重新编程序以变动的多功能机器,它有多个自由度,可用来搬运物体以完成在各个不同环境中工作。

1.2机械手的发展和现状

机械手首先是从美国开始研制的。

1958年美国联合控制公司研制出第一台机械手。

它的结构是:

机体上安装一个回转长臂,顶部装有电磁块的工件抓放机构,控制系统是示教形的。

1962年,美国联合控制公司在上述方案的基础上又试制成一台数控示教再现型机械手。

商名为Unimate(即万能自动)。

运动系统仿照坦克炮塔,臂可以回转、俯仰、伸缩、用液压驱动;控制系统用磁鼓作为存储装置。

不少球坐标通用机械手就是在这个基础上发展起来的。

同年该公司和普鲁曼公司合并成立万能自动公司,专门生产工业机械手。

1962年美国机械制造公司也实验成功一种叫Vewrsatran机械手。

该机械手的中央立柱可以回转、升降采用液压驱动控制系统也是示教再现型。

虽然这两种机械手出现在六十年代初,但都是国外工业机械手发展的基础。

1978年美国Unimate公司和斯坦福大学,麻省理工学院联合研制一种Unimate-Vicarm型工业机械手,装有小型电子计算机进行控制,用于装配作业,定位误差小于±1毫米。

联邦德国机械制造业是从1970年开始应用机械手,主要用于起重运输、焊接和设备的上下料等作业。

日本是工业机械手发展最快、应用最多的国家。

自1969年从美国引进两种机械手后大力从事机械手的研究。

目前,随着单片机和PLC等控制器的发展,工业机械手在自动控制和定位精度上有了很大提高[10]。

1.3本课题所要做的主要内容及意义

目前,大多数生产线上的搬运,装箱工作仍由人工进行。

为了提高劳动生产率,降低劳动强度,需研制出一种简单、实用的机械手来取代这种紧张且繁重枯燥的体力劳动,特别是在某些粉尘、噪声、污染严重的场合尤为迫切。

虽然至今国内外已为自动生产线研制出了各种工业机器人,但大多数结构复杂(以求具备多种功能),造价较高,而且工人也不容易掌握,难于推广。

根据某工厂生产过程的要求,采用以51单片机为核心控制装箱机械手,代替人工装箱。

机械手由电机驱动,采用最佳升降频的控制方法,为了保证机械手的可靠性和安全性对其控制系统建立相应的故障白诊断系统以寻找和排除控制系统在运行过程中出现的故障。

其操作是将工件从左工作台搬到右工作台,示意图如图1—1所示。

机械手每个工作臂都有上下限位和左右限位开关,而其夹持装置不带限位开关。

一旦控制夹持开始,定时器开始记时,定时结束,夹持动作随即完成。

机械手到达B后,将工件松开的时间也是由定时器控制的,定时结束时,表示工件已松开。

机械手的动作过程如下:

搬取工件时,按下启动开关,机械手先由原点下降,碰到下限位开关后,停止下降;同时接通定时器,机械手开始夹紧工件,定时结束,夹紧完成。

机械手上升,上升到顶时,碰到上限位开关,上升停止。

机械手右移,至碰到右限位开关时,右移停止。

机械手下降,下降到底时,碰到下限位开关,下降停止。

同时接通定时器,机械手放松工件,定时结束,工件已松开。

机械手上升,上升到顶,碰到上限位开关时,上升停止。

机械手左移,左移到原点,碰到左限位开关时,左移停止。

于是机械手动作的一个周期结束。

搬运工件的机械手动作过程示意图,如图1—2所示[4]。

图1—1工作台示意图

 

图1—2机械手动作过程示意图

第2章单片机机械手系统的总体结构

2.1控制系统的总体结构

根据机械手控制系统可知,其总体结构包括:

单片机用户系统、驱动电路、供电电源、执行元件和反馈元件(接近开关)等。

图2—1控制系统的总体结构

2.2单片机用户系统

2.2.1AT89C51的基本结构

单片机的基本结构组成中包含中央处理器CPU、程序存储器、数据存储器、输入/输出接口部件、还有地址总线、数据总线和控制总线等。

2.2.2AT89C51的基本特性及引脚定义

1、AT89C51单片机的主要性能参数:

*与MCS-51产品指令和引脚完全兼容

*8K字节可重擦写Flash闪速存储器

*1000次擦写周期

*全静态操作:

0Hz——24MHz

*三级加密程序存储器

*256×8字节内部RAM

*32个可编程I/O口线

*3个16位定时/计数器

*8个中断源

2、AT89C51的引脚功能说明:

(引脚图如图2—2所示)

Ⅰ、主电源VCC和GND

VCC:

电源端,工作电源和编程校验(+5V)。

GND;接地端。

Ⅱ、时钟振荡电路引脚XTAL1和XTAL2

XTAL1:

振荡器反相放大器的及内部时钟发生器的输入端。

XTAL2:

振荡器反相放大器的输出端。

在使用内部振荡电路时,这两个端子用来外接石英晶体,振荡频率为晶振频率,振荡信号送至内部时钟电路产生时钟脉冲信号。

若采用外部振荡电路,则XTAL2用于输入外部振荡脉冲,该信号直接送至内部时钟电路,而XTAL1必须接地。

Ⅲ、控制信号引脚RST/VPP、ALE/

/VPP

RST/VPP:

RST是复位信号输入端,当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

第二功能VPP为内部RAM的备用电源输入端。

主电源VCC一旦发生断电(称掉电或失电),降到一定低电压值时,可通过VPP为单片机内部RAM提供电源,以保护片内RAM中的信息不丢失,使上电后能继续正常运行。

ALE/PROG:

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。

该位置复位后,只有一条MOVX和MOVC指令才能将ALE激活。

此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

PSEN:

程序存储允许输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令或数据时,每个机器周期两次PSEN有效,即输出两个脉冲。

在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP:

外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。

需要注意的是:

如果加密位LB1被编程,复位时内部会锁存EA端状态。

如EA端为高电平,CPU则执行内部程序存储器中的指令。

Flash存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VPP[1]。

Ⅴ、4个8位I/O端口P0、P1、P2、P3

P0口:

P0口是一组8为漏极开路型双向I/0口,也即地址/数据总线复用口。

作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问器件激活内部上拉电阻。

在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口:

P1是一个带内部上拉电阻的8位双向I/O口,P1口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(

)。

P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。

Flash编程和程序校验期间,P1接收低8位地址。

P2口:

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(

)。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器(如执行MOVX@R1指令)时,P2口输出P2锁存器的内容。

Flash编程和程序校验期间,P2亦接收高位地址和一些控制信号。

P3口:

P3口是一组带有内部上拉电阻的8位双向I/O口,P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口P3写“1”时,它们被上拉电阻拉高并可作为输入端口。

此时,被外部拉低的P3口将用上拉电阻输出电流(

)。

P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表2-1所示。

此外,P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号[2][3]。

 

表2-1P3口的第二功能

端口引脚

第二功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

INT0(外中断0)

P3.3

INT1(外中断1)

P3.4

T0(定时/计数器0)

P3.5

T1(定时/计数器1)

P3.6

WR(外部数据存储器写选通)

P3.7

RD(外部数据存储器读选通)

 

图2—2AT89C51的引脚图

 

2.3驱动电路

步进电动机和步进电动机驱动器构成步进电机驱动系统。

步进电动机驱动系统的性能,不但取决于步进电动机自身的性能,也取决于步进电动机驱动器的优劣。

对步进电动机驱动器的研究几乎是与步进电动机的研究同步进行的。

步进电动机不能直接接到直流或交流电源上工作,必须使用专用的驱动电源(步进电动机驱动器)。

控制器(脉冲信号发生器)可以通过控制脉冲的个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

因为步进电机是靠单片子产生脉冲来控制转矩的,单片机本身驱动电流较小,驱动不了电机绕组,要用驱动电路产生较大电流,直接驱动会烧坏单片机。

在此只对驱动电路做简单说明[9]。

2.4供电电源

单片机、机械手、各个芯片要工作,就必须为其提供电源,他们的电源电压都是5V。

因此就需要将220V的交流电降压整流为5V的直流电源。

其电路如图2—3所示。

这就是一个简单的整流电路,220V的交流电经过变压器(220/9V)后输出9V的交流电,再经过单相桥式整流、电容滤波,最后由7805稳压输出5V的电压供给整个电路板使用。

此设计中用到了单片机,而单片机的抗干扰能力很差,所以电源板与单片机的电路板是分开的。

电源板由按键开关控制输出,由发光二极管显示工作状态,C4、C5的使用是为了提高抗干扰能力[6]。

图2—3单片机的电源

 

第3章机械手系统的总体设计

3.1总体设计方案

机械手的重要指标有快速性、定位精度和平稳性等。

而运用MCS-51单片机时,有价格低廉、体积小、结构简单、抗干扰能力强和可靠性高等优点。

因此煤饼的装箱采用了单片机控制机械手和走箱工作台相配合的方式,机械手工作轨迹固定,而工作台可做定向移动。

为提高装箱速度,在机械手卸完煤饼返回的同时,使工作台完成相应的位移量。

机械手从A点抓去工件右行至B点,放下工件,然后返回到A点抓取下个工件,依次反复。

步进电机作为机械手左右运行的执行机构。

图3—1总体设计方案

3.2硬件电路设计

3.2.1步进电机的结构原理

步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度。

即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。

它具有高精度的定位、位置及速度控制、具定位保持力、动作灵敏、中低速时具备高转矩、高信赖性、小型、高功率等特征,使其具有广泛的应用。

步进电动机是一种控制用的特种电机,作为执行元件,步进电机是机电控制中一种关键的执行机构,它的驱动电路根据控制信号工作,控制信号由单片机产生。

当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,控制换相顺序,即通电控制脉冲必须严格按照一定顺序分别控制各相的通断。

通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的。

步进电动机不能直接接到直流或交流电源上工作,必须使用专用的驱动电源(步进电动机驱动器)。

控制器(脉冲信号发生器)可以通过控制脉冲的个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的控制步进电机的转向,即给定工作方式正序换相通电,步进电机正转,若按反序通电换相,则电机就反转。

控制步进电机的速度,即给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步,两个脉冲的间隔越短,步进电机就转得越快。

同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

选择步进电机的转速为1500r/min[8]。

3.2.2机械手的组成

机械手主要由手部、运动机构和控制系统三大部分组成。

手部是用来抓持工件(或工具)的部件,根据被抓持物件的形状、尺寸、重量、材料和作业要求而有多种结构形式,如夹持型、托持型和吸附型等。

运动机构,使手部完成各种转动(摆动)、移动或复合运动来实现规定的动作,改变被抓持物件的位置和姿势。

运动机构的升降、伸缩、旋转等独立运动方式,称为机械手的自由度。

为了抓取空间中任意位置和方位的物体,需有6个自由度。

自由度是机械手设计的关键参数。

自由度越多,机械手的灵活性越大,通用性越广,其结构也越复杂。

一般专用机械手有2~3个自由度。

现使用为机械手模型,模型装置主要由底盘、主机模块、运动机械、电气控制及一些电缆电线等部分组成。

机械手模型装置的机械结构采用滚珠丝杆、滑杆、气缸等机械器件组成;电气方面有步进电机、交流伺服电机、驱动模块、开关电源、电磁阀等电子器件组成[9]。

3.2.3机械手的结构原理

根据图3—1可得:

①在机械手臂的前端安装由交流伺服电机驱动可上下左右移动的电控机械抓手;

  ②由两台步进电机驱动两组丝杠组件分别构成该系统运动方向的X轴和Y轴,机械手臂沿X轴做伸缩运动,沿Y轴做升降运动(含x、y轴限位开关);

  ③在Y轴的底部安装可回旋≥=270°的转盘机构,由转盘带动机械手臂做水平方向上的旋转动作(其电气部分由直流电动机、限位开关等组成)[10]。

第4章系统的程序设计

4.1主程序软件设计

硬件电路完成以后,必须为单片机编写程序才能使整个电路完成预计的功能,单片机输出脉冲信号用以驱动电机正反转运行和高速低速的相互转换。

因此单片机程序需要分为主程序和子程序两大部分组成。

主程序是核心部分,安排调度各部分的运行。

首先是初始化,然后再读入外部的输入,接着是由定时器中断调度三个任务,然后是运行逻辑功能模块和输出结果。

主程序流程图如图4—1所示[5]。

 

图4—1主程序流程图

4.2子程序软件设计

子程序是中断响应程序,它的调用是系统执行过程中采用中断事件触发产生.中断是周期性发生的.子程序是整个系统的核心代码,这段代码不光涉及到显示,还涉及到系统计时,这段代码的优劣关系到整个系统的可靠性,后面还将详细讨论.为初步减小系统误差,置定初值一定要在程序开始时就设置。

机械手先由原点下降,碰到下限位开关后,停止下降;同时接通定时器,机械手开始夹紧工作,定时结束,夹紧完成。

机械手上升,上升到顶时,碰到上限位开关,上升停止。

机械手右移,至碰到右限位开关时,右移停止。

机械手下降,下降到底时,碰到下限位开关,下降停止。

同时接通定时器,机械手放松工件,定时结束,工件已松开。

机械手上升,上升到顶,碰到上限位开关时,上升停止。

机械手左移,左移到原点,碰到左限位开关时,左移停止。

机械手工作流程图如图4—2所示[5]。

 

 

图4—2机械手的工作流程图

 

4.3系统整体电路图

由以上的总体思路,可以得出机械手的总体电路图如图4—3所示。

 

图4—3机械手的总体电路仿真图

 

4.4系统仿真电路图

机械手的几个不同时间的仿真电路图分别如图4—4,图4—5所示。

[7]

图4—4机械手下降

图4—5机械手上升

第5章总结

此次我们做的毕业设计是单片机应用于机械手,通过3个月的努力,设计终于顺利完成。

这次设计给了我一个很好的机会,使我了解了设计工作的基本流程的方法以及理念。

在此次的毕业设计中,我遇到了许多以前从未遇到过的问题,但是通过指导教师的指导和我的努力,这些问题都得到了很好地解决。

虽然我设计的只是机械手的简单动作,但是需要完成机械手的行走、抓取和翻转等各种功能,对应分别要有行走机构,抓取机构,提升机构,翻转机构来实现。

通过这些机构的设计,使理论知识与实际相结合,巩固和深化了所学过的专业理论知识。

系统的功能完全符合设计任务的要求,经过大量的测试数据显示,系统的可靠性已经完全达到了实际机械手的设计要求.同时系统具有很强的扩展性,即扩充串口的功能可以得到很好的计算机控制系统.

毕业设计使对大学四年所学知识的一次综合运用的考察,又是对所学知识的融会贯通,做到了学以致用。

通过此次设计将课本上的知识运用到实践中,使我了解到了理论和实践的差异以及实际生产中所需要的精神和能力,为今后走向工作岗位打下了一个好的基础。

由于本人自身经验和时间有限,本设计还存在不足之处,今后还需继续努力,恳请各位老师和同学提出宝贵意见。

 

附录

程序如下:

//包含所需头文件

#include

#defineucharunsignedchar

/*------宏定义------*/

sbitmotor_up=P0^0;//电机

sbitmotor_down=P0^1;

sbitmotor_left=P0^2;

sbitmotor_right=P0^3;

sbitmotor_grasp=P0^4;

sbitmotor_loose=P0^5;

sbitjourney_up=P1^0;//行程开关

sbitjourney_down=P1^1;

sbitjourney_left=P1^2;

sbitjourney_right=P1^3;

sbitflag_start=P3^2;//启动按钮

/***************中断****************************/

voidt0(void)interrupt0using0//按键按下触发中断服务程序

{

//flag_start=1;

}

/***************延时函数S***********************/

voiddelay(unsignedcharm)//延时m秒子程序

{

unsignedchari,j,k;//定义3个无符号字符型数据。

m=m*100;

for(i=m;i>0;i--)//作循环延时

for(j=20;j>0;j--)

for(k=248;k>0;k--);

}

/*******************循迹函数*********************/

voidmain()

{

motor_down=0;

motor_up=0;

motor_grasp=0;

motor_right=0;

motor_left=0;

motor_loose=0;

//////////中断初始化/////////

IT0=1;//下降沿触发

EX0=1;

EA=1;

if(flag_start==0)

{

while

(1)

{

motor_down=1;//机械手下降

while

(1)//下降死循环,等待碰触下面的限位开关

{

if(journey_down==1)//碰到下面的限位开关

{

motor_down=0;//停止下降

motor_grasp=1;//机械手抓取工件

delay(4);//延时可以根据实际情况调整

motor_up=1;//开始上升

motor_grasp=0;

while

(1)//上升死循环,等待碰触上面的限位开关

{

if(journey_up==1)//碰到上面的限位开关

{

motor_up=0;//停止上升

motor_right=1;//向右移动

while

(1)//右移死循环,等待碰触右面的限位开关

{

if(journey_right==1)//碰到右面的限位开关

{

motor_right=0;//停止右移

motor_down=1;//开始下降

while

(1)//下降死循环,等待碰触下面的限位开关

{

if(journey_down==1)//碰到下面的限位开关

{

motor_down=0;//停止下降

motor_loose=1;//放下物体

delay

(2);//可调

motor_up=1;//开始上升

motor_loose=0;

while

(1)//上升等待碰触下面的限位开关

{

if(journey_up==1)//碰到上限位开关

{

motor_up=0;//停止上移

motor_left=1;//向左移动

while

(1)//向左移动等待碰到左限位

{

if(journey_left==1)//等待碰到左限位

{

motor_left=0;//跳出循环,进入下一次搬运

break;

}

}

break;

}

}

break;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2