当前位置:首页 » 编程软件 » 调用库放置器件连线编译生成报表

调用库放置器件连线编译生成报表

发布时间: 2022-06-20 18:31:14

A. pcb如何生成元器件报表

从原理图可以生成元器件报表,一般AD在菜单report->生成bom,即可。

B. Altium Designer教程的目录

《altium designer教程-原理图、pcb设计与仿真》
第1章 altium designer系统
1.1 altium designer的发展
1.2 altium designer的功能
1.3 altium designer的特点
1.4 altium designer的界面
1.4.1 altium designer的英文界面
1.4.2 altium designer的中文界面
1.5 altium designer的面板
1.5.1 面板的激活
1.5.2 面板的工作状态
1.5.3 面板的选择及状态的转换
1.5.4 面板的混合放置
1.6 altium designer的项目
1.6.1 项目的打开和编辑
1.6.2 新项目的建立
1.6.3 项目与文件
1.6.4 文件及工作窗口关闭
1.7 altium designer系统参数设置
1.7.1 常规(general)参数设置
.1.7.2 视图(view)参数设置
1.7.3 系统互联网更新(altium web update)参数设置
1.7.4 透明效果(transparency)参数设置
1.7.5 导航(navigation)参数设置
1.7.6 备份(backup)参数设置
1.7.7 项目面板(projects panel)视图参数设置
习题1
第2章 原理图编辑器及参数
2.1 启动原理图编辑器方式
2.1.1 从文件(files)面板中启动原理图编辑器
2.1.2 从主菜单中启动原理图编辑器
2.2 原理图编辑器界面介绍
2.3 原理图编辑器常用菜单及功能
2.3.1 文件(file)菜单
2.3.2 显示(view)菜单
2.3.3 项目(project)菜单
2.4 原理图编辑器界面配置
2.5 图纸参数设置
2.5.1 图纸规格设置
2.5.2 图纸选项设置
2.5.3 图纸栅格设置
2.5.4 自动捕获电气节点设置
2.5.5 快速切换栅格命令
2.5.6 图纸设计信息填写
2.5.7 绘图单位设置
2.6 原理图编辑参数设置
2.6.1 常规(general)参数设置
2.6.2 图形编辑(graphical editing)参数设置
2.6.3 编译器(compiler)参数设置
2.6.4 自动变焦(auto focus)参数设置
2.6.5 常用图件默认值(default primitives)参数设置
习题2
第3章 原理图设计实例
3.1 原理图设计流程
3.2 原理图的设计
3.2.1 创建一个项目
3.2.2 创建原理图文件
3.2.3 加载元件库
3.2.4 放置元件
3.2.5 放置导线
3.2.6 放置电源端子
3.3 原理图的编辑与调整
3.3.1 自动标识元件
3.3.2 快速自动标识元件和恢复标识
3.3.3 元件参数的直接标识和编辑
3.3.4 标识的移动
3.4 原理图的检查
3.4.1 编译参数设置
3.4.2 项目编译与定位错误元件
3.5 原理图的报表
3.5.1 生成网络表
3.5.2 报告(reports)菜单
3.5.3 材料清单
3.5.4 简易材料清单报表
3.6 原理图的打印输出
3.6.1 页面设置
3.6.2 打印预览和输出
习题3
第4章 原理图元件库的使用
4.1 元件库的调用
4.1.1 有效元件库的查看
4.1.2 元件库的搜索与加载
4.1.3 元件库的卸载
4.2 元件库的编辑管理
4.2.1 原理图元件库编辑器
4.2.2 工具(tools)菜单
4.2.3 标准符号(ieee symbols)菜单
4.2.4 元件库编辑管理器
4.3 新元件原理图符号绘制
4.4 新建元件库
4.5 生成项目元件库
4.6 生成元件报表
4.7 修订原理图符号
习题4
第5章 原理图设计常用工具
5.1 原理图编辑器工具栏简介
5.2 工具栏的使用方法
5.3 窗口显示设置
5.3.1 混合平铺窗口
5.3.2 水平平铺窗口
5.3.3 垂直平铺窗口
5.3.4 恢复默认的窗口层叠显示状态
5.3.5 在新窗口中打开文件
5.3.6 重排设计窗口
5.3.7 隐藏文件
5.4 工作面板
5.4.1 工作面板标签
5.4.2 剪贴板面板(clipboard)功能
5.4.3 收藏面板(favorites)功能
5.4.4 导航器面板(navigator)功能
5.4.5 过滤器面板(sch filter)功能
5.4.6 列表面板(sch list)功能
5.4.7 图纸面板(sheet)功能
5.4.8 检查器面板(sch inspector)功能
5.5 导线高亮工具——高亮笔
习题5
第6章 原理图编辑常用方法
6.1 编辑(edit)菜单
6.2 选取图件
6.2.1 选取菜单命令
6.2.2 直接选取方法
6.2.3 取消选择
6.3 剪贴或复制图件
6.3.1 剪切
6.3.2 粘贴
6.3.3 智能粘贴
6.3.4 复制
6.4 删除图件
6.4.1 个体删除(delete)命令
6.4.2 组合删除(clear)命令
6.5 排列图件
6.6 剪切导线
6.7 平移图纸
6.8 光标跳转
6.9 特殊粘贴命令
6.9.1 复写命令
6.9.2 橡皮图章
6.10 修改参数
6.11 全局编辑
6.11.1 元件的全局编辑
6.11.2 字符的全局编辑
习题6
第7章 原理图常用图件及属性
7.1 放置(place)菜单
7.2 元件放置与其属性设置
7.2.1 元件的放置
7.2.2 元件属性设置
7.2.3 属性分组框各参数及设置
7.2.4 图形分组框各参数及设置
7.2.5 参数列表分组框各参数及设置
7.2.6 模型列表分组框各参数及设置
7.3 导线放置与其属性设置
7.3.1 普通导线放置模式
7.3.2 点对点自动布线模式
7.3.3 导线属性设置
7.4 总线放置与其属性设置
7.4.1 总线放置
7.4.2 总线属性设置
7.5 总线入口放置与其属性设置
7.5.1 总线入口的放置
7.5.2 总线入口属性设置
7.6 放置网络标号与其属性设置
7.6.1 网络标号的放置
7.6.2 网络标号属性设置
7.7 节点放置与其属性设置
7.7.1 节点放置
7.7.2 节点属性设置
7.8 电源端子放置与其属性设置
7.8.1 电源端子简介
7.8.2 电源端子的放置
7.8.3 电源端子属性设置
7.9 放置no erc指令与其属性设置
7.9.1 no erc指令的放置
7.9.2 no erc属性设置
7.10 放置注释文字与其属性设置
7.10.1 注释文字的放置
7.10.2 注释文字属性设置
习题7
第8章 原理图层次设计
8.1 原理图的层次设计方法
8.2 自上而下的原理图层次设计
8.2.1 建立母图
8.2.2 建立子图
8.2.3 由子图符号建立同名原理图
8.2.4 绘制子系统原理图
8.2.5 确立层次关系
8.3 自下而上的原理图层次设计
8.3.1 建立项目和原理图图纸
8.3.2 绘制原理图及端口设置
8.3.3 由原理图生成子图符号
8.3.4 确立层次关系
8.4 层次电路设计报表
8.4.1 元件交叉引用报表启动
8.4.2 excel报表启动
8.4.3 层次报表
8.4.4 端口引用参考
习题8
第9章 pcb设计基础
9.1 pcb的基本常识
9.1.1 印制电路板的结构
9.1.2 pcb元件封装
9.1.3 常用元件的封装
9.1.4 pcb的其他术语
9.2 pcb设计的基本原则
9.2.1 pcb设计的一般原则
9.2.2 pcb的抗干扰设计原则
9.2.3 pcb可测性设计
9.3 pcb编辑器的启动
9.3.1 利用新电路板生成向导启动pcb编辑器
9.3.2 其他方法启动pcb编辑器
习题9
第10章 pcb编辑器及参数
10.1 常规(general)参数设置
10.2 显示(editing display)参数设置
10.3 交互式布线(editing interactive routing)参数设置
10.4 默认(editing defaults)参数设置
10.5 工作层颜色(editing layer colors)参数设置
10.5.1 工作层面的类型
10.5.2 工作层设置
10.6 板层的设置
10.6.1 板层堆栈管理器
10.6.2 板层设置
10.7 板选项参数设置
习题10
第11章 pcb设计基本操作
11.1 pcb编辑器界面
11.2 pcb编辑器工具栏
11.3 放置图件方法
11.3.1 绘制导线
11.3.2 放置焊盘
11.3.3 放置过孔
11.3.4 放置字符串
11.3.5 放置位置坐标
11.3.6 放置尺寸标注
11.3.7 放置元件
11.3.8 放置填充
11.4 图件的选取/取消选择
11.4.1 选择方式的种类与功能
11.4.2 图件的选取操作
11.4.3 选择指定的网络
11.4.4 切换图件的选取状态
11.4.5 图件的取消选择
11.5 删除图件
11.6 移动图件
11.6.1 移动图件的方式
11.6.2 图件移动操作方法
11.7 跳转查找图件
11.7.1 跳转查找方式
11.7.2 跳转查找的操作方法
11.8 元器件封装的制作
11.8.1 pcb库文件编辑器
11.8.2 利用向导制作元件封装
11.8.3 自定义制作pcb封装
习题11
第12章 pcb设计实例
12.1 pcb的设计流程
12.2 双面pcb设计
12.2.1 文件链接与命名
12.2.2 电路板禁止布线区的设置
12.2.3 数据的导入
12.2.4 pcb设计环境参数的设置
12.2.5 元件的自动布局
12.2.6 元件封装的调换
12.2.7 pcb与原理图文件的双向更新
12.2.8 元件布局的交互调整
12.2.9 电路板的3d效果图
12.2.10 设置布线规则
12.2.11 自动布线
12.2.12 手工调整布线
12.2.13 加补泪滴
12.2.14 放置敷铜
12.2.15 设计规则drc检查
12.3 单面pcb设计
12.4 多层pcb设计
习题12
第13章 pcb的设计规则
13.1 电气相关的设计规则
13.1.1 安全间距设计规则
13.1.2 短路许可设计规则
13.1.3 网络布线检查设计规则
13.1.4 元件引脚连接检查设计规则
13.2 布线相关的设计规则
13.2.1 设置导线宽度
13.2.2 设置布线方式
13.2.3 设置布线次序
13.2.4 设置布线板层
13.2.5 设置导线转角方式
13.2.6 设置导孔规格
13.2.7 扇出控制布线设置
13.2.8 差分对布线设置
13.3 smd布线相关的设计规则
13.4 焊盘收缩量相关的设计规则
13.4.1 焊盘的收缩量
13.4.2 smd焊盘的收缩量
13.5 内层相关的设计规则
13.5.1 电源层的连接方式
13.5.2 电源层的安全间距
13.5.3 敷铜层的连接方式
13.6 测试点相关的设计规则
13.6.1 测试点规格
13.6.2 测试点用法
13.7 电路板制造相关的设计规则
13.7.1 设置最小环宽
13.7.2 设置最小夹角
13.7.3 设置最小孔径
13.7.4 板层对许可
13.8 高频电路设计相关的规则
13.8.1 导线长度和间距
13.8.2 网络长度
13.8.3 匹配网络长度
13.8.4 支线长度
13.8.5 smd焊盘过孔许可
13.8.6 导孔数限制
13.9 元件布置相关规则
13.9.1 元件盒
13.9.2 元件间距
13.9.3 元件的方向
13.9.4 元件的板层
13.9.5 网络的忽略
13.9.6 元件的高度
13. 10 信号完整性分析相关的设计规则
习题13
第14章 电子电路仿真
14.1 仿真的基本概念
14.2 仿真的常用元件及属性
14.2.1 常用元件
14.2.2 元件仿真属性编辑
14.3 仿真常用激励源
14.3.1 仿真激励源工具栏
14.3.2 仿真激励源库
14.4 初始状态的设置
14.4.1 定义元件属性设置初始状态
14.4.2 特殊元件设置初始状态
14.5 仿真器的设置
14.5.1 分析设置对话框
14.5.2 一般设置
14.5.3 瞬态特性分析
14.5.4 直流分析
14.5.5 交流小信号分析
14.5.6 噪声分析
14.5.7 极点-零点分析
14.5.8 传递函数分析
14.5.9 温度扫描分析
14.5.10 参数扫描分析
14.5.11 蒙特卡罗分析
14.6 电子电路仿真实例
14.6.1 电子电路仿真流程
14.6.2 模拟电子电路仿真实例
14.6.3 数字电子电路仿真实例
14.6.4 混合电子电路仿真实例
习题14
附录a 常用原理图元件符号与pcb封装
参考文献

C. quartus 选择哪个器件进行编译

QuartusII 是Altera公司开发的功能最强大的PLD编译工具,全面取代MAX+PLUS

使用步骤:

一、建立工程.
1、“File”→“New Project Wizard”开始新工程的建立设置。‘NEXT’
2、指定project的路径,和project的名称,顶层文件的名称(一般与工程名相同)。
3、指定project中要include 的文件。
4、选择project中要使用的一些EDA TOOLS。
5、选择所使用的器件的家族“family” 和具体型号。
6、‘finish’ 完成工程的设置。

二、输入文件. 在工程中新建设计文件:图形文件“Block Diagram/Schematic File”,Verilog语言文 件“VerilogHDL File”
1、完成工程文件的输入,若为顶层文件,则文件名应该保存为与工程名相同。
2、编译设置:“Assignment”→“Compiler Settings Wizard”→“Next”
3、根据编译窗口的提示修改错误。
4、编译后会生成编译报告“Compilation Report”会分成如下几项:
(1) Analysis&Synthesis语法检查,把大电路转成较小的元件
(2) Fitter 器件资源利用情况,引脚分配情况等
(3) Assembler 连线各元件
(4) Timing Analyzer 时间分析

三、仿真. 完成工程文件的编译、综合、时间、分析后就可以建立波形仿真文件进行功能仿真
1、建立仿真文件
“File”→“New”→“Other Files”→“Vector Waveform File”→“OK”
2、选择输入输出引脚
Edit→“Insert Node or Bus”→“Node Finder”,在“Filter”处选择“Pins:all”,再按下“ >>”将所有选中的引脚添加到“Seleted Nodes”框,点“OK”→“OK”完成引脚添加。可通过右键 修改引脚的显示方式、属性、初始值等参数。
3、仿真时间、栅格的设置
Edit→‘End Time’ 设置仿真结束的时间, ‘Grid Size’设置每个栅格表示的时间。仿真时间是 以建立仿真文件时给出的结束时间为准,仿真设置“Wizards”中设定的End Time没用。
4、仿真编译设置
‘Assignments’→‘Wizards’→‘Simulator Settings Wizard’→选择当前要仿真得文件
仿真文件做好后还要将其设置为当前仿真文件,才可以开始仿真。因为有时一个工程需要建立多个 仿真文件,这就需要通过设置确定仿哪个文件了。在选择仿真类型“Type of simulation”时,“ timing”代表考虑延时,“functional”表示功能型的仿真。
5、先编译后仿真
‘Processing’→‘Start Compilation&Simulation’
6、仿真结束后会生成仿真报告“Simulation Report”
仿真结果并不是出现 在所建立得仿真文件中,在仿真报告中有独立的仿真结果。
仿真的结果总是与当前的工程文件相对应,工程文件改变后要重新仿真后才有意义。

四、将工程模块化,利用图形设计文件建立更大的工程
模块工程文件(“Block Diagram/Schematic File”或“Verilog HDL File”)编译仿真成功后就可以 将其模块化,然后在更高层次将各个模块级联起来,构成更大得工程。
1、模块化
‘File’→‘Creat/Updata’→‘Creat Symbol Files for Current File’ 然后编译器会自动将当前工程完整得编译一遍,然后生产图形模块,放在存放当前工程的文件夹里。
2、更大的工程
(1)建立工程文件
“File”→“New”→“Device Design Files”→“Block Diagram/Schematic File”→“OK”
(2)输入元件
右键→‘Insert’→‘Symbol’→可以在库文件中选,也可以通过“浏览”将已经建立图新模块的 工程加载进来。
(3)连线

D. CrystalReportViewer控件怎么用

在使用CrystalReportViewer 对象模型登录到安全的SQL Server数据库时,必须使用 CrystalDecisions.Shared命名空间中的类。

ConnectionInfo类的属性可用来连接到数据库服务器或ODBC数据源。在本教程中,将设置ServerName,DatabaseName,UserID以及Password属性。如果选择仅设置DatabaseName,UserID和Password属性,则会登录到报表指定的数据库的默认服务器。但如果选择指一个备用的serverName属性,则可以在运行时将报表重定向到其它服务器。

从CrystalReportViewer控件的LogOnInfo属性获取TableLogOnInfos实例。然后,将ConnectionInfo实例赋给TableLogOnInfos实例的每个TableLogOnInfo对象。

以下用四步来创建报表:

1.创建连接到安全的SQL Server数据库的报表。

在“解决方案资源管理器”中,右击粗体显示的项目名,指向“添加”,然后单击“添加新项”。 在“添加新项”对话框的“模板”视图中,选择“Crystal Report”模板。 在“名称”字段中,输入名称“NorthwindCustomers.rpt”,然后单击“打开”。 在“Crystal Reports 库”对话框的“创建新 Crystal Report 文档”面板中,选择“使用报表向导”。 在“选择专家”面板中,选择“标准”后,单击“确定”。出现“标准报表创建向导”窗口。 在“可用数据源”面板中,展开“创建新连接”文件夹。 从打开的子文件夹中,展开“OLE DB (ADO)”文件夹。出现“OLE DB (ADO)”窗口。 选择“Microsoft OLE DB Provider for SQL Server”并单击“下一步”。 分别将数据库服务器、用户 ID 和密码的值输入到“服务器”、“用户 ID”和“密码”字段中。 从“数据库”下拉列表中,选择“Northwind”。取消选中“集成安全性”复选框,因为您使用的是 SQL Server 身份验证而不是 NT 身份验证。 单击“完成”。OLE DB 文件夹将展开,显示数据库服务器及其中的 Northwind 数据库。 展开“Northwind”、“dbo”和“表”节点,然后选择“Customers”表。 单击“>”符号,将该表移入“选定的表”面板,然后单击“下一步”。 展开“Customers”表,按住 Ctrl 键的同时单击“公司名称”、“联系人姓名”和“城市”。 单击“>”符号,将这些字段移至“要显示的字段”面板,然后单击“下一步”。 在“可用字段”面板的“报表字段”下,选择“客户.城市”,然后单击“>”符号将该字段移入“分组依据”面板,再单击“完成”。NorthwindCustomers 报表创建完毕,并加载到 Visual Studio 的主窗口中。

2.绑定不带登录代码的报表。

打开 Web 或 Windows 窗体。 从“视图”菜单中,单击“代码”。 找到在 “项目设置”中创建的 ConfigureCrystalReports() 方法。 声明一个字符串变量,将其命名为“reportPath”,然后将一个本地报表的运行时路径赋值给它。对于网站项目和 Windows 项目,确定此路径时会有所不同:对于网站,要将本地报表文件的名称作为字符串参数传递到 Server.MapPath() 方法中。这样,在运行时本地报表就会映射到硬盘文件目录路径。 C# Copy Code string reportPath = Server.MapPath("NorthwindCustomers.rpt");
对于 Windows 项目,要将 Application.StartupPath 属性与一个反斜杠和本地报表文件名称连接起来。这样,报表将映射到与 Windows 可执行文件相同的目录。
注意 编译时,需要将报表复制到可执行文件所在的目录。 C# Copy Code string reportPath = Application.StartupPath + "\" + "NorthwindCustomers.rpt";
将 NorthwindCustomers 报表的文件目录路径赋给 CrystalReportViewer 控件的 ReportSource 属性。C# Copy Code crystalReportViewer.ReportSource = reportPath;测试 NorthwindCustomers 报表的加载过程。现在即可生成并运行项目。预计报表加载将失败,因为此时尚未编写数据库登录代码。从“生成”菜单中选择“生成解决方案”。 如果生成过程中出错,请立即纠正。 如果在 Windows 项目中使用非嵌入式报表,请在 \bin\debug\ 子目录中找到编译后的 Windows 可执行文件,然后将报表复制到该子目录中。注意 要让 Windows 可执行文件在运行时加载非嵌入式报表,该报表必须与 Windows 可执行文件存储在同一个目录中。从“调试”菜单中,单击“开始”。NorthwindCustomers 报表并不显示。它会在添加数据库登录代码后显示。注意 结果可能会因为所使用的 Crystal Reports 版本不同而不同。例如,如果安装了 Crystal Reports 10 和更高版本,则会提示您输入该报表的数据库登录信息。如果运行的是较早版本的 Crystal Reports,则会引发异常。不论是哪种情况,都需要依照以下过程来创建功能完整的应用程序。返回到 Visual Studio,然后单击“停止”从调试模式中退出。

3.添加报表登录代码。

返回到此 Web 或 Windows 窗体的代码隐藏类。 在类的底部,创建名为 SetDBLogonForReport() 的新私有帮助器方法,并将 ConnectionInfo 传递给方法签名。 C# Copy Code private void SetDBLogonForReport(ConnectionInfo connectionInfo){}在此方法内,从 CrystalReportViewer 类的 LogOnInfo 属性获取 TableLogOnInfos 实例。注意 TableLogOnInfos 是包含 TableLogOnInfo 类实例的索引类。 C# Copy Code TableLogOnInfos tableLogOnInfos = crystalReportViewer.LogO www.hnne.com nInfo;创建一个 foreach 循环,它在 TableLogOnInfos 索引类实例的各个 TableLogOnInfo 实例间循环。C# Copy Code foreach(TableLogOnInfo tableLogOnInfo in tableLogOnInfos){}在 foreach 循环中,将 TableLogOnInfo 的 ConnectionInfo 属性设置为 ConnectionInfo 参数。C# Copy Code tableLogOnInfo.ConnectionInfo = connectionInfo;修改 ConfigureCrystalReports() 方法以处理数据库登录代码。此过程创建了用于设置数据库登录的方法。但是,必须修改 ConfigureCrystalReports() 方法以处理此方法,这样报表才能识别出其中含有数据库登录信息。
修改 ConfigureCrystalReports() 方法需要两个步骤: 配置 ConnectionInfo 实例。 调用 SetDBLogonForReport() 方法。 在 ConfigureCrystalReports() 方法中,在将报表绑定到 CrystalReportViewer 控件的代码之下声明并实例化 ConnectionInfo 类。C# Copy Code ConnectionInfo connectionInfo = new ConnectionInfo();在下一行上,通过传入 ConnectionInfo 实例调用 SetDBLogonForReport() 方法。 C# Copy Code SetDBLogonForReport(connectionInfo);设置 ConnectionInfo 实例的 DatabaseName、UserID 和 Password 属性。注意 出于安全性考虑,使用访问权限受到限制的数据库帐户非常重要。有关更多信息,请参见 “安全性:创建受限访问数据库帐户”。 在编写的代码中,用自己的密码代替示例密码 654321(如下所示)。 C# Copy Code connectionInfo.DatabaseName = "Northwind";connectionInfo.UserID = "limitedPermissionAccount";connectionInfo.Password = "654321";测试 NorthwindCustomers 报表的加载过程。现在即可生成并运行项目。由于已经添加了登录数据库的代码,现在应该能够正确加载报表了。 从“生成”菜单中选择“生成解决方案”。 如果生成过程中出错,请立即纠正。 从“调试”菜单中,单击“开始”。NorthwindCustomers 报表将成功显示。
返回到 Visual Studio,然后单击“停止”从调试模式中退出。

4.添加在运行进更改数据库位置的功能。

在本节中,将学习如何在运行时更改数据库的位置。要实现此功能只需对 ConnectionInfo 实例稍加修改即可。注意 在本教程中,将更改数据库服务器的名称,而不是数据库的名称。无法使用 CrystalReportViewer 控件更改数据库的名称。在运行时更改数据库位置。在 ConfigureCrystalReports() 方法中,在调用 SetDBLogonForReport() 方法的代码后面创建几行。 在这几行中,设置 ConnectionInfo 实例的 ServerName 属性。注意 在编写的代码中,用您的服务器名称代替示例服务器名称“DevDatabaseServer”(如下所示)。 C# Copy Code connectionInfo.ServerName = "DevDatabaseServer"; 测试是否能在运行时将报表重置到备用数据库服务器。现在即可生成并运行项目。报表应该会在运行时重定向到备用数据库服务器。从“生成”菜单中选择“生成解决方案”。 如果生成过程中出错,请立即纠正。 从“调试”菜单中,单击“开始”。NorthwindCustomers 报表将成功显示。返回到 Visual Studio,然后单击“停止”从调试模式中退出。

E. 我用ad9自己画的元器件库,调用之后生成的PCB没有连线是怎么回事啊求详解!

用ad9自己画的元器件库,调用之后生成的PCB没有连线,这是PCB元件管脚定义与原理图中元件管脚定义名称不同造成的,你修改任何一面都可以,只要对应了,就能识别网络表,就能正常连线了。

F. 如何在VDSP下生成和调用DSP库

有些资料可供你参考:
DSP的特点
对于没有使用过DSP的初学者来说,第一个困惑就是DSP其他的嵌入式处理器究竟有什么不同,它和单片机,ARM有什么区别.事实上,DSP也是一种嵌入式处理器,它完全可以完成单片机的功能.
唯一的重要的区别在于DSP支持单时钟周期的"乘-加"运算.这几乎是所有厂家的DSP芯片的一个共有特征.几乎所有的DSP处理器的指令集中都会有一条MAC指令,这条指令可以把两个操作数从RAM中取出相乘,然后加到一个累加器中,所有这些操作都在一个时钟周期内完成.拥有这样一条指令的处理器就具备了
DSP功能.
具有这条指令就称之为数字信号处理器的原因在于,所有的数字信号处理算法中最为常见的算术操作就是"乘-加".这是因为数字信号处理中大量使用了内积,或称"点积"的运算.无论是FIR滤波,FFT,信号相关,数字混频,下变频.所有这些数字信号处理的运算经常是将输入信号与一个系数表或者与一个本地参考信号相乘然后积分(累加),这就表现为将两个向量(或称序列)进行点积,在编程上就变成将输入的采样放在一个循环buffer里,本地的系数表或参考信号也放在一个buffer里,然后使用两个指针指向这两个buffer.这样就可以在一个loop里面使用一个MAC指令将二者进行点积运算.这样的点积运算对与处理器来说是最快的,因为仅需一个始终周期就可以完成一次乘加.

了解DSP的这一特点后,当我们设计一个嵌入式系统时,首先要考虑处理器所实现的算法中是否有点积运算
,即是否要经常进行两个数组的乘加,(记住数字滤波,相关等都表现为两个数组的点积)如果有的话,每秒要做多少次,这样就能够决定是否采用DSP,采用多高性能的DSP了.
浮点与定点
浮点与定点也是经常是初学者困惑的问题,在选择DSP器件的时候,是采用浮点还是采用定点,如果用定点是16位还是32位?其实这个问题和你的算法所要求的信号的动态范围有关.
定点的计算不过是把一个数据当作整数来处理,通常AD采样来的都是整数,这个数相对于真实的模拟信号有一个刻度因子,大家都知道用一个16位的AD去采样一个0到5V的信号,那么AD输出的整数除以2^16再乘以5V就是对应的电压.在定点DSP中是直接对这个16位的采样进行处理,并不将它转换成以小数表示的电压,因为定点DSP无法以足够的精度表示一个小数,它只能对整数进行计算.
而浮点DSP的优势在于它可以把这个采样得到的整数转换成小数表示的电压,并不损失精度(这个小数用科学记数法来表示),原因在于科学记数法可以表示很大的动态范围的一个信号,以IEEE754浮点数为例,
单精度浮点格式: [31] 1位符号 [30-23]8位指数 [22-00]23位小数
这样的能表示的最小的数是+-2^-149,最大的数是+-(2-2^23)*2^127.动态范围为20*log(最大的数/最小的数)=1667.6dB 这样大的动态范围使得我们在编程的时候几乎不必考虑乘法和累加的溢出,而如果使用定点处理器编程,对计算结果进行舍入和移位则是家常便饭,这在一定程度上会损失是精度.原因在于定点处理处理的信号的动态范围有限,比如16位定点DSP,可以表示整数范围为1-65536,其动态范围为20*log(65536/1)=96dB.对于32定点DSP,动态范围为20*log(2^32/1)=192dB,远小于32位ieee浮点数的1667.6dB,但是,实际上192dB对绝大多数应用所处理的信号已经足够了.

由于AD转换器的位数限制,一般输入信号的动态范围都比较小,但在DSP的信号处理中,由于点积运算会使中间节点信号的动态范围增加,所以主要考虑信号处理流程中中间结果的动态范围,以及算法对中间结果的精度要求,来选择相应的DSP.另外就是浮点的DSP更易于编程,定点DSP编程中程序员要不断调整中间结果的P,Q值,实际就是不断对中间结果进行移位调整和舍入.
DSP与RTOS
TI的CCS提供BIOS,ADI的VDSP提供VDK,都是基于各自DSP的嵌入式多任务内核.DSP编程可以用单用C,也可以用汇编,或者二者结合,一般软件编译工具都提供了很好的支持.我不想在这里多说BIOS,VDK怎么用这在相应的文档里说的很详细.我想给初学者说说DSP的RTOS原理.用短短几段话说这个复杂的东西也是挑战!^_^
其实DSP的RTOS和基于其他处理器的通用RTOS没什么大的区别,现在几乎人人皆知的uCOSii也很容易移植到DSP上来,只要把寄存器保存与恢复部分和堆栈部分改改就可以.一般在用BIOS和VDK之前,先看看操作系统原理的书比较好.uCOS那本书也不错.
BIOS和VDK其实是一个RTOS内核函数集,DSP的应用程序会和这些函数连接成一个可执行文件.其实实现一个简单的多任务内核并不复杂,首先定义好内核的各种数据结构,然后写一个scheler函数,功能是从所有就绪任务中(通过查找就绪任务队列或就绪任务表)找出优先级最高的任务,并恢复其执行.然后在此基础上写几个用于任务间通信的函数就可以了,比如event,message box,等等.

RTOS一般采用抢先式的任务调度方式,举例说当任务A等待的资源available的时候,DSP会执行一个任务调度函数scheler,这个函数会检查当前任务是否比任务A优先级低,如果是的话,就会把它当前挂起,然后把任务A保存在堆栈里寄存器值全部pop到DSP处理器中(这就是所谓的任务现场恢复).接着scheler还会把从堆栈中取出任务A挂起时的程序执行的地址,pop到PC,使任务A继续执行.这样当前任务就被任务A抢先了.
使用RTOS之后,每个任务都会有一个主函数,这个函数的起始地址就是该任务的入口.一般每个任务的主函数里有一个死循环,这个循环使该任务周期地执行,完成一部分算法模块的功能,其实这个函数跟普通函数没任何区别,类似于C语言中的main函数.一个任务创建的时候,RTOS会把这个函数入口地址压入任务的堆栈中,好象这个函数(任务)刚发生过一次中断一样.一旦这个新创建任务的优先级在就绪队列中是最高的,RTOS就会从其堆栈中弹出其入口地址开始执行.
有一个疑问是,不使用RTOS,而是简单使用一个主循环在程序中调用各个函数模块,一样可以实现软件的调度执行.那么,这种常用的方法与使用RTOS相比有什么区别呢?其实,使用主循环的方法不过是一种没有优先级的顺序执行的调度策略而已.这种方法的缺点在于,主循环中调用的各个函数是顺序执行的,那么,即使是一个无关紧要的函数(比如闪烁一个LED),只要他不主动返回,也会一直执行直到结束,这时,如果发生一个重要的事件(比如DMA buffer full 中断),就会得不到及时的响应和处理,只能等到那个闪烁LED的函数执行完毕.这样就使整个DSP处理的优先次序十分不合理.而在使用了RTOS之后,当一个重要的事件发生时,中断处理会进入RTOS,并调用scheler,这时scheler 会让处理这一事件的任务抢占DSP处理器(因为它的优先级高).而哪个闪烁LED任务即使晚执行几毫秒都没任何影响.这样整个DSP的调度策略就十分合理.
RTOS要说的内容太多,我只能讲一下自己的一点体会吧
DSP与正(余)弦波
在DSP的应用中,我们经常要用到三角函数,或者合成一个正(余)弦波.这是因为我们喜欢把信号通过傅立叶变换映射到三角函数空间来理解信号的频率特性.信号处理的一些计算技巧都需要在DSP软件中进行三角函数计算.然而三角函数计算是非线性的计算,DSP并没有专门的指令来求一个数的正弦或余弦.于是我们需要用线性方法来近似求解.
一个直接的想法是用多项式拟合,这也正是大多数DSP C编译器提供正余弦库函数所采用的方法.其原理是把三角函数向函数空间{1,x,x^2,x^3....}上投影,从而获得一系列的系数,用这些系数就可以拟合出三角函数.比如,我们在[0,pi/2]区间上拟合sin,只需在matlab中输入以下命令:
x=0:0.05:pi/2;
p=polyfit(x,sin(x),5)
就得到5阶的多项式系数:
p =
0.00581052047605 0.00580963216172 -0.17193865685360
0.00209002716293 0.99969270087312 0.00000809543448
于是在[0,pi/2]区间上:
sin(x)= 0.00000809543448+0.99969270087312*x+ 0.00209002716293*x^2-0.17193865685360*x^3+
0.00580963216172*x^4+0.00581052047605*x^5
于是在DSP程序中,我们可以通过用乘加(MAC)指令计算这个多项式来近似求得sin(x)

当然如果用定点DSP还要把P这个多项式系数表用一定的Q值来改写成定点数.
这样的三角函数计算一般都需要几十个cycle 的开销.这对于某些场合是不能容忍的
另一种更快的方法是借助于查表,比如,我们将[0,pi/2]分成32个区间,每个区间长度就为pi/64,在每个区间上我们使用直线段拟合sin曲线,每个区间线段起点的正弦值和线段斜率事先算好,存在RAM里,这样就需要在在RAM里存储64个
常数:
32个起点的精确的正弦值(事先算好): s[32]={0,sin(pi/64),sin(pi/32),sin(pi/16)....}
32个线段的斜率: f[32]={0.049,.....}
对于输入的每一个x,先根据其大小找到所在区间i,通常x用定点表示,一般取其高几位就是系数i了,然 后通过下式即可求出sin(x):
sin(x)= s*f
这样一般只需几个CYCLE就可以算出正弦值,如果需要更高的精度,可以将区间分得更细,当然,也就需 要更多的RAM去存储常数表.
事实上,不仅三角函数,其他的各种非线性函数都是这样近似计算的.
1. 接触DSP
在参加过一次社会上多的尽乎到了泛滥地步的"DSPxxx"培训班之后,我"自信"已经具备DSP工师资格,便欣喜若狂跑道书店买了一本名为"DSP xxx应用"的书,作者叫xxx,并且是这个领域的牛人,这本书确实是很出色的书籍.但是当时,对于我这个对DSP一窍不通、刚刚入门的人来说却建立了一个错误的概念--DSP是个很容易的领域,只要培训一下,再稍微看看书,就可以成为专家.所以,现在看来,这些都是误导,我认为学习DSP技术应该分为两个阶段,第一阶段学习DSP技术基础概念;第二阶段学习DSP技术的行业应用.那本"DSP xxx应用"的书,它更适合书名应叫做"DSP中的数学或物理运用"...什么的.

2. 购买DSP学习套件
有了兴趣,就要去学习,于是我撺掇领导批准购买了DSP学习入门套件(DSK),许多公司均有销售,如TI等,大概是需要3000-4000人民币.买后不久,我就发现,这种套件对于我来说一点用处都没有.因为我的基础知识实在是太差了.这些套件对于我来说,只是另一种涵义的PC机及一些外围设备,想要懂的这些东西,我就需要去读更多的相关书籍,这时,很难没有想要放弃的念头,我开始有点畏惧DSP这种技术,门槛太高了.可是,我不能放弃,我已经投入了许多的金钱和时间,我不想丢掉这4000元钱,也不能对领导没有交待.事实上,我没有想到,我将付出更多的钱和时间去学习.
3. 再次参加培训班,再次购买DSP书籍
在我就感到了无助,困惑之际.我又想到了放弃.虽然我的数学还算不错,但其中遇到的一些问题在我思考后,还是无法解决,我越来越畏惧DSP了.于是,我开始在"google"上搜索DSP培训相关的信息,终于发现闻亭公司"DSP培训中心"的教程和内容正是我一直寻找的东西.也许是DSP技术对我的有着巨大的诱惑力,也许是我的之直着,我又一次勇敢的报名参加了培训.32个课时之后,解决了我半年多来积累的很多粗浅的问题.再翻开培训教材刚刚复读了第一章时,我想如果这本教材是我读到的第一本书,并且我没有花4000元买那个可*的学习套件,我会毫不犹豫的投降,放弃学习DSP,但.......那个可*的xxx作者,他的书怎么可以用作教学呀.他的书虽然让我对DSP产生了浓厚的兴趣,却把我引到了一条艰难的路上,而且花了那么多的冤枉钱....既然事已如此,我只有慢慢的去读这些书籍,在我读到教材的后面章节以后,我开始明白前面章节的内容,所以当你读书遇到不明白的时候,千万不要气馁.有时,一个内容,可能需要读上几遍,才能明白,这比一开始的感觉要好的多了.
4. 实验--至关重要的一步
现在,从你的架子上取下那套DSK,去尝试做一些小实验,我的第一个实验是"正弦发生器",这个实验比较简单,但是它也花费了我几周的时间去读大量的关于串口、编码、寄存器等的书并且进行大量的实验.这个执行半小时的"正弦发生器",让我查阅了恨不得够组建一个图书馆的书籍,而且这个东西没有任何用途.我是用汇编语言在54x中执行,这个实验让我很好的理解了什么是DSP,什么是McBSP, DMA, 等.当然问题也同步产生了,我就又不得不做了许多的实验去验证.我建议,在系统未定型之前,使用mathlab/simulink进行仿真,并且可以多实验几种芯片,这样可以让你明白更多的内容.我觉得我就要成为一个真正的DSP工程师了,我度过了最困难的时期.我觉得自己是个英雄,嘿嘿.
5. 去寻找一份与DSP相关的工作,去当个DSP工程师
我希望困难已经过去,但这种愿望为时过早了.在DSP的研究中,我还遇到了很多的困难,由于篇幅有限,我就不在进行描述了.反正,如果想成为真正的DSP专家,就不要期望事情会变得容易.有些DSP开发人员并不知道什么是真正的0和1,他们只会查阅各种参考书籍和参数表,我们并不提倡这种做法.因为这些人选择了一种简单的做法,但是他们并不是真正的DSP开发人员.他们只是编写一些他们不理解的代码,他们似乎在担当着一台"编码器"的角色.
6. 总结
这篇文章只是我的一点感慨,可能并不是很适用现在的DSP开发工程师,因为,市面上已经有了供你学习的DSP教学套件,搭配了多种实验供你参考,轻松入门,如:闻亭公司的"大学实验箱"什么的.这个实验箱提供了一个很好的实验环境,并且为初学的你设计了多种实验、教材,让你由浅入深的学习.不会向我似的,绕一大圈才走到正

G. 隐含模块中的编译错误:frm生成报表

才重装系统,XP就行,WIN7家庭版更好。

H. 唉 生成了个报表(*.frx) 怎么在程序里调用

说明这个大数据类型在这里不支持,在编译的过程中,BigDecimal占用字节多,解释的过程中发生溢出,导致编译出问题,无法生成class,导致后面的调用出错。。还是变通一下,转换一下类型吧。。

I. VisualNet怎么用

Visual Basic通用报表设计小结

本文对vb设计报表的方法作了一个小结,大家都知道,在VB平台下制作报表大致有两种选择:使用VB自带的Data Report控件和借助第三方软件。其中第三方软件比较着名的就是MS Excel和Seagate公司的CrystalReporter,以下就这三个方案进行详细的讨论。

1. Data Report控件

1.1 Data Report控件使用方法

由于是VB自带的控件,所以使用相对比较方便。使用方法是:首先在"工程"菜单下面选择"添加Data report"选项,这样Data Report控件就选入到了应用程序。

使用Data report的情况大多数采用数据绑定的模式,也就是将此控件与数据库的数据表绑定起来以便可以不用编写代码就轻松完成报表的设计。要使用数据绑定就必须要指定数据源,这里的数据源不是数据控件而是数据环境(Data Environment),选择"工程"菜单下面选择"添加Data Environment"选项就可以将数据环境添加进应用程序中。数据环境有两个重要的属性:Connection 和Command属性,前者是连接指定的数据库,后者连接指定的数据表,一旦这两者都设置成功之后,就可以把数据环境作为数据源了。只需要把Data report的DataSource属性设置为前面的数据环境对象以及把DataMember设置为数据环境对象的Command对象即可。

1.2 Data Report控件界面元素

完成了Data report控件的数据绑定工作之后就可以直接控制报表的制作与显示了。这里首先熟悉一下Data report控件的显示界面:

Data report控件一共有5个区组成,分别是报表头、页面头、细节区、页面注脚和报表注脚。报表头和报表注脚是用分别用于整个报表的最上部和最下部,它们将出现于整个报表的每一页,可以放置一些报表名称,时间之类的固定文本;页面头和页面注脚只能出现在当前页的最上部和最下部,也就是说它只能出现在当前页中,不出现在其他页面中,可以放置随页面变化的一些量比如页码等;而细节区就是用来进行实际显示的区域,它是我们最为关心的区域,通过在此区域内放置显示控件可以控制报表的实际显示输出。这里介绍一下放置文本框控件的使用方法,其实在绑定情况下只需要设置其DataMember和Datafield即可,前者用来指定数据表,可以设置为前面数据环境对象的Command对象,后者是指定数据段,即绑定的数据库的指定字段。这样不需要编写任何代码就可以实现报表的显示工作。

1.3 Data Report控件的打印功能

对于报表的打印可以直接使用Data report自带的打印功能,即可以实现简易的报表打印。不过为了实现比较复杂的打印功能,也可以通过程序控制的方法来进行。这里只是给出一个实现思路:首先需要制作一个按钮控件来显示"打印设置"的窗口,通过这个窗口用户可以设置打印的相关的参数,然后在实现打印的子模块中使用VB内嵌的printer对象来实现真实的打印,该对象能够对打印的当前位置进行定位,而且对打印的字体等参数进行控制,所以结合"打印设置"窗口可以实现类似于word里面的打印功能。

2.MS Excel

说起报表设计应用程序,无意微软的Excel是一支独秀,MS Excel就是用来进行表格和报表设计用的应用程序,它具有优秀的方格控制和宏代码定制功能。所以如果在设计自己的应用程序的时候能够结合到Excel的话,那么你的应用程序就应该是相当的完善了,因为无论是编辑还是打印功能,Excel都提供了很完美的解决方案,所以你的应用程序所要做的事情就是实现程序和Excel通讯即可。

事实上,可以使用VBscript可以将VB与Excel两者连接起来。以下就简要介绍在VB下开发基于Excel的编程思路。

在VB中处理Excel的对象大致分为五个:Application对象、WorkBook对象、WorkSheet对象、Range对象以及Cell对象。它们的功能分别如下:

Application---------用来指代整个应用程序。

WorkBook----------表示工作簿对象

WorkSheet---------表示工作表对象,注意,一个工作簿可以包含多个工作表,它们就类似于多文档中的框架窗口和里面的单个视图一样。

Range-------------表示工作表中的某个区域范围对象,特殊情况下也可以只代表一个Cell。

Cell---------------表示特定工作表的一个单元格对象。这个对象的使用频率是最高的。

清楚了以上的五个对象的应用范围,那么使用它们就很简单了,不过在使用这些对象之前,首先需要对它们进行声明。方法是在"工程"的"引用"对话框之下选择"Microsoft Excel9.0 Object Library",这样就将整个Excel对象库就引入到程序中来了。

下面举一个示例,其实现的功能是打开一个工作簿。

Function OpenBook(strFilePath As String) As Boolean

' This procere checks to see if the workbook

' specified in the strFilePath argument is open.

' If it is open, the workbook is activated. If it is

' not open, the procere opens it.

Dim wkbCurrent As Excel.Workbook

Dim strBookName As String

On Error GoTo OpenBook_Err

' Determine the name portion of the strFilePath argument.

strBookName = NameFromPath(strFilePath)

If Len(strBookName) = 0 Then Exit Function

If Workbooks.Count >0 Then

For Each wkbCurrent In Workbooks

If UCase$(wkbCurrent.Name) = UCase$(strBookName) Then

wkbCurrent.Activate

Exit Function

End If

Next wkbCurrent

End If

Workbooks.Open strBookName

OpenBook = True

OpenBook_End:

Exit Function

OpenBook_Err:

OpenBook = False

Resume OpenBook_End

End Function

3.Crystal Reporter(水晶报表)

做为一个优秀的报表软件,水晶报表是实际应用中最多的方案。在这一节里主要介绍一下水晶报表的定制和显示,打印功能的实现。

首先要区分Crystal Reports插件程序和Crystal Reports控件。前者主要用来创建报表模板,后者主要是用来在程序中显示和打印报表,这两者的分工决定了它们程序中的功能的不同。

其中Crystal Reports的插件程序可以从Seagate公司的官方网站上下载最新的测试版本。

3.1 Crystal Reports插件程序的使用

选择"外接程序"菜单的"报表设计器"选项,则VB将执行Crystal Reports Pro插件应用程序。在Crystal Reports Pro里选择"新建报表"图标,可以选择8标准模板和一个自定义的模板来开始报表工程。

整个水晶报表的使用跟第一节的Data Report的使用很类似。首先需要给报表选择数据源,(即数据库),然后就可以在报表中添加、删除、修改字段以及为记录分组,可以利用水晶报表创建很多具有自定义风格的报表。由于本身Crystal Reports插件程序就是一个功能强大的报表设计软件,这里就不能一一的讲解了,有兴趣可以参考程序自带的帮助文档。

3.2 Crystal Reports控件的背景知识

Crystal Reports Pro还提供一个报表生成模块,该模块可以连接到并访问VB应用程序,VB程序员不需花费大量时间写自己的代码就可再应用程序中添加复杂的报表生成及输出功能。

Crystal Reports引擎是一个动态链接库,它可以使应用程序访问并具有同Crystal Reports 一样强大的报表输出功能。应用程序是通过Crystal Reports ActiveX控件来访问引擎。再编译时应用程序同报表引擎链接,以给应用程序添加了生成报表的功能。

当程序使用Crystal Reports ActiveX控件时,可以通过再设计时设置Crystal对象属性或者再运行时改变对象属性,来建立应用程序和Crystal Reports之间的连接。通过Crystal控件的属性可以指定:

响应应用程序某个事件的输出报表的名字。

报表的目标位置(预览窗口、磁盘文件或者电子邮件等)。

想要打印的份数(如果报表提交给打印机的话)。

输出文件的信息。

预览窗口的大小及位置信息(如果报表在预览窗口中显示时)。

选择公式信息(如果在报表中限制记录的话)。

排序信息。

其他相关的属性。

这里要注意一点的是,Crystal控件必须在由Crystal Reports Pro创建的报表中使用,而试图在VB应用程序里引用之前,必须首先创建报表。

3.3 Crystal Reports控件的使用

了解了Crystal Reports控件的功能,那么就可以使用它了。首先通过"工程"的"部件"选项里面选择"Crystal Reports Control",那么VB的工具箱里面就添加了Crystal Reports控件了。

注意,对于Crystal Reports控件的最重要的属性就是ReportFileName了,把它设置为前面已经在Crystal Reports Pro里定制好的报表模板的文件路径。那么只需要调用控件的PrintReport方法就可以将报表显示出来了。

相对于Data Report控件来说,Crystal Reports控件的功能更加的完善,报表预览,打印,编辑修改等功能都很完善,所以在实际的报表应用设计方案中,使用Crystal Reports的相对较多。然而Crystal Reports控件也有它的局限性,即它不能在运行时创建自定义的窗口。可以使用控件的数据绑定属性来创建数据绑定报表,但是报表本身的格式都是由Crystal Reports控件内部进行处理的。一般说来,Crystal Reports控件不提供在程序中对报表字段级的访问。这一缺陷可以通过设计出足够多的报表来弥补。

4.其他方法

除了通过上述的三种方法来实现报表设计以外,当然也可以直接利用Win32 API来进行直接进行设计,这种方式是最为灵活也是最为繁琐的方式,因为所有的编辑、修改、打印等功能都是由程序控制,所以一般情况下不会使用这样的方式来处理,这里就不介绍了。

5.小结

报表设计是程序员经常要遇到的问题,本文主要介绍目前主流的报表设计方案,由于所涉及到的知识点比较多,限于篇幅,在这里只是作了简要的介绍,希望可以起到抛砖引玉的作用。

J. protel99如何生成元器件报表

从PCB文件和SCH文件都可以生成,执行报告(Reports)下的一个“材料清单”项

热点内容
电脑我的世界服务器游戏币 发布:2025-05-16 05:27:25 浏览:487
索尼手机为什么不能用安卓10 发布:2025-05-16 05:18:46 浏览:784
蔚来es6选择哪些配置实用 发布:2025-05-16 05:18:05 浏览:130
小米如何扫码wifi密码 发布:2025-05-16 05:13:38 浏览:807
楼层密码是什么意思 发布:2025-05-16 05:13:37 浏览:13
创建文件夹失败 发布:2025-05-16 05:12:59 浏览:396
电脑上如何查询自己的配置 发布:2025-05-16 05:06:36 浏览:105
sql中去重 发布:2025-05-16 04:55:06 浏览:893
dwr上传图片 发布:2025-05-16 04:49:46 浏览:122
base64加密的图片 发布:2025-05-16 04:35:46 浏览:356