科学网

 找回密码
  注册

tag 标签: 接口

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

[转载]【未完成】RS232接口的公头与母头、RS232连线中的直连线与交叉线
zhongzejiang 2013-6-6 10:31
一、RS-232标准接口的公头(male)与母头(female) DB9 公头 母头 串口引脚定义 1.RS-232端(DB9母头/孔型)引脚定义 引脚序号 2 3 5 1、4、6 7、8 信号定义 TXD RXD GND 内部相连 内部相连 注:该口可直接插入计算机的COM口 2.RS-232端(DB9公头/针型)引脚定义 引脚序号 2 3 5 1、4、6 7、8 信号定义 RXD TXD GND 内部相连 内部相连 注:该口可接与计算机通讯的设备 下面是:公口介绍,请欣赏~~~ 说明:实际开发接口时,一般只要2,3,5,即收、发和地三根线,就能实现通信。 DB9和DB25的常用信号脚说明;RS232接口针脚定义 Pin 1 Received Line Signal Detector (Data Carrier Detect) Pin 2 Received Data Pin 3 Transmit Data Pin 4 Data Terminal Ready Pin 5 Signal Ground Pin 6 Data Set Ready Pin 7 Request To Send Pin 8 Clear To Send Pin 9 Ring Indicator 二、辨别RS-232接口连线中的直连线与交叉线
3949 次阅读|0 个评论
人体主机与人脑接口
热度 1 YanluLV 2013-5-30 10:05
人体主机与人脑接口 最近在思考移动终端的时候想到了一个概念:人体主机。我为这个想法感到欢欣鼓舞,在这一个科技和技术水平处于高速发展的时代,逐步实现这么一个意义重大命题是非常有可能的。 下面我具体阐述一下人体主机的想法。 人体主机,顾名思义便是以人体作为信息控制和传输的主控制器,通过大脑或者身体的各个位置作为接口,与外界的智能设备直接互连,实现信息的交互和存取。 也许有很多人会对这个概念不以为意,觉得现在很多科研机构已经开始了人脑信号的检测和破译,但是这个仅仅是人体主机系统的非常起步的的状态,要设计人机接口完成数据的直接传输,就像计算机主机通过USB连接移动存储设备一样直接完成数据存取。这样大脑可以在短时间内完成大量数据的获取和学习——这将引发一场彻底的人脑学习革命。 这之类的镜头我们见过,在科幻电影阿凡达中,我们看到了他使用“USB”总线,当时还仅仅是一笑了之,后来感觉到这种概念的提出将彻底颠覆学习的过程。 不过,这种人机接口的危险性也比较大:人体的生物电压非常低,信号非常微弱,如何将这种微弱的神经元电流的标准同外围的电气标准互连还是非常难以解决的,这就要求有个电平转换和超级低的外围电路电平标准;此外,就像计算机一样,在同外部存储设备进行数据交换时“死了机”这个情况怎么处理,人脑死机同现阶段的死亡可是一个标准?面对死机如何对人脑进行重启?会不会由此我们重新获得一种让大脑停止活动的人再次复苏,也就因此少了一种病态人类:“植物人”,因为大脑可以被唤起。
个人分类: 技术设想|2999 次阅读|2 个评论
java中接口interface
kewin1983 2013-3-12 14:11
JAVA的接口最大的作用就是统一:统一函数形式、调用方式,保证函数的进出都可以一致。 1、 多态接口动态加载 配合Class.forName().newInstance(),可以完成以函数为主的程序,这些函数可以统一入口参数。 接口中只写函数形式,具体实现则要到类中写: //Common. java public interface Common { double runTimer(double a, double b, double c); } //Car中实现这个接口a*b/c public class Car implements Common { public double runTimer(double a, double b, double c) { return ( a*b/c ); } } //Plane中实现这个接口a+b+c public class Plane implements Common { public double runTimer(double a, double b, double c) { return (a+ b + c); } 调用时则可以统一命名和调用 Common d=(Common) Class.forName("Car").newInstance(); v=d.runTimer(A,B,C); 2、 接口作为方法的参数传递 可以将接口类型的参数作为方法参数,在实际使用时可以将实现了接口的类传递给方法,后方法或按照重写的原则执行,实际调用的是实现类中的方法代码体,这样便根据传进屋的参数的不同而实现不同的功能。 interface Extendbroadable{ public void inPut(); } class KeyBroad implements Extendbroadable{ public void inPut(){ System.out.println("\n hi,keybroad has be input into then mainbroad!\n"); } } class NetCardBroad implements Extendbroadable{ public void inPut(){ System.out.println("\n hi,netCardBroad has be input into then mainbroad!\n"); } } //上面完成了一个接口,分别实现,接下来就是统一调用 class CheckBroad{ public void getMainMessage(Extendbroadable ext){ ext.inPut(); } } 具体使用 KeyBroad kb=new KeyBroad(); NetCardBroad ncb=new NetCardBroad(); CheckBroad cb=new CheckBroad(); cb.getMainMessage(kb); cb.getMainMessage(ncb);
7882 次阅读|0 个评论
[转载]深入浅出分析C#接口的作用
shixuanlv305 2013-2-6 11:20
转自: http://www.cnblogs.com/yuanhao/archive/2008/11/24/1340269.html 1、 C#接口的作用 : C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认识到接口的作用的时候就觉得用接口是多此一举,当然你这样想那是绝对绝对错误的,比尔盖茨的微软请的员工都是比盖茨还聪明的人,他们的C#能添这样的多足吗?!关于接口的作用,网上有一位就真的深入浅出给我们做了很好理解的分析。 我们定义一个接口 public interface IBark { void Bark(); } 再定义一个类,继承于IBark,并且必需实现其中的Bark()方法 public class Dog:IBark { public Dog() {} public void Bark() { Consol.write("汪汪"); } } 然后,声明Dog的一个实例,并调用Bark()方法 Dog 旺财=new Dog(); 旺财.Bark(); 试想一样,若是想调用Bark()方法,只需要在Dog()中声明这样的一个方法不就行了吗,干什么还要用接口呢.因为接口中并没有Bark()具体实现.真的实现还是要在Dog()中.那么使用接口不是多此一举吗? 还有人是这样说的:从接口的定义方面来说,接口其实就是类和类之间的一种协定,一种约束.还拿上面的例子来说.所有继承了IBark接口的类中必需实现Bark()方法.那么从用户(使用类的用户)的角度来说,如果他知道了某个类是继承于IBark接口,那么他就可以放心大胆的调用Bark()方法,而不用管Bark()方法具体是如何实现的.比如,我们另外写了一个类. public class Cat:IBark { public Cat() {} public void Bark() { Consol.write("喵喵"); } } 当用户用到Cat类或是Dog类的时候,知道他们继承于IBark,那么不用管类里的具体实现,而就可以直接调用Bark()方法,因为这两个类中肯定有关于Bark()方法的具体实现. 如果我们从设计的角度来看.一个项目中用若干个类需要去编写,由于这些类比较复杂,工作量比较大,这样每个类就需要占用一个工作人员进行编写.比如A程序员去定Dog类,B程序员去写Cat类.这两个类本来没什么联系的,可是由于用户需要他们都实现一个关于"叫"的方法.这就要对他们进行一种约束.让他们都继承于IBark接口,目的是方便统一管理.另一个是方便调用.当然了,不使用接口一样可以达到目的.只不过这样的话,这种约束就不那么明显,如果这样类还有Duck类等等,比较多的时候难免有人会漏掉这样方法.所以说还是通过接口更可靠一些,约束力更强一些. 2、 C#中接口的深入浅出 : 通过学习对C#中接口的作用有了更进一步的理解,拿出来跟大家分享一下,有说的不对的地方请大家指教。 假设我们公司有两种程序员:VB程序员,指的是用VB写程序的程序员,用clsVBProgramer这个类表示;Delphi程序员指的是用Delphi写程序的程序员,用clsDelphiProgramer这个类来表示。每个类都有一个WriteCode()方法。定义如下: class clsVBProgramer() { .... WriteCode() { //用VB语言写代码; } .... } class clsDelphiProgramer() { .... WriteCode() { //用Delphi语言写代码; } .... } 现在公司来了一个项目,要求派某个程序员写一个程序。 class clsProject() { .... WritePrograme(clsVBProgramer programer)//用VB写代码 { programer.WriteCode(); } WritePrograme(clsDelphiProgramer programer)//重载方法,用Delphi写代码 { programer.WriteCode(); } ...... } 在主程序中我们可以这样写: main() { clsProject proj=new clsProject; //如果需要用VB写代码 clsVBProgramer programer1=new clsVBProgramer; proj.WritePrograme(programer1); //如果需要用Delphi写代码 clsDelphiProgramer programer2=new clsDelphiProgramer; proj.WritePrograme(programer2); } 但是如果这时公司又来了一个C#程序员,我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类clsCSharpProgramer,同时在此clsProject这个类中要再次重载WritePrograme(clsCSharpProgramer programer)方法。这下麻烦多了。如果还有C程序员,C++程序员,JAVA程序员呢。麻烦大了! 但是如果改用接口,就完全不一样了: 首先声明一个程序员接口: interface IProgramer() { WriteCode(); } 然后声明两个类,并实现IProgramer接口: class clsVBProgramer():IProgramer { .... WriteCode() { //用VB语言写代码; } .... } class clsDelphiProgramer():IProgramer { .... WriteCode() { //用Delphi语言写代码; } .... } 对clsProject这个类进行一下修改: class clsProject() { .... WritePrograme(IProgramer programer) { programer.WriteCode();//写代码 } ...... } main() { clsProject proj=new clsProject; IProgramer programer; //如果需要用VB写代码 programer=new clsVBProgramer; proj.WritePrograme(programer); //如果需要用Delphi写代码 programer=new clsDelphiProgramer; proj.WritePrograme(programer); } 如果再有C#,C,C++,JAVA这样的程序员添加进来的话,我们只需把它们相关的类加进来,然后在main()中稍做修改就OK了。扩充性特别好! 另外我们如果把clsProject这个类封成一个组件,那么当我们的用户需要要扩充功能的时候,我们只需要在外部做很小的修改就能实现,可以说根本就用不着改动我们已经封好组件!是不是很方便,很强大!
个人分类: 编程|0 个评论
三轴转台 单轴转台 双轴转台
xiaoxue6228 2012-12-15 21:49
工作这么长时间了,转台做的已经很有水平了。 http://www.castssif.com/main.aspx?Kindcode=MI05LinkCode=SI11SeqNo=1PrintType=DPage=1 上海航天电子有限公司 专业做转台 【设备用途】为寻北仪、振动台、陀螺、惯性组件提供标校、测试手段。 【主要功能】 转台位置、速率旋转; 转台多种模式摇摆; 转台安全保护和故障报警; 转台三轴都能输出零位脉冲; 转台可以手动操作、程序控制和远程控制转台和温箱; 转台形状为U-U-T型,内环台面设引北基座; 转台底座可调水平; 温控箱采用液氮制冷电加热工作模式; 温控箱试验箱前后双向开门,单侧门上设置观察窗及相应的照明装置; 控制柜设置高速串口; 计算机远程控制转台和温控箱运行; 计算机显示转台工作状态; 计算机以曲线和数字形式显示三轴当前角位置、角速度; 计算机实时采集三轴角位置数据; 计算机显示温控箱的状态和参数; 计算机存储转台和温控箱数据; 计算机设置以太网口接口; 【主要技术指标】 机械结构: 负载重量:不小于40kg(质量均布); 负载尺寸:H400mm×450mm×450mm; 转角范围:三轴无限; 倾角回转误差:±5″; 三轴垂直度:±5″; 三轴的相交度:Φ0.5mm球内; 安装基准面平面度:0.01mm; 台面直径为Φ500mm; 转台安装面100mm处磁场强度:≤0.2mT; 重量:不大于1200公斤。 测量控制:最大角速度:内框±300°/s,中框±200°/s,外框150°/s; 最小角度速度:±0.001°/s; 速率平稳速度: 5×10-3(±0.001°/s~±1°/s); 5×10-4(±1°/s~±10°/s);5×10-5(大于±10°/s); 最大角加速度:三轴均为:±200°/s2; 角位置分辨率:0.36″; 静态位置精度:±5″; 角位置重复精度:±3″; 导电滑环: 用户滑环(内轴环)40环 接触电阻小于0.02Ω,绝缘电阻≥200MΩ,寿命108转; 温控试验箱: 试验箱内腔尺寸:550mm×550mm×550mm(W×H×D); 试验箱外形尺寸:750mm×883mm×718mm(不包含管路/线缆屏蔽罩); 温度控制范围:-55.0℃~+85.0℃; 温度波动度:±1.0℃; 温度均匀度:1.0℃; 温度精度:0.5℃; 变温速率:≥2.0℃/Min(全程平均);
3720 次阅读|0 个评论
说说科学网博客(43) 科学网博客图片服务器罢工了吧
热度 2 sz1961sy 2012-12-11 12:56
今早,2012年12月11日(距离所谓“世界未日”还有10天)科学网博客图片服务器如果不是满了,就是接口断了! 害得我连续上传5次也不显示。 刚才发现“动态”无法显示图片,才想到了。
个人分类: 说说科学网博客|293 次阅读|2 个评论
netcdf 手册(1)引言——接口
cwjwang 2012-9-29 12:01
引言 (1) netcdf 接口 netcdf 是数据库用来贮存和恢复数组数据的接口函数。数组是n(n=0,1,2,3...)维的矩形结构,由统一形式的元素组成(如:8位的字符,32位的整型数据)。标量(简单的单值变量)是0维数组。netcdf是数据的提取接口,而这种接口支持把数据看成自我描述、可移植的。数组变量可直接获得,不必知道数据如何贮存的细节。且数据的辅助信息如:数据的单位与可能储存在数据里。通用的函数和应用程序可读取netcdf的数据库以及变幻、重组、分析、展示某一领域的数据。这些应用的发展,已经提高了数据的获得能力、软件对数组型数据再利用、管理、分析、展现能力。netcdf实现对数据类型的提取,这意味着在netcdf数据库的所有操作必须使用接口提供的一系列函数。数据的代表型就是用接口的应用程序的隐藏后面,因此数据的储存不会受到外在的程序的影响;netcdf物理属性的代表是其设计独立于计算机的。netcdf支持c、fortran77、fortran90、c++接口,且在不同计算机系统运行。
3752 次阅读|0 个评论
如何用HDMI接口连接显示器和电视机
superdaisy 2012-8-13 16:37
如何用HDMI接口连接显示器和电视机
现在很多电视机和液晶显示器都支持HDMI高清接口的,所以可以把笔记本通过HDMI直接连接到电视机(显示器)上,可以实现高清的效果。现在是时候淘汰DVI接口的时候啦(DVI没有办法实现在高清电视机上的高清播放)。特别是HDMI高清接口,同时具有图像和声音,用起来真是很舒服啊。 不过,现在很多电脑没有HDMI接口,一般只有DisplayPort,特别是联想的机子(包括Thinkpad)。我发现现在日本这边,sony,东芝等笔记本台式机都有HDMI接口。不过,也没有关系,如果笔记本只有DisplayPort的,可以买一个转换器(DisplayPort转HDMI),详细见下图。 今天在秋叶原,终于淘到了。 参考图片
7475 次阅读|0 个评论
Maple Toolbox for Matlab:Maple-Matlab 双向接口工具箱
热度 1 maplesim 2012-4-28 11:34
Maple Toolbox for Matlab:Maple-Matlab 双向接口工具箱
Access the world's best symbolic computation engine from within MATLAB Maple 提供多种不同的方式连接 MATLAB 。 • 提供 Maple Toolbox (Maple Toolbox for MATLAB) 双向接口连接 Maple 和 MATLAB 。 • 灵活的连接工具支持多种方式的协同工作: MATLAB 到 Maple 代码转换器;自动生成 MATLAB 代码; MATLAB 计算引擎连接。 Maple Toolbox for MATLAB 基于 Maple Toolbox for MATLAB , Maple 提供了理想的科学计算方案,无缝集成 Maple 和 MATLAB ,在各自的工作环境下直接使用对方的所有命令、变量、和函数等,两者协同工作帮助您解决数学问题、完成对结果的深度分析。 • 无缝集成 Maple 和 MATLAB ,在各自的工作环境下直接使用对方的所有命令、变量、和函数等。 • 在 MATLAB 中使用 Maple 符号计算引擎,获得世界上最好的符号计算算法和数学计算成果,处理 MATLAB 计算和程序中的符号计算部分。 • 如果你正在使用 MATLAB ,你也可以使用 Maple 交互式助手和向导,快速开发出解决方案。 • 在 MATLAB 计算中获得任意精度的结果,避免 MATLAB 代码中灾难性的消去。 • 完全兼容使用 MATLAB 早期版本中 symbolic toolboxes 编写的代码。 详细的帮助信息见 Matlab 中的 Maple Toolbox 部分: 在 MATLAB 环境中工作 1. 使 用 Maple 引擎完成符号符号计算 Maple Toolbox for MATLAB 在 Maple 和 MATLAB 之间建立了双向连接,让您在两个环境同步工作中。用户可以在任一环境中定义变量,然后在两个环境中使用它们。 Maple 与 MATLAB 之间通过 Maple-MATLAB Connector 连接,首先登陆 MATLAB ,然后在命令行输入: (diff(y(x),x,x) = 2*y(x)+1)') % y(0) = 1 % D(y)(0) = 0 出于练习的目的,这里我们添加初始条件 y(0) = 1, 和 y'(0) = 0 。 可以对系统求符号解,接受默认的设置,快速得到解。完成后,我们可以将这个解返回到 MATLAB 环境中,完成进一步的操作。 在 Maple 环境中工作 1.传递 MATLAB 变量到 Maple 现在,切换回 MATLAB ,输入一个简单的矩阵: M = hankel ( ) 1 3 5 7 3 5 7 0 5 7 0 0 7 0 0 0 setmaple ('M', M ) 提示: setmaple( ) 命令将任意 MATLAB 变量传递给 Maple 。您也可以使用语法格式 setmaple(mvar) 或 setmaple(var,val) ,这里 mvar 是已经定义的 MATLAB 变量, val 是需要创建的 Maple 变量, var 是分配给变量的值。 现在,切换回 Maple ,输入 M ,然后按回车键。 [ 您可以看到变量名 M 被赋值与定义在 MATLAB 中相同的 Hankel 矩阵。鼠标右击矩阵,从右击菜单中选择 Standard Operations Inverse. 逆矩阵计算结果是一个有理数矩阵。 再次鼠标右击这个矩阵,选择 Assign to a Name. 将这个逆矩阵分配给一个新的变量名, InverseM , 让它立即可以在 MATLAB 中使用。 最后,切换到 MATLAB ,在命令行输入: 小结 Maple Toolbox for MATLAB 为 Maple 和 MATLAB 提供了一个连接器,不仅提供了完整的 Maple 命令,包括工具箱和非核心函数包;而且可以使用 Maplets 和文件用户界面。还有大量的其他好处在这里没有提到,例如改善结构,导致计算性能的大幅度提高等。 产品更新信息: • 自 Maple 14 ( 2010 年 5 月)开始,包括以后的版本中, Maple Toolbox for MATLAB 已经作为默认程序包免费集成到 Maple 安装程序中。 Maplesoft 不再发行单独的安装程序。用户可以在 Maple 安装目录下找到该文件,,默认文件名为 MapleToolbox.exe ( 32 位 Windows ),或者 MapleToolbox_WindowsX86_64.exe ( 64 位 Windows )。 • 在安装 Maple 时,程序会自动检测电脑中是否已经安装 MATLAB 。 • Maple 和 MATLAB 对应的版本:为了保证 Maple 与 MATLAB 之间的连接正常,用户需要安装正确的版本。例如 Maple 13 支持 MATLAB 2009a 和以前版本, Maple 13.01 支持 MATLAB 2009b 和以前版本, Maple 14 支持 MATLAB 2010a 和以前版本。
个人分类: Maple基础学习|11104 次阅读|1 个评论
[转载]Delphi与MATLAB的数据接口方案探讨(4)
ChenboBlog 2012-4-7 12:55
引用: http://hi.baidu.com/qinyong2008/blog/item/4c401ffaed715a9759ee909e.html 方案五利用mideva编译脱离matlab环境的动态链接库 一、基本思路 如果你看过了以上的几种方案,就会发现它们都必需依赖于MATLAB环境,那么如何能够彻底脱离MATLAB环境呢?这也是我最近一直在研究的,但是天不随人意5555555555,虽然找到了相关资料可是却和实际情况相差太远。本来想等全部搞定之后再发这篇文章的,后来转念一想不如让大家共同研究,也许某位达人能参透其中奥妙。此方法是利用一个叫Mideva的软件,是Mathtools公司推出的一种Matlab编译开发软件平台(注:据笔者掌握的最新情况,Mathtools已经被Mathwork收购了),Mediva具有编译转换功能,能够将Matlab函数成编写的Matlab程序转换为c++形式的DLL,然后在Delphi中调用动态库函数,而不必再依赖Malab环境,前提是必须要有两个动态链接库mdv4300和ago4300。 二、编译步骤 利用Mideva平台实现Delphi与M文件混合编程步骤如下: 1、编写M文件 2、在Mideva中执行M文件 3、生成动态链接库(DLL) 4、Delphi中调用DLL函数 三、方案总结 如果真能实现,那将省去许多不必要的麻烦,可是笔者的问题在于用Mideva编译过后的DLL,Delphi无法识别-_-b,而且根本找不到mdv4300和ago4300两个动态链接库。如果那位仁兄能够成功,望请告知,不胜感激。 2003-8-1821:26:46后记: Matlab和Delphi都是功能强大的计算机语言,利用接口技术可以充分利用Delphi高效、便捷的可视化开发环境和Matlab在数值计算、算法设计等领域的优势,提高程序的开发效率,大量节省在繁杂数学运算编程上花费的时间,能够快速开发出界面友好的算法程序和数值分析、数据处理软件。同时应该看到各种接口方案都有其不足之处,还有待大家共同研究。
2166 次阅读|0 个评论
[转载]Delphi与MATLAB的数据接口方案探讨(3)
ChenboBlog 2012-4-7 12:54
引用: http://hi.baidu.com/qinyong2008/blog/item/5cfdef1911544a7adab4bd9e.html 方案四利用动态链接库技术进行数据交流 一、基本思路 Matlab本身并没有提供与Delphi的应用程序接口,但是提供了基于win32平台的VC++应用程序接口,包括Matlab引擎(engine),C/C++函数库。可以利用Matlab与VC++的接口函数,通过matlab引擎进行指令处理和数据传递,编写出C++语言的动态连接库,作为Matlab与Delphi的接口,然后在Delphi中进行C++动态库函数的调用。Matlab引擎的C语言调用函数见表1。 表1:Matlab引擎的C语言调用函数 函数名功  能 EngOpen打开Matlab引擎 EngEvalString在Matlab引擎中执行一条命令 EngPutArray将数据放入Matlab引擎 EngGetArray从Matlab引擎中取出数据 EngClose关闭Matlab引擎 在使用表1所示的Matlab引擎函数时,要用到Matlab数组(mxArray),Matlab引擎利用这个数据类型来进行各种数据处理工作。Matlab中的各种变量,包括标量、矢量、矩阵、字符串等都是用这种Matlab数组来进行存储的。Matlab提供了C语言下的Matlab数组(mxArray)的格式,定义了它的数据结构。Delphi下没有对应的Matlab数组,但利用动态连接库可以巧妙地解决这个问题。 二、动态连接库的设计 在我们设计的软件中,要将Delphi中的数据送入Matlab进行分析,选择合适的处理函数后进行运算,然后将结果送回Delphi。为了实现上述目的,设计了相应的几个函数。这些函数都放在DpLab.dll动态连接库中。DpLab.dll的基本组成如下: (1)头函数 #include"stdafx.h" #includestdlib.h #includestdio.h #includestring.h #include"engine.h"//在Matlab\extern\include下,将它拷入当前目录 engine*ep=NULL;//Matlab引擎,全局变量 mxArray*PA=NULL;//Matlab数组指针。可根据需要定义多个mxArray指针变量 (2)打开Matlab引擎函数: extern"C"declspec(dllexport)intMatOpenEng(farchar*cc) { if(ep)return0;//如果已打开则退出 if(!(ep=engOpen(cc)))return-1; elsereturn1; } 如果Matlab安装在本地计算机上,字符串cc中的内容为“{post.content}”,如果系统为客户机/服务器(Client/Server)的工作方式,Matlab安装在主机“host”上,可输入'\host\Matlib'。 (3)关闭Matlab引擎的函数 extern"C"declspec(dllexport)intMatCloseEng(void) { if(ep) { if(PA)mxDestroyArray(PA);//释放PA engClose(ep); ep=NULL; return1; } elsereturn0; } (4)执行Matlab命令函数: extern"C"declspec(dllexport)intMatExec(farchar*cc) { if(!ep)return0; engEvalString(ep,cc);//cc中放Matlab命令return1; } (5)根据已知数据创建mxArray变量: //注:cc:Matlab变量名num:数据的个数dd:已知数据 extern"C"declspec(dllexport)intMatCreateDoubleD(char*cc,intnum,doubledd );//指定Matlab中变量名,它必须是静态字符串! memcpy((char*)mxGetPr(PA),(char*)dd,num*sizeof(double)); engPutArray(ep,PA); return1; } (6)获取Matlab数据: //注:cc:Matlab变量名num:数据的个数dd:返回数据 extern"C"declspec(dllexport)intMatGetdoubleData(char*cc,intnum,doubledd ); if(result) {   pData=(double)mxGetData(result);   for(i=0;inum;i++)dd=pData;   mxDestroyArray(result);   return1; } return0; } 还可以根据需要定义其它一些函数如获取变量名函数intGetfh(charcc ofdouble;cc:char;i:integer; begin cc:='D';//Matlab中的变量名 MatGetDoubleData(@cc,10,dd); ListBox1.clear;//在一个列表框内显示读出的数据 fori:=0to4doListBox1.items.add(format('%.2f, )); end;  3、下面给出Delphi在Matlab中用sin(r)/r函数画出三维图形的程序,其余情况大家触类旁通吧^_^ procedureTForm1Button3Click(Sender:Tobject); begin MatExec(PChar('x=-8:5:8;')); MatExec(PChar('y=x',';')); MatExec(PChar('X=ones(size(y))*x;')); MatExec(PChar('Y=y*ones(size(x));')); MatExec(PChar('R=sqrt(X.^2+Y.^2)+eps;')); MatExec(PChar('Z=sin(R)/R;')); MatExec(PChar('mesh(Z);')); end; 四、方案总结 其实思路和上一种方案很像,不同的是是通过调用dll中的matlab应用程序接口指令实现数据传输,本方案所提供的动态连接库实际上是一个示范性的例子,根据实际需要还可以开发出功能更强大的函数,以满足不同应用场合的需要。就是要花费一定时间编写相关的dll咯^_^
3773 次阅读|0 个评论
[转载]Delphi与MATLAB的数据接口方案探讨(2)
ChenboBlog 2012-4-7 12:53
引用: http://hi.baidu.com/qinyong2008/blog/item/21bd658b155cc512c8fc7a9d.html 方案二基于DDE技术的动态数据交换 一、基本思路 方案一需要用文件形式来进行两者的数据传递,那么是否有两者直接数据传递的解决方案呢,答案是肯定的。我们知道DDE是基于Windows的一种消息机制,在客户机和服务器程序间通过互相传通消息进行“对话”,它允许两个或两个以上的应用程序之间进行实时的数据交换。根据这点,我们可以利用DDE来实现Delphi和matlab的数据传输。 二、DDE应用协议 DDE中提出对话的一方称为客户程序(client),而作出反应的一方称为服务器程序(server)。DDE服务器负责维护其他Windows程序所使用的数据,而DDE客户机则负责从服务器获取数据。应用程序之间的动态数据交换必须遵守DDE协议,DDE协议主要有三层,应用程序层(Application)、对话主题层(Topic)和对话项目层(Item),各层的定义分别为: 1应用程序层(Application) 应用程序层主要是建立对话的通道,DDE对话通常是由客户程序引起的,包括初始化有关参数、准备开始对话等。 2对话主题层(Topic) 对话主题是DDE服务器所能识别的数据单元,通常是一个文件名、窗体名,在Delph中还可以是Serverconv组件的名字、对于Matiab服务器,主题主要有两个:System和Engine,详见表一。 3对话项目层(Item) 对话项目层是用来确定客户程序和服务器程序进行动态数据交换的内容,如发送数据、接受数据或者数据库中的字段、表格中的单元等.在Delphi中应用程序中,就是DdeServerItem组件的名字。在Matlab中两个主题System和Engine分别包含有Systems,Format,Topics,EngEvalstring,EngSringResult,EngFigureResult等项目,在表一中可以查看详细情况. Madab和Delphi都支持DDE技术,既可以作为客户程序。又可以作为服务器程序、这里我们仅以Delph作为客户程序,Matlab作为服务器程序进行探讨,Delphi客户机通过DDE组件提供的函数与Matlab的DDE服务器模块进行对话,完成数据的动态交换. 三、Delphi的DDE组件 表1MatlabDDE服务器的组成 System主题 项目:功能: Systems包含System主题所支持的全部项目列表 Format包含MatlabDDE服务器所支持的全部数据格式名的字符串列表 Topics包含MatlabDDE服务器所支持的全部主题名的列表 Engine主题 项目:功能: EngEvalString发送命令到Matlab服务器中执行 EngStringResult从Matlab服务器中请求获取文本格式的数据 EngFigureResult从Matlab服务器中请求获取图形格式的数据 matrix从Matlab服务器中请求获取矩阵数据 Delphi提供了四个用于DDE的组件:Ddeclicntconv,Ddeclienlitem,Ddeserverconv和Ddeserverconv,其中前两个是用作客户程序,后两个是用作服务器程序.在将Delphi作为客户程序时,必须用到Ddeclientconv和Ddeclientitem组件、Ddeclientconv用于客户端同服务器建立对话和确立对话主题.重要的属性和方法有ConnectMode,Ddeservice,Ddetopic,Setlink,Pokedata.ExecuteMacro等:Ddeclientitem用于客户端注册对话项目常用的属性和方法有Ddeconv,Ddeltem,Lines,对话时与服务器程序密切相关,向服务器端发送的数据和从服务器端返回的数据往往都在于此组件的lines属性中。它们的具体用法和定义可以从Delphi帮助文件中查到。 四、MatlabDDE服务器 在将Matlab作为服务器访问时,必须提供服务器的名字、主题和项目.在Win32系统中,Matlab的DDE服务器名为Matlab,支持两个对话主题:System和Engine,每个主题下面有几个项目,通过它们可以完成不同的任务.从表一中可以查着其对应的功能. Madab作为服务器时,支持三种数据传输格式:文本格式、元文件图、XLTallle、其中文本格式用于存放空字符结尾的字符率数据格式.元文件图用于存放图形数据的格式,XLTable是为支持Excel所使用的一种特殊的数据格式. 五、Delphi和Matlab的DDE实现过程 DDE技术已经是非常成熟的windows进程间通信机制,Delphi和Matlab之间动态数据交换中我们将Delphi作为客户机,Matlab用作服务器。首先启动Delphi客户机,确立对话主题,然后连接Matlab服务器并建立DDE对话.在Delphi中,同服务器建立连接有自动和手动两种方式,可以通过declientconv组件的ConnectMode属性进行设置。前者必须调用Ddeclientconv组件的Openlink方法建立DDE对话,后者在连接时可以自动建立对话.确立对话主题并建立对话后就可以根据不同的项目内容,在Delphi和Matlab之间实现不同数据的动态交换了,如向Matlab服务器发送命令和数据,向服务器请求返回数据,包括图形数据和文本数据等。 六、方案总结 直接在Matlab与Delphi间实现数据传输,提高了运行速度,但是步骤较为烦杂,有时候会莫名其妙的出错-_-b 2003-8-1821:24:29方案三创造ActiveX对象实现数据交流 一、基本思路 ActiveX是由Microsoft制定的一种独立于编程语言的组件集成协议,它不受开发环境的限制。ActiveX控件能够在不同的环境中使用,包括Delphi,C++Builder,VC++,VB和InternetExplore等。Matlab和Delphi都支持ActiveX技术,因此,可以利用ActiveX自动化服务器和自动化控制器技术,实现Matlab和Delphi接口。 二、Matlab自动化服务器 自动化服务器是一种可以由其他应用程序编程驱动的组件,其核心是要包含一个或多个供其他程序创建和连接的基于IDispatch的接口。Matlab作为自动化服务器时,可以被Windows平台上任何作为自动化控制器的应用程序使用。MatlabActiveX对象在系统注册表中定义的名字(ProgID)为Matlab.Application.5或者Matlab.Application.Single。用Matlab.Application.5作为ProgID创建Matlab自动化服务器时,系统将不再另外初始化其他服务器,而是作为共享服务器完成所有的论求。使用Matlab.Application.Single时,Matlab自动化服务器将作为一个单独的服务器使用,而不与其他程序共享。对Matlab自动化服务器的使用,系统提供了五个函救:Excute,PutFullMatrix,GetFullMatrix,MinimizeCommandWindow,MaximizeCommandWindow。其中, Excute用于执行Matlab命令,PutFullMatrix和GetFullMatrix用于数据传递,MinimizeCommandWind和MaximizeCommandWindow用于界面窗口煤作。 三、Delphi自动化控制器 Delphi5提供两个函数用于ActiveX接口和对象编程:GetActiveOleObject和CreateOleObject,其格式为: functionGetActiveOleObject(constClassName:string):IDispatch; functionCreateOleObject(constClassName:string):IDispatch; 其中GetActiveOleObject用于访问当前运行的ActiveX对象表,返回指定的ActiveX对象;CreateOleObject用来创建指定的、宋初始化的ActiveX对象。可以通过调用这两个函数,创建一个Matlab自动化服务器的对象实例。 四、实例程序 这里给出一个具体的例子来说明在Delphi中利用ActiveX术实现Matlab的自动化。首先在unit的uses语句中加入usesComObj。然后加入下列语句: procedureTForm1.Button1Click(Sender:Tobject); varmatlab:variant; begin try matlab:=GetActiveOleObject('Matlab.Application'); except matlab:=CreateOleObject('Matlab.Application'); matlab:=CreateOleObject('Matlab.Application.5'); matlab.execute('a= ;'); matlab.execute('b= '); matlab.execute('plot(a,b)'); end end; 五、方案总结 此方案采用win32程序下较为通用的ActiveX方式进行数据交换,实现起来简单明了。但是需要注意,每次程序运行的时候,在创建对象的时候会花费很长的一段时间,会生成一个matlab窗口(这个令人很不爽!)。笔者还遇到一个问题,不知道是不是特例,就是同样的图像数据在Matlab下运行后的结果和通过Delphi运行后的结果有时候有点不一样,比如我现在正在搞的图像加密,在两个环境加密后的图像质量就是不同(算法一样),莫名其妙……
3326 次阅读|0 个评论
[转载]Delphi与MATLAB的数据接口方案探讨 (1)
ChenboBlog 2012-4-7 12:53
引用: http://hi.baidu.com/qinyong2008/blog/item/c271b4cc7895f11001e9289d.html KeyLife富翁笔记 (此作品参加“BorlandALM产品开发者竞赛参赛”,请大家给他打分。) 作者:yellowfish 标题:Delphi与MATLAB数据接口方案探讨 关键字:Matlab、科学计算、接口、数据交换 分类:开发技巧 密级:参赛 (评分:★★★★,回复:11,阅读:1710)raquo;raquo; 概述:本文阐述了如何利用Delphi灵活强大方便的编程能力和Matlab强大的科学计算能力,降低编写复杂算法的难度和时间,使Delphi算法程序的开发效率大大提高,收到事半功倍的效果。 关键字:Matlab、科学计算、接口、数据交换 引 言: 最近在搞一个数字图像加密的课题,其中涉及到大量的矩阵及其他科学运算,在用Delphi实现时,可以想象在编写算法的时候遇到了大量的问题,所以提出了这样一个想法:能否将后台运算模块通过某种接口的方式交由其他成熟的科学计算软件处理,而用Delphi从事其前台开发,这样将大大降低编写复杂算法的难度和缩短开发周期。相信这也是广大开发人员在遇到大量科学计算时所急待的问题,在论坛上也屡有人问起,笔者参阅了大量资料后归纳整理了几种方案,希望对大家有益^_^ Delphi与MATLAB数据接口方案探讨 前言: Delphi作为一种功能强大的编程工具,具有易学易用、开发效率高,界面制作美观方便等优点,因此被很多程序员所青睐。Pascal作为历史上第一种结构化的高级语言,在从事复杂算法编写方面也有着诸多优点,可是在软件开发快速运作的今天,用Pascal原始开发一些复杂的算法,不仅编译效率不高而且也影响开发进度,因此Delphi如何与科学计算软件相结合,从而高效地完成编程任务成为一个困扰很多程序员的问题。而Matlab就正是一种高效率的科学工程计算语言,它在矩阵运算、数值计算、数字信号处理、系统识别、自动控制、神经网络、图形显示等方面比其它语言有难以比拟的优势。将Delphi和Matlab相结合,利用Delphi灵活强大方便的编程能力,Matlab强大的科学计算能力就可以开发出功能强大、操作灵活的软件。 以下给出5类数据接口方案供大家参考: (为了便于大家浏览,几种方案将分贴显示) 方案一采用数据中转方式实现Delphi与Matlab交流.....................................2楼 方案二基于DDE技术的动态数据交换..................................................3楼 方案三创造ActiveX对象实现数据交流................................................4楼 方案四利用动态链接库技术实现二者交流.............................................5楼 方案五利用mideva编译脱离matlab环境的动态链接库(注:此方法笔者尚未成功).........6楼 2003-8-1821:21:00 查看评语raquo;raquo;raquo; 2003-8-1821:22:54方案一采用数据中转方式实现Delphi与Matlab交流 一、基本思路 Matlab输入数据的方法很多,其中利用M文件,直接把数据按元素列表方式引入Matlab工作内存方法,不仅语法简单,而且运行时只要输入文件名,Matlab就会自动按顺序执行M文件中的语句;Matlab数据输出的方法也有很多种,为了便于与Delphi应用程序接口,我们可以利用Matlab的指令Save输出数据。如指令Saveoutfile.datxy-ascii-double,可将变量x和y以16位ASCII码形式存入outfile.dat文件。 基于上述matlab数据输入,输出的方法,我们可以利用M文件为中转,实现Delphi和Matlab的数据交换,当是要注意以下几点: (1)由于Matlab的基本数据单位是矩阵,所以在delphi应用程序中我们只有通过文件变量,将参与运算的数据输出成M文本文件,以创建和保存矩阵数据。 (2)由于Delphi应用程序在前台运行,因此在应用程序中调用Windows函数WinExec,即可执行Matlab.exe。 (3)由于M文件,只有在Matlab集成环境中才能被识别和自动执行,而根据后台的要求不能显示地进入Matlab集成环境,考虑到Matlab环境变量由matlabrc.m文件定义,因此我们可以通过对matlabrc.m文件的修改(将Matlab要完成的输入数据、进行计算、输出数据过程、编写成M文件,加入matlabrc.m中),从而实现Matlab的后台运作。 二、Delphi如何将数据传递给Matlab 这里举例说明更直观一些^_^ 例:进行矩阵运算(b'*b)-1*b'*y',其中b是t*2矩阵,y是1*t矩阵。 在Delphi应用程序中,可以采用以下的程序段将参与运算的矩阵b、y保存成M文件,这样Matlab就可以通过执行相应的M文件,获得参与运算的矩阵b、y。应用程序段如下:(程序段中fb、fy是事先定义好的textfile类型的文件变量,b 、y是事先定义好的数组变量;'c:\matlabfile\delphioutb.m'是保存矩阵b的M文件路径及文件名,'c:\matlabfile\delphiouty.m'是保存矩阵y的M文件路径及文件名) *********创建保存矩阵b的M文件********* //注:在Matlab中整个输人矩阵必须以" ); ifj1thenWrite(Fb,',') elseif(it-2)and(i=1)thenwrite(Fb,';') elsewrite(fb,']'); end; CloseFile(Fb) *********创建保存矩阵y的M文件********* assign(fy,'c:\matlabfile\delphiouty.m'); Rewrite(Fy); write(fy,'y= '); CloseFile(Fy); 三、Matlab如何接受应用程序传递来的数据并进行计算 前面介绍过,由于M文件只有在Matlab集成环境中才能被识别和自动执行,而根据后台运作的要求不能显示地进人Matlab集成环境。但我们可以通过对matlabrc.m文件的修改,将Matlab要完成的操作编写成M文件,加人matlabrc.m中。下面笔者仍依前面例题的计算要求,来说明如何编写Matlab接收数据、进行计算、数据输出的M文件(取名为c:\matlabfile\Mymatlabfile.m). 1、用记事本输入以下代码,保存在自己的目录(如c:\matlabfile)下,取名为Mymatlabfile.m。 delphioutb//保存矩阵b的M文件 delphiouty//保存矩阵y的M文件 m=((b')*b')*(y') savec:\matlabfile\matlaboutfile.datm-ascii-double quit 2、打开matlabrc.m将其保存为一个备份文件matlabrcbak.m,然后对原文件进行编辑,将下列语句加在文件最后: ifexist('c:\matlabfile\Mymatlabfile.m') Mymatlabfile end 3、完成上述内容后,只要在应用程序中启动MATLAB,就会完成相应操作。 四、在Delphi中如何启动Matlab 将前面步骤处理完后,我们可以用以下程序隐式启动Matlab。 copyfile('c:\dsm\matlabfile\Mymatlabrc.m','c:\matlab\toolbox\local\matlabrc.m',false); winexec('c:\matlab\bin\matlab.exe',SW_MINIMIZE); 五、Delphi如何接受Matlab输出结果 Matlab将计算结果通过savec:\matlabfile\matlaboutfile.datm-ascii-double进行输出,所以我们可以通过下面程序获取计算结果,并将结果通过double类型变量mid放进数组a中:(Fa为textfle类型变量) ifFileExists('c:\matlabfile\matlaboutfile.dat')thenAssignFile(Fa,'c:\matlabfile\matlaboutfile.dat'); Reset(Fa); i:=0; WhilenotEof(Fa)do begin read(Fa,mid); a:=mid; i:=i+1; end; closefile(Fa); 另外,在应用上述步骤完成接口后,还需要在应用程序中添加以下代码,以还原Matlab原始环境参数设定: copyfile('c:\matlabfile\matlabrcbak.m','c:\matlab\toolbox\local\matlabrc.m',false); 六、方案总结 此方案利用文件形式进两个应用程序之间的数据传递,方法比较直观,在运行调试的时候可以较方便地传递数据的内容。但是,由于采用数据中转的方式,所以在有大量数据频繁传递的时候,运行速度受到很大影响。
2295 次阅读|0 个评论
[转载]Delphi与MATLAB数据接口方案初探
ChenboBlog 2012-4-7 12:52
引用: http://hi.baidu.com/qinyong2008/blog/item/2f62d4fdab48ee45d6887d9c.html Delphi与MATLAB数据接口方案初探 最近初步接触delphi和matlab互调的问题,查阅了相关的文章.以下的方案不错,可是当中有一些小纰漏,所以还是费了我一番工夫调试.为了使后来者能省去不必要的过程,将原方案进行调整,并且程序均编译通过,现将内容奉上与大家共享,有不妥之处望见谅!版权属于原文作者!! 一、基本思路 Matlab输入数据的方法很多,其中利用M文件,直接把数据按元素列表方式引入Matlab工作内存方法,不仅语法简单,而且运行时只要输入文件名,Matlab就会自动按顺序执行M文件中的语句;Matlab数据输出的方法也有很多种,为了便于与Delphi应用程序接口,我们可以利用Matlab的指令Save输出数据。如指令Saveoutfile.datxy-ascii-double,可将变量x和y以16位ASCII码形式存入outfile.dat文件。 基于上述matlab数据输入,输出的方法,我们可以利用M文件为中转,实现Delphi和Matlab的数据交换,当是要注意以下几点: (1)由于Matlab的基本数据单位是矩阵,所以在delphi应用程序中我们只有通过文件变量,将参与运算的数据输出成M文本文件,以创建和保存矩阵数据。 (2)由于Delphi应用程序在前台运行,因此在应用程序中调用Windows函数WinExec,即可执行Matlab.exe。 (3)由于M文件,只有在Matlab集成环境中才能被识别和自动执行,而根据后台的要求不能显示地进入Matlab集成环境,考虑到Matlab环境变量由matlabrc.m文件定义,因此我们可以通过对matlabrc.m文件的修改(将Matlab要完成的输入数据、进行计算、输出数据过程、编写成M文件,加入matlabrc.m中),从而实现Matlab的后台运作。 二、Delphi如何将数据传递给Matlab 这里举例说明更直观一些 例:进行矩阵运算(b'*b)*(b'*y'),其中b是3*2矩阵,y是1*3矩阵。 在Delphi应用程序中,可以采用以下的程序段将参与运算的矩阵b、y保存成M文件,这样Matlab就可以通过执行相应的M文件,获得参与运算的矩阵b、y。应用程序段如下:(程序段中fb、fy是事先定义好的textfile类型的文件变量,l是初值为1的整数,b、y是事先定义好的数组变量,存储用于构造矩阵的数值;'D:\matlab\yourfolder\delphioutb.m'是保存矩阵b的M文件路径及文件名,'D:\matlab\yourfolder\delphiouty.m'是保存矩阵y的M文件路径及文件名) *********创建保存矩阵b的M文件********* //注:在Matlab中整个输人矩阵必须以" ,','); l:=l+1; end else begin ifj3then begin Write(Fb,b ,';'); l:=l+1; end else begin Write(Fb,b ,']'); l:=l+1; end; end; CloseFile(Fb); *********创建保存矩阵y的M文件********* assignfile(fy,'D:\matlab\yourfolder\delphiouty.m'); Rewrite(Fy); write(fy,'y= ,',') elsewrite(fy,y ,']'); CloseFile(Fy); 三、Matlab如何接受应用程序传递来的数据并进行计算 前面介绍过,由于M文件只有在Matlab集成环境中才能被识别和自动执行,而根据后台运作的要求不能显示地进人Matlab集成环境。但我们可以通过对matlabrc.m文件的修改,将Matlab要完成的操作编写成M文件,加人matlabrc.m中。下面笔者仍依前面例题的计算要求,来说明如何编写Matlab接收数据、进行计算、数据输出的M文件(取名为D:\matlab\yourfolder\Mymatlabfile.m). 1、用记事本输入以下代码,保存在自己的目录(如D:\matlab\yourfolder)下,取名为Mymatlabfile.m delphioutb//保存矩阵b的M文件 delphiouty//保存矩阵y的M文件 m=(b'*b)*(b'*y') saveD:\matlab\yourfolder\matlaboutfile.datm-ascii-double quit 2、将D:\matlab\toolbox\local\matlabrc.m首先保存为一个备份文件matlabrcbak.m,然后对原文件进行编辑,将下列语句加在文件最后: ifexist('D:\matlab\yourfolder\Mymatlabfile.m') Mymatlabfile end 3、完成上述内容后,只要在应用程序中启动MATLAB,就会看到Matlab在启动后自动执行了Mymatlabfile文件,并且生成相应结果。 四、在Delphi中如何启动Matlab 将前面步骤处理完后,我们可以用以下程序隐式启动Matlab: 在上一步中我们在原文件修改后加它另存D:\matlab\toolbox\local\Mymatlabrc.m文件,然后在delphi中输入以下语句: copyfile('D:\matlab\toolbox\Mymatlabrc.m','c:\matlab\toolbox\local\matlabrc.m',false); winexec('D:\matlab\bin\win32\matlab.exe',SW_MINIMIZE); 实际过程就是先执行拷贝,将原来的matlabrc文件修改成我们期待的内容,然后执行matlab. 五、Delphi如何接受Matlab输出结果 Matlab将计算结果通过saveD:\matlab\yourfolder\matlaboutfile.datm-ascii-double进行输出,所以我们可以通过下面程序获取 计算结果,并将结果通过mid放进delphi中添加的memo组件中:(Fa为textfle类型变量) ifFileExists('D:\matlab\yourfolder\matlaboutfile.dat')then AssignFile(Fa,'D:\matlab\yourfolder\matlaboutfile.dat'); Reset(Fa); memo1.Clear; WhilenotEof(Fa)do begin readln(Fa,mid); memo1.Lines.Add(mid); end; closefile(Fa); 另外,在应用上述步骤完成接口后,还需要在应用程序中添加以下代码,以还原Matlab原始环境参数设定: copyfile('D:\matlab\toolbox\local\matlabrcbak.m','D:\matlab\toolbox\local\matlabrc.m',false); 实际就是将备份的文件拷贝回来,以恢复matlabrc原来面目。
2682 次阅读|0 个评论
[转载]数据接口连接器DB
zhoucheng0818 2012-4-6 08:36
D型数据接口连接器,用于连接电子设备(比如:计算机与外设)的接口标准。因形状类似于英文字母D,故得名D型接口。按照接口数量细分为A型(15针),B型(25针),C型(37针),D型(50针),E型(9针)。因此常见的计算机并口即为DB25针的连接器。而串口则应为DE9针连接器。由于早期的计算机的串口与并口都是使用DB25针连接器,而人们则习惯把字母B与D合在一起记了下来,当作D型接口的共同名字,以至于后来计算机串口改用9针接口以后,人们更多的使用DB9而不是DE9来称呼9针的接口。这一习惯进一步推广的结果就是如今人们使用DBxx来代表D型接口,数字xx则为接口的针数。
1343 次阅读|0 个评论
2003-06用VC++编写USB接口通信程序
lcj2212916 2011-11-21 21:45
http://radarew.5d6d.com/thread-515-1-1.html
2530 次阅读|0 个评论
[转载]转载:matlab聚类
Sunteresa 2011-11-4 14:37
学习中。。。 不知道WEKA中是否有这样灵活的接口函数。。。 ----------------------------------------------- 转载一: MATLAB 提供了两种方法进行聚类分析: 1 、利用 clusterdata 函数对数据样本进行一次聚类,这个方法简洁方便,其特点是使用范围较窄,不能由用户根据自身需要来设定参数,更改距离计算方法; 2 、分步聚类:( 1 )用 pdist 函数计算变量之间的距离,找到数据集合中两辆变量之间的相似性和非相似性;( 2 )用 linkage 函数定义变量之间的连接;( 3 )用 cophenetic 函数评价聚类信息;( 4 )用 cluster 函数进行聚类。 下边详细介绍两种方法: 1 、一次聚类 Clusterdata 函数可以视为 pdist 、 linkage 与 cluster 的综合,一般比较简单。 【 clusterdata 函数: 调用格式: T=clusterdata(X,cutoff) 等价于Y=pdist(X,’euclid’); Z=linkage(Y,’single’); T=cluster(Z,cutoff) 】 2 、分步聚类 ( 1 )求出变量之间的相似性 用 pdist 函数计算出相似矩阵,有多种方法可以求距离,若此前数据还未无量纲化,则可用 zscore 函数对其标准化 【 pdist 函数: 调用格式: Y=pdist(X,’metric’) 说明: X 是 M*N 矩阵,为由 M 个样本组成,每个样本有 N 个字段的数据集 metirc 取值为:’ euclidean’ :欧氏距离(默认) ‘seuclidean’ :标准化欧氏距离; ‘mahalanobis’ :马氏距离 … 】 pdist 生成一个 M*(M-1)/2 个元素的行向量,分别表示 M 个样本两两间的距离。这样可以缩小保存空间,不过,对于读者来说却是不好操作,因此,若想简单直观的表示,可以用 squareform 函数将其转化为方阵,其中 x(i,j) 表示第 i 个样本与第 j 个样本之的距离,对角线均为 0. ( 2 )用 linkage 函数来产生聚类树 【 linkage 函数: 调用格式: Z=linkage(Y,’method’) 说明: Y 为 pdist 函数返回的 M*(M-1)/2 个元素的行向量, method 可取值: ‘single’ :最短距离法(默认); ’complete’ :最长距离法; ‘average’ :未加权平均距离法; ’weighted’: 加权平均法 ‘centroid’ : 质心距离法; ‘median’ :加权质心距离法; ‘ward’ :内平方距离法(最小方差算法) 】 返回的 Z 为一个 (M-1)*3 的矩阵,其中前两列为索引标识,表示哪两个序号的样本可以聚为同一类,第三列为这两个样本之间的距离。另外,除了 M 个样本以外,对于每次新产生的类,依次用 M+1 、 M+2 、 … 来标识。 为了表示 Z 矩阵,我们可以用更直观的聚类数来展示, 方法为: dendrogram(Z), 产生的聚类数是一个 n 型树,最下边表示样本,然后一级一级往上聚类,最终成为最顶端的一类。纵轴高度代表距离列。 另外,还可以设置聚类数最下端的样本数,默认为 30 ,可以根据修改 dendrogram(Z,n) 参数 n 来实现, 1nM 。 dendrogram(Z,0) 则表 n=M 的情况,显示所有叶节点。 ( 3 )用 cophenetic 函数评价聚类信息 【 cophenet 函数: 调用格式: c=cophenetic(Z,Y) 说明:利用 pdist 函数生成的 Y 和 linkage 函数生成的 Z 计算 cophenet 相关系数。】 cophene 检验一定算法下产生的二叉聚类树和实际情况的相符程度 , 就是检测二叉聚类树中各元素间的距离和 pdist 计算产生的实际的距离之间有多大的相关性,另外也可以用 inconsistent 表示量化某个层次的聚类上的节点间的差异性。 ( 4 )最后,用 cluster 进行聚类,返回聚类列。 转载二: Matlab 提供了两种方法进行聚类分析。 一种是利用 clusterdata 函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法; 另一种是分步聚类:( 1 )找到数据集合中变量两两之间的相似性和非相似性,用 pdist 函数计算变量之间的距离;( 2 )用 linkage 函数定义变量之间的连接;( 3 )用 cophenetic 函数评价聚类信息;( 4 )用 cluster 函数创建聚类。 1 . Matlab 中相关函数介绍 1.1 pdist 函数 调用格式: Y=pdist(X,’metric’) 说明:用 ‘metric’ 指定的方法计算 X 数据矩阵中对象之间的距离。 ’ X :一个 m × n 的矩阵,它是由 m 个对象组成的数据集,每个对象的大小为 n 。 metric’ 取值如下: ‘euclidean’ :欧氏距离(默认); ‘seuclidean’ :标准化欧氏距离; ‘mahalanobis’ :马氏距离; ‘cityblock’ :布洛克距离; ‘minkowski’ :明可夫斯基距离; ‘cosine’ : ‘correlation’ : ‘hamming’ : ‘jaccard’ : ‘chebychev’ : Chebychev 距离。 1.2 squareform 函数 调用格式: Z=squareform(Y,..) 说明: 强制将距离矩阵从上三角形式转化为方阵形式,或从方阵形式转化为上三角形式。 1.3 linkage 函数 调用格式: Z=linkage(Y,’method’) 说 明:用‘ method ’参数指定的算法计算系统聚类树。 Y : pdist 函数返回的距离向量; method :可取值如下: ‘single’ :最短距离法(默认); ‘complete’ :最长距离法; ‘ average ’:未加权平均距离法; ‘ weighted ’: 加权平均法; ‘centroid’ :质心距离法; ‘median’ :加权质心距离法; ‘ward’ :内平方距离法(最小方差算法) 返回: Z 为一个包含聚类树信息的( m-1 )× 3 的矩阵。 1.4 dendrogram 函数 调用格式: =dendrogram(Z,p , …) 说明:生成只有顶部 p 个节点的冰柱图(谱系图)。 1.5 cophenet 函数 调用格式: c=cophenetic(Z,Y) 说明:利用 pdist 函数生成的 Y 和 linkage 函数生成的 Z 计算 cophenet 相关系数。 1.6 cluster 函数 调用格式: T=cluster(Z,…) 说明:根据 linkage 函数的输出 Z 创建分类。 1.7 clusterdata 函数 调用格式: T=clusterdata(X,…) 说明:根据数据创建分类。 T=clusterdata(X,cutoff) 与下面的一组命令等价: Y=pdist(X,’euclid’); Z=linkage(Y,’single’); T=cluster(Z,cutoff); 2. Matlab 程序 2.1 一次聚类法 X= ; T=clusterdata(X,0.9) 2.2 分步聚类 Step1 寻找变量之间的相似性 用 pdist 函数计算相似矩阵,有多种方法可以计算距离,进行计算之前最好先将数据用 zscore 函数进行标准化。 X2=zscore(X); % 标准化数据 Y2=pdist(X2); % 计算距离 Step2 定义变量之间的连接 Z2=linkage(Y2); Step3 评价聚类信息 C2=cophenet(Z2,Y2); //0.94698 Step4 创建聚类,并作出谱系图 T=cluster(Z2,6); H=dendrogram(Z2);
个人分类: image process|4253 次阅读|0 个评论
ENVI下处理modis产品的绝佳伙伴MODIS Conversion Toolkit (MCTK)
热度 6 dongyanqing 2011-8-26 22:14
ENVI下处理modis产品的绝佳伙伴MODIS Conversion Toolkit (MCTK)
2011年8月25日更新的MODIS Conversion Toolkit ,支持143种现有的modis数据产品直接处理,同时提供批量数据处理的IDL开发函数接口。 简介: The MODIS Conversion Toolkit (MCTK) is a plugin for ENVI that can ingest, process, and georeference every known MODIS product (currently 143) through your choice of an easy-to-use interactive widget interface or a fully-accessible programmatic interface. Supported products include: - Level 1A Uncalibrated Radiance - Level 1B Calibrated Radiance - Level 2 Swath - Level 2G, Level 3, and Level 4 Grid The interface allows you to take a "cafeteria" approach to MODIS data by providing a list of all available datasets within a file, from which you can choose the ones to process. The ENVI equivalents of MRT and MRTSwath are built in as well, which means that you can input a file, have its contents converted to scientifically meaningful values, and then project those contents into the coordinate system of your choice--all within one interface. Bow tie correction is also available for all swath products. The user guide (included with the plugin) contains: Descriptions of how the plugin interacts with each major MODIS product categoryScreen captures to aid in using the interactive versionA complete explanation of the programming interface with fully functional sample programs for each major MODIS product category.A list of all supported MODIS product。
个人分类: ENVI|12865 次阅读|12 个评论
电子产品接口标准化的问题
chemicalbond 2010-7-12 11:52
这个问题似乎非常普遍,比如各类电子产品的交流电变支流电的接口(adaptor)样式 输出电流, 不同公司的产品差别可能会很大,而且很多产品的接口容易坏, 造成很多不便。 我个人经历的产品接口故障就有手机,笔记本电脑,GPS,等等。今天笔记本电脑的充电器坏了(中国制造),本来想可以用旧电脑的充电器,一看电流相差不少,不敢用,只得再买个新的。
个人分类: 生活点滴|2321 次阅读|0 个评论
做项目设总的几点一会
liweiyin2009 2010-7-9 11:27
做项目设总的几点一会 大概还是从1973年开始我就开始涉足设总的工作,开始只是一个子项负责人,到1994年,才真正承担工程项目设总的工作,也就是秦山二期核电的设总,具体来说,是核岛的设总。 设总,其实全称为项目设计总负责人,它不同于一个设计院的总工程师,总工的职责是在技术方案方面负技术责任,分工种的总工是对相关工种的设计负最终技术责任。而设总,实际上是项目的设计组织者,更侧重在设计的计划管理方面,保证所有涉及的工种按照工程计划的要求完整地提供设计图纸。一个综合设计院会接手来自不同业主委托的设计任务,一旦接到任务,院长就由生产管理处安排项目设总。 任何一个设计,哪怕是一个小厂房,也会涉及不止一个工种,至少有工艺工种、自动控制、仪表、电气、建筑、结构、设备、给排水、暖通、压空、概算多个工种。对于我们的核工业,因为工艺过程和设备都带有放射性,为了防止对工作人员的伤害,还必须设有辐射防护计算工种,计算设备室的屏蔽厚度。对于核电或火电设计,还专门设有热工设计工种。也就是说,一个设总要和许多工种打交道。对于大的项目,一个工种就要配备许多人,设计全员的人数会高达数百人,要想使这么多人协调一致地工作,就要求设总从一开始将各工种的负责人汇集在一起,制定出既符合工程总计划的供图计划,又为各个工种所能接受的设计进度,这个进度是错综复杂的,因为,各工种相互制约,没有各自给出的接口资料,就无法开展自己的设计。设总的工作就是制定一个可行的出图计划和工种之间的配合进度并保证计划得以最终实施。设计工作直接影响一个工程的顺利进行,设计图纸的按计划交付是整个工程中的重要一环。因此,一个设计院的设总对工程起着重要的作用。我通过工作实践,对做好设总工作有以下一些不成熟的体会: 1. 必须熟悉设计工作的规律;一个刚参加工作的大学生,或者来设计院很久,但没有参加过实质性的设计工作,哪怕在学校中承担过多么重要的社团组织工作,有多么出色的组织协调能力,一下出任设总工作是不行的。设总必须亲自参加过一些项目的设计工作,才能明白,各工种需要什么样的接口资料才能开展工作,在设计的什么阶段各工种能够向其他相关工种提出相关的接口资料,然后接到资料的各工种需要多长时间能够组织出图。我记得,在1973年左右,我们已故的籍孝宏院长,曾命令我从组里派两个人去现场,在两个月内完成废水处理站的设计任务,我当时就拒绝了,资料都没有接到,我怎么知道什么时间可以出图,再说,即使拿到资料,对于那种规模的废水处理站,没有四个月根本不行,我不能让我们的组员去受这个罪。籍院长当时对我极不满意,认为我不服从指挥,当时该项目的设总向他作了解释,认为我的理由充分。设计工作有自己的规律,绝不可以胡来。我有这样的认识,是因为我曾经做了几个废水处理站的工作,慢慢地有了体会,得出了结论。在担任设总工作时就能听懂各工种的诉求,甚至在召开工种协调会之前就能自己编织一份计划初稿。如果设总自己从基层起来,譬如,做过工种负责人,和有关工种打过交道,加上虚心学习,认真听取各方意见,他就有数,对于不同难度的项目,各工种都需要什么样的接口资料以便动手,又在多长时间后可以向其他相关工种提出接口资料,再需要多长时间完成自己的图纸,人力状态如何,技术水平如何,如果不能按工程进度进行,又该采取什么措施。如果自己毫无经验,对所做厂房心中无数,往往会使协调会成为讨价还价会,会说话的压倒不会表达的,定出的计划不能表达真实的需求。也就是说,一个设总最好自己具有设计的全过程的经验,理解各个工种设计的特点和需求,才能做好各工种之间的接口协调工作。 2. 需要具备宽泛的知识:设总不是技术专家,可以说是个杂家,但是必须杂的在行。十 几个工种的专业质量,他们对设计组织的要求都有他们各自专业室的主任或者主任工程师把关,但是,理解他们的要求,防止他们不合理的要求,能够使各工种在总的工程进度的要求下互相理解、妥协和支持,设总就要有能力说服大家。技术工作是不可用行政命令的方式解决的,只有相当的专业水准使大家信服才行。我记得,在秦山二期做电缆路径时,堆芯剩余热冷却系统的一个仪表盘的就位问题居然卡住了电缆的路径设计工作,据说是,作为参照的大亚湾的图纸上的仪表盘位置表示不清,做过现场修改,而修改资料又没有到手,负责设计的工程师不肯给意见。到了影响出文件的时刻,我不得不干预了:我把有关人员找来,把图纸摊开:既然是该仪表盘属于安全系统的B系列,那么就可以在B系列通道里找地方,有图可参照固然好,没图可抄,一个仪表盘,我们自己还做不了主了?我们终于在通道墙面上,在电缆托盘敷设的下方确定了那个仪表盘的位置。对技术原则的把握,对技术规范的熟悉,和对各工种图纸阅读的快速能力,都能帮助我解决一些微不足道却卡了很久的问题,即使很强势的设计人员也能够配合。还有一次,我收到通信工种的图纸,快速地浏览之后,发现怎么缺了一层的图纸,这才发现,他们专业室主任没有给他们提供到手的最后一版的建筑接口图纸,他们的图纸当然得返工。 3. 需要不断深入,不断协调,以确保工程给定的交付图纸和文件的计划要求:一个工程项目,在各工种经过协调后虽说制定了配合进度,但是在实施工程仍然会出现不少问题,解决的方法之一是每个月的计划检查和再协调。但是,各个工种或各个室派来参加会议的人员不见得了解所有下面工作人员的问题,再说,设总只是协调计划,有些实属专业室的事项一般不在设总工作范畴之中,但是,如果解决不好,却会真正影响设计院承诺的交付文件和图纸的计划,设总也不能绝对坐视不管。譬如,秦山二期土建图纸出图时的人力不足的问题,管道配置图出图阶段,也是由于人力问题,将管道布置室的机构作适当调配的问题等等,这些都是在深入到各设计室、乃至设计组时发现的问题。在秦山二期设计后期,由于发现自控仪表文件和图纸按时交付有困难,在其他工种出图计划都基本落实的情况下,我曾打破常规,到自控仪表室蹲点,帮助协调了以前没有发现的工种之间接口不落实的问题,例如安全冷却水系统的自控资料,由于该系统与大亚湾核电站相比,有了改进,备用和冗余设备都有了变化,系统工艺设计人员,一是由于设计经验不足,不知如何满足控制人员的要求,二是对系统本身的操作运行了解不够详尽,给出的接口资料,使控制设计人员无法开展工作,作为设总,我出面组织多次协调,终于使工作顺利开展。其次,我还在深入的同时,发现该室内部,控制工种和仪表工种之间的接口协调方面存在一些不足,作为设总,两个工种之间的协调也不能说是越过职权,事实上我的蹲点曾经很受欢迎,与他们的是领导和设计人员都交了朋友,对帮助他们按计划顺利出图,他们心存感激。就和所有搞其他管理的工作一样,不是光坐在办公室里下任务或召集会议,在会议上搞平衡,而是深入第一线。下去不是指手画脚,而是发现问题,以自己的有利身份,帮助下面解决问题,我认为这不是越权。 最后,设总主要的职责是计划管理,但是,设计质量与计划是密不可分的。设总在各工种出的主要文件和图纸的签字栏的最上面代表设计院做最后签字,实际上就是全面负责,接口资料的正确提供,最后文件和图纸是否符合接口资料,是质量保证中的重要环节。 我的这点体会是我个人工作的一点体会,每个做设总的都有他们各自的经验和工作习惯,特别是行业不同,工程开发的成熟程度不同,项目的大小、难易不同,设总的工作方式都会有所不同。我是应网友在看我的人身故事时的留言,希望介绍一些工程管理经验的情况下,我做的一些回忆,其实也不能盖全,但愿对做设计工作的管理人员会有些帮助。请原谅我写作的粗陋。
个人分类: 未分类|5957 次阅读|5 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-13 16:27

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部