欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    飞思卡尔智能汽车MATLAB GUI上位机制作流程.doc

    • 资源ID:2956903       资源大小:2.63MB        全文页数:26页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    飞思卡尔智能汽车MATLAB GUI上位机制作流程.doc

    飞思卡尔智能汽车MATLAB GUI上位机制 作 说 明学 校: 广东工业大学 学 院: 信息工程学院 作 者: 文新懿 指 导: 王日明 日 期: 2010年12月01日 关于此文档的制作与使用简要说明 本文为飞思卡尔智能车上位机制作说明,该作品使用MATLAB GUI编写,通过串口实现电脑和下位机之间的通讯及数据分析处理。由于本人技术水平及时间所限,此作品仅完基本框架部分,具体模块及功能需要由其他人员完善。为此,本人编写此文档详细说明学习、制作流程,以方便交流学习。希望此文档能为你提供帮助,谢谢!目 录第一章 引 言1第二章 MATLAB GUI先备知识22.1 MATLAB学习网址22.2 MATLAB GUI学习视频2第三章 上位机方案设计33.1 总体结构33.2 登陆界面UCS GUI43.3 数据录入界面 login GUI43.4 图线分析界面 analysis GUI5第四章 简单操作说明54.1 软件需求54.2 上位机操作5第五章 主要功能说明65.1 MATLAB串口通信65.2 图线数据显示6第六章 具体问题与解决方案76.1 GUI界面切换76.2 按钮外观编辑76.3 串口清除86.4 二进制文件相关96.5 改变光标形状96.6 获取当前路径106.7 将MATLAB GUI生成exe106.8 录入图片劣化116.9 图片读入相关126.10 为GUI程序添加启动画面126.11 循环定义新数组126.12 硬盘格式转换后 HostID改变 Matlab的license失效136.13 获取系统时间136.14 用图片作为axes的背景146.15 在一个Figure中画多幅图14第七章 总结与展望16附 录17第一章 引 言下文以上位机的设计为主线,包括小车的整体构架设计、主要模块设计,以及详细问题处理等,共分为七章。其中,第一章为引言部分;第二章主要介绍了制作此上位机软件所需的MATLAB GUI先备知识;第三章整体介绍上位机的设计方案;第四章介绍了软件的简单操作方式;第五章详细描述了软件主要功能,主要包括数据录入部分和图线分析部分。第六章描述了在制作过程中遇到的具体问题,并附上其解决方案以供参考。第七章总结了在此作品的完善建议及心得体会。第二章 MATLAB GUI先备知识2.1 MATLAB学习网址由于学院已有MATLAB课程,相关资料也十分丰富,在此就不做重复了。本文档主要讲述有关GUI制作的相关知识,限于本人是完全自学,技术水平有限,若有错漏敬请指正。以下推荐若干MATLAB学习的网址,作品制作的大部分知识来源于网站论坛,希望能令学习者有所借鉴:2.1.1 Matlab 中文论坛:2.1.2 Matlab百科全书:另外,学会使用help指令,阅读MATLAB官方帮助,也是十分有效的学习方法。往往苦寻不到的资料其实早就存在于帮助之中,只是我们不识庐山真面目而已。2.2 MATLAB GUI学习视频2.2.1 matlab_GUI_1创建简单GUI2.2.2 matlab_GUI_2按钮使用及图片读取高分辨率2.2.3 matlab_GUI_3radiobutton switch语句 图像边缘2.2.4 matlab_GUI_4.成绩查询系统界面2.2.5 matlab_GUI_5成绩查询系统功能2.2.6 matlab_GUI_6读取Excel文件2.2.7 matlab_GUI_7读取文件错误处理2.2.8 matlab_GUI_8优化 进度条的使用2.2.9 matlab_GUI_9与Java VB C+ C# 联合编程2.2.10 matlab_GUI_10菜单 添加Active控件 播放MTV*详见文件夹“GUI学习视频”第三章 上位机方案设计3.1 总体结构图线分析analysis 数据录入login登陆界面UCS上位机系统该软件分登陆界面UCS、数据录入login、图线分析analysis三个界面,在登陆界面可分别进入另外两个界面。各个界面之间可独立保持或相互切换,实现不同功能间的通讯。3.2 登陆界面UCS GUI3.3 数据录入界面 login GUI3.4 图线分析界面 analysis GUI第四章 简单操作说明4.1 软件需求制作过程中需用到MATLAB软件、串口调试助手、虚拟串口软件,此类资源网上十分丰富,可自己下载。若要在安装不同MATLAB版本或未安装MATLAB的PC上运行,需要安装MCRInstaller.exe(具体操作见6.7将MATLAB GUI生成exe) 4.2 上位机操作4.2.1.安装MCRInstaller.exe4.2.2运行文件夹“上位机EXE“中UCS.exe,打开登陆界面UCS4.2.3.点击按键“数据录入”,进入数据录入界面login4.2.4.若需串口读入,则设置左边参数,并在右侧按格式输入文件保存地址,点击按键“确定”,保存已输入地址;再点击按键“使能”开启串口使能,点击开始。4.2.5.若不需串口读入,直接读取以保存数据,则只需在右侧按格式输入文件读取地址(现已有保存数据在地址:“UCS所在地址data ”,直接可输入此地址读其中数据做测试),点击按键“确定”,保存已输入地址4.2.6.点击按键“返回”,回到UCS界面;也可不返回,保持数据录入界面login打开,手动切换界面4.2.7.点击左上角按键“LOAD”,导入全部数据。此时会有屏闪,表示数据读取中,屏闪结束时读入完成4.2.8.按按键“NEXT”显示下一幅,按按键“FRONT”显示上一幅,按按键“FIRST”显示第一幅,按按键“VIDEO”连续播放第1-187副图像。在图像显示、播放时相应参数的曲线会在下方标有“曲线显示区域”的位置显示,各对应曲线表示的参数在源文件中有注释说明。各参数意义详见文件夹“下位机说明”中文档。第五章 主要功能说明5.1 MATLAB串口通信 5.1.1在此以CCD组为例。先选CCD组,设置波特率为38400,数据位8位,停止位1位,无校验位,并使能。先发送170(十进制),然之后发送85(十进制)至下位机,下位机反应后,开始接收一幅图像以及这幅图像中所附带的参数,下位机发送完毕后,lcd上会显示“发送成功,等待继续发送”的提示。连续导入187块数据,并以txt文档形式保存串口通信使用函数serial,详见pdf档案,尤其注意操作实例中回调函数(默认instrcallback或自编的mycallback)的运用,及基于中断的串口通信优于基于查询的串口通信的原因数据保存的格式是:CCD组:(1)每一帧数据,保存为一个txt文档 (2)文档包含图像及参数,相见下位机格式文档 (3)文件名称为“dataN.txt”,其中N为0-186的整数,通过数据录入模块串口读入时,自动保存为以上格式;若直接读取已存在数据文件,则需将数据文件另命名为以上格式。5.1.2以中断方式进行串口读写,其中断触发事件为输入缓存达到3873字节,中断服务程序调用m函数mycallback,相关知识点见以下资料:5.2 图线数据显示以CCD组为例,根据输入的3873个字节数据,由于图像是40行*95列,且每行外加一个0作为标示,因此提取40*(95+1)即3840个数据进行处理。处理过程包括将读入数据做矩阵化,矩阵转置及归一化等。由于在一个Figure中画多幅图是有一定限制的,若直接显示则只显示在当前激活的AXE控件中,会覆盖已存在图线,并不能同时做到多图像不同窗口播放。因此,使用导入功能,现将图像数据导入到全局变量global fn中,再从fn的CData属性读出,实现跨Figure显示。(见6.13 在一个Figure中画多幅图)曲线部分,由于暂时未完成PID参数控制相关,只以折线图显示了读入的原始参数。此部分内容,有较大改进空间,希望日后能不断完善。第六章 具体问题与解决方案6.1 GUI界面切换问题:我在做的一个程序需要实现多界面的切换,我搜索过论坛上的相关问题,解决方法好像都是做几个figure,然后通过按钮或者其他的操作使一个显示而另一个隐藏。我试了一下,切换的时候界面会很明显的闪一下,有没有别的什么方法可以让界面切换的时候看起来很自然,就好像在同一个界面上呢?如果只有上面这种办法的话,要实现运行时移动其中的一个界面,所有的界面都相应移动,应该怎么做?回答:没有太好的办法。你可以这样处理看看:1、把所有的GUI窗口都设置到一个位置显示;2、在调用另一个界面的地方调用GUI后,延时关闭先前的窗口:GUI2();pause(2);close(handles.figure1);这样,新的窗口会遮挡住原先的窗口,再关闭原先窗口时就不会有任何感觉。备注:本程序界面切换设计,使用全局变量做判断标志,控制各个界面的开闭状态,这样可以同时打开多个GUI界面。当然,若想实现其他形式的界面切换,可灵活应用上述问题的方法。6.2 按钮外观编辑问题:按钮控件外观是默认,怎样才能在button上加图标,使显示更美观。回答:在button上加图标的程序,或许对大家有用。基本思想,利用button支持cdata的思想,把图片的数据转换成cData放在按钮上。实现了在GUI上,按钮有背景图片。备注:本程序设计中,对部分按钮: 使用上述问题的方法,改变外观。但发现存在一个问题,当GUI 大小改变时,按钮大小将发生变化;而此时外观图片大小不变,这会使实现发生偏差。此问题希望有能力者加以完善。另外,利用Fireworks可以更方便编辑按钮图片。6.3 串口清除问题:在串口通信中遇到一个问题,假如有一个已经打开的串口对象s,在没有关闭之前就被clear命令清除了,这时如何关闭s对应的串口?遇到这种情况我只会关闭matlab再重新打开,这样太麻烦了,不知道有没有更好的办法?回答:delete(instrfindall)instrfindall可以找到所有的串口6.4 二进制文件相关*详见附带资料的 “详细问题与解决方案” 文件夹6.5 改变光标形状问题:看了makesure5写的“给控件添加相应的注释信息”学会了怎么给按钮加注释,现在想再增加点功能,希望当鼠标放在按钮上时光标能改变形状(比如小手什么的),不知道能不能实现,希望高手指点下。回答:你查找一下figure的pointer属性就知道了,它是选择指针符号!备注:Pointer属性有: crosshair | fullcrosshair | arrow | ibeam | watch | topl |topr | botl | botr | left | top | right | bottom | circle | cross | fleur | custom | hand 可以任取一个尝试。6.6 获取当前路径问题:如何在matlab下获得当前路径啊?我用uigetdir能获得该路径,但是会有一个对话框出来,有什么办法能不显示对话框而获得当前路径吗?回答:用cd命令即可。备注:用cd命令获取的是当前打开的MATLAB编程主程序的地址,而非GUI所在地址。若是已编译完成,打开生成EXE,则无此问题。要注意的是编译时所需的图片文件等资料,是不会包含在EXE中的,需要根据编程时的相对地址事先存放图片、音乐等,才可正常打开程序。6.7 将MATLAB GUI生成exe问题:如何要使MATLAB GUI生成EXE文件,方便在不同PC上运行?回答:一、生成独立可执行的程序(exe文件)步骤 1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC+6.0,我基于VS 2003实现。2、设置编译器。在matlab命令行输入mbuild setup以及mex setup,选择安装的c编译器。3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc-m filename(多m文件联合编译成exe则用mcc -m filename1 filename2 filename3);4、安装<matlab path>toolboxcompilerdeploywin32目录下的MCRInstaller。(2010b版本不在此文件地址下,可用系统搜索功能对全安装目录搜索得到)二、脱离matlab运行可执行程序MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:<matlab path> toolboxcompilerdeploywin32文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。在其它没有安装matlab的机器上运行exe文件前:首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。其次是要将“MCRinstaller.exe安装目录runtimewin32”这个路径添加到该计算机的环境变量中,通常是自动加载。如果没有,也可手动安装,添加的方法是:右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。在安装过程中会弹出让安装Microsoft.NETFramework可以不用安装。最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。目前此方法可完全运行在没有安装MATLAB以及C/C+的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。美中不足就是,运行的时候dos的那个黑色的窗口一直存在。备注:黑色的窗口消除办法好像已经存在,但由于时间关系在此并不应用。6.8 录入图片劣化问题:排除下位机原本数据缺损,Matlab串口通信时,连续多次(20次以上)读入数据时,会产生不稳定现象,造成图像劣化。回答:检查硬件串口,更换串口较短线,可改善传输质量。但具体解决方法尚未知晓,只用串口调试助手希望以后的设计者可以深入了解,加以完善。6.9 图片读入相关Matlab常用图像操作一. 读写图像文件1. imreadimread函数用于读入各种图像文件,如:a=imread('e:w01.tif')注:计算机E盘上要有w01相应的.tif文件。2. imwriteimwrite函数用于写入图像文件,如:imwrite(a,'e:w02.tif',tif)3. imfinfoimfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:w01.tif')二. 图像的显示1. imageimage函数是MATLAB提供的最原始的图像显示函数(主要彩色显示图象),如:a=1,2,3,4;4,5,6,7;8,9,10,11,12;image(a);2. imshowimshow函数用于灰度图像文件的显示,如:i=imread('e:w01.tif');imshow(i);3. colorbarcolorbar函数用显示图像的颜色条。 通常,颜色映象进行过调节,把数据从最小扩展到最大,也就是说整个颜色映象都用于绘图。有时也许想改变颜色使用的方法。函数caxis代表颜色轴,因为颜色增加了另一个维数,它允许对数据范围的一个子集使用整个颜色映象或者对数据的整个集合只使用当前颜色映象的一部分。 cmin,cmax=caxis返回映射到颜色映象中第一和最后输入项的最小和最大的数据。它们通常被设成数据的最小值和最大值。比如,函数 mesh(peaks) 会画出函数peaks的网格图,并把颜色轴caxis设为-6.5466,8.0752,即Z的最小值和最大值。这些值之间的数据点,使用从颜色映象中经插值得到的颜色。如:i=imread('e:w01.tif');imshow(i);colorbar; 4 .figurefigure函数用于设定图像显示窗口,如:figure(1); /figure(2);5.imagesc(a); caxis(-3 8) ; colorbar;标尺标度从-3,到8 显示标度尺。6.10 为GUI程序添加启动画面*详见附带资料的 “详细问题与解决方案” 文件夹6.11 循环定义新数组问题:如何循环定义新数组我想定义n个数组(A1, A2,A3,A4,A5.A48)for i=1:48 Ai = zeros( (n+1)2 , 3 ) % 第i个数组end请问第i个数组怎么取名,总不能叫 Ai 啊回答:a = 1:5;for i = 1:4eval('a' num2str(i) '=a');enda1 = 1 2 3 4 5a2 = 1 2 3 4 5a3 = 1 2 3 4 5a4 = 1 2 3 4 5备注:eval命令是将字符串转为可执行命令的函数,在许多地方可灵活运用。6.12 硬盘格式转换后 HostID改变 Matlab的license失效*详见附带资料的 “详细问题与解决方案” 文件夹6.13 获取系统时间问题:话说俺也不知道matlab如何读取系统时间,其实知道了系统时间的话,显示应该是比较简单的。回答:函数名    功能描述    函数名    功能描述now    以数字形式给出当前日期和时间    weekday    星期函数date    以字符转形式给出当前日期    eomday    月末日判断函数clock    以向量形式给出当前日期和时间    cputime    所用CPU的时间datenum    日期的数字形式转换    tic    启动秒表计时器datestr    日期的字符串形式转换    toc    读取秒表计时器datevec    日期的向量形式转换    etime    使用时间函数calendar    日历函数    pause    暂停函数6.14 用图片作为axes的背景问题:如何用图片作为axes的背景?回答:之前实现了在figure上把图片做为背景,现在实现在Guide上实现。其实很简单,就是在Fcn的地方添加以下代码:ha=axes('units','normalized','position',0 0 1 1);uistack(ha,'down')II=imread('禾木01.bmp');image(II)colormap grayset(ha,'handlevisibility','off','visible','off');另外如果要把那些按钮等的背景也改变,也是在此处添加相应代码就可。比如下面代码把按钮的背景改变了(此方法已有人在论坛发过帖子,请自己搜索):I=imread('buttoncdata.bmp');set(handles.pushbutton1,'cdata',I);备注:需要把axes控件的“units”属性设置为“normalized”才可以的全屏显示背景fread读入二进制文档的数据要经str2num、reshape、转置等处理才可显示,且显示时需要用GUI的Axes控件,才能固定图像实际显示大小,即同5*5cm的Axes显示的10*10与20*20分辨率的图像的实际显示大小是一样的。详见附带资料的 “详细问题与解决方案” 文件夹6.15 在一个Figure中画多幅图问题:Matlab关于在一个figure中画多幅图,colormap的设置问题大家好,请教一个问题。我要在一个figure里面画三张图,subplot(3,1,1),subplot(3,1,2),subplot(3,1,3)见附件。-但是这三张图的colormap是不一样的,比如说,第一和第二张图都用colormap1,第三张图用colormap2。但是当我每次定义完第三张图的colormap之后,前两张图的colormap也就变成和第三张图一样的了。回答:在matlab里面,每个figure只能显示一种colormap的图片,有两种colormap肯定是不行的。可以先把图片显示到另一个figure内,然后用getframe函数取得其图形数据,再用imshow等函数显示到同一figure内。figure(1);imshow(pic1);f1=getframe(gcf);figure(2);imshow(pic2);f2=getframe(gcf);figure(3);imshow(pic3);f3=getframe(gcf);close all;figure(4);subplot(131);imshow(f1.cdata);subplot(132);imshow(f2.cdata);subplot(133);imshow(f3.cdata);第七章 总结与展望作为一个上位机软件,本程序的完善程度远远不够。我们的目标是软件实现PID控制的实现、智能的调试,从而节省作品完成时间,提高小车运行速度与稳定性。但受技术水平及时间所限,现阶段只能完成以上部分,供后来者参考。另外,除文档外本人也将学习制作工程中用到的相关资料做了一些整理,打包在附件中,希望能对各位有所帮助。最后,多谢王日明老师提供我这样一个机会动手学习,祝愿我们的同学在技术道路上披荆斩棘,勇创高峰!附 录*1.串口程序% % 该回调函数设置以中断方式进行串口读写,其中断触发事件为输入缓存达到% 3873字节,中断服务程序调用m函数mycallback% % - Executes on button press in pushbutton5.function pushbutton5_Callback(hObject, eventdata, handles)% hObject handle to pushbutton5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) global s; %串口变量s global control; %串口变量s的使能标志 global com_times; %串口连续执行次数,即接收数据块块数 group_str = get(handles.popupmenu1,'String'); %小组类型字符列表 groupvalue = get(handles.popupmenu1,'Value'); %小组类型当前选项值 groupselected_str = group_str(groupvalue); %小组类型当前选项字符值 com_str = get(handles.popupmenu2,'String'); %串口COM类型字符列表 comvalue = get(handles.popupmenu2,'Value'); %串口COM当前选项值 comselected_str = com_str(comvalue); %串口COM当前选项字符值 baudrate_str = get(handles.popupmenu3,'String'); %串口波特率类型字符列表 baudratevalue = get(handles.popupmenu3,'Value'); %串口波特率当前选项值 baudrateselected_str = baudrate_str(baudratevalue); %串口波特率当前选项字符值 baudrateselected_dbl = str2double(baudrateselected_str);%串口波特率当前选项数字值 parity_str = get(handles.popupmenu4,'String'); %串口校验位类型字符列表 parityvalue = get(handles.popupmenu4,'Value'); %串口校验位当前选项值 parityselected_str = parity_str(parityvalue); %串口校验位当前选项字符值 databits_str = get(handles.popupmenu5,'String'); %串口数据位类型字符列表 databitsvalue = get(handles.popupmenu5,'Value'); %串口数据位当前选项值 databitsselected_str = databits_str(databitsvalue); %串口数据位当前选项字符值 databitsselected_dbl = str2double(databitsselected_str);%串口数据位当前选项数字值 stopbits_str = get(handles.popupmenu6,'String'); %串口停止位类型字符列表 stopbitsvalue = get(handles.popupmenu6,'Value'); %串口停止位当前选项值 stopbitsselected_str = stopbits_str(stopbitsvalue); %串口停止位当前选项字符值 stopbitsselected_dbl = str2double(stopbitsselected_str);%串口停止位当前选项数字值 all_str = '*',groupselected_str,'*',comselected_str,'*',baudrateselected_str,. '*',parityselected_str,'*',databitsselected_str,'*',stopbitsselected_str,'*' %清除串口 delete(instrfindall); %建立串口 switch comvalue case 1 s=serial('COM1'); case 2 s=serial('COM2'); case 3 s=serial('COM3'); case 4 s=serial('COM4'); case 5 s=serial('COM5'); case 6 s=serial('COM6'); case 7 s=serial('COM7'); case 8 s=serial('COM8'); otherwise ; end set(s,'BaudRate',baudrateselected_dbl); %设置波特率 set(s,'timeout',10); %设置超时时间10s set(s,'InputBufferSize',3873); %设置输入缓存3873Byte set(s,'OutputBufferSize',1024); %设置,输出缓存1024Byte %设置奇偶校验位 switch parityvalue case 1 set(s,'Parity','none'); %不使用校验位 case 2 set(s,'Parity','odd'); %使用奇校验 case 3 set(s,'Parity','even'); %使用偶校验 otherwise ; end set(s,'DataBits',databitsselected_dbl); %设置数据位 set(s,'StopBits',stopbitsselected_dbl); %设置停止位 set(s,'BytesAvailableFcnMode','byte'); %设置中断触发事件为字节事件 set(s,'BytesAvailableFcnCount',3873); %设置中断触发事件字节事件的触发条件为字节满3873Byte set(s,'BytesAvailableFcn',mycallback); %设置中断触发时调用中断服务子程序为mycallback.m fopen(s); %开启串口 com_times=187; %向硬件串口发送通信使能命令(0xaa 0x55),并连续接收187块由图像及参数数据组合成的数据块 switch groupvalue case 1 %光

    注意事项

    本文(飞思卡尔智能汽车MATLAB GUI上位机制作流程.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开