Allegro-Skill-axl函数简介

Allegro-Skill-axl函数简介
Allegro-Skill-axl函数简介

Allegro Skill axl函数简介

allegro skill简介

1. AXL-SKILL

专用于allegro的skill被称为AXL-SKILL,只有使用这些专用的函数才可以直接访问allegro 的database。结合skill语法和这些专用函数可以编写出实现各种功能的命令。专用于allegro 的skill都是以axl开头,比如axlClearSelSet()。

2. 运行AXL-SKILL

在allegro中输入skill就得到了AXL-SKILL的运行环境,在这样的环境中可以直接调用AXL-SKILL命令/函数,另外输入set telskill可以得到一个尺寸大小可调的skill开发窗口。(万一没有弹出窗口,尝试在allegro菜单里面,选择setup->user

prference->skill->telskill----OK)

3. AXL-SKILL Database

allegro中的每个对象object(比如IC元件,net)都有一个对应的dbid(database identifiers),AXL-SKILL操作allegro的也正是这些dbid。

dbid对象:在不同的级别上的dbid是不一样的,比如在Design以及包含的database对象有Property Dictionary,Lines,Text,Polygons,Shapes,Property Definitions,DRCs,Vias that are Padstack object types,Symbols that are Symdef object types,Components,Nets;而在Symbol级别上则是PPins that are Padstack object types,Vias that are Padstack object types,Lines,Arcs,Text,Polygons,Shapes。

allegro skill database对象类型

1. database对象描述

1.1 对象类型

Figure objects:Arcs,Branches ,Design Files,Drcs,Lines,Paths ,Polygons ,Ppins,Shapes ,Symbols ,Tees,Vias,Pads,Padstacks,Symdefs;Logical objects:Components ,Functions,Function Pins,Nets;Property dictionary objects;Parameter objects:Design,Display,Layer Group,Layer,Textblock Group,Textblock。

1.2 基本操作

尽管有如此之多的类型,但是在allegro中的操作其实就是找到合适的database元素,然后对其操作就好了。只要保证被访问的元素的dbid有效,就可以对其进行处理。

2. Figure类型

Figure在allegro PCB Editer里面一般被成为几何形状,一个Figure类型的元素通常具有如下的属性。

常见的Figure属性

属性名类型描述bBox bbox Figure’s bounding box branch dbid For etch, the fi gure’s branch parent layer t_layer Layer of figure, nil if object is multi-layer parent

dbid Nonconnective owner net dbid Net object if figure is associated with a net

注意: 对于所有空(dummy)网络的Figure, 它们的net属性都是"", 而不是nil。

Figure有很多的类型,每个类型都有很多个属性,具体的信息请参考algroskill.pdf文档的

第二章,这里只列出其中的Line。Line的属性列表(除Figure类型常见的属性以外的部分) 属性名类型描述isEtch t/nil t = a CLINE; nil = a LINE lineType s_type symbol: horizontal, vertical, odd objType string Type of object, in this case "line" parent

dbid Path, polygon, or shape startEnd l_point Start and end points width float Width of line

3. Logical类型

Logical类型其实就是和电气有关的属性,比如网络连接(net),电子器件{component)等。Logical类型通常都具有objType, prop, and readOnly3种属性。如果你选择了一个component,那么它的objType就是component,如果选择的是pin,则objType属性值就是pin......

一个简单的例子Bus(总线),其它的Logical类型请参考Cadence的algroskill.pdf文件

属性名类型描述

groupMembers l_dbid List of xnets of the bus

name string Name of the bus objType string “group” type string “BUS”

4. Property Dictionary类型

在allegro的应用中会根据工作的需要自己定制(创建)属性——用户定义的属性(user defined properties)。Allegro支持用户创建具备如下特性的属性

NETS,COMPONENTS,FUNCTIONS PINS,VIAS,SHAPES,SYMBOLS,CLINES,LINES,DRCS,FIGURES,DESIGNS,COMPDEFS,PINDEFS,FUNCDEFS。如果你创建了一个只包含SYMBOLS类型的属性,那么你创建的这个属性只能被赋给Allegro中的Symbol对象,而不可以赋给一个net或其它非Symbol的对象。

5. Parameter类型

Parameter的简单理解就是Allegro中个各个设置参数,举个简单的例子,系统(Design)级别的参数列表。Design Parameter属性

属性名可设置否? 类型描述accuracy no integer Number of decimal places of accuracy bBox no bbox The desig n’s bounding box height no float Height in user units objType no string Type of object, in this case "paramDesign" units no string Type of user units (mils, inch, micron,millimeter and centimeter) width no float Width in user units xy no point Lower left corner of design

注意:可设置否表示的是能否通过函数axlParamSet来设置。下一章将主要讲对Allegro Parameter的操作,对参数的读取,修改与更新等等。

allegro skill Database操作相关函数

5.1 Database Read函数

和以前一样,这里只介绍部分的函数,其它的函数请参考algroskill.pdf文件。axlDBGetDesign() => dbid,当前design的dbid,基本上来说整个design的所有信息都可以通过这个dbid得到。比如design有多少个component,每个component的dbid;比如design有多少drc,每个drc又分别是什么等等。

axlDBGetAttachedText(o_dbid) => text dbid,得到o_dbid对象所具有的(被attached的)text 的dbid列表。该函数常用于在一个包含很多text的symbol对象上查找特定text的应用中。比如我们通常会把一个design放在适当尺寸的sheet中,对应于design的各个层,sheet 也会有对于的页码来表示,比如sheet的第1页是T op层,那么int1层可能就是第2页,如果你想写个程序来实现页码的自动更新,就会用到这个函数来找到需要被修改的字符(text),然后用后面将要说到的Database Create相应函数来修改选中的字符。

axlDBGetPad(o_dbid t_layer t_type) => pad dbid,获得pin,via,padstack相应层的特定pad。比如axlDBGetPad(dpin “Etch/T op" ”anti“)=>dpin对象在Top层的anti-pad的dbid。

通过这个dbid又可以进一步得到pad的一些相关属性。

axlDBGetPropDictEntry(t_name) => propdefinition,得到user defined properties里面设置的各个属性的信息,比如属性类型,应用的对象。

axlDBGetProperties(o_dbid [lt_type]) => l_results,得到o_dbid所具有的properties列表,allegro默认的或者是user defined。

axlDBIsFixed(o_dbid) => t/nil,判断一个对象是不是被fixed了。通常在用户程序想修改一些design的对象的时候,必须先确定该对象是不是被fixed了,fixed 对象是不可以被修改的。(用户必须先给fixed的对象un-fixed,然后才能进行修改)

axlDBGetShapes(t_layer) => shape dbid,一种获取指定层所有shape的快捷方式。(通常的获取对象的方式都是先要设置FindFilter,然后addselect,再getselset,3步才可以。)

5.2 Database Create

首先allegro本身不支持的操作使用下面将要给出的AXL-Skill函数也是无法实现的。比如allegro不支持将一个cline画到非Etch 层去,那么用axlDBCreatePath()也无法在非Etch 层Create一个cline的。对于非法操作,函数的返回值都是nil。

要想让你create的对象立即显示出来有2种方法,运行axlDisplayFlush()命令来刷新allegro 的显示状态,或者运行一个allegro本身的命令,否则的话你create的对象是不会被显示出来的。

5.2.1 Path部分的函数

Path指的是各种形状的Line。Path总会有个起点有个终点,axlPathStart函数用于确定起点,而终点则是Path里面的最后一点。axlPathStart(l_points [f_width]) => r_path,产生一个path对象并确定起点axlPathArc(Radius/Angle/Center) => 这里的三个函数都是用来

生成曲线的axlPathLine() => 向一个path末尾添加一个点axlPathGetWidth(r_path) => 得到一个path的宽度,如果一个path中的各个segment的宽度都不一样,可以使用axlPathSegGetWidth()函数。axlPathSegGetEndPoint(r_pathSeg) => 得到path的最后一个点,相关的函数还有axlPathGetLastPathSeg()用来得到path的最后一个segment。axlDBCreatePath()和axlDBCreateLine(),将不可见的path或point列表转变成可见的实际

存在的Line,Create在不同的layer,将产生不同的对象,比如在Etch layer将产生Cline 对象,在Silkscreen layer就是些简单的Line。

5.2.2 Shape部分函数

Shape是几何图形,所以Create Shape通常需要先提供一个boundry(Shape的边界/区域),而这通常有2种方式,其一是使用上面讲到的Path函数来Create一个闭合的区域,其二是用Polygon函数来为Shape提供一个Polygon。

5.2.2.1 Polygon相关函数Polygon是多边形的意思,其实和Shape一样(根据Polygon 生成的Shape,所以当然是一样的),只是Polygon是不可见的,而Shape是可见的。Polygon 的操作函数之所以不并入Shape我想可能是因为每次对Shape形状的改变allegro都会update整个design的shape,顺便还要update DRC(Shape和On-Line Drc没有disable 的情况下),这都是些很耗时的操作。Polygon的任何操作都不会影响到design,直到当它最后呈现为Shape时。

axlPolyFromDB(),获得指定对象的Polygon,这是一个非常好用的函数,比如有个形状很怪异的Pad,而你必须根据这个Pad画出个Shape,这个时候你就可以直接用这个命令直接得到那个Pad的Polygon,然后就可以生产Shape了,很简单。

axlPolyOperation(),Polygon的一些操作,比如多个Polygon以某个规则(AND OR ANDNOT)组合到一起,形成一个/多个新Polygon。

axlPolyExpand(),将Polygon扩展/压缩一定的尺寸

示例: 实现allegro的merge shape的命令 a. 选择需要被merge的Shape

b. 使用axlPolyFromDB函数得到每一个Shape的Polygon

c. 使用axlPolyOperation函数的"AND"规则,将多个Polygon形成一个

d. 删除选中的所有Shape

e. 使用下面将要提到的axlDBCreateShape命令生成新的Shape 5.2.2.2 Shape相关函数axlDBCreateOpenShape,这个函数是用来Create一个Open 状态的Shape的,Open的意思是可以在Create的Shape上再添加Void。axlDBCreateCloseShape,这个函数是前一个函数的补充,Open状态的shape使用了这个函数就被Close了,Close意思是Shape不可以再添加Void了。

axlDBCreateShape, 这个函数直接Create一个Close的Shape。

5.2.3 和Path无关的函数

axlDBCreateExternalDRC,create一个用户自定义的DRC,通常是在用户自定义的检查中axlDBCreatePadStack,Create一个新的Padstack,比如你想要用一种新的Via,但是Library 中还没,就可以使用该命令Create一个Padstack,然后用axlDBCreateVia命令生成一个axlDBCreateT ext,比如前面提到的自动修改字符的操作,这个命令就可以生成指定的字符。

5.2.4 Property函数

axlDBCreatePropDictEntry,在user defined property列表中创建一个新的property类型axlDBAddProp,将指定的property赋予特定的对象,比如将Fixed Property赋予一个Component,这个和allegro本身的Fixed命令是一样的。

5.3 Database Group

Group比较简单,相关的函数也不是很多。axlDBCreateGroup,create一个新的Group 对象axlNetClassCreate,create一个NetClass对象axlRegionCreate,create一个Region对象

NetClass和Region是16.0以后新的属性

5.4 Database Attachment

这里说到的Attachment是attach到design的database中的。

axlCreateAttachment(t_attachmentId t_passwd x_revision s_dataFormat t_data ) => Create一个名字/ID是t_attachmentId的attachment,t_password设定密码,x_revision

确定版本,s_dataFormat将决定t_data的数据类型。axlGetAllAttachmentNames() => 得到design Database中所有attachment的dbid列表。

axlGetAttachment(t_attachmentId [s_dataFormat]) => 获得指定attachment的value。5.5 Database Transaction

这里又有一组比较好用的函数axlDBTransactionStart() => n_Mark,得到一个mark值

可以为其余Mark,Oops,Rollback,以及Commit命令所用。

axlDBTransactionMark(n_Mark) => 使用n_Mark来标记该命令运行前design的状态,方便后面的Oops和Rollback操作。axlDBTransactionOops(n_Mark) => 取消最近一次的axlDBTransactionMark以来的操作,使得design返回Mark前的状态。和allegro中的Oops 命令是相似的。axlDBTransactionRollback(n_Mark) => 是database Transaction的一次Undo操作,相当于allegro中的Cancel操作。axlDBTransactionCommit(n_Mark) => 确定一次transaction的完成,之后n_Mark将不再有效,也即不能再执行Oops/Rollback 操作了。另2个关联的函数:axlTransformObject(),早已经在之前的章节介绍了。axlDBCloak(g_func [g_mode]),将一些可能会引起shape update或者drc update之类的比较耗时的函数/命令嵌入在这个命令中运行会比较省时。

另外:举个简单的例子说明为什么这个命令好用。假设你要编写一个实现Symbol横向或者纵向对齐的命令,最简单的想法就是让用户选择需要移动的Symbol,然后记录下各个Symbol的coordinate,rotation,mirror,name,type等等参数,对应于Opps或者Cancel 操作就是利用之前备份的那一大堆数据来恢复现场。这里涉及一大堆的数据管理,而且当用户同时选择了n个symbol然后又去掉了部分选择,以及在done掉命令之前有做过几次Opps和几次transaction,这个数据的管理会很让人伤脑筋。然而通过这里介绍的几个命令,就很简单了,只要在transaction之前Mark一下(记录现场),Opps,Cancel之类的操作只是简单的恢复到Mark点就好了,不用管Mark以后用户是怎么个操作的,是不是很简单?

5.6 Database Miscellaneous

举几个很适用的函数,其它的请自行参考学习了。axlAirGap(),功能如同allegro中的Measure结果中的Airgap。axlDBGetLength(),功能如同allegro的Show Element命令选择一个Cline显示长度一样。axlGeoPointInShape(),这个命令能检验一个Point 是不是在特定的Shape里面。axlChangeNet(),改变指定对象的net name,不过因为一些功能方面的限制,其实适用性不强。

allegro skill Parameter操作函数

正如在allegro skill database对象类型中提到的,一个PCB Editer设计中会有很多的Parameter,比如在design级别就有设计的精度,设计的版面尺寸,单位等等。在AXL-Skill 中有一系列相应的函数可以直接读取以及修改这些Parameter值。

2. 1 获取Parameter值的通用函数

2.1.1 获取Parameter值的函数axlGetParam 函数定义:axlGetParam

( t_parm_name ) => o_paramDbid/nil 参数t_parm_name要求:被查询的parameter的名字。这个名字必须符合如下规则:

paramT extBlock:<#> where # is 1-16 (Example: axlGetParam("paramT extBlock:1"); 默认的block只到16,对于大于16的block,如果系统里面有设定就可以同样得到,比如说有block 30,就可以这样得到axlGetParam("paramTextBlock:30") )

paramDesign paramDisplay

paramLayerGroup: where name is legal Allegro class name paramLayerGroup:/paramLayer: artworkList of film names artwork:

testprep 返回值o_paramDbid:返回值是个param型的dbid,该dbid将可用于axlSetParam函数来修改相应的Parameter。示例:

axlGetParam( "paramDesign") => param:107955700(返回一个param类型的dbid, 该dbid 包含了design的parameter信息)

axlGetParam("paramLayerGroup:ETCH") => param:107955760(返回的dbid包含系统的ETCH相关信息,比如有几个ETCH层)

axlGetParam("paramLayerGroup:ETCH")->?? => (objType "paramLayerGroup" name "ETCH" visible nil nChildren 4 groupMembers ("TOP" "INT1" "INT2" "BOTTOM") color

-1)(说明:axlGetParam("paramLayerGroup:ETCH")将得到一个dbid,而->??操作将得到该dbid的所有直接相关属性,objType说明该dbid的对象类型是paramLayerGroup,

nChildren=>4表面当前的design有4 个Etch层,groupMembers对应了具体的4个Etch层名字) axlGetParam("paramLayerGroup:ETCH")->groupMembers => ("TOP" "INT1" "INT2" "BOTTOM") 2.1.2 设置Parameter值的函数axlSetParam 函数定义:axlSetParam ( o_paramDbid ) => o_paramDbid/nil

参数o_paramDbi要求:axlGetParam函数的返回值返回值o_paramDbid:返回值类型和axlGetParam返回的一样使用方法:Originalparam = axlGetParam( "paramDesign"),做一些其它的操作可能涉及到多个系统参数的改变,然后通过axlSetParam(Originalparam)命令来使系统所有的参数设置恢复之前保留的值。(参考后面提到的类型相似的axlVisibleGet和axlVisibleSet函数)

2.2 Color操作函数(部分)

2.2.1 Allegro中的Color Allegro支持2种访问Color的方式,预定义的color和allegro database color。预定义的color有'black,‘'white,'red,'green,'yellow,'blue,'multivalue - use dfor fields where value not the same,'button - current color of button faces (grey)。database color是以[1-24]之间的整数表示的,0被保留为背景颜色。在2.1.1的示例中,就有看到color值为-1的情况,这表示被查询的元素当前是不可见的。

2.2.2 常用Color相关函数获取Color调色板,

axlColorGet(x_number/'background/'count/'all), 如axlColorGet('all)=>得到系统的颜色设

置结构列表。对应设置Color调色板函数,axlColorSet();系统颜色设定的保存与重载函数,axlColorSave(file)与axlColorLoad(file);用户定制颜色来设置系统中的元素,axlCustomColorObject([lo_dbid] [g_custom_color]),相应的清除命令为axlClearObjectCustomColor([lo_dbid]);其它更多的color相关函数请参考algroskill文档

2.3 Database Layer相关操作函数

这里给出一些方便操作Layer的函数:axlGetXSection(),这是获取design的

crosssection(层叠结构)的函数;axlLayerGet(t_layer),这是获得指定层t_layer的dbid 的函数;axlIsLayer(t_layer),判断指定的层t_layer存不存在;

axlIsVisibleLayer(t_layer),判断指定层t_layer是不是显示状态(visible);axlVisibleLayer(t_layer g_makeVis),设置指定层t_layer的状态是显示还是不显示;axlVisibleDesign(g_makeVis),设置design的状态是显示还是不显示;

axlVisibleGet(),该函数的返回值是命令运行当前design的所有颜色显示状态;axlVisibleSet(l_vislist),该函数使用axlVisibleGet()函数的返回结果,重置design的显示状态。更多相关函数请参考algroskill.pdf文档

2.3 Database Layer相关操作函数

这里给出一些方便操作Layer的函数:axlGetXSection(),这是获取design的crosssection(层叠结构)的函数;axlLayerGet(t_layer),这是获得指定层t_layer的dbid 的函数;axlIsLayer(t_layer),判断指定的层t_layer存不存在;

axlIsVisibleLayer(t_layer),判断指定层t_layer是不是显示状态(visible);axlVisibleLayer(t_layer g_makeVis),设置指定层t_layer的状态是显示还是不显示;axlVisibleDesign(g_makeVis),设置design的状态是显示还是不显示;

axlVisibleGet(),该函数的返回值是命令运行当前design的所有颜色显示状态;axlVisibleSet(l_vislist),该函数使用axlVisibleGet()函数的返回结果,重置design的显示状态。更多相关函数请参考algroskill.pdf文档

allegro skill Design相关函数

a. 用来得到当前design的名字和类型的一些函数

axlCurrentDesign() ;得到当前文件的名字axlDesignType(); design的类型,比如Layout axlSaveEnable(); 设置menuitem是否可用axlSaveDesign(); 保存design axlDBControl(); 这是个很有用的函数,可以设置很多的系统环境,比如设置On-Line DRC enable还是disable,axlDBControl(‘drcEnable t/nil) axlIgnoreFixed(); 如果想操作Fixed的symbol一般是不可以的,但是可以通过这个命令来操作axlKillDesign(); axlOpenDesign();

axlGetActiveLayer();

b. 用来注册一些skill的函数为allegro中的命令,以及设置各种工作模式axlCmdRegister(); register Skill函数为allegro的命令axlEndSkillMode(); 结束skill状态axlFlushDisplay(); 刷新屏幕axlOKToProceed(); 检测当前是不是有另外的交互式操作命

令在运行axlUIPopupDefine();辅助用户定义右键弹出menu

c. Logic操作函数

操作系统的一些Logic类型的信息,比如DiffPair,MatchGroup,pinpair等等axlDiffPair(); 生成,修改,删除Diffpair axlMatchGroupAdd(); 添加成员到某个MatchGroup axlPinPair(); PinPair操作

另:

axlWriteDeviceFile(); 输出Device信息到相应的文件axlDbidName(); 得到dbid对应的名字axlDBCreateConceptComponent();

d. Constraint Manager操作函数

所有的Constraint Manager相关的函数都会是以axlCNS开头,如:axlCnsAddVia(); axlCNSCreate(); axlCNSGetPhysical(); axlCNSGetSpacing();

e. Math函数

axlDistance(); 得到2点之间的距离axlGeoEqual(); 在当前design精度下,比较2个浮点数是否相等axlIsPointInsideBox(); 检查点是不是在Box里面axl_ol_ol2(); 检查两个线是否相交

allegro skill选择和获取函数对Allegro中的对象进行操作,比如移动、删除,都需要先选择和获取该对象的dbid。选择操作包含一些选择设置比如是只选择Symbol还是Symbol和Via都可以选等等,然后通过axlSelect相关函数来选择具体的对象,然后是axlGetSelSet 函数来得到那些被选择的dbid。AXL-Skill函数支持多种选择的方式,比如单选择一个对象,或者是框选多个对象,又或者说是使用Temp Group的方式来选择多个对象,不过通常

对象只有在当前可见(Visible)的情况下才可以被选择上(除非设置了invisible选项)。选择设置和被选择了对象的有效性会一直持续到用户使用其它的系统命令,比如allegro的Add Cline命令,因为allegro的命令将会改变一些系统的dbid,所以的Skill之前获取的bdid都会变成无效的(removed)。通常的选择和获取操作如下,

设置Find Filter来控制将要被选则的对象类型;选择对象的三种模式:单选,多选或通过名字来选择;从被选择的对象中添加和移除对象

3.1 Find Filter设置函数

函数定义axlSetFindFilter(?enabled lt_enabled ?onButtons lt_filterOn)

功能:该函数最直观的理解是,它可以设置allegro的Find Filter。参数:lt_enabled,该参数将决定哪些Find Filter中的元素可以被选择;lt_filterOn,该参数将决定可以被选择的元素中,哪些已经被选中了。参数支持的类型如下:"PINS","VIAS","CLINES","CLINESEGS","LINES","LINESEGS","DRCS","TEXT","SHAPES","SHAPESEGS","BOUNDARY_SHAPES","VOIDS" ,"VOIDSEGS","SYMBOLS","FIGURES","COMPONENTS","FUNCTIONS","NETS","INVISIBLE","NAMEFORM","ALLTYPES","ALL","DYNTHEMALS","GROUPS","GROUPMEMBERS"

用法示例:axlSetFindFilter( ?enabled list( "vias" "pins" "nets") ?onButtons list( "vias" "pins")) => 设置Find Filter中的vias,pins,nets为可以被选择的,而其它的选项将被设置成不可操作的,默认选择了vias和pins。

3.2 点选函数

axlSingleSelectPoint() => 运行该命令之后,allegro将提示你点选一个design中的对象。axlAddSelectPoint() axlSubSelectPoint()

3.3 框选函数

axlSingleSelectBox() => 在allegro中框选axlAddSelectBox() axlSubSelectBox() 3.4 通用选择函数

axlSelect() => 支持多种选择方式于一身,单选,框选,Temp Group

3.5 其它选择函数

axlAddSelectAll() =>不需要用户交互的选择方式,只根据Find Filter的条件axlSubSelectAll() axlSingleSelectName() axlAddSelectName() axlSubSelectName() axlSingleSelectObject() axlAddSelectObject() axlSubSelectObject()

3.6 获取和清除函数

axlGetSelSet() => 获取之前的选择函数选择的dbid axlGetSelSetCount() axlClearSelSet() => 清除之前选择函数选择的dbid(注:当一个对象被选择了以后,将会被自动的以Temp Highlight的方式高亮,而该函数运行以后将会清除这个对象的选择状态,同时该对象也不再高亮)

3.7 示例:选择一个Symbol,并将其移动到另一个相对位置

axlClearSelSet() ; 清除之前可能存在的被选择函数选择的元素,避免引入不合适的dbid,这是个好习惯axlSetFindFilter(?enabled '("noall" "symbols" ) ?onButtons '("noall" "symbols" )); 设置Find Filter的Symbols选项处于选中状态axlSingleSelectPoint(); 请通过点击选择的方式,选择一个Symbol对象dSym = axlGetSelSet(); => (dbid),将得到被选择的dbid列表,尽管这个列表只有一个元素axlClearSelSet(); 清理掉你自己做过的选择,避免给别的程序带来错误,同样是个好习惯dSym = car(dSym); => dbid,的到Symbol的dbid ;dSym->?? ;=> 将得到这个Symbol 的相关属性ix = 100; iy = 200; axlTransformObject(dSym, ?move ix:iy); =>将

该Symbol右移100mil,上移200mil ; axlTransformObject() 函数的作用是将一个或多个symbol由一个地方移动、翻转、旋转到另一个新的位置。; axlTransformObject( ; lo_dbid/o_dbid ; ?move

l_deltaPoint ; ?mirror t/nil ; ?angle

f_angle ; ?origin

l_rotatePoint ; ?allOrNone t/nil )

skill交互函数axlUI系列集锦Interface指和用户交互,allegro给出一些Message提醒用户进行相关的操作,比如说Pick a Point就是让用户用鼠标选择一个点;又比如说allegro 弹出一个Confirm对话框,需要用户选择Yes/No的情况。在allegro的skill窗口输入

_lfn("axlUI")一般会查到如下的函数:axlUICmdPopupSet axlUIColorDialog axlUIConfirm axlUIControl axlUIDataBrowse axlUIEdit axlUIMenuDump axlUIMenuLoad axlUIMultipleChoice axlUIPopupDefine axlUIPopupSet axlUIPrompt axlUIView axlUIView axlUIView axlUIWBeep axlUIWBlock axlUIWClose axlUIWDisableQuit axlUIWExpose axlUIWExposeByName axlUIWPerm axlUIWPrint axlUIWRedraw axlUIWSetHelpT ag axlUIWSetParent axlUIWShow axlUIWTimerAdd axlUIWTimerRemove axlUIWUpdate axlUIYesNo axlUIYesNoCancel 这里介绍一下其中几个很常用的函数的用法axlUIConfirm => axlUIConfirm("are you sure to delete all highlight shapes?") axlUIYesNoCancel => axlUIYesNoCancel("are you sure to delete all highlight shapes?" "Delete Shape Command") axlUIYesNo => axlUIYesNo("are you sure to delete all highlight shapes?" "Delete Shape Command") axlUIMultipleChoice => axlUIMultipleChoice("Pick a layer"

'("top" "bottom" ) "View Layer") axlUIPrompt =>axlUIPrompt( "Enter Your Name" "user name" )

前3个差不多,但是axlUIConfirm只是个提醒,返回值总是t,另外两个返回值是数字0=>Yes, 1=>No, 2=>Cancel。axlUIMultipleChoice的返回值也是数字,0对于这个函数中间那个列表的第一个参数,顺序下来。axlUIPrompt这个函数提供了用户输入信息的功能,返回值为字符串,如果你想要数字,需要自行转换,atoi/atof之类。axlUIPrompt示例

最后还有一个axlUIWBeep(),就是一个beep提示音axlUIWDisableQuit => axlUIWDisableQuit(userDefinedForm) ;屏蔽掉form右上角的那个close叉叉axlUIWClose => axlUIWClose(userDefinedForm); 关闭掉form axlUIWShow =>

axlUIWShow(userDefinedForm option); option 'show =>显示并激活userDefinedForm;

'showna 显示但不激活; 'hide 窗口隐藏; nil 显示支持的操作axlUIWPrint => axlUIWPrint(userDefinedForm "this is a pretty form"); 输出字符到form的最下面窗口

axlUIWPerm => axlUIWPerm(userDefinedForm t); allegro打开新的板子会默认关闭掉当前打开的所以的form窗口,用这个命令可以屏蔽这个功能axlUIWBlock =>

axlUIWBlock(userDefinedForm);强制用户操作了当前的form才可以继续其它的工作axlUIWRedraw axlUIWUpdate => axlUIWUpdate(nil)这个和axlUIWRedraw(nil)更适合刷新主屏幕axlUIWExpose axlUIWExposeByName=>这2个都是将选择的窗口显示到最前端axlUIDataBrowse axlUIColorDialog 这2个函数调用allegro系列的form,挺有用的。参考algroskill.pdf中的例子:axlUIDataBrowse('NET '(RETRIEVE_NAME) "hi" t) rgb = axlColorGet(1) rgb = axlUIColorDialog(nil rgb) when( rgb axlColorSet(1 rgb) ) 这里的1可以是其它的数字,16.0以上可以到192。

axlUIMenuDump=>axlUIMenuDump("CurrentMenu") 输出当前allegro的menu信息到当前工作目录的CurrentMenu.men文件axlUIMenuLoad=>axlUIMenuLoad("menu.men") load menu.men的信息到allegro中建立新的目录很实用的2个功能

鼠标右键的popup menu:axlUIPopupDefine axlUIPopupSet procedure( aa println("I- you select A")) procedure( bb println("I- you select B")) pop=axlUIPopupDefine( nil '( ("A" aa) ("B"

bb) ) )

axlUIPopupSet( pop ) 运行了上面的程序以后在allegro中单击鼠标右键就会看到一个popup,就像我们常见的Done,Cancel,Opps那个popup,只是这里的是A和B。axlUIPopupSet( nil ) 这个命令来将刚刚的设置清除axlUIView axlUIView axlUIView 只读方式打开文件,没怎么用过,也觉得没有啥用处。还剩下几个除了Time可能有些作用,其它的没有没有什么感觉。axlUIWTimerAdd axlUIWTimerRemove axlUIControl do not use axlUIEdit axlUIWSetHelpT ag axlUIWSetParent

allegro skill 交互式编辑函数这里介绍一些基本的编辑命令,比如axlDeleteObject用来删除可被删除的系统对象(各种dbid),axlShowObject用来显示被选择对象的信息,和allegro 中的Show Element命令显示的结果差不多。常用函数示例:

axlChangeWidth(); => 和Allegro中的Change命令类似,该命令用来改变Cline/Line的

宽度axlDBDeleteProp(); => 该命令可以删除选择对象的指定属性,使用该命令相当于Allegro中Edit Property命令。axlDBDeletePropDictEntry(); =>该命令相当于Allegro 中的User Defined Property命令axlLastPick(); => 获得用户鼠标最近一次点击的坐标axlShapeChangeDynamicType(); =>改变选择Shape的动静态属性

axlTransformObject(); =>移动对象

另外:

axlEnterPoint() ; 提示用户输入一个点的坐标axlEnterString() ; 提示用户输入一个字

符串axlCancelEnterFun(); 取消一个提示Enter操作的函数的作用

还有一些比如

axlHighlightObject(); highlight对象axlMiniStatusLoad(); 这个函数可以让用户定义的form显示在Options Tab上。

allegro skill File操作allegro有些专用的函数可以操作文件,allegro本身支持skill的那些文件操作函数,比如in函数,而如下的函数都只是更多的文件操作函数:axlDMOpenFile(); axlDMOpenLog(); axlDMClose(); axlOS(); axlOS(); axlOSSlash(); axlT empDirectory(); allegro skill Shell操作相关函数这里的函数可以用来读取Allegro PCB Editor的环境参数,比如Alias,FuncKey以及一些系统的参数(.psmpath)。比如:axlGetAlias() axlGetFuncKey() axlGetVariable() axlSetAlias()

axlSetFunckey() axlUnsetVariable()

另外:axlShell(),这个命令很有用,它支持在skill环境中运行allegro的命令,比如allegro 的status命令,在skill状态下是不可以直接运行的,需要通过axlShell("status")来运行。另:设置和获得windows/UNIX系统下的环境变量setShellEnvVar() getShellEnvVar() allegro skill Form操作allegro有很多的form,比如artwork,比如status,还有些在Options Tab上显示的如change命令的form...... 能自己创建一些form会很有意思,也很有用。a. form的基本元素示例:下面是一个简单的form,包含2个Text,2个可以输入数据的Field,1个复选框checkbox,2个按钮Button。VERSION=2 FORM FIXED PORT 30 12 HEADER "Hello You!" TILE

TEXT "Your Name:" TLOC 4 1 ENDTEXT

FIELD user_name FLOC 16 1 STRFILLIN 8 15 ENDFIELD

TEXT "Your age:" TLOC 4 3 ENDTEXT

FIELD user_age FLOC 16 3 REALFILLIN 4 6 DECIMAL 4 ENDFIELD

FIELD MarriedCheck FLOC 4 6 CHECKLIST "Married?" ENDFIELD

FIELD RunCheck FLOC 4 9 MENUBUTTON "Result" 8 3 ENDFIELD

FIELD CloseForm FLOC 16 9 MENUBUTTON "Close" 8 3 ENDFIELD

ENDTILE ENDFORM

a. form的基本元素form的define信息一般保存在一个.form的文件中,文件的开头一般都是VERSION=2。正式的form信息从FORM关键字开始,以ENDFORM结束。最常用的form元素有FIELD,TEXT,BUTTON。其它常用的还有Checkbox,Radiobox,Group。在Form中定义一个item,一般是Text和Field,Field包含除T ext以外的所有类型,先确定是T ext还是Field,然后是相对位置Location,然后是具体的类型,最后结束这个Item 的定义,比如:TEXT "Your age:" ;Text,且显示的是Your age

TLOC 4 3 ; 位置为Form的(4 3)ENDTEXT ; 结束这个T ext的定义

b. 创建一个简单的Form 当你创建了一个Form文件,接下来要把它在Allegro中显示出来。假设我们把刚刚提到的那个Form保存到C:/temp名叫user.form的文件中,用下面的axlFormCreate函数来在Allegro中创建并用axlFormDisplay函数显示出来。user_Form = axlFormCreate((gensym) “c:/temp/user.form" '(e inner) 'user_callback t ) axlFormDisplay(user_Form) 这里的user_callback是个函数,是对应现在创建的

user_Form对应的用户操作的响应,比如用户点击了一个按钮,就会有些相应的操作。还有些函数可以用来设置Form中一些Field,设置默认值,比如axlFormSetField(user_Form "user_age" 24);以及获取Form中Field的值,比如axlFormGetField(user_Form

"user_age" );=>24

b. 创建一个简单的Form之call back函数Form显示出来对应的是种前台操作,而响应用

户相应的操作则可以称之为后台操作。创建一个Form的时候都会有个call back函数assign 给它。call back函数里面包含了对应各个Field的操作命令。比如:

procedure( user_callback( user_Form )

case( user_Form->curField ;curField 将得到当前用户操作的Field名字( "user_name" axlMsgPut( sprintf( nil "current user name %s"

user_Form-> curValue ) ) ; curValue 将得到当前Field的

值); ( "user_age"

axlMsgPut( sprintf( nil "current user age %d" user_Form->

curValue ) ) )

( "MarriedCheck" ; do something ) ( "RunCheck" sMsg = axlFormGetField( user_Form "user_name" ) axlUIConfirm(sprintf(nil "Hello %s, Good Day!" sMsg)) ) ( "CloseForm" axlFormClose( user_Form ) ) ) )

c. 创建一个Grid Form Grid比较适合制作表格形式的Form,比如假设我们想做个Form来显示当前工作文件夹下面的所有文件,用Grid就会比较合适,定义一个三列的表格,第一列显示第几个文件,第二列显示文件名,第三列显示文件大小,而这用一般的Form形式来实现会比较麻烦。比如把下面这段Grid信息加入到一般的form定义文件中,就会支持Grid 的相关操作:"GRID crsGrid" "FLOC 2 1" "FSIZE 42 27" "OPTIONS HLINES VLINES USERSIZE"

"GHEAD TOP" "HEADSIZE 3" "OPTIONS 3D MULTI" "ENDGHEAD"

"GHEAD SIDE" "OPTIONS 3D NUMBER" "HEADSIZE 5" "ENDGHEAD" "ENDGRID" 如下的代码则会帮助你设置这个Grid空间,比如这里设置了3列,每列各代表一些意思。tGridCol = make_formGridCol() tGridCol->fieldType = 'LONG

tGridCol->colWidth = 2 tGridCol->align = 'center tGridCol->headT ext = "Count"

tGridCol->scriptLabel = nil axlFormGridInsertCol( user_form "crsGrid" tGridCol )

tGridCol->fieldType = 'TEXT tGridCol->colWidth = 8 tGridCol->headText = ""

tGridCol->align = 'left tGridCol->scriptLabel = nil axlFormGridInsertCol( user_form "crsGrid" tGridCol )

tGridCol->fieldType = 'LONG tGridCol->colWidth = 2 tGridCol->align = 'center

tGridCol->fieldLength = 4 tGridCol->min = 1 tGridCol->max = 10 tGridCol->headText = "Size" axlFormGridInsertCol( user_form "crsGrid" tGridCol ) 相应的form操作函数也包含了Grid关键字,如axlFormGridUpdate,axlFormGridOptions...

allegro skill ipc ipc是Interprocess Communication的缩写,ipc使得skill对创建其它非skill 进程和与之通信成为可能。比如如果一个skill工具要求比较复杂的界面,而这个界面用skill 来完成会很麻烦,这样就可以试着用其它的语言(java)写出要求的界面并生成可执行文件(jar),用ipc相关的函数来调用这个可执行文件,并传递相关的参数,用户在该界面上做的任何操作也会有相应的函数读回并执行。ipc的功能极大的方便了用户做开发。

父进程通过ipc和子进程通信1. 如何通信父进程通过子进程的stdin将信息传递给子进程,从子进程的stdout和stderr读取返回信息。e.g. 一个简单的perl程序#! /usr/bin/perl -w print $ARGV[0]; getinfo; sub getinfo {

return $ARGV[1];

} 如果用ipcBeginProcess调用这个简单程序,这个程序运行以后,ipcReadProcess读到的返回值将会是print输出的值。

2. 同步,异步读取子进程返回信息同步读取会屏蔽当前操作直到读取完成,异步读取会等到数据和父进程中处理函数都准备好的时候发生,不会屏蔽别的程序运行。

3. 数据缓存一般的标准输入输出通道有4096byte的缓存区,通常子进程在将数据写入输出通道后推荐刷新该端口使得父进程可以顺利读到这些输出。

4. 子进程的属性子进程通常有如下的只读属性, 和其它的skill对象一样可以通过"->"来读取。command Name of the command host Name of the host machine running the process processPid Process id of the child process on host exitStatus Exit status of the child process priority Priority given to the child process

25个函数功能介绍

25个函数功能介绍如下: DBXYD-TF477-46YM4-W74MH-6YDQ8 函数名称功能介绍 sumifcol:按颜色进行条件求和。有三个区域引用参数,其中第三参数为可选参数。第一参数为参照区域,第二参数为颜色条件,第三参数为求和区域,即第一参数中颜色与第二参数相同,则将对应的第三参数的单元格进行求和。如果省略第三参数则对第一参数求和。 AVER:评分函数。计算参数区域中去除最大值与最小值之再求平均,参数个数有255个(Excel2003中是1到30个) hesum:左右合并再求和。将1/2类型的数字换算成1.5类型数据后再求和;若为12则按12计算,若为1/2则按1.5计算。 NOWW:不改变的当前时间。不需要参数,输入的时间表示现在的时间,但不随时间改变而改变。 SFZ:身份证相关信息函数。第一参数为引用,第二参数输入“DQ”取返回地区,输入“XB”则返回性别,输入“SR”则返回生日。忽略第二参数则默认显示地区。 大写:将阿拉伯数字转为人民币金额大写。仅需要一个参数,即单元格引用。 批注:提取批注中的文字。只有一个参数,即单元格引用。 合并:将区域字符合并。第一参数为分割符,第二参数为引用区域。可以用""表示不使用分割符。第三参数开始为引用区域,可以有1到254个区域(Excel2003中是1到29个)。也还可以直接用文本做参数。 取数:分离数字与文本。第一参数为单元格;第二参数为可选参数,当为0或者省略时表示取出数字;为1时表示排除数字;为2时表示取出数字与运算符;为3则提取数字与运算符且计算结果。 唯一值:返回不重复值。可以对1到253(Excel2003中是1到28个)个区域取唯一值;前三个为必选参数,其余为可选参数。第一参数为ROW时先行后列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域。 消除空值:消除空值函数。可以选择多行多列,按先行后列之方式返回值.两个参数,一为区域一为序号。 颜色求和:按背景颜色对区域值求和。第一参数为参照值,第二参数为求和区域。颜色计数:按背景颜色计算区域中同背景之数据个数。第一参数为参照值。第二参数为计数区域。 工作表:取工作表名。一个参数,输入工作表地址即返回工作表名。 数字:与“大写”函数相反,将大写字符转换为阿拉伯数字。 分割取数:按分割符取数。第一参数为单元格,第二参数表示取第N个,第三个参数表示分割符。 共有项:返回两个区域共有项目。前两个参数为区域,第三参数为序号。 不同项:返回第一区域中有而第二区域没有的项目。前两个参数是区域,第三参数为序号。 公式:公式函数。提取单元格中的公式,只需要一个参数,单元格引用。 计算:计算函数。计算单元格中的表达式,如单元格中为“456+2”,则计算其结果458。只需要一个参数,单元格引用。 公式长度:计算单元格中公式的长度,一个参数即单元格引用。 排名:中国式排名函数。即名次不间断,当两人并列第二名时,仍然存在第三名。有两个参数,第一参数为成绩区域,第二参数为待排名的成绩。参数不局限于区域

excel常用函数公式介绍

excel常用函数公式介绍 excel常用函数公式介绍1:MODE函数应用 1MODE函数是比较简单也是使用最为普遍的函数,它是众数值,可以求出在异地区域或者范围内出现频率最多的某个数值。 2例如求整个班级的普遍身高,这时候我们就可以运用到了MODE 函数了 3先打开插入函数的选项,之后可以直接搜索MODE函数,找到求众数的函数公式 4之后打开MODE函数后就会出现一个函数的窗口了,我们将所要求的范围输入进Number1选项里面,或者是直接圈选区域 5之后只要按确定就可以得出普遍身高这一个众数值了 excel常用函数公式介绍2:IF函数应用 1IF函数常用于对一些数据的进行划分比较,例如对一个班级身高进行评测 2这里假设我们要对身高的标准要求是在170,对于170以及170之上的在备注标明为合格,其他的一律为不合格。这时候我们就要用到IF函数这样可以快捷标注好备注内容。先将光标点击在第一个备注栏下方 3之后还是一样打开函数参数,在里面直接搜索IF函数后打开 4打开IF函数后,我们先将条件填写在第一个填写栏中, D3>=170,之后在下面的当条件满足时为合格,不满足是则为不合格 5接着点击确定就可以得到备注了,这里因为身高不到170,所以备注里就是不合格的选项 6接着我们只要将第一栏的函数直接复制到以下所以的选项栏中就可以了

excel常用函数公式介绍3:RANK函数应用 2这里我们就用RANK函数来排列以下一个班级的身高状况 3老规矩先是要将光标放于排名栏下面第一个选项中,之后我们打开函数参数 4找到RANK函数后,我们因为选项的数字在D3单元格所以我们就填写D3就可了,之后在范围栏中选定好,这里要注意的是必须加上$不然之后复制函数后结果会出错 5之后直接点击确定就可以了,这时候就会生成排名了。之后我们还是一样直接复制函数黏贴到下方选项栏就可以了。

什么是哈希函数

什么是哈希函数 哈希(Hash)函数在中文中有很多译名,有些人根据Hash的英文原意译为“散列函数”或“杂凑函数”,有些人干脆把它音译为“哈希函数”,还有些人根据Hash函数的功能译为“压缩函数”、“消息摘要函数”、“指纹函数”、“单向散列函数”等等。 1、Hash算法是把任意长度的输入数据经过算法压缩,输出一个尺寸小了很多的固定长度的数据,即哈希值。哈希值也称为输入数据的数字指纹(Digital Fingerprint)或消息摘要(Message Digest)等。Hash函数具备以下的性质: 2、给定输入数据,很容易计算出它的哈希值; 3、反过来,给定哈希值,倒推出输入数据则很难,计算上不可行。这就是哈希函数的单向性,在技术上称为抗原像攻击性; 4、给定哈希值,想要找出能够产生同样的哈希值的两个不同的输入数据,(这种情况称为碰撞,Collision),这很难,计算上不可行,在技术上称为抗碰撞攻击性; 5、哈希值不表达任何关于输入数据的信息。 哈希函数在实际中有多种应用,在信息安全领域中更受到重视。从哈希函数的特性,我们不难想象,我们可以在某些场合下,让哈希值来“代表”信息本身。例如,检验哈希值是否发生改变,借以判断信息本身是否发生了改变。` 怎样构建数字签名 好了,有了Hash函数,我们可以来构建真正实用的数字签名了。 发信者在发信前使用哈希算法求出待发信息的数字摘要,然后用私钥对这个数字摘要,而不是待发信息本身,进行加密而形成一段信息,这段信息称为数字签名。发信时将这个数字签名信息附在待发信息后面,一起发送过去。收信者收到信息后,一方面用发信者的公钥对数字签名解密,得到一个摘要H;另一方面把收到的信息本身用哈希算法求出另一个摘要H’,再把H和H’相比较,看看两者是否相同。根据哈希函数的特性,我们可以让简短的摘要来“代表”信息本身,如果两个摘要H和H’完全符合,证明信息是完整的;如果不符合,就说明信息被人篡改了。 数字签名也可以用在非通信,即离线的场合,同样具有以上功能和特性。 由于摘要一般只有128位或160位比特,比信息本身要短许多倍,USB Key或IC卡中的微处理器对摘要进行加密就变得很容易,数字签名的过程一般在一秒钟内即可完成。

Excel常用函数介绍及常用功能

Excel常用函数介绍及常用功能 Excel函数一共有11类,分别是数据库函数、日期与时间函数、工程函数、财务函数、信息函数、逻辑函数、查询和引用函数、数学和三角函数、统计函数、文本函数以及用户自定义函数。 工程 工程工作表函数用于工程分析。这类函数中的大多数可分为三种类型:对复数进行处理的函数、在不同的数字系统(如十进制系统、十六进制系统、八进制系统和二进制系统)间进行数值转换的函数、在不同的度量系统中进行数值转换的函数。 财务 财务函数可以进行一般的财务计算,如确定贷款的支付额、投资的未来值或净现值,以及债券或息票的价值。财务函数中常见的参数: 未来值 (fv)--在所有付款发生后的投资或贷款的价值。 期间数 (nper)--投资的总支付期间数。 付款 (pmt)--对于一项投资或贷款的定期支付数额。 现值 (pv)--在投资期初的投资或贷款的价值。例如,贷款的现值为所借入的本金数额。 利率 (rate)--投资或贷款的利率或贴现率。 类型 (type)--付款期间内进行支付的间隔,如在月初或月末。 信息 可以使用信息工作表函数确定存储在单元格中的数据的类型。信息函数包含一组称为 IS 的工作表函数,在单元格满足条件时返回 TRUE。例如,如果单元格包含一个偶数值,ISEVEN 工作表函数返回 TRUE。如果需要确定某个单元格区域中是否存在空白单元格,可以使用 COUNTBLANK 工作表函数对单元格区域中的空白单元格进行计数,或者使用 ISBLANK 工作表函数确定区域中的某个单元格是否为空。 数据库

当需要分析数据清单中的数值是否符合特定条件时,可以使用数据库工作表函数。例如,在一个包含销售信息的数据清单中,可以计算出所有销售数值大于1,000 且小于 2,500 的行或记录的总数。Microsoft Excel 共有 12 个工作表函数用于对存储在数据清单或数据库中的数据进行分析,这些函数的统一名称为Dfunctions,也称为 D 函数,每个函数均有三个相同的参数:database、field 和 criteria。这些参数指向数据库函数所使用的工作表区域。其中参数database 为工作表上包含数据清单的区域,参数 field 为需要汇总的列的标志,参数 criteria 为工作表上包含指定条件的区域。 逻辑函数 使用逻辑函数可以进行真假值判断,或者进行复合检验。例如,可以使用 IF 函数确定条件为真还是假,并由此返回不同的数值。 统计函数 统计工作表函数用于对数据区域进行统计分析。例如,统计工作表函数可以提供由一组给定值绘制出的直线的相关信息,如直线的斜率和 y 轴截距,或构成直线的实际点数值。 文本函数 通过文本函数,可以在公式中处理文字串。例如,可以改变大小写或确定文字串的长度。可以将日期插入文字串或连接在文字串上。下面的公式为一个示例,借以说明如何使用函数 TODAY 和函数 TEXT 来创建一条信息,该信息包含着当前日期并将日期以"dd-mm-yy"的格式表示。 =TEXT(TODAY(),"dd-mm-yy") 查询和引用 当需要在数据清单或表格中查找特定数值,或者需要查找某一单元格的引用时,可以使用查询和引用工作表函数。例如,如果需要在表格中查找与第一列中的值相匹配的数值,可以使用 VLOOKUP 工作表函数。如果需要确定数据清单中数值的位置,可以使用 MATCH 工作表函数。 数学和三角 通过数学和三角函数,可以处理简单的计算,例如对数字取整、计算单元格区域中的数值总和或复杂计算。 日期与时间

最小完美哈希函数(深入搜索引擎)

最小完美哈希函数 哈希函数h是一个能够将n个键值x j的集合映射到一个整数集合的函数h(x i),其值域范围是0≤h(x j)≤m-l,允许重复。哈希是一个具有查找表功能并且提供平均情况下快速访问的标准方法。例如,当数 据包含n个整数键值。某常用哈希函数采用h(x)=x mod m,其中m 是一个较小的值,且满足m>n/a。a是装载因子,表示记录数和可用地址数的比例关系。m一般选择一个素数,因此如果要求提供一个对1000个整数键值进行哈希的函数,一个程序员可能会建议写出如下函数形式:,h(x)=x mod 1399。并且提供一个装载因子为。a=0.7的表,该表声明能够存放1399个地址。 a越小,两个不同键值在相同哈希值相互冲突的可能性就越小,然而冲突总是不可避免。第1次考虑这个问题时,事实可能让人吃惊,最好的例子莫过于著名的生日悖论(birthday paradox)。假定一年有365天,那么要组合多少个人,才能使得出现生日相同的人这一概率超过0.5呢?换句话说,给定一个365个哈希槽(hashslot)。随机选择多少个键值才能够使得出现冲突的概率超过0.5?当首次面对这样一个问题时,一般的反应肯定是认为需要很多人才行。事实上,答案是只需区区23人。找到一个能够满足现实大小要求且无冲突的哈希函数的几率小到几乎可以忽略25。例如,一个1000个键值和1399个随机选择的槽,完全没有冲突的概率为 2.35×10-217(概率的计算诱导公式将在下一节中给出,以公式4.1代入m=1399和n=1000得到),如何才能最好地处理这些不可避免冲突?这一话题将在本节中以大段篇幅展开,这里我们正是要找到其中万里挑一的能够避免所有冲突的哈 希函数。 25可以试图在一群人中做这样一个有趣的实验,笔者曾在讲述哈希表的课上和同学们做 过多次这样的实验。有一项很重要的事情往往被我们忽略,即参加者必须事先在纸上写下他们的生日(或者其他任意日子)。然后才能开始核对的工作,这样才能消除神奇的负反馈。在我们的实验中,除非这样做了,否则也许必须找到366个同学才能遇到第1次碰撞,也许这乜存在心理学悖论吧。

哈 希 常 见 算 法 及 原 理

数据结构与算法-基础算法篇-哈希算法 1. 哈希算法 如何防止数据库中的用户信息被脱库? 你会如何存储用户密码这么重要的数据吗?仅仅 MD5 加密一下存储就够了吗? 在实际开发中,我们应该如何用哈希算法解决问题? 1. 什么是哈希算法? 将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。 2. 如何设计一个优秀的哈希算法? 单向哈希: 从哈希值不能反向推导出哈希值(所以哈希算法也叫单向哈希算法)。 篡改无效: 对输入敏感,哪怕原始数据只修改一个Bit,最后得到的哈希值也大不相同。 散列冲突: 散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小。 执行效率: 哈希算法的执行效率要尽量高效,针对较长的文本,也能快速计算哈

希值。 2. 哈希算法的常见应用有哪些? 7个常见应用:安全加密、唯一标识、数据校验、散列函数、负载均衡、数据分片、分布式存储。 1. 安全加密 常用于加密的哈希算法: MD5:MD5 Message-Digest Algorithm,MD5消息摘要算法 SHA:Secure Hash Algorithm,安全散列算法 DES:Data Encryption Standard,数据加密标准 AES:Advanced Encryption Standard,高级加密标准 对用于加密的哈希算法,有两点格外重要,第一点是很难根据哈希值反向推导出原始数据,第二点是散列冲突的概率要小。 在实际开发中要权衡破解难度和计算时间来决定究竟使用哪种加密算法。 2. 唯一标识 通过哈希算法计算出数据的唯一标识,从而用于高效检索数据。 3. 数据校验 利用哈希算法对输入数据敏感的特点,可以对数据取哈希值,从而高效校验数据是否被篡改过。 4. 散列函数 1.如何防止数据库中的用户信息被脱库?你会如何存储用户密码这么重要的数据吗?

Excel常用函数简介

Excel常用函数简介 Excel2000提供了九大类,近400个函数,包括:数学与三角函数、统计函数,数据库函数、逻辑函数等。由于函数在电子表格中起着很重要的作用,要想熟练地、较深入地使用Excel2000,就必须对函数有一定的了解,因此我们用一点篇幅,对Excel2000常用函数作以简单介绍。如果在实际应用中需要使用本节没有介绍的其他函数及函数的详细使用方法,用户可以参阅Excel2000的“帮助”系统或其他参考手册和资料。 (1)数学函数 ①取整函数INT(X) 取数值X的整数部分,即不超过X的最大整数。如:INT(56.87)的运算结果值为56,INT(-56.87)的运算结果为-57。 ②截取整函数TRUNC(XI,X2) 将数字X1的小数部分保留X2位,其余全部截去。X2默认为0,且可省略。 例如,TRUNC(8.9)等于8,TRUNC(-8.329,2)等于-8.32。 说明:函数TRUNC和函数INT类似,都能返回整数。函数TRUNC直接去除指定位数之后部分,而函数INT则是依照给定的数,取不超过该数的最大整数。函数INT和函数TRUNC在处理负数时会有不同:TRUNC(-4.3)返回-4,但INT(-4.3)返回-5。 ③四舍五入函数ROUND(X1,X2) 将数值X1四舍五入,小数部分保留X2位。如:ROUND(536.8175,3)

等于536.818。 ④求余数函数MOD(x,y) 返回数字X除以y得到的余数。如:MOD(5,2)等于1。 ⑤圆周率函数PI( ) 取圆周率π的近似值3.141592654(没有参数)。 ⑥随机数函数RAND() 产生一个0和1之间的随机数(没有参数)。 ⑦求平方根函数SQRT(X) 返回正值X的平方根。如:SQRT(9)等于3。 (2)统计函数 ①求平均值AVERAGE(X1,X2,…) 返回所列范围中所有数值的平均值。最多可有30个参数,参数X1,X2…可以是数值、单元格区域或区域名字。 例如,AVERAGE(5,3,10,4,6,9)等于6.166667。 AVERAG(A1:A5,C1:C5)返回从区域A1:A5和区域C1:C5中的所有单元格数值的平均值。 ②COUNT(XI,X2,…) 返回所列参数(最多30个)中数值的个数。函数COUNT在计数时,把数字、文本、空值、逻辑值和日期计算进去,但是错误值或其他无法转化成数据的内容则被忽略。这里的“空值”是指函数的参数中有一个“空参数”,和工作表单元格的“空白单元”是不同的。

哈 希 常 见 算 法 及 原 理

计算与数据结构篇 - 哈希算法 (Hash) 计算与数据结构篇 - 哈希算法 (Hash) 哈希算法的定义和原理非常简单,基本上一句话就可以概括了。将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。 构成哈希算法的条件: 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法)对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大不相同; 散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小; 哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值。 哈希算法的应用(上篇) 安全加密 说到哈希算法的应用,最先想到的应该就是安全加密。最常用于加密的哈希算法是 MD5(MD5 Message-Digest Algorithm,MD5 消息摘要算法)和 SHA(Secure Hash Algorithm,安全散列算法)。 除了这两个之外,当然还有很多其他加密算法,比如 DES(Data Encryption Standard,数据加密标准)、AES(Advanced Encryption Standard,高级加密标准)。

前面我讲到的哈希算法四点要求,对用于加密的哈希算法来说,有两点格外重要。第一点是很难根据哈希值反向推导出原始数据,第二点是散列冲突的概率要很小。 不过,即便哈希算法存在散列冲突的情况,但是因为哈希值的范围很大,冲突的概率极低,所以相对来说还是很难破解的。像 MD5,有 2^128 个不同的哈希值,这个数据已经是一个天文数字了,所以散列冲突的概率要小于 1-2^128。 如果我们拿到一个 MD5 哈希值,希望通过毫无规律的穷举的方法,找到跟这个 MD5 值相同的另一个数据,那耗费的时间应该是个天文数字。所以,即便哈希算法存在冲突,但是在有限的时间和资-源下,哈希算法还是被很难破解的。 对于加密知识点的补充,md5这个算法固然安全可靠,但网络上也有针对MD5中出现的彩虹表,最常见的思路是在密码后面添加一组盐码(salt), 比如可以使用md5(1234567.'2019@STARK-%$#-idje-789'),2019@STARK-%$#-idje-789 作为盐码起到了一定的保护和安全的作用。 唯一标识(uuid) 我们可以给每一个图片取一个唯一标识,或者说信息摘要。比如,我们可以从图片的二进制码串开头取 100 个字节,从中间取 100 个字节,从最后再取 100 个字节,然后将这 300 个字节放到一块,通过哈希算法(比如 MD5),得到一个哈希字符串,用它作为图片的唯一标识。通过这个唯一标识来判定图片是否在图库中,这样就可以减少很多工作量。

LAPACK函数介绍

为方便线性代数运算,现将LAP ACK中的函数介绍如下: 1.函数的命名规则: LAPACK里的每个函数名已经说明了该函数的使用规则。所有函数都是以XYYZZZ的形式命名,对于某些函数,没有第六个字符,只是XYYZZ的形式。 第一个字母X代表以下的数据类型: S REAL,单精度实数 D DOUBL E PRECISION,双精度实数 C COMPLEX,单精度复数 Z COMPLEX*16 或DOUBLE COMPLEX 注: 在新版LAPACK中含有使用重复迭代法的函数DSGESV和ZCDESV。 头2个字母表示使用的精度: DS 输入数据是double双精度,算法使用单精度 ZC 输入数据是complex*16,算法使用complex单精度复数 接下面两个字母YY代表数组的类型。 BD bidiagonal,双对角矩阵 DI diagonal,对角矩阵 GB general band,一般带状矩阵 GE general (i.e., unsymmetric, in some cases rectangular),一般情形(即非对称,在有些情形下为矩形) GG general matrices, generalized problem (i.e., a pair of general matrices),一般矩阵,广义问题(即一对一般矩阵) GT general tridiagonal,一般三对角矩阵 HB (complex) Hermitian band,(复数)厄尔米特带状阵HE (complex) Hermitian,(复数)厄尔米特矩阵 HG upper Hessenberg matrix, generalized problem (i.e a Hessenberg and a triangular matrix),上海森伯格矩阵,广义问题(即一个海森伯格矩阵和一个三角矩阵) HP (complex) Hermitian, packed storage,(复数)压缩储存的厄尔米特矩阵HS upper Hessenberg,上海森博格矩阵 OP (real) orthogonal, packed storage,(实数)压缩储存的正交阵 OR (real) orthogonal,(实数)正交阵 PB symmetric or Hermitian positive definite band,对称或厄尔米特正定带状矩阵 PO symmetric or Hermitian positive definite,对称或厄尔米特正定矩阵 PP symmetric or Hermitian positive definite, packed storage,压缩储存的对称或厄尔米特正定矩阵 PT symmetric or Hermitian positive definite tridiagonal,对称或厄尔米特正定三对角阵 SB (real) symmetric band,(实数)对称带状阵 SP symmetric, packed storage,压缩储存的对称阵 ST (real) symmetric tridiagonal,(实数)对称三对角阵

哈希的基本概念

6、8 哈希表及其查找★3◎4 哈希译自“hash"一词,也称为散列或杂凑。?哈希表查找得基本思想就是:根据当前待查找数据得特征,以记录关键字为自变量,设计一个哈希函数,依该函数按关键码计算元素得存储位置,并按此存放;查找时,由同一个函数对给定值key计算地址,将key与地址单元中元素关键码进行比较,确定查找就是否成功。哈希方法中使用得转换函数称为哈希函数(杂凑函数),按这个思想构造得表称为哈希表(杂凑表)。?对于n个数据元素得集合,总能找到关键码与存放地址一一对应得函数、若最大关键为m,可以分配m个数据元素存放单元,选取函数f(ke y)=key即可,但这样会造成存储空间得很大浪费,甚至不可能分配这么大得存储空间、通常关键码得集合比哈希地址集合大得多,因而经过哈希函数变换后,可能将不同得关键码映射到同一个哈希地址上,这种现象称为冲突(Collisio n)。映射到同一哈希地址上得关键码称为同义词。可以说,冲突不可能避免,只能尽可能减少。所以,哈希方法需要解决以下两个问题:?(1)构造好得哈希函数?①所选函数尽可能简单,以便提高转换速度。?②所选函数对关键码计算出得地址,应在哈希地址集中大致均匀分布,以减少空间浪费。 (2)制定解决冲突得方案 1.常用得哈希函数 (1)直接定址法 即取关键码得某个线性函数值为哈希地址,这类函数就是一一对应函数,不会产生冲突,但要求地址集合与关键码集合大小相同,因此,对于较大得关键码集合不适用。如关键码集合为{100,300,500,700,800,900},选取哈希函数为Ha

sh(key)=key/100,则存放如表6-3所示。 表6—3 直接定址法构造哈希表 (2)除留余数法 即取关键码除以p得余数作为哈希地址。使用除留余数法,选取合适得p很重要,若哈希表表长为m,则要求p≤m,且接近m或等于m。p一般选取质数,也可以就是不包含小于20质因子得合数、?(3)数字分析法 设关键码集合中,每个关键码均由m位组成,每位上可能有r种不同得符号、?数字分析法根据r种不同得符号及在各位上得分布情况,选取某几位,组合成哈希地址。所选得位应就是各种符号在该位上出现得频率大致相同。 (4)平方取中法?对关键码平方后,按哈希表大小,取中间得若干位作为哈希地址。?(5)折叠法(Folding)?此方法将关键码自左到右分成位数相等得几部分,最后一部分位数可以短些,然后将这几部分叠加求与,并按哈希表表长,取后几位作为哈希地址。这种方法称为折叠法。?有两种叠加方法:?①移位法-—将各部分得最后一位对齐相加。 ②间界叠加法—-从一端向另一端沿各部分分界来回折叠后,最后一位对齐相加。?如对关键码为key=25346358705,设哈希表长为3位数,则可对关键码每3位一部分来分割。关键码分割为如下4组: 253 463 58705 分别用上述方法计算哈希地址如图6—12所示、对于位数很多得关键码,且每一位上符号分布较均匀时,可采用此方法求得哈希地址。

HASH函数

密码学 (第十三讲) HASH函数 张焕国 武汉大学计算机学院

目录 密码学的基本概念 1、密码学 2、古典 、古典密码 3、数据加密标准( ) DES) 、数据加密标准(DES 4、高级 ) AES) 数据加密标准(AES 高级数据加密标准( 5、中国商用密码( ) SMS4) 、中国商用密码(SMS4 6、分组密码的应用技术 7、序列密码 8、习题课:复习对称密码 、公开密钥密码(11) 9、公开密钥密码(

目录 公开密钥密码(22) 10 10、 11、数字签名(1) 12、数字签名(2) 13、 、HASH函数 13 14 14、 15、 15 PKI技术 16 16、 、PKI 17、习题课:复习公钥密码 18、总复习

一、HASH 函数函数的概念的概念 1、Hash Hash的作用的作用 ?Hash Hash码也称报文摘要码也称报文摘要。。 ?它具有极强的错误检测能力错误检测能力。。 ?用Hash Hash码作码作MAC ,可用于认证认证。。 ?用Hash Hash码辅助码辅助数字签名数字签名。。 ?Hash Hash函数可用于函数可用于保密保密。。

一、HASH 函数的概念 2、Hash Hash函数的定义函数的定义 ①Hash Hash函数将任意长的数据函数将任意长的数据M 变换为定长的码h , 记为记为::h=HASH(M)h=HASH(M)或或h=H(M)h=H(M)。。 ②实用性:对于给定的数据对于给定的数据M M ,计算,计算h=HASH(M)h=HASH(M)是是 高效的。 ③安全性安全性:: ? 单向性:对给定的对给定的Hash Hash值值h ,找到满足H(x)H(x)==h 的x 在 计算上是不可行的计算上是不可行的。。 否则否则,,设传送数据为设传送数据为C=C=<<M ,H(M||K )>,K 是密钥。攻击者可以截获攻击者可以截获C,C,求出求出Hash 函数的逆函数的逆,,从而得出 M||S =H -1(C),然后从M 和M ||K即可即可得出得出K。

一次函数简介

专题函数图象 1. (2012莱芜)下列四幅图象近似刻画两个变量之间的关系,请按图象顺序将下面四种情景与之对应排序() ①一辆汽车在公路上匀速行驶(汽车行驶的路程与时间的关系) ②向锥形瓶中匀速注水(水面的高度与注水时间的关系) ③将常温下的温度计插入一杯热水中(温度计的读数与时间的关系) ④一杯越来越凉的水(水温与时间的关系) A.①②③④B.③④②①C.①④②③D.③②④① 2. 小亮同学骑车上学,路上要经过平路、下坡、上坡和平路(如图),若小亮上坡、平路、下坡的速度分别为v1,v2,v3,v1<v2<v3,则小亮同学骑车上学时,离家的路程s与所用时间t的函数关系的图象可能是() A. B.C.D. 3. 早晨小欣与妈妈同时从家里出发,步行与自行车向相反方向的两地上学与上班,如图是他们离家的路程(米)与时间(分钟)之间的函数图象,妈妈骑车走了10分钟时接到小欣的电话,立即以原速度返回并前往学校,若已知小欣 步行的速度为50米/分钟,并且妈妈与小欣同时到达学 校.完成下列问题: (1)在坐标轴两处的括号内填入适当的数据; (2)求小欣早晨上学需要的时间.

(1)设图形的周长为l,梯形的个数为n,试写出l与n的函数关系式;(2)求n=11时图形的周长.

且满足,则一次函数 A.当运输货物重量为60吨,选择汽车 B.当运输货物重量大于50吨,选择汽车 C.当运输货物重量小于50吨,选择火车 D.当运输货物重量大于50吨,选择火车

请分别求出方案一和方案二中购买的种子数量(和付款金额( 运地 (2)当x为何值时,A村的运费较少? (3)请问怎样调运,才能使两村运费之和最小?求出最小值.

哈 希 常 见 算 法 及 原 理 ( 2 0 2 0 )

哈希算法乱谈(摘自知乎) 最近【现场实战追-女孩教-学】初步了解了Hash算法的相关知识,一些人的见解让我能够迅速的了解相对不熟悉的知识,故想摘录下来,【QQ】供以后温故而知新。 HASH【⒈】算法是密码学的基础,比较常用的有MD5和SHA,最重要的两【О】条性质,就是不可逆和无冲突。 所谓不【1】可逆,就是当你知道x的HASH值,无法求出x; 所谓无【б】冲突,就是当你知道x,无法求出一个y,使x与y的HA【9】SH值相同。 这两条性【⒌】质在数学上都是不成立的。因为一个函数必然可逆,且【2】由于HASH函数的值域有限,理论上会有无穷多个不同的原始值【6】,它们的hash值都相同。MD5和SHA做到的,是求逆和求冲突在计算上不可能,也就是正向计算很容易,而反向计算即使穷尽人类所有的计算资-源都做不到。 顺便说一下,王小云教授曾经成功制造出MD5的碰撞,即md5(a) = md5(b)。这样的碰撞只能随机生成,并不能根据一个已知的a求出b(即并没有破坏MD5的无冲突特性)。但这已经让他声名大噪了。 HASH算法的另外一个很广泛的用途,就是很多程序员都会使用的在数据库中保存用户密码的算法,通常不会直接保存用户密码(这样DBA就能看到用户密码啦,好危险啊),而是保存密码的HASH值,验

证的时候,用相同的HASH函数计算用户输入的密码得到计算HASH值然后比对数据库中存储的HASH值是否一致,从而完成验证。由于用户的密码的一样的可能性是很高的,防止DBA猜测用户密码,我们还会用一种俗称“撒盐”的过程,就是计算密码的HASH值之前,把密码和另外一个会比较发散的数据拼接,通常我们会用用户创建时间的毫秒部分。这样计算的HASH值不大会都是一样的,会很发散。最后,作为一个老程序员,我会把用户的HASH值保存好,然后把我自己密码的HASH值保存到数据库里面,然后用我自己的密码和其他用户的用户名去登录,然后再改回来解决我看不到用户密码而又要“偷窥”用户的需要。最大的好处是,数据库泄露后,得到用户数据库的黑客看着一大堆HASH值会翻白眼。 哈希算法又称为摘要算法,它可以将任意数据通过一个函数转换成长度固定的数据串(通常用16进制的字符串表示),函数与数据串之间形成一一映射的关系。 举个粒子,我写了一篇小说,摘要是一个string:'关于甲状腺精灵的奇妙冒险',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'。如果有人篡改了我的文章,并发表为'关于JOJO的奇妙冒险',我可以立即发现我的文章被篡改过,因为根据'关于JOJO的奇妙冒险'计算出的摘要不同于原始文章的摘要。 可见,摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡

常用ENVI函数介绍

常用ENVI函数功能介绍 1、文件管理 ENVI文件处理函数为程序员提供了相当大的灵活性。有以下的函数可供编程使用,用户可以根据所需的情况选择所需的函数。 ENVI_PICKFILE ENVI_PICKFILE函数产生一个提示用户选择文件的对话框。该函数产生的界面和使用ENVI主菜单选择File->Open Image File一样的界面。该函数并不真正的打开文件,它只是以字符串的形式返回用户所选择的全路径文件名。 ENVI_SELECT ENVI_SELECT产生对话框提示用户从ENVI中已经打开的文件中选择一个文件。该函数产生ENVI标准的文件选择对话框,其中包括空间和波谱子区裁剪按钮,以及掩模波段选取按钮。该函数也集成了ENVI_PICKFILE的功能,在对话框上提供了文件打开按钮,用户可以通过该按钮打开新的ENVI文件。ENVI_SELECT不仅返回用户所选择文件的FID,还可以返回进一步处理所需的DIMS和POS关键字值 ENVI_OPEN_FILE 该函数返回一个文件的FID,它是打开ENVI文件的最直接和简单的方法。默认情况下它将文件信息添加到可用波段列表中,可以使用NO_REALIZE可以阻止文件信息加入到可用波段列表中。 注:如果可用波段列表已打开,该关键字无效。 ENVI_FILE_MNG 该函数可以打开、关闭或者删除硬盘上的文件。无需用户交互。 ENVI_GET_FILE_IDS 该函数返回所有当前打开的文件的FID。 2、打开外部文件格式 ENVI能够读取相当广泛的数据格式,虽然ENVI_OPEN_FILE仅能够打开具有ENVI 头文件的影像文件。ENVI也提供了一些特定的处理程序能够打开和返回外部格式的文件:ENVI_OPEN_DATA_FILE 该函数打开ENVI所支持的外部文件(通过关键字指定文件类型)并返回FID,无需用户交互。 3、获取数据 当影像文件非常大时,不适合使用IDL的READU命令将它全部读入到内存中。因此,ENVI提供了两个处理函数能够以小的、易管理的数据块方式读取影像数据。这两个函数也提供了数据逻辑组织,一次一个波段或是一次光谱切片。 ENVI_GET_DATA

s函数的介绍

s函数一下是s函数的介绍函数是system Function的简称,用它来写自己的simulink模块。(够简单吧,^_^,详细的概念介绍大伙看帮助吧)可以用matlab、C、C++、Fortran、Ada 等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单)先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等的先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束。在matlab的workspace 里打edit sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构。它的第一行是这样的:function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag) 先讲输入与输出变量的含义:t是采样时间,x是状态变量,u是输入(是做成simulink模块的输入),flag是仿真过程中的状态标志(以它来判断当前是初始化还是运行等);sys输出根据flag的不同而不同(下面将结合flag来讲sys的含义),x0是状态变量的初始值,str是保留参数(mathworks 公司还没想好该怎么用它,嘻嘻,一般在初始化中将它置空就可以了,str=[]),ts是一个1×2的 向量,ts(1)是采样周期,ts(2)是偏移量。下面结合sfuntmpl.m中的代码来讲具体的结构:switch flag, %判断flag,看当前处于哪个状态case 0, [sys,x0,str,ts]=mdlInitializeSizes; flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化,此函数在sfuntmpl.m 的149行我们找到他,在初始化状态下,sys是一个 结构体,用它来设置模块的一些参数,各个参数详细说明如下size = simsizes;%用于设置模块参数的结构体用simsizes来生成sizes.NumContStates = 0;%模块连续状态变量的个数sizes.NumDiscStates = 0;%模块离散状态变量的个数sizes.NumOutputs = 0;%模块输出变量的个数sizes.NumInputs = 0;%模块输入变量的个数sizes.DirFeedthrough = 1;%模块是否存在直接贯通(直接贯通我的理解是输入能%直接控制输出)sizes.NumSampleTimes = 1;%模块的采样时间个数,至少是一个sys = simsizes(sizes); %设置完后赋给sys输出举个例子,考虑如下模型:dx/dt=fc(t,x,u) 也可以用连续状态方程描述:dx/dt=A*x+B*u x(k+1)=fd(t,x,u) 也可以用离散状态方程描述:x(k+1)=H*x(k)+G*u(k) y=fo(t,x,u) 也可以用输出状态方程描述:y=C*x+D*u 设上述模型连续状态变量、离散状态变量、输入变量、输出变量均为1个,我们就只需改上面那一段代码为: (一般连续状态与离散状态不会一块用,我这儿是为了方便说明)sizes.NumContStates=1;sizes.NumDiscStates=1;sizes.NumOutputs=1;sizes.NumInpu ts=1; 其他的可以不变。继续在mdlInitializeSizes函数中往下看:x0 = []; %状态变量设置为空,表示没有状态变量,以我们上面的假设,可改%为x0=[0,0](离散和连续的状态变量我们都设它初值为0) str = []; %这个就不用说了,保留参数嘛,置[]就可以了,反正没什么用,可%能7.0会给它一些意义ts = [0 0]; %采样周期设为0表示是连续系统,如果是离散系统在下面的mdlGet %TimeOfNextVarHit函数中具体介绍嘻嘻,总算讲完了初始化,后面的应该快了在sfuntmpl的106行继续往下看:case 1, sys=mdlDerivatives(t,x,u); flag=1表示此时要计算连续状态的 微分,即上面提到的dx/dt=fc(t,x,u)中的dx/dt,找到mdlDerivatives函数(在193行)如果设置连续状态变量个数为0,此处只需sys=[]; 就可以了(如sfuntmpl中一样),按我们上述讨论的那个模型,此处改成sys=fc(t,x(1),u)或sys=A*x(1)+B*u %我们这儿x(1)是连续状态变量,而x(2)是离散的,这儿只用到连续的,此时的输出sys就是微分继续,在sfuntmpl

HASH表

hashing定义了一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值 的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。 设所有可能出现的关键字集合记为u(简称全集)。实际发生(即实际存储)的关键字集合记为k(|k|比|u|小得多)。|k|是集合k中元素的个数。 散列方法是使用函数hash将u映射到表t[0..m-1]的下标上(m=o(|u|))。这样以u中关键字为自变量,以h为函数的运算结果就是相应结点的存储地址。从而达到在o(1)时间内就可完成查找。 其中: ①hash:u→{0,1,2,…,m-1} ,通常称h为散列函数(hash function)。散列函数h 的作用是压缩待处理的下标范围,使待处理的|u|个值减少到m个值,从而降低空间开销。 ②t为散列表(hash table)。 ③hash(ki)(ki∈u)是关键字为ki结点存储地址(亦称散列值或散列地址)。 ④将结点按其关键字的散列地址存储到散列表中的过程称为散列(hashing). 比如:有一组数据包括用户名字、电话、住址等,为了快速的检索,我们可以利用名字作为关键码,hash规则就是把名字中每一个字的拼音的第一个字母拿出来,把该字母在26个字母中的顺序值取出来加在一块作为改记录的地址。比如张三,就是z+s=26+19=45。就是把张三存在地址为45处。 但是这样存在一个问题,比如假如有个用户名字叫做:周四,那么计算它的地址时也是z+s=45,这样它与张三就有相同的地址,这就是冲突,也叫作碰撞! 冲突:两个不同的关键字,由于散列函数值相同,因而被映射到同一表位置上。该现象称为冲突(collision)或碰撞。发生冲突的两个关键字称为该散列函数的同义词(synonym)。 冲突基本上不可避免的,除非数据很少,我们只能采取措施尽量避免冲突,或者寻找解决冲突的办法。影响冲突的因素 冲突的频繁程度除了与h相关外,还与表的填满程度相关。 设m和n分别表示表长和表中填人的结点数,则将α=n/m定义为散列表的装填因子(load factor)。α越大,表越满,冲突的机会也越大。通常取α≤1。 散列函数的构造方法: 1、散列函数的选择有两条标准:简单和均匀。 简单指散列函数的计算简单快速; 均匀指对于关键字集合中的任一关键字,散列函数能以等概率将其映射到表空间的任何一个位置上。也就是说,散列函数能将子集k随机均匀地分布在表的地址集{0,1,…,m-1}上,以使冲突最小化。 2、常用散列函数 (1)直接定址法:比如在一个0~100岁的年龄统计表,我们就可以把年龄作为地址。 (2)平方取中法

相关文档
最新文档