Posts

Showing posts from 2016

Python Visa

Image
背景 作为一名凝聚态物理学生,做科研的大部分时间都在和各种测量仪器打交道,我最常用的要数Keithley 2400, 2410等测量电信号的仪器了,Keithley仪器的分辨率还是很高的,2400测量电压和电流都能精确到纳(10^-9)的量级,6517更是能达到皮(10^-12)的量级, 非常了不起。实验室用来控制这几台仪器的程序都是Labview程序,属于G语言吧,研一刚进实验室的时候师姐给我讲了一个多小时才给我讲明白一个简单测量IV的程序流程,研一寒假前为了能够实现Labview调用的子程序中的一个参数能够在图表上实时显示,费了老大劲了,虽然最终实现了,但现在基本忘记怎么做的了,总之很复杂。看一下Labview的程序(其实就是画图啦: 前面板UI还好,但后面板程序图真是太不具有可读性啦,扩展性也很差,想添加个新功能得画半天图,于是我想如果能用Python控制这些测量仪器就好啦,这样就可以把每个测量功能封装成一个函数,需要扩展新功能的话直接调用再修改就好啦,抱着试试看的态度(买了一疗程)在github上搜索Keithley真的搜出来几条Python写的控制程序,好开心,于是下定决心把自己常用的几个Labview测量程序Python化! 1. 环境搭建 首先是接口的连接,要通过Python连接上GPIB接口需要对应的库,这里用到的是pyvisa, 官方教程在 这里 , 我用的Python IDE是pycharm,所以直接在pycharm上搜索安装pyvisa就好了(真的很方便),但根据pyvisa的说明还需要安装 National Instruments’s VISA ,去 官网 下载适合自己电脑的版本,由于目前Linux平台只支持32位的,而我的是Ubuntu 14.04LTS,没办法,只好装在win10上了,pyvisa和National Instruments’s VISA都安装成功后就可以进行下一步了 2. 连接仪器 如果用的台式机,又有GPIB扩展槽,直接连上仪器就行了,我用的笔记本,所以还需要一条USB-GPIB线,这里用的是KUSB-488A ,第一次用肯定要装驱动的,若不能自动安装则需要去官网下载驱动,一切就绪后,执行以下Python语句以检测是否成功连上仪器: import visa rm = visa.Resou

OpenNI/NITE Installation on Windows

OpenNI/NITE Installation on Windows   May 2014 : PrimeSense was bought by Apple at the end of April, and the  OpenNI.org  website was shut down. Fortunately, several sites have set up archives of the old OpenNI and NITE software, such as  Simple-OpenNI  and  Structure Sensor . When looking through these archives, it's important to remember that the code examples in my book use OpenNI  version 1 . It's quite different from version 2, which sports many changes to the skeleton and hand detection functions, resulting in big changes to NITE as well. In other words, you need to find archive copies of  version 1  of OpenNI and NITE to run my code. The following instructions explain how to do that. This page is written in the form of a checklist. If you prefer a wordier explanation, then please have a look at section 3 of the  draft chapter . Remember that it refers to the now-defunct OpenNI website from 2012, so ignore any weblink information in that chapter.   1. Clean Up
Excel 设置数据有效性实现单元格下拉菜单的 3 种方法 一、直接输入: 1. 选择要设置的单元格,譬如 A1 单元格; 2. 选择菜单栏的“数据”→“有效性”→出现“数据有效性”弹出窗口; 3. 在“设置”选项中→“有效性条件”→“允许”中选择“序列”→右边的“忽略空值” 和“提供下拉菜单”全部打勾→在“来源”下面输入数据, 譬如“1,2,3,4,5,6,7,8,9”(不 包括双引号, 分割符号“,”必须为半角模式)→按“确定”就 OK 了, 再次选择该 A1 单元格, 就出现了下拉菜单。 二、引用同一工作表内的数据: 如果同一工作表的某列就是下拉菜单想要的数据,譬如引用工作表 Sheet1 的 B2 : B5 , B2 : B5 分别有以下数据: 1 、 2 、 3 、 4 ,操作如下: 1. 选择要设置的单元格,譬如 A1 单元格; 2. 选择菜单栏的“数据”→“有效性”→出现“数据有效性”弹出窗口; 3. 在“设置”选项中→“有效性条件”→“允许”中选择“序列”→右边的“忽略空值” 和“提供下拉菜单”全部打勾→在“来源”下面输入数据“=$B$2:$B$5”, 也可以按右边带 红色箭头的直接选择 B2 : B5 区域→按“确定”就 OK 了,再次选择该 A1 单元格,就出现了 下拉菜单。 三、引用不同工作表内的数据(必须用到定义名称) : 如果不同工作表的某列就是下拉菜单想要的数据, 譬如工作表 Sheet1 的 A1 单元格要引用工 作表 Sheet2 的 B2 : B5 区域,工作表 Sheet2 的 B2 : B5 分别有以下数据: 1 、 2 、 3 、 4 ,操作 如下: 1. 定义名称: 菜单栏→“插入”→“名称”→“定义”→弹出“定义名称”窗口, 在“在当 前工作薄中的名称”下面输入“DW”(可 以自己随便明明)→“引用 位置”下面输入 “=Sheet2!$B$2:$B$5”, 也可以按右边带红色箭头的直接选择 B2 : B5 区域→按“添加”后 再按“确定”完成第一步。 2. 选择菜单栏的“数据”→“有效性”→出现“数据有效性”弹出窗口; 3. 在“设置”选项中→“有效性条件”→“允许”中选择“序列”→右边的“忽略空值” 和“提供下拉菜单”全部打勾→在“来源”下面输入“=DW”,“DW”就是刚刚定义好的名
Image
CANoe 入门 Step by step系列(三)简单例子的剖析     最好的学习方式是什么?模仿。有人会问,那不是山寨么?但是我认为,那是模仿的初级阶段,当把别人最好的设计已经融化到自己的血液里,变成自己的东西,而灵活运用的时候,才是真正高级阶段。正所谓画虎画皮难画骨。但初级阶段仍然是必须经历的过程,他会使你在达到高级阶段的过程中少走很多弯路,下面我们来迈出这一步。先研究一下别人的简单例子。     最好的例子莫过于Vector本身的Demo了,这个在安装完CANoe之后就会被自动安装。先看最简单的一个,名字叫Easy,但并不简单哦,比我们之前介绍的所有的东西都整合再一起了,很简单,但很全面。但是假如你说,这个我自己也可以完全自己写出来(并不是仅仅是看懂哦),那么我可以肯定的说,在工作中,你完全可以胜任一般的任务要求哦~,剩下的只是工作量的问题了。但我相信到现在为止,你们很多人,都无法写出这样的程序,所以我建议你们把这个程序好好的研究明白,这点很重要。废话不多说,上图,下面是打开运行后的界面。 通过面板可以控制,及显示很多动画效果,做的非常的漂亮。在其余的窗体也将主要的数据以图表等表现方式呈现出来。 我们先看一下DBC的内容吧 Signals: EngineSpeed  车速信息 FlashLight      双跳灯 HeadLight      大灯 OnOff            引擎状态 Messages: EngineState  引擎状态:包含的信号有OnOff,EngineSpeed LightState    灯光状态:包含的信号有FlashLight,HeadLight Network nodes: Display        显示节点,接收所有消息 Engine        引擎节点,发送EngineState 消息 Light          灯光节点,发送LightState 消息 Environment variables:   环境变量,一般与界面的组件相关联,这样就实现了图形化界面的控制与显示,下面就是关联的界面组件 EnvEngineSpeedDspMeter   EnvEngineSpeedDspText    Env
Image
CANoe 入门 Step by step系列(二)CAPL编程 CAPL就是Communication Application Programming Laguage的缩写,CAPL类似于C语言的语法,因此所有的语法请参考C语言教程,这里不在这里进行详述,关于C语言,毫无疑问的,首先推荐大家看谭浩强老师的书,经典中的经典,看完这本C语言应该没问题了。CAPL在CANoe中起到重要的作用,他将所有的部分联系起来(请看下图)现在我们给予上一节的基础上,来着重介绍CAPL编程。 CAPL语法是C语言的,又有一些C++的特性,this指针,事件等,对于事件的理解可以学习任意一种面对对象语言,首推C#.NET,可以参考我的博客学习,当然这个似乎比CAPL本身更加难,事件也更加多,但这并不妨碍对事件的理解,其中的事件类型如下图: 下面来几个小例子帮助理解 来个CANoe版本的hello world!来兴奋一小下吧。开整~ 在打开CANoe,新建个工程,在Simulation Setup中加个Network node ,点铅笔,忘了吗,上一节刚讲过,右键Start->New,键入如下代码 编译后,关闭CAPL Brower。运行CANoe工程,结果如下,哇塞成功咯,好有成就感啊。 这个例子似乎跟CAN通讯没啥太大关系啊,好,我们接下来再做一个例子 运行结果如下,按键盘b键,将发送一个CAN消息,连dlc是啥都不知道的同学,推荐先学习一下CAN基础知识,推荐瑞萨公司的《CAN入门书》,讲的非常的好。 运行刚刚的那个例子你会发现,按一下b,只发送一条消息,但在实际应用中CAN消息都是循环连续发送的,我们要对刚刚的程序进行一些修改。完成这样的功能。程序如下: variables {     message 0x400 msgA = {dlc=1};     mstimer timerA;     int conditionA = 0; } on key 'a' {     conditionA = !conditionA;     if(conditionA ==1)     {         setTimer(timerA,200);     } } on timer time
Image
CANoe 入门 Step by step系列(一)基础应用 CANoe是Vector公司的针对汽车电子行业的总线分析工具,现在我用CANoe7.6版本进行介绍,其他版本功能基本差不多。 硬件我使用的是CAN case XL. 1,CANoe软件的安装很简单,先装驱动,再装软件。安装完成,插上USB,连接硬件,这样在控制面板中,Vector Hardware 进行查看 通过查看信息可知,CANcaseXL中的两个piggy,一个是251(高速CAN),一个是7269(LIN),另外常用的还有1054(低速CAN,或称容错CAN),因为CANcaseXL中只能支持两路通讯,这样piggy可以自由组合 2,硬件连接正常,打开CANoe软件 File->New Configuration 可以选择新建工程的模版,我们这里选择CAN_500kBaud.tcn,这样新建了波特率为500K CAN工程,可以File->Save Configuration,进行保存 3,接下来就要使用CAN db++ Editor工具对总线网络节点,消息,信号,进行定义了。 点击工具栏的这个图标    ,或 开始菜单中找这个工具启动 启动后,File->Create Database,选择CANTemplate.dbc,选择目录及文件名,进行保存 右键 Network nodes->New ,进行网络节点的定义,这里只需要填写Name即可,例如:Node_A 然后添加Node_B,完成后如下图,这样在Network nodes目录下面添加出来两个节点 节点添加完成后,下一步添加CAN消息,右键Messages->New,这是需要定义名称,ID,DLC等信息,如下: 然后在Transmitters页面,点击Add按钮,添加Node_A为发送节点,意思就是说,此消息是从Node_A节点发送出来的 其实还有一种方法就是,此时暂时不定义发送节点,然后直接以拖曳的方式拖曳到发送节点上,功能上是一样的 有了消息,消息里携带的东西自然是信号咯,那么我们开始创建一个信号 右键Signals->New,填写如下信息 信号当然要放到消息中咯,切换到Messag