基于嵌入式芯片组的16路PLC的开发.doc_第1页
基于嵌入式芯片组的16路PLC的开发.doc_第2页
基于嵌入式芯片组的16路PLC的开发.doc_第3页
基于嵌入式芯片组的16路PLC的开发.doc_第4页
基于嵌入式芯片组的16路PLC的开发.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

基于嵌入式芯片组的16路PLC的开发华中科技大学 孙兆沛内 容 摘 要这里介绍了一种新型软PLC嵌入式PLC的开发过程。它基于EASY CORE 嵌入式芯片组,通过软件来实现所有传统硬件PLC的控制功能,嵌入式PLC的硬件体系结构不再封闭,用户可以自己选择合适的硬件组成满足要求的PLC。本文介绍的是最基本的16路数字量输入输出通用PLC的开发。关键词:嵌入式PLC芯片组 实时内核 用户驱动接口ABSTRACTHere introduces a new development of SoftPLCDevelopment of Embedded PLC. It is based on the Easy Core embedded chipset,which achieves all the traditional hardware PLC control functions by software.The hardware system structure of embedded PLC is not closed.Users can choose the appropriate hardware to constitute the PLC that meet the requirements .This article describes the development of the most basic 16-channel digital input and output common PLC.KEY WORDS:Embedded PLC chipset Real-time kernel User-driven interfaces1、 前言如今工业控制产品已发展到一个追求个性化、差异化的阶段。传统的PLC产品已经无法满足更加细分化的市场需求,究其本质原因,不是梯形图语言,而是PLC的硬件不够灵活。为了满足这种需求,嵌入式PLC产品应运而生。它以PLC梯形图语言为内核,强化过程控制的运算能力,提供开放式扩展结构,增加网络互连功能。它融合嵌入板的特殊要求,发扬PLC梯形图语言优势,为特定对象控制问题的解决提供了一个通用开发平台。2、 基本原理嵌入式PLC是将PLC系统软件构建于控制器内,根据用户控制需要定制硬件,以PLC的应用方式解决对象控制问题的PLC。它由两部分组成:嵌入式PLC内核和嵌入式PLC芯片组。2.1 嵌入式PLC系统软件嵌入式PLC系统软件以PLC梯形图语言为内核,强化过程控制的运算能力,提供开放式扩展结构,增加网络互连功能。它融合嵌入板的特殊要求,发扬PLC梯形图语言优势,为特定对象控制问题的解决提供了一个通用开发平台。该系统软件具有以下特点:1.以梯形图语言为内核,添加了中断管理系统,能实现PLC无法实现的硬实时操作;2.强化运算能力,增加了CANBUS函数库、浮点数库、专家自整定PID、嵌入式WEB等,丰富了PLC的功能;3.提供开放式扩展结构,支持第三方开发扩展单元的接线;4.增加了网络互连功能,在远程端加载专用浏览器后,即可实现远程监控。系统软件包括三个部分。2.1.1 嵌入式PLC内核它完成实时任务调度、梯形图语言解释、执行、通讯等基本功能,并提供二次开发驱动接口;2.1.2 二次开发驱动程序通过系统软件提供的外挂任务,使用内核开发各种面向具体对象个性化、差异化的驱动程序;用户驱动接口是为满足用户DI/DO、AI/AO处理及用户专用功能(如高速对象)设计而准备的用户程序嵌入接口,包括七个基本嵌入接口及多个中断入口。七个基本嵌入接口如下:1、 用户I/O口配置程序:根据设计的输入输出功能配置相应的端口,用户不可配置的I/O口资源为P4.4、P4.5、P4.6、P4.7、P5、P6、P7及UART0。内核程序中已对串口1和CAN口(有CAN时)配置,内核中串口1配置为OC输出,当需要SPI功能或配置串口1为电平输出方式时,必须对串口1重新配置,此程序在内核重新上电后调用一次。2、 用户上电初始化程序:用户嵌入程序中用到的输入输出变量,中间变量,指针变量,位变量等以及IO、AD、DA,定时、计数,SPI,SMBUS,高速计数,高速输出,外部中断等外设功能在重新上电后必需进行初始化处理,此程序在内核重新上电后调用一次。3、 用户运行初始化程序:内核重新上电后第一次运行梯型图或内核从下载梯型图状态进入梯型图运行状态时调用此程序一次,此程序必须使用户嵌入程序中用到的变量及CPU(C8051F040/020/120)外设处于所需要的状态。4、 用户设置初始化程序:内核重新上电后进入梯型图下载状态或内核从梯型图运型状态进入梯型图下载状态时调用此程序一次,此程序必须使用户嵌入程序中用到的CPU(C8051F040/020/120)外设处于所需要的状态。5、 用户每步执行程序:梯形图每执行一步,即调用此程序一次。需要快速执行的事件可在此程序或用户中断程序中完成,内核周期性地调用此程序。6、 用户0.5mS定时运行程序:需要定时采样的流程可放在此程序中完成,但该段程序代码执行时间必须小于50 US。数据处理程序不宜放在此段程序中执行。7、 用户演算周期扫描程序:所有梯形图执行完后,即调用该程序,调用周期为梯型图演算周期,一般的数据处理、开关量输入/输出的刷新及代码执行时间较长的程序均放在此程序中执行。 中断入口:EASYV1.00中断包括系统中断及用户中断。其中系统中断是用户不可干预的,用户中断则是用户通过中断完成与系统实时上异步的各类事件处理。USER-CONFIG、USER-START、USER-SET-INIT、USER-RUN-INIT为四个非实时部分嵌入的程序,而USER-STEP、USER-SCAN、USER-TMS则直接影响系统的实时性,用户另行嵌入的中断在异步状态下占用CPU时间,其调度上建议如下:USER_STEP:处理100us级软实时任务USER_SCAN:处理I/O、AI/AOUSER_TMS:处理硬实时任务,程序占用时间应小于40us用户中断:每1ms小于100us。当大于500us时,有可能产生系统崩溃2.1.3 终端应用程序指面向工艺流程控制的梯形图语言程序。2.2 嵌入式PLC芯片组EASY CORE 1.00 是一个加载了嵌入式PLC系统软件的核心芯片组,作为一款加载了系统软件的硬件平台,可以用来设计通用和专用PLC。2.2.1芯片组基本性能:供电:+5V 200mA,RAM掉电保护5年。CPU: C8051F040。嵌入扩展能力32 I/O:可复用成SPI、I2C接口及外中断、外计数、AD等。4 AD:12位精度,100 KPS。2 DA:12位精度,100 KPS。通信接口CANBUS:系统软件管理,使用工具软件CANSet构建CANBUS总线网络。UART0:系统软件管理,用于梯形图编程、监控,支持人机界面及用户驱动程序下载。UART1:系统软件管理,用于下载CANBUS网络参数、构建RS485网络及支持第三方设备互连。2.2.2芯片组原理框图:3、 应用开发基于嵌入式芯片组的PLC开发的主体思路是:对所要开发的PLC进行需求分析;根据需求设计搭载外部硬件电路;根据要实现的PLC的功能及设计好的硬件,在内核提供的七个嵌入程序接口及用户中断程序中写入驱动程序;设计测试梯形图,写入PLC并运行,进行PLC功能实现的调试。3.1 需求分析这里要设计的是最基本的16路数字量通用PLC,要求:8个开关量输入通道,其中有两路可以用作高速计数通道。8个开关量输出通道。16个LED灯显示输入输出状态,两个LED灯显示PLC运行状态。高速单相计数功能3.2 硬件设计这里借用了科威公司出产的LP-08M08R-Z嵌入式PLC的硬件电路。根据需求分析,硬件部分主要是要用到输入输出接口电路和LED灯显示电路两部分。现分析这部分电路。3.2.1 开关量输入接口电路两路高速输入六路普通输入两路高速输入:采用6N173光耦合器并添加相应的外围电路。X0为信号输入引脚,在P0.6X引脚输出3.3V(高电平),0V(低电平)。六路普通输入:采用TLP421普通数字型光耦合器,适用于一般信号隔离场合的中低速普通输入。X2为信号输入引脚,AX2输出。3.2.2 开关量输出驱动电路六路达林顿反向驱动器三极管驱动电路使用ULN2003驱动芯片(包含六路达林顿反向驱动器)或三极管将单片机的输出电平3.3V驱动为12V以适应外围电路(继电器),并起到隔离的作用。3.2.3 LED灯显示电路RUN灯,ERR灯,低电平使能。八路输入LED灯和八路输出LED灯复用八路控制通道,控制端采用三极管开关。另有两路三极管开关作为输入LED灯和输出LED灯的使能信号,来实现输入输出灯的交替控制。采用这样的方式可以有效缩减IO中间信号处理电路的规模。3.2.4 中间信号处理电路中间信号处理电路将外部的输入输出接口和LED灯显示电路连接到芯片组IO口上,并通过逻辑电路实现对芯片组IO口的复用,最大程度节省芯片组IO口资源。如电路图所示,主要使用了一个双向缓冲器74HC245,来控制P2口总的输入输出复用;一个单向缓冲器74HC244,来控制六路普通开关量输入通道的输入(另两路为高速计数通道,另接专用IO口P0.6,P0.7);两个八路锁存器,分别控制八路输出通道的输出和LED灯显示的驱动。下面来具体分析工作过程。中间信号处理电路输入信号处理过程信号从光耦输入端输入到单片机内部之前,先送入74HC244缓冲器,起信号缓冲隔离的作用。但是由于IO口的复用,输入之前要先拉低双向缓冲器74HC245的DIR端(P3.6),使它工作在输入方向信号传递,然后拉低74HC244的低有效使能端(P3.5),开通输入通路。之后就可以进行输入信号的读取了。完成之后置高使能位,关闭缓冲器通路,单片机P2口就可以进行其他输入输出工作了。(注意:输入通路开通前要保证另两个锁存器处在锁存状态,否则会引起输出状态和LED灯的变化,锁存器的锁存在输出过程时就要完成。)高速计数通道X0,X1单独连接单片机P0.6,P0.7口,可以直接读取。输出信号处理过程信号从单片机内部输出之前,首先要关闭输入通道的使能,即拉高74HC244使能端(P3.5),然后拉高双向缓冲器74HC245的DIR端(P3.6),使它工作在信号输出传递方向。向P2端口写入数据后置高74HC573的锁存使能端(即拉低P1.6),开通通路,信号就输入到锁存器中。等待三个机器周期后,拉低锁存使能端(置高P1.6),将本次的输出信号锁存。这时,单片机端口P2就重新解放出来,可以进行其他输入输出通道工作了。通过这样的输入缓冲,输出锁存方式,可以有效将各输入输出信号隔离起来,分别导通,达到对单片机P2口的复用,节省了单片机的IO负担,优化了电路和PCB设计。3.3 软件设计PLC指令的解释、与上位机的通信等核心功能已由EASYCORE内核完成,用户程序只要根据接口规范,结合用户设计要求,编制少量的接口驱动程序。3.3.1 驱动程序的功能和规划驱动程序要完成三个功能:PLC开关量输入输出口的驱动输入驱动程序:对输入口进行八次采样,并进行比较是否相同,进而判断是否作为一次有效的输入值。每个扫描周期将输入值写入PLC资源区一次。输出驱动程序:每个扫描周期从PLC资源区读出一次输出量,并写入输出口。LED指示灯的驱动从PLC资源区读出输入输出值,并周期性写到LED灯驱动端口来保持LED灯的刷新,输入灯输出灯交替赋值刷新。高速单向计数功能的驱动利用C8051F020内部的PCA的捕捉模块,捕捉高速脉冲的上升沿,在PCA中断中进行加一计数操作,并写入数据寄存器中。3.3.2 驱动程序的实现和嵌入驱动程序的嵌入接口包括:INIT_CONFIG:用户I/O配置程序入口INIT_START:用户上电初始化程序入口INIT_RUN:用户运行初始化程序入口INIT_SET:用户设置初始化程序入口STEP:用户软中断程序入口(响应时间100us) TMS:用户2.5ms定时运行程序入口SCAN:用户演算周期扫描程序入口以及要用到的PCA用户中断程序入口端口初始化:这里将单片机的所有控制端口P1.6 , P1.7 , P3.0 , P3.3 , P3.4 , P3.5 , P3.6和专用输出端口P4.0 , P4.1配置为推挽输出。将输入输出复用的P2口初始化为数字输入口(后面将根据P2的工作通道重新配置)。配置交叉开关,将高速计数输入端口P0.6 , P0.7分配给PCA0模块的CEX0,CEX1。INIT_CONFIG:ORL P1MDOUT,#0C0H ;初始化为推挽输出ORL P3MDOUT,#79H ORL P74OUT,#03H MOV P2MDOUT,#00H ;初始化P2口为数字输入MOV P2,#0FFHMOV P0MDOUT,#00H;初始化交叉开关,配置P0.6 P0.7为高速计数MOV P0,#0FFHMOV XBR0,#15HORL XBR2,#40HRET复位初始化:PLC上电时执行一次,由于PLC通常情况下不断电,而是在运行和编程状态间转换,所以初始化的部分都写在运行初始化和编程初始化程序接口中。INIT_START:RET运行初始化:梯形图第一次运行时执行一次,这里将输出端口和LED驱动电路的使能端开通,并初始化PCA0的捕捉模块,开通PCA中断。然后调用一次输入输出的刷新作为梯形图第一次扫描的数据。INIT_RUN:CLR P1.7 ;输出端口和LED使能MOV PCA0CN,00H ;PCA0捕捉模块初始化MOV PCA0CPM0,21H ;开中断,捕捉上升沿MOV PCA0CPM1,21HORL EIE1,#08HLCALLSCAN ;进行一次输入输出刷新RET编程初始化:这里把所有运行过程中要用到的变量都初始化:输入采样次数8次,输入输出灯刷新标志,高速计数的数据寄存器,PLC资源区的X0X7,Y0Y7,输入输出LED灯的值。并且关闭PCA中断,禁止高速计数运行。INIT_SET:MOVINPUT_CNT,#08H;输入采样次数初始化SETB FLAG0;输入输出灯刷新标志位MOV A,#00HMOV DPTR,#RAM_PD;高速计数器初始化MOVX DPTR,AINC DPTRMOVX DPTR,AINC DPTRMOVX DPTR,AINC DPTRMOVX DPTR,AMOV DPTR,#RAM_PD+4MOVX DPTR,AINC DPTRMOVX DPTR,AINC DPTRMOVX DPTR,AINC DPTRMOVX DPTR,AMOVDPTR,#RAM_PX+1;输入输出初始化MOVXDPTR,AMOVDPTR,#RAM_PY+1MOVXDPTR,AMOV INPUT_LED,#0FFH;LED灯赋值初始化MOV OUTPUT_LED,#0FFHANL EIE1,#0F7H;PCA0捕捉模块关中断 MOV PCA0CN,00HRET指令周期扫描:梯形图每执行一步,调用此程序一次。需要快速执行的事件可在此程序或完成。不需要。STEP:RET2.5ms周期扫描:程序每隔2.5ms执行一次,不断重复执行。这里可以完成输入的采样工作和LED灯的刷新工作。LED灯刷新:由于输入灯和输出灯共用八路P2口作为驱动,所以不能同时刷新,而采用交替刷新的方式,设置标志位FLAG0来判断是输入灯还是输出灯的刷新。具体刷新的实现:设P2口为推挽输出,写P3.5 P3.6口来开通输出通路,判断FLAG0进入相应赋值程序,将存好的LED值INPUT_LED或OUTPUT_LED读出并写入P2口,写P3.0口开锁存器通路,等待三个指令周期后锁存。最后取反FLAG0供下次判断使用。灯RUN ERR直接赋值刷新。输入采样:设置一个计数字INPUT_CNT,记录采样的次数,每次的采样值存入连续地址,地址通过计数字INPUT_CNT和首地址计算得来,采样八次之后就不再采样,这意味着每个扫描周期只进行这一个八次采样,这样既可以有效滤波,又可以减轻内核负担。每次的采样都要先配置P2口为数字输入模式,写P3.5 P3.6口来开通输入通路,然后读入P2口的值,并把高速通道的P0.6 P0.7的值一并读入存储到相应地址。这里只进行采样工作,而八个采样结果将在扫描周期函数中进行运算和判断,进而产生一次有效的输入值。TMS:MOVC,KEY_SET;灯RUN ERR的刷新CPL C MOVACC.1,CMOVC,PLC_PRO_ERRMOVACC.0,CMOV P4,AMOV P2MDOUT,#0FFH;P2口设置为推挽输出ORL P3,#60H;SETB P3.5SETB P3.6开输出通路JB FLAG0,USER_TMS_OUTLEDUSER_TMS_INLED: MOV P2,INPUT_LED ;输入灯刷新CLR P3.3;关输出灯使能 SETB P3.4 SETB P3.0NOPNOPNOPCLR P3.0 ;锁存器锁存SJMP USER_TMS_SUSER_TMS_OUTLED:MOV P2,OUTPUT_LED;输出灯刷新CLR P3.4 ;关输入灯使能SETB P3.3 SETB P3.0NOPNOPNOPCLR P3.0 ; 锁存器锁存USER_TMS_S:CPL FLAG0MOVA,INPUT_CNT ;输入口八次采样JZUSER_TMS_S1 ;若八次采样完成就跳转DECAMOVDPTR,#XINPUT ;计算采样值储存地址ADDA,DPLMOVDPL,AMOVA,DPHADDCA,#00HMOVDPH,AMOV P2MDOUT,#00H ;P2口设为数字输入MOV P2,#0FFHANL P3,#9FH ;开输入通路MOVA,P2 ;输入采样MOV C,P0.6MOV ACC.7,CMOV C,P0.7MOV ACC.6,CMOVX DPTR,ASETB P3.5;关闭输入缓冲器DECINPUT_CNT USER_TMS_S1:RET用户扫描周期执行程序:每个扫描周期结束时执行一次。传统PLC的集中输入采样集中输出刷新在这里进行实现。并进行LED灯的赋值。输出刷新:从PLC资源区RAM_PY+1读Y0Y7的值,经解码(这是由于硬件连接顺序和内部存储顺序不同)后赋给存储输出LED灯值的变量OUTPUT_LED。配置P2口为推挽输出,开输出通路,将值写入P2口,开锁存器通路,延迟一段时间,锁存。输入刷新:将本个扫描周期的八个采样值取出进行比较,不够八次采样或八次采样值不相同则不进行本次输入刷新,保持之前的输入值。如果合格,就作为一次有效的输入值,刷新到PLC资源区RAM_PX+1和赋值到输入灯值变量INPUT_LED(注意要结合硬件的连接顺序进行解码)。SCAN:MOVDPTR,#RAM_PY+1;Y00-Y07MOVXA,DPTR ;对输出LED的赋值 OUTPUT_LEDLCALLUSER_SCAN_CHGMOV OUTPUT_LED,AMOVXA,DPTR;刷新输出 MOVC,ACC.7;调整输出位SWAP ARLC ARLC ARLC ARLC ARLC ASWAP AMOV P2MDOUT,#0FFH;P2口设置为推挽输出ORL P3,#60H ;开输出通路MOV P2,ACLR P1.6NOPNOPNOPSETB P1.6LCALL USER_SCAN_I MOVDPTR,#RAM_PX+1;X00-X07MOVA,INPUT_PORTAMOVXDPTR,A;更新X00-X07LCALLUSER_SCAN_CHG;对输入LED的赋值 INPUT_LEDMOV INPUT_LED,ARETUSER_SCAN_CHG:MOVC,ACC.7;LED赋值调整MOVF0,C MOVC,ACC.6MOVACC.7,CMOVC,F0MOVACC.6,CMOVC,ACC.5MOVF0,CMOVC,ACC.4MOVACC.5,CMOVC,F0MOVACC.4,CMOVC,ACC.3MOVF0,CMOVC,ACC.2MOVACC.3,CMOVC,F0MOVACC.2,CMOVC,ACC.1MOVF0,CMOVC,ACC.0MOVACC.1,CMOVC,F0MOVACC.0,CCPL ARETUSER_SCAN_I:MOVA,INPUT_CNTJZUSER_SCAN_I1RET USER_SCAN_I1:LCALLUSER_SCAN_IS;八次采样结束,判断是否有效JBF0,USER_SCAN_I2;有效则更新输入数据寄存器MOVC,ACC.7;调整输入口MOVF0,CMOVC,ACC.0MOVACC.7,CMOVC,F0MOVACC.0,CMOVC,ACC.6MOVF0,CMOVC,ACC.1MOVACC.6,CMOVC,F0MOVACC.1,CMOVC,ACC.5MOVF0,CMOVC,ACC.2MOVACC.5,CMOVC,F0MOVACC.2,CMOVC,ACC.4MOVF0,CMOVC,ACC.3MOVACC.4,CMOVC,F0MOVACC.3,CMOVINPUT_PORTA,AUSER_SCAN_I2:MOVINPUT_CNT,#08H ;重新赋计数值RET;判断8个采样数据是否相同,相同则F0=0USER_SCAN_IS:MOVDPTR,#XINPUT MOVXA,DPTRMOVM0,AMOVR7,#7USER_SCAN_IS1:INCDPTRMOVXA,DPTRCJNEA,M0,USER_SCAN_IS2DJNZR7,USER_SCAN_IS1CLRF0RETUSER_SCAN_IS2:SETBF0RET用户中断程序:PCA模块的用户中断程序,用来实现高速单相计数功能。由于用户中断发生的随机性,所以进中断要进栈保护重要寄存器,以免内核出现未知错误。当PCA0捕捉模块在P0.6或P0.7口捕捉到上升沿时,进入中断。在中段程序中通过检查寄存器 PCA0CN的0,1位来判断是哪个口发生的中断请求,然后将该口对应的数据寄存器的值进行加一操作,注意双字的加1对字节的操作顺序。然后清中断标志位,恢复现场即可出中断等待下一次中断的发生。PCA :PUSH ACCPUSH PSWPUSH DPLPUSH DPH;现场保护USER_PCA_CPM0:JNB PCA0CN.0,USER_PCA_CPM1 ;判断是哪个口的中断响应 LCALL USER_PCA_ADD0USER_PCA_CPM1:JNB PCA0CN.1,USER_PCA_RET LCALL USER_PCA_ADD1USER_PCA_RET: MOV PCA0CN ,#00H ;清中断标志POP DPHPOP DPLPOP PSW ;现场恢复POP ACC RETIUSER_PCA_ADD0:CLR CMOV DPTR,#RAM_PD+1 ;数据寄存器D0D1双字地址MOVX A,DPTRADD A,#01HMOVX DPTR,AMOV DPTR,#RAM_PDMOVX A,DPTRADDC A,#00HMOVX DPTR,AMOV DPTR,#RAM_PD+3MOVX A,DPTRADDC A,#00HMOVX DPTR,AMOV DPTR,#RAM_PD+2MOVX A,DPTRADDC A,#00HMOVX DPTR,ARETUSER_PCA_ADD1:CLR CMOV DPTR,#RAM_PD+4+1 ;数据寄存器D2D3双字地址MOVX A,DPTRADD A,#01HMOVX DPTR,AMOV DPTR,#RAM_PD+4MOVX A,DPTRADDC A,#00HMOVX DPTR,AMOV DPTR,#RAM_PD+4+3MOVX A,DPTRADDC A,#00HMOVX DPTR,AMOV DPTR,#RAM_PD+4+2MOVX A,DPTRADDC A,#00HMOVX DPTR,ARET3.2.3 驱动程序的调试下载空梯形图进入PLC,调试PLC的输入采样驱动程序和输入指示灯驱动程序。首先发现RUN灯,ERR灯工作不正常,输入指示灯未工作,输入采样情况不得而知。错误原因是对RUN和ERR灯的赋值没有根据硬件电路而取反,对LED灯没有交替刷新且没有锁存。改正程序后继续调试,观察到RUN灯,ERR灯,输入指示灯正常工作,输入指示灯随着输入的变化而变化,说明输入采样驱动程序正确工作。下载测试梯形图1,调试PLC的指示灯驱动程序和

温馨提示

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

评论

0/150

提交评论