第一篇:常见问题总结
如何降低Noise
方法一:普通亮度下,牺牲帧率
方法:在pline_table中修改,降低shutter,Gain值略做减小。
方法二:低亮度下,牺牲图片亮度
方法:在Pline table中修改,shutter值不变,gain值降低
方法三:调整对应的EE和ANR参数
方法四:降低当前图片的饱和度
降低PCA或CCR
照片ISO小暗环境才400左右这个问题有两个原因导致:
1.Mini ISO 低
2.capture AE Pline table最大的gain 为6倍。
基于上面两个原因,暗处计算出来的ISO 就低。
因为修改AE pline table 会影响capture 的noise表现。我这边建议修改Mini ISO(这个值反应sensor的敏感度,但目前只是用来计算ISO 值)。建议修改到100.修改文件: camera_tuning_para_xxx.cpp
56-->100, // u4MiniISOGain, ISOxx
使用82 CCT做CCM时只生成一组参数
贵司的操作 是 Muti CCM。也就是说,贵司的操作 CCM 生效的在 camera_tuning_para_ov8858raw.cpp文件中的 CAMERA_ISP_DEFAULT_VALUE 里面的ISPCcmPoly22 这个结构体。
而 camera_isp_regs_ov8858raw.cpp 中的 CCM 部分 是 Dynamic CCM。
如果需要使用 Dynamic CCM 的参数。因为 82 的 cct tools 并没有把 gen Dynamic CCM 的功能打开。
可以使用 92 的 cct tools,在 CCM 页面 按照相同的操作,在每次 add new poly data 之前 使用 右上角的 矩阵下拉菜单 保存到对应的色温下。
如何开启 Dynamic CCM 的功能,请参考 isp_tuning_customer.cpp 档案中的is_to_invoke_dynamic_ccm 函数
返回值是 MTRUE 表示 使用Muti CCM。
返回值是MFALSE 表示使用Dynamic CCM。
默认使用的是 Muti CCM。
因此贵司反馈 camera_isp_regs_ov8858raw.cpp文件中只产生D65一组参数,CWF,TL84,A对应的参数都是0.电话:+86 755 2663 0099 分机:85016
Camera 快速入门MediatekSupportCamera Support
Camera器件选2择
Camera概述Camera HW介绍
Camera软件架4构
Camera DriverDriver的配置Porting Guide
常见问题及7Debug
Camera TuningTuning Tool及设备介绍Tuning Guide常见问题及Debug
Camera 应用Camera 应用简介Camera 应用常见问题
Camera Feature
Feature介绍/常见问 题Feature开关/常用配 13
置Feature API调用
Camera进阶实作
添加三方feature/算 法添加External ISPPerformance问题分析16
学习天地学习资料链接ApplicationNote
MediaTek support
1,Camera HW Design
平台通用的注意事项请参考DCC文件:
MediaTek DCC > External Document > HW > Common Design Notes > Camera > Common
各平台的注意事项请参考各平台Design Notes的camera 章节
2,申请驱动代码:
需要使用的sensor请到Camera器件查找对应平台是否已经上DRL,表格里面没有的器件,请找HW CPM商讨对策。表格里support的器件release的代码包里会有,如果没有或者不确定是否为最新版本,请提EService申请并在拿到驱动代码后验证
3,申请调试:
确认驱动ok后,如需我司调试,请提对应的Eservice过来,格式请参考
[FAQ03734]如何提交Camera调试效果需求
4,遇到问题
上搜索是否有答案,可以查到对应问题的文档,请先在FAQ,Ecource等,如果搜索的内容不佳,可以对搜索内容加上英文双引号""会更加精准,如果没有解决,请提EService给我司,并请按照以下规范
5,提E_service的规范:
Camera Function性质问题(例如死机,花屏,黑屏,卡屏等)a)标题中需要注明是哪颗image sensor,提交时需正确填写复现概率,复现步骤,以及现象描述。并提供复现问题时的mobile log和驱动代码 Camera图像效果方面的问题(例如shading,饱和度,噪点,清晰度等)a)请注意在note中注明该项目是否有人调试过并说明调试人员,如果是我司调试过的项目,请同时提供eservice ID
b)请提交问题时提供对应的问题图片和对比机图片,同时将Tuning参数发过来
其他Camera问题
a)其他camera问题,需注意描述正确,提交mobile log,不好描述时请提供视频
Camera器件选择
1,查看Mediatek support的Image Sensor型号
在MOL上QVL/DRL ListCamera部分可以查看目前我们各个平台支持的Camera的型号(一般四周更新一次)
Excel表格Name:MTK_Camera_Sensor_DRL_W****.xlsx(W***表示是哪一周更新的表格)
第二篇:钢筋常见问题总结
1.剪力墙水平筋用不用伸至暗柱柱边?(在水平方向暗柱长度远大于lae时)
答:要伸至柱对边,其构造03G101-1已表达清楚,其原理就是剪力强暗柱与墙身本身是一个共同工作的整体,不是几个构件的连接组合,暗柱不是柱,它是剪力墙的竖向加强带;暗柱与墙等厚,其刚度与墙一致。不能套用梁与柱两种不同构件的连接概念。剪力墙遇暗柱是收边而不是锚固。
2.剪力墙端部有暗柱时,剪力墙水平钢筋应该伸入柱钢筋内侧还是外侧,现实中大多数工地都是伸入暗柱主筋外侧,我觉得这样不妥,但图集上没有详细规定,正确的做法应该是怎么样的?
答: 通常剪力墙水平钢筋放在外侧,如果伸入端柱竖向钢筋内侧时,需要向内弯折,这样做会形成钢筋笼“颈缩”,因此,水平钢筋走暗柱主筋外侧即可。剪力墙尽端不存在水平钢筋的支座,只存在“收边”问题。请参看03G101勘误:
6、第47页端部暗柱墙构造中剪力墙水平筋弯钩位置稍往后退,在暗柱端部纵筋后“扎进”暗柱。
3.《03G101-1图集》第17页的第(5)条规定:洞口上下左右每边都设置补强钢筋;但第(4)条只在上下设置、而不在左右设置?
答: 03G101-1的洞口规则与构造仅适用于剪力墙上(含墙身、墙梁与墙柱)开洞,如果在框架梁或非框架梁上开洞,其构造方式就有所不同了。梁与墙梁的主要受力机理不同,梁的主要功能是承受竖向荷载,连梁的主要功能是协助剪力墙承受横向地震荷载;梁的箍筋主要为保证梁的(受剪)强度而设,连梁的箍筋主要为保证连梁的刚度而设。所以,当设置在连梁中部且直径不大于1/3梁高的圆洞切断了连梁的箍筋时,并不会使连梁的受剪强度减弱到不安全的程度,但却会影响连梁的刚度。所以,第(4)条规定仅需在洞口上下设置“补强钢筋”(严格的说法应是“补刚钢筋”)。
4.当框架柱的上层钢筋直径小于下层钢筋直径时(柱截面不变),能否采用将下 层钢筋在楼板板厚范围内弯折收头,而上层钢筋重新插筋的方式施工?若可以,上 层钢筋的插入长度应为多少?
答:可以,上层钢筋的插入长度应大于1.5la,但是如此施工过于浪费。一般,此情况宜采用上下层钢筋连接的做法,搭接、机械连接或对焊均可。
柱
● 柱问题(1):柱纵筋锚入基础的问题
《03G101-1图集》对基础顶面以上的柱纵筋的构造要求讲得比较详细,但是对柱纵筋锚入基础的问题,图集中没有介绍,而且,此类问题查看了一些混凝土构造手册之类也找不到详细的介绍,所以,很有必要在此向专家请教,这些问题也是不少工程技术人员共同的问题。① 柱纵筋伸入基础(承台梁,或有梁式筏板基础的基础梁)的锚固长度是多少?是一个 laE 还是更多?(甚至有人提出 1.5 倍的 laE)
② 当柱纵筋伸入基础的直锚长度满足“锚固长度”的要求,是否可以“直锚”而不必进行弯锚?有的人说可以“直锚”;但又有人说必须拐一个直角弯。
③ 如果柱纵筋伸入基础必须“弯锚”的话,弯折部分长度是多少?有人说是 10d ,而在《03G101-1图集》第39页“梁上柱LZ纵筋构造”中弯折长度为 12d,这个规定是否可用于基础?
④ 同样在《03G101-1图集》第39页“梁上柱LZ纵筋构造”中,规定“直锚部分长度”不小于 0.5 laE,这个规定是否可用于基础?
⑤ 当基础梁的梁高大于柱纵筋的锚固长度时,柱纵筋可以不伸到梁的底部。是这样的吗?⑥ 当基础梁的梁高小于柱纵筋的锚固长度时,柱纵筋必须伸到梁的底部,然后拐一个直角弯。其弯折部分长度,“剩多少拐过去多少”,显然不合适。这时候,应该用上前面第③条,即规定一个弯折部分长度;同时,也应该检验一下“直锚部分长度”,看看它是否不小于前面第④条规定的“最小直锚长度”。是这样的吗?
■ 答柱问题(1): 所提问题将会在“筏形、箱形、地下室基础平法国家建筑标准设计03G101-
3、-4”中得到相应答案(2003年底陆续推出)。现在简单答复如下:
①⑤ 柱纵筋一般要求伸至基础底部纵筋位置。特厚基础(2米以上)中部设有抗水化热的钢筋时,基础有飞边的所有柱和基础无飞边的中柱的柱纵筋可伸至中层筋位置;②③ 当柱纵筋伸入基础的直锚长度满足“锚固长度”的要求时,要求弯折12d;④⑥ 梁上柱纵筋的锚固要求亦适用于柱在基础中的锚固,但要求柱纵筋“坐底”。
● 柱问题(2): 我们在施工中经常遇到柱主筋 大变小的问题。试问:当柱子采用电渣压力焊时候有什么限制条件,例:25mm碰焊14mm的钢筋的能不能?
■ 答柱问题(2): 25mm碰焊14mm,直径相差过大受力时会出现应力集中现象。如果施工规范对大小直径钢筋对焊无限制规定的话,建议直径相差不要超过两级(25与20或18与
14)。
● 柱问题(3): 柱伸入承台梁或基础梁中,是否设置箍筋?箍筋如何设置?不需加密? 此箍筋起什么作用? 这个问题如果在施工图中明确标示,就没有问题。如果在施工图中没有明确表出,则施工人员如何执行?现在的情况是各人有各的做法,例如,有的人设置两根箍筋,有的人只设置一根箍筋。
■ 答柱问题(3): 要设不少于两道箍筋,但不需要加密。箍筋的作用是保持柱纵筋在浇筑混凝土时钢筋之间的相对位置和钢筋笼的定位不受扰动。
● 柱问题(4): 柱上端“非连接区”?
《G101图集》规定,柱的下部,即在楼板梁的上方有一个“非连接区”(是个箍筋加密区),纵筋的接头只能在“非连接区”以上部位(也就是柱的中部)进行。然而,图集没有规定在柱的上部有没有“非连接区”?例如,在柱上部的箍筋加密区或者在柱梁的交叉部位允许不允许纵筋连接?
事实上,有的施工人员在上述的柱上部区域进行了钢筋接头。这样,他在柱中部有一个钢筋接头,在柱上部又有一个钢筋接头,违背了“同一纵向受力钢筋不宜设置两个或两个以上接头”的规定。(见《混凝土结构工程施工质量验收规范》)
不过,上述规范的用语是“不宜”,并没有强制规定。因此,请教一下上述柱纵筋的接头问题如何解释?如何执行?其中有什么理论根据?
■ 答柱问题(4): 提问者可能是指00G101,03G101-1中从下层柱的上部到上层柱的下部形成的非连接区是连续的。规范对此规定是“不宜”,未做强制规定,国家建筑标准设计的规定偏严,对保证质量有好处。如果难以做到,结构设计师可以对此规定进行变更。规范用语“不宜”,反映了中国人的辨证思维。对于执行与否,结构设计师有抉择权利。该规定多出于概念设计考虑,未见其理论根据的文章发表。
● 柱问题(5):前在03G101第45页中(非抗震KZ箍筋构造非抗震QZ.LZ纵向钢筋构造)中注7:当为复合箍筋时,对于四边有梁与柱相连的同一节点,可仅在四根梁端的最高梁底
至最低梁顶范围周边设置矩形封闭箍筋,那么请问陈教授,1、该条能否用于第36页(抗震KZ纵向钢筋连接构造)中。或者说用于四级抗震的节点处。因为我注意到构造规定中非抗震与四级抗震处理基本上一样的。
2、对于四边有梁与柱相连的同一节点能否用于边(端)柱与梁相交处。
■ 答柱问题(5):
1、该条不适用于(抗震KZ纵向钢筋连接构造),抗震结构要求所有复合箍筋要贯通柱梁节点,而且要按照加密间距设置。
2、只有边柱有悬挑梁时才会形成四边有梁的情况,该节点构造要求适用于该情况。
● 柱问题(6):有的施工单位把柱子的接头只考虑底部的区域满足要求 而上部却不考虑,施工单位 认为是受压的,所以他们认为 他们采取的闪光对焊上部接头 他们就不考虑了?这样做法对吗?
■ 答柱问题(6): 框架柱是偏压构件,受弯矩、轴向压力和剪力的共同作用,其受弯时的反弯点一般在柱中稍向上的位置,抗震时柱两端都要加密箍筋以保证实现“强剪弱弯”,因此,连接位置不考虑避开柱上端是错误的。
● 综合问题(1): 在混凝土结构施工中,出现Ⅳ级钢筋时,它得锚固长度应该如何计算?因在混凝土结构设计规范及混凝土验收规范上都没有出现Ⅳ钢筋,是否国家已经取消了该级别的钢筋用于建筑工程中。谢谢!
■ 答综合问题(1): 混凝土结构基本理论中,受混凝土的极限应变值的限制,强度过高的钢筋发挥不出其全部作用(这正是混凝土设计规范和施工规范不设Ⅳ级钢筋的理论依据)。所以,即便是Ⅳ级钢筋,其强度设计值也只能取到360N/mm2(与Ⅲ级钢筋相同),且当用于轴心受拉和小偏心受拉构件时只能按300N/mm2取用。因此,高于Ⅲ级的钢筋的锚固长度取值按Ⅲ级钢筋即可。
还有,Ⅳ级钢筋的塑性性能和可焊性比新Ⅲ级钢筋差,用在普通混凝土结构中并不合适,也不经济。
● 综合问题(2): 03G101与03G329有矛盾时依谁为准?
■ 答综合问题(2): 03G101在编制时已经尽可能地做到与03G329协调一致。当设计者选用03G101时,应以03G101为准。当设计者既选用了03G101,又选用了03G329时,由于03G101中的构造是与平法施工图配套使用的正式设计文件(详见03G101总说明第4、5两条),如果设计者采用了平法制图规则完成了施工图设计,其构造应以03G101为准;如果未使用平法表达,则不应以03G101为准。
●综合问题(3): 03G101图集中为什么把受力钢筋的锚固长度改了,这些数据不便记忆,施工中也容易出错,为什么不采用整数呢?
■ 答综合问题(3): 不是03G101把受力钢筋的锚固长度改了,而是《混规》GB50010-2002把原来以5d进位的锚固长度改了。《混规》也是国家建筑标准设计03G101的依据之一。为了方便施工,03G101把规范第9.3条的公式根据不同的钢筋种类、混凝土强度等级以及钢筋直径计算成表格,尽量做到目前的样子。
● 综合问题(4):在“GB50010-2002”混凝土结构设计规范第126页10.1.5条规定板下不受力钢筋伸入支座的锚固长度不应小于5d,我个人认为是否还应该满足伸至支座的中心线位置,这也是一贯的施工做法。
■ 答综合问题(4):请注意规范用语“不应小于”的意义。大学教科书中是“=”概念,而工程规范和规程是“≥”的概念,因此,可以伸至支座中心位置。
当为非抗震设计时,正常情况下板的下部钢筋在支座部位受压;当为抗震设计时,通常板不作为耗能构件,因而不考虑地震作用的分配,仍然按非抗震设计,板的下部钢筋在支座部位亦受压;在这两种情况下,即便其伸入支座长度为5d,通常也是安全的。执行规范规定时,应特别注意“当连续板内温度、收缩应力较大时,伸入支座的锚固长度宜适当增加”。● 综合问题(5):有梁式筏板基础问题:
① 筏板部分一般为上下两层钢筋网,下层钢筋网片放在最下面,基础梁的整个钢筋(箍筋及纵筋)放在下层钢筋网片的上面。是这样的吗?
② 但是,一般图纸在标注基础梁的高度时,梁底标高和筏板板底标高是在同一个高度,这样就出现了“基础梁的有效高度”缩减的问题。因为,首先是梁的下部纵筋的保护层变厚了。(最下面是筏板的保护层,然后是筏板下层钢筋网片的纵横钢筋,然后是基础梁的纵筋,最后才是基础梁的下部纵筋)当我们进行基础梁的强度计算时,应该采用这个“缩减后的有效高度”进行计算。您说对吗?然而,有的设计院并不是这样,甚至连基础梁的箍筋高度还是采用梁高减两倍的保护层来计算的,这显然会造成箍筋“高度太大”。
③ 至于筏板钢筋网片,纵横两个方向的钢筋哪个在下面、哪个在上面?是否应为: ⅰ“下层钢筋网片”是短方向的钢筋在下面、长方向的钢筋在上面;
ⅱ“上层钢筋网片”是长方向的钢筋在下面、短方向的钢筋在上面;
ⅲ 因为,从“有梁式筏板”的受力结构模型来看,正好是“楼板和梁”的受力结构模型翻转过来。这样的看法对吗?
■ 答综合问题(5):
1、形基础的钢筋配置包括梁(或暗梁)和板两部分,布筋考虑一般“以梁为先”;
2、比较两个方向上的基础梁,从中判断强者(等高时选跨度较小者,不等高时选高度较大者),与“强梁”相垂直布置第一层(最底层)板筋;
3、在第一层板筋之上并与其垂直布置“强梁”的底层纵筋和第二层板筋(“强梁”的箍筋与第一层板筋在同一层面上插空走过);
4、再在其上布置另一方向上梁的底层纵筋;
5、板上部面筋的布置依据板区两个方向的跨度。跨度相差较大时,短跨面筋在上,长跨面筋在下;跨度相差不大时,与板底筋的上下保持一致(两个方向的ho相等);
6、设计时应当充分考虑两个方向梁相交对ho的影响,也应当考虑双向板的ho与单向板不同;
7、“筏形基础”相当于“倒楼盖”的说法不完全正确。当承受地震横向作用是,柱是第一道防线,楼盖梁是耗能构件,所以要做到“强柱弱梁”“强剪弱弯”,梁要考虑箍筋加密区、塑性铰等问题;但筏形基础的基础梁通常不考虑参与抵抗地震作用计算。
● 综合问题(6): 凡是“没有明令禁止”的连接区域,钢筋是否就可以连接呢?■ 答综合问题(6): 事实上,除高抗震设防烈度的重要构件外,没有明令“完全”禁止的非连接部位。只要保证连接质量和控制连接百分率,在任何位置都可以连接。需要注意的是“尽可能避开”这个要求的含义,如尽可能避开节点区、箍筋加密区、应力(弯矩)较大区等等。
● 综合问题(7):框架顶层端节点处,可将柱外侧纵向钢筋的相应部分弯入梁内作梁上部纵向钢筋使用,也可将梁上部纵向钢筋与柱外侧纵向钢筋在顶层及附近部位搭接。请问陈教授这原理是不是柱与梁是刚节点?那么是不是顶层主梁与柱钢筋连接要这样做,顶层联系梁钢筋与柱钢筋连接是不是可以不这样做的,只要保证锚固长度就可以了?
■ 答综合问题(7): 抗震结构柱与梁的连接节点为刚性连接。问题的后半部不好答复,因所提“主梁”与“联系梁” 是否为框架梁还缺少若干判别条件。顶层框架梁与框架柱的连接必须采用该节点构造,但顶层非框架梁通常不与框架柱连接,所以与该构造无关;遇特殊
情况顶层非框架梁的一端与柱相连(另一端以梁为支座)时,由于未形成框架(因而不是框架梁),所以满足锚固条件即可。
● 综合问题(8):有的施工单位和监理都对关于筏片基础的基础梁是否要锚固如果锚固 那 又怎样计算,还有板是否要弯勾?如果弯勾,那采取什么标准?
■ 答综合问题(8):
1、筏形基础的基础梁主要功能之一是作为框架柱的支座,因此,基础主梁(直接支承框架柱的基础梁)的钢筋(纵筋与箍筋)应在节点区连续布置;基础次梁(以基础梁为支座的基础梁)的钢筋应锚固在基础主梁中(可参考框架梁的锚固方式,但上下钢筋受力性质相反)。
2、筏形基础板尽端钢筋弯钩直段≥12d,当板的上部与下部均配置钢筋时,要采用拉筋将板封边。
第三篇:OPNET常见问题总结
OPNET常见问题总结
1.如何设置全局变量?
在.h文件里定义变量,然后在process的HEAD BLOCK 里include 这个头文件,就可以使用全局变量了。
2.OPNET中如何更方便的看程序?
1.opnet中的设置:
preferences->editor_prog
2.source insight的设置
operation->preferences->symbol Lookups->Project symbol path->Add Project to Path
(添加自己创建一个包含所有opnet model 和 include目录的project)
当然,这个有些不足,就是那个sv,tv,hb等中定义的内容,不能进行关联。
3.OPNET中的函数FIN,FRET以及FOUT都是什么功能?
为了使一个用户定义的函数被执行,该函数必须与一个特殊的堆栈跟踪代码相连。堆栈跟踪技术靠在函数的入口点和出口点插入预处理器宏指令完成(一个函数只有一个入口点,但可以有多个出口点(由C语言的return声明决定))。这些宏指令为:FIN、FOUT和FRET。FIN被插入到函数的入口点,FOUT被插入到函数的出口点,但却不返回任何值,FRET被插入到函数的出口点,返回一个值。注意这些宏指令不需要以分号结束(它们自我包含),FIN的参数中也不需要双引号。
Opnet提供的所有的示例模型都包含了这些宏指令,并且建议用户定义的函数也包含这些宏指令。如果FIN、FOUT、和FRET被正确插入了用户代码中,我们就可以使用op_vuerr来找出程序错误的位置,哪怕是在一个嵌套的模型函数调用中。
4.local statistics和global statistics的区别?
local statistics表示的是本地的统计量,而global statistics是全局的统计量,比如你做了一个节点模型,此节点发送数据包,然后编程把发送的数据包数分别写入一个local statistics和global statistics中,假如你在工程中用到了两个这样的节点,那么你可以分别view result每一个节点发送的数据包数,而global statistics则是这两个节点一共发送的数据包数。
5.Objid和user id的区别?
Objid是系统分配的,全局唯一,整数。user id是自己可以设置的,可以不唯一。
6.如何将模块添加到OPNET中?
edit> preferences-> mod_dirs中,新建一个路径,并作为第一路径即可。
8.想查找一个变量的使用场合,包括不同process,不同node中的header和funtion,如何做 ?
在OPNET中变量是在一个PROCESS中存在的。不同的PROCESS之间则是通过进程之间的通信机制来共享信息的。因此你查找变量的作用范围应该是在一个PROCESS内的。编译后每个PROCESS会产生一个C或C++文件。在那个文件里就可以查到变量的应用地方。不同的进程可能具有相同的ATTRIBUTE。而为了减少NODE的ATTRIBUTE数目可以采用 MERGE/RENAME ATTRIBUTE的方式。这时这些ATTRIBUTE具体对应到各个PROCESS 的哪个ATTRIBUTE可以通过NODE INTERFACE菜单下的MERGE/RENAME ATTRIBUTE 找到。
9.请问OPNET怎样将图导出来?
一:可以从Topology->Export Topology->……导出Project的几种图形,有bitmap,html等格式。node,process都可以从file中的Export Bitmap导出拓扑图。
二:对于分析出来的曲线,按鼠标右键,其中有个 Export Graph Data to Spreadsheet,然后会有提示 说你文件保存在什么地方,一般缺省是保存在 c:op_admintmp 目录下。文件你可以用 UltraEdit 打开来看,是两列数据,一列是仿真时间,一列是 仿真数据,然后你就可以想用什么工具画图就无所谓了。
补充:其实很好用的还有就是直接抓图,效果不错。
10.在opnet中关于时延的问题。
数据速率是用来和包长结合计算传输时延的,而“delay”属性是用来描述电波的传播时延的。在点到点链路属性里,“delay”就是总传播时延;在多点链路里,“delay”指单位距 离的传播时延。用户可以修改传播时延的计算方法,那个“Distance Related”就是表示在自定 义的传播时延 pipeline stage里基于距离计算传播时延。
11..在opnet中关于统计一些速率方面的参数。
统计流速率的时候,首先应该在Local Statistics中将这个统计项 的Capture Mode设成sum/time,然后在程序中每次收到一个数据包,就将这个包的长度L写入,比如op_stat_write(handle,L),随后再马上 调用一个op_stat_write(handle, 0)来结束这次写入,就可以了。
12.关于begin intrpt和endsim intrpt 仿真0时刻时需要进行的初始化,则需要设begin intrpt, 仿真结束时刻需要进行一些工组,则需要enable endsim intrpt.13.用VC调试的时候,state variable的值无法看到,怎么办?
用op_sv_ptr这个指针。它指向了所有的状态变量。
14.关于Elapsed time and Simulation time ? 一个是仿真程序运行的时间,反映仿真程序执行的速度。而另一个是所仿真的系统的时间进度,反映当前的仿真执行的进度。
仿真时间的修改是通过事件的发生来进行的。譬如说你在0s时作一件事持续时间为5秒,5秒钟结束后会触发一个事件,这个事件将系统的仿真时间改为5s。你使用OPNET的模型,它在接收到事件时会进行相应的仿真时间的更新。而你自己也可根据需要更新仿真时间。你采用op_intrpt_schedule_self(op_sim_time()+需要的时间,intrptcode),就可以在当前时刻的所需的时间以后产生一个中断,从而触发一个事件,系统的仿真事件也就被更新为此时间。OPNET中数据的收集方式是可选的,可以选择为逐点的,也可以选择按照漏斗进行平滑的根据自己的需要而定。
15.OPNet运行时无法进行C代码编译的解决办法
当你出现这种情况时, OPNet总是提示说 comp_msvc 不能执行, 因为Visual C++没有正确安装, 这时你需要修改系统的环境变量。具体方法如下(Win2000): 1.正确安装 VC++, 缺省目录为(以下均以缺省目录为例)C:Program FilesMicrosoft Visual Studio 2.在桌面鼠标右击“我的电脑”图标, 选择“属性”.在出现的界面中, 选择“高级”, 然后选择“环境变量”。
3.这里需要修改用户的“用户变量”,而不是“系统变量”增加下列参数: 变量名 include 变量值 C:Program FilesMicrosoft Visual Studi0VC98atlinclude;C:Program FilesMicrosoft Visual StudioVC98mfcinclude;
C:Program FilesMicrosoft Visual StudioVC98include
变量名 lib 变量值 C:Program FilesMicrosoft Visual StudioVC98mfclib C:Program FilesMicrosoft Visual StudioVC98lib
变量名 MSDevDir 变量值 C:Program FilesMicrosoft Visual StudioCommonMSDev98
变量名 path 变量值 C:Program FilesMicrosoft Visual StudioCommonToolsWinNT C:Program FilesMicrosoft Visual StudioCommonMSDev98bin C:Program FilesMicrosoft Visual StudioCommonTools Program FilesMicrosoft Visual StudioVC98bin 4.按“确定”按钮, 退出设置.如果你在安装 VC 的时候让安装程序来修改环境变量就完全可以就避免这些步骤.16..请问opnet中的移动台的trajectory(即运动轨迹)能否用一个专门的代码来生成,而不是用鼠标事先画出?如何实现opnet与此段代码的交互?
要做到运动轨迹的交互性,你得修改一些process和pipeline。运动的结果无非是和基站的距离变化,然后利用衰落模型得到snr,ber等参数,所以你可以修改dra_propdel.ps.c, umts_ue_dra_power, umts_dra_snr等process.如在dra_propdel.ps.c中把start_pro_distance用自己的距离函数代替即可。
17.前面提到的随机性服从一些随机分布,如高斯分布、泊松分布等等,我想问一下,opnet 中有没有现成的概率分布函数供调用?如何调用?
用op_dist_outcome这一类的函数,在online document中介绍的很详细。
18.对opnet的认识,它是在project、node以及process三个域上进行仿真,而且好像代码都是在process域中的进入、退出以及转化这些地方编写,那么要实现的移动台随机产生的代码好像没有一个公共的全局性的平台可以放置(就像C语言中的全局变量声明段)?这个问题如何解决?
函数应该在process的FB中,FSM只是调用而已,全局变量通常在外部.h中,也可在HB中。
19.OPNET 的输出结果选项“As is”,“Average”,“Time_average”有什么区别?
在这些选项下得到的曲线不一样 :
As is ,就是不做任何处理,Average 就是做平均
Time_average 就是做时间平均
20.请问OPNET中的animation指什么?
21.OPNET中如何删除一个senario,而保留工程? 在menu->senarios->manage senarios里。
22.请问OPNET中的animation指什么?
激活节点变化过程记录功能,并记录statistic的变化过程,可以作为动画演示。
23.opnet的节点域中处理模块之间如何共享变量? 可以试试以下2种方法: 1。在HB中定义全局变量
2。添加节点属性,然后使用op_ima_xxx_xxx()函数,就是那个IMA包。24.在node interfaces里面设置属性为set,promoted和hidden有什么意义? hidden可以在仿真的时候看不到设置的这个参数,promoted可以在仿真的过程中根据需要改变参数的值 激活节点变化过程记录功能并记录statistic的变化过程。
25.我在学习opnet的tutorial的packet switching1 时最后仿真出现下面的错误,请问如何解决? Creating library PS_pksw_net-scenario1.i0.nt.lib and object PS_pksw_net-io1.i0.nt.exp dpt_propdel.i0.ps.o : error LNK2001: unresolved external symbol _link_de PS_pksw_net-scenario1.i0.nt.so : fatal error LNK1120: 1 unresolved exter 在运行仿真时,选择declare external file,将link_delay.h文件包含即可。26.请问opnet里如何提取统计信息作为反馈控制变量?例如将丢失率提取出来后,通过函数将其反馈回模型中进行控制。
可以试试stat_intrpt函数。
27.模型中的数据线中的src stream [n]和dest stream [n]中括号中的序号n分别表示什么意思?
op_pk_get(STRM NUM)的参数,会根据n来选择数据线的。
28.pipeline stage 的函数是怎么调用的啊?为什么我的数据在被接收端的时候那几个pipeline 函数并没有执行完呢?只执行了3个函数,后面就没有了,结果数据不知道扔哪去了,上层也没有stream中断是怎么回事呢?
pipeline state 函数体接口是规定的,由KP调用。在stage 2 有连通性的检查,如果false,则以后的stage 都不需执行了。
29.仔细察看了一下程序,FIN和FOUT都是配对的。在一个Idle的状态中,什么操作也没做。但是程序执行了好长时间之后,突然告诉说Abnormal function stack function。就是在Idle状态出的错。可是哪个状态根本就是空操作。而在.pr.c文件中,发现所有的process的.pr.c文件中的那个最全的函数都是只有FIN,没有FOUT的。请问出现上述错误还有可能是何原因?
查看事件列表,有可能是事件列表满的缘故,你可以试着改变preference里面的一个event_speed_parameter参数出现该问题的设置不同,出现的时间也会不同。
30.请问OPNET的背景路由流量的如何配置?
三种方法:
application configi.conersation pair link load
31.怎样在mac层获取在pipeline stage中计算的某些参数的数值,如接收功率的数值?
可以用pwr = op_td_get_dbl(pkptr, OPC_TDA_RA_RCVD_POWER)。32.我对某个pipeline 函数做了一点修改然后以另外一个名字另存了一下,但是在模块中却不能把原来的pipeline函数改成重新命名的pipeline函数这是怎么回事啊? 你修改后的文件名要与函数名相同,然后得用OPNET自带的EXTERNAL INTERFACE提供的工具编译就可以了。
第四篇:锂离子电池常见问题总结
锂离子电池常见问题总结
11、什么是电池的容量?
电池的额定量是指设计与制造电池时规定或保证电池在一定的放电条件下,应该放出最低限度的电量。Li-ion规定电池在常温、恒流(1C)恒压(4.2V)控制的充电条件下充电3h,电池的实际容量是指电池在一定的放电条件下所放出的实际电量,主要受放电倍率和温度的影响(故严格来讲,电池容量应指明充放电条件)。容量常见单位有:mAh、Ah=1000mAh)。
14、什么是工作电压?
又称端电压,是指电池在工作状态下即电路中有电流过时电池正负极之间电势差。在电池放电工作状态下,当电流流过电池内部时,不需克服电池的内阻所造成阻力,故工作电压总是低于开路电池,充电时则与之相反。Li-ion的放电工作电压在3.6V左右。
15、什么是放电平台?
放电平台是恒压充到电压为4.2V并且电电流小于0.01C时停充电,然后搁置10分钟,在任何们率的放电电流下下放电至3.6V时的放电时间。是衡量电池好坏的重要标准。
17、什么是自放电率?
又称荷电保持能力。注:电池100%充电开路搁置后,一定程度的自放电正常现象。在GB标准规定LI-ion后在20±2℃条件下开条件下开路搁置28天。可允许电池有容量损失。
18、什么是内压? 指电池的内部气压,是密封电池在充放电过程中产生的气体所致,主要受电池材料、制造工艺、电池结构等因素影响。其产生原因主要是由于电池内部水分及有机溶液分解产生的气体于电池内聚集所致。
高倍率的连续过充,会导致电池温度升高、内压增大,严重时对电池的性能及外观产生破坏性影响,如漏液、鼓底,电池内阻增大,放电时间及循环寿命变短等。
Li-ion任何形式的过以都会导致电池性能受到严重破坏,甚至爆炸。帮Li-ion在充电过程中需采用恒流恒压充电方式,避免对电池产生过充。
19、为什么电池要储存一段时间后才能包装出货?
电池的储存性能是衡量电池综合性能稳定程度的一个重要参数。电池经过一定时间储存后,允许电池的容量及内阻有一定程度的变化。经过了一段时间的储存,可以让内部各成分的电化学性能稳定下来,可以了解该电池的自放电性能的大小,以便保证电池的品质。21.什么是分容?
电池在制造过程中,因工艺原因使得电池的实际容量不可能完全一致,通过一定的充放电制度检测,并将电池按容量分类的过程称为分容。22.什么是压降?
电池按定性充电至80%以上,测量其电池空载电压。5W/2W电池 作为负载连接电池正负极端开关作为电池的断路,通路的装置进行串联。打开开关后5秒电压下降不大于0。4V,为合格主要为测试电池负载性能。23.什么是静态电阻?即放电时电池内阻 24.什么是动态电阻?即充电时电池内阻。
25.什么是电池的负载能力? 当电池的正负极两端连接在用电器上时,带动用电器工作时的输出功率,即为电池的负载能力。26,什么是充电效率?什么是放电效率?
充电效率是指电池在充电过程中所消耗的电能转化成电池所能储蓄顾的化学能程度的量度。主要受电池工艺,配方及电池的工作环境温度影响,一般环境温度越高,则充电效率要低。放电效率是指在一定的放电条件下放电至终点电压所放出的实际电量与额定容量之比,主要受放电倍率,环境温度,内阻等到因素影响,一般情况下,放电倍率越高,则放电效率越低。温度越低,放电效率越低。27.目前常见的各种可充电电池之间有什么区别?
目前镍镉,镍氢,锂离子充电电池大量应用于各种便携式用电设备(如笔记本电脑,摄像机和移动电话等到)中,每种充电电池都具自已独特的化学性质。镍镉和镍氢电池之间主要差别在于:镍氢电池能量密度比较高。与相同型号电池对比,镍氢电池容量是镍镉电池的二倍。这意味着在不为用电设备增加额外重量时,使用镍氢电池能大大地延长设备工作时间。镍氢电池另一优点是;A大大减少了处镉电池中存在的:“记忆效应”问题,从而使得镍氢电池可更方便地使用。镍氢电池比镍镉电池更环保,因为它内部没有有毒重金属元素。
33、目前在使用和研究的“绿色电池”有哪些?
新型绿色环保电池是指近年来已经投入使用或正在研制开发的一类高性能、无污染的电池。目前已经大量使用的锂离子蓄电池、金属氢化物镍蓄电池和正在推广使用的无汞碱性锌锰电池以及正在研制开发的锂或锂离子塑料蓄电池、燃烧电池、电化学储能超级电容器都属于新型绿色环保电池的范畴。此外,目前已经广泛应用的利用太阳能进行光电转换的太阳电池。
34、什么电池将会主宰电池市场?
随着照相机,移动和无绳电话,笔记本电脑,带图像,声音的多媒体设备在家用电器中占据越来越重要的位置,与一次电池相比较,二次电池即可充电式电池也大量的应用到这些领域中。而二次充电电池将向体积小,重量轻,容量,智能化的方向发展。
35、什么是锂离子蓄电池?
是指以锂离子为反应活性物质的可充式电池,当电池放电到终止电压后能够再充电,以恢复到放电前的状态。
36、锂离子蓄电池的工作原理?
放电时,锂与碳的相嵌化合物中的锂,从负极溶解形成锂离子到电解液中,穿过电解液并在正极晶体中嵌入形成嵌入化合物.充电时,在正极嵌入的锂离子重新回到电解液中,然后在负极上与碳形成嵌入化合物,周而复始.37、锂离子蓄电池与镍/镉、镍/氢、铅酸蓄电池相比有哪些优点?
比能量高,自放电率低,高低温性能好和充放电寿命长。
38、何为电池的平均电压?
电池放电时,从开始到放电终止时的电压平均值。
39、何为电池的能量密度?
指电池的单位体积所含的电能。
40、何为电池的容量?
指电池内的活性物质参加电化学反应所能放出的电能称为电池的容量。
41、何为电池的设计容量?
根据电池内所含活性物质的量,从电化学理论计算电池的容量称为设计容量。
42、何为电池额定容量?
指电池经设计后,经电池制程过程的影响,电池所能达到容量称为额定容量。
43、锂离子蓄电池的工作温度范围? 充电
-10—45℃
放电
-30—55℃
44、何为电池的倍率放电?
指放电时,放电电流(A)与额定容量(A•h)的倍率关系表示。
45、何为电池的小时率放电?
按一定输出电流放完额定容量所需的小时数数,称为放电时率。
46、锂离子蓄电池由那些原材料组成?
正极活性物质,负极活性物质,集流片,隔膜,电解液,外壳等材料组成。
47、锂离子蓄电池型号与电池的那些特征有关?
电池的外形长、宽、高及电池的容量。
48、影响锂离子电池循环性能的两个最重要的因素是什么?
活性物质的性质和杂质的种类、含量。
49、如何在生产过程中控制电池内部的水份?
1、作好防潮、防湿处理。
2、缩短操作时间,减少极片在空气中暴露时间。
3、合理正确地进行烘烤作业。
4、尽量在干燥环境下进行作业。
50、锂离子蓄电池的活性正极材料是什么? 锂盐;如钴酸锂,锰酸锂,镍酸锂等。
51、锂离子蓄电池的活性负极材料是什么?
石墨粉
52、电极材料为何要加入导电剂? 在电池工作时,电池的活性物质无论充放电都不会溶解在电解液中,为加强活性物质与网栅、集流片的接解导电性,而加放导电剂。
53、锂离子蓄电池的电解液的组成是什么?
常用的为六氟磷酸锂,四氟磷酸锂(LiPF6、LiClO4)等。
54、配料的目的是什么?
使活性物质分散均匀,便于拉浆均匀,上浆量恒定。
55、请简述配料的工艺流程。
56、正、负极片拉浆的三个基本参数。
拉浆温度、速度、敷料量。
57、如何控制极片的敷料量? 根据正负极浆料的固含量、比重调节拉浆机机头刀具间隙,控制拉浆的厚度,以达到控制。
58、如何头判定拉浆过程中极片的质量好坏。
极片表面平整、光滑、敷料均匀、附着力好、干燥,不脱料、不掉料、缺料、无积尘、无划痕、无 气泡的极片为好的极片,有缺陷的为不好的极
59、正、负极片裁片的主要的设备。
铡纸刀、剪板机。
60、正、负极片的主要注意事项。1)、检查刀口有无毛刺、不平,作业时注意用刀的安全。2)、正负极裁片用刀不可混用。3)、在裁片过程中随时检查极片的质量,将不合格的分档分开,不可混淆放置。4)、裁完的片经检查后极时转入以后的工序作业中。61、正、负极正烘烤的目的是什么?
除去极片内的水份和有机溶剂。
62、正、负极片压片的目的? 使活性物质与网栅及集流片接触紧密,减小电子的移动距离,降低极片的厚度,增加装填量,提高电池体积的利用率。从而提高电池的容量。
63、压片厚度对电池性能有什么影响?
压片厚度太厚时,容易使电池内活性物质量减少,单位体积的活性物质量的减少和极化电位的增大,从而造成电池的容量降低。
压片厚度太薄时,容易造成电池内的活性物质量增加,极片表面有效面积减小,从而造成活性材料的浪费和大电流的困难。64、极片称重的目的是什么?
准确了解和掌握极片的敷料量。
65、配片的目的是什么?
使正负极片上的活性物质的量比例保持一致性。66、为什么要进行刷片操作?
清除极片上的积尘,积料,毛刺等。67、正极片采用什么极耳?
采用铝带极耳。68、负极片采用什么极耳?
采用镍带极耳。
69、焊接极耳的设备?
正极用超声波焊机,负极用点焊机。70、卷绕车间的湿度对电池质量有什么影响?
卷绕房内的湿度大时,极片吸水量大,增加了极片的水份含量,在电池中产生气体量增加,使电池的内压增加,危害电池的安全性能。水份的增加多消耗电池中的活物质,使电池容量下降。湿度小反之
71、卷绕车间中空调机和除湿系统的作用?
保持室内的温度恒度,减小室内的湿度,以提高电池的性能。72、卷绕车间是否可用水擦地板?
不可以
73、卷绕电池芯的主要注意事项?
1、极片与隔膜纸铺平对齐。用手按住极片与隔膜纸时,用力大小适中均匀。电池芯卷绕松紧适当。
2、注意极片上有无划痕、掉料、缺料、气孔、起泡等不良及隔膜纸有无不良,如有作废品处理。
3、卷绕时注意手脚的谐调性,不被卷针划伤手。73、电池芯贴胶纸的目的和位置?
电池芯贴纸的位置在电芯卷绕成型后不变形。底部贴胶纸防止电芯内的正极片底部与电池外壳接触电池造成短路。侧面贴纸使电芯卷绕成型后不变形。底部贴胶纸防止电芯内的正极片底部与电池外壳接触造成电池短路。74、将极耳焊接到盖板上采用那些设备? 超声波、对焊机。75、电池芯电阻要求? 大于20MΩ 76、电池芯的电阻达不到要求怎么办? 返修
77、为何极耳也要贴胶纸?
增加牢固性和防止极耳接触产生短路。
78、电池盖板在使用前需要做那些检验?
外形尺寸、形状、厚度、绝缘怀、密封性、耐腐蚀性、材持等项目的检验。79、电池盖板所能承受的最大压力是多少? 0.4Mpa 80、如何防止电池漏液?
防止电池漏液应做好以下几方面的工作:
1、焊接电池外壳与盖帽时,应焊接牢固、密封,焊接无漏焊、虚焊,焊缝无裂缝、裂口等不良。
2、钢珠封口时,钢珠大小适当,钢珠材质与盖帽材质相同。焊接无裂口、裂缝并且焊接牢固。
3、盖帽的正极柳接紧密,无间隙,并且绝缘密封垫弹性适当,耐腐蚀,不易老化。81、如何在现有条件下防止未封口电池在车间吸水?
1、作业电池应少量多次。缩短电池在空气中暴露时间。
2、作业完毕的电池及时转送到下一工序。尽量缩短电池在制程中的停滞时间。82、干燥房的湿度要求? 相对湿度在6%以下。
83、干燥房的湿度对电池的性能有什么影响? 湿度增加使电池芯的吸水量增大,使电池的容量下降,内压增加。84、如何尽量防止湿气进入干燥房? 少进少出,少开门,干燥房的门不能同时打开。85、你认为干燥房可以用水擦地板吗? 不可以。86、电池在注液前需要做那些处理?
涂胶和真空烘烤处理。
87、电池在注液前为何要进行真空烘烤? 尽量除去电芯内的所含的水份和溶剂。88、电池在注液前为何要称重?
以便准确计算注液量多少。89、电池注液方法?用手动注液机或自动注液机进行注液操作。
90、如何检验电池是否注满电解液? 用真空抽吸测试,在注液口上用真空吸时,有电解液被抽上表示已满,没有表示没满 91、电解液中的LiOF6的作用?
导电的电解质。92、电解液中的LiPF6的浓度? 1mol/L 93、电解液中溶剂的作用?溶解电解质,使电解质离子化。94、电解液的电导率范围?
8×10-3Ω-1 95、电导率对电池工作电流的影响?电导率影响倍率放电率,和电池的内阻,和电池的电压。
96、电池的内阻受那些因素影响?电解液的电导率,电池的外壳材料性能,极片的导电率及极耳材料的截面积。电池焊接的质量。
97、电池的容量受那些因素影响?正负极材料的特征的性能及材料的种类、型号和活性物质的量。正负极活性物质的正确比例。电解液的浓度和种类。
生产制程过程。
98、你认为如何在电池生过程中控制电池内的水份?
在生产制程中严格控制环境的湿度以及加强电芯的烘烤控制电池的水份。99、电池在带电时可否用表测量电阻? 可以
100、化成机在化成大容量电池时应该注意什么问题? 注意电池的总功率是否超过化成机的功率。就目前国际标准电液lipf6体系而言: 1M lipf6 EC:DMC 1:1 RT(9ms)低温性能差,-10℃EC结晶 1M lipf6 EC:DEC 1:1 低温略好 挥发性气体 对锂不稳定 改进方向:在不影响碳电化学性能条件下,三元体系或者四元体系 例如:1M lipf6 EC:DEC:DMC 1:1:1(SONY)等等 lipf6体系优点:对铝稳定、电导率高、SEI容易形成......缺点:溶剂中80度分解、水解.....总体上说,各厂家针对负极材料不同的会选择合适配比的电解液配方.电解液与负极在形成SEI时得到质量好的SEI同时气体产生量较少,有没有精通的!?闭口化成,呵呵,保密
添加剂的种类大体有......不过不是万能的,看使用的目的,如果连目的都不清楚,还是不用的好 我还是想说说,其实就负极而言,成膜的电位是比较高的,一般高于0.8V(石墨),而后才是嵌锂阶段,直到负极电位接近0V,请注意,千万要控制住不要低于0V,那样会出现析锂了。其实所谓成膜添加剂,有些就是在更高的电位成膜,来减少EC等在负极表面成膜而造成的不可逆容量。
就整个电池电压而言,是在电压较低的时候成膜,此时正极电位刚刚爬到3.90V以上,考虑到极化的影响,成膜电压应该在3.35V或更低。大家可以做试验,用极小的电流,来观察是否有“平台”出现,当然要细心观察。SEI并不重要!
电池在初始充电都能很好的形成,对电池的性能改善不大!原材料本身的缺陷在后天工艺上是弥补不了的!电池的好坏要看工艺的成熟程度和品质的控制思维,还有原材料本身的性能和稳定性,以及其中的合理搭配!
说白了电池要做好和其他的产品一样,需要技术,品质,管理等的一切配合,能做好其他就能做好电池,能做好电池你也能做好其他,包括汽车!国产VC如何叩开电解液厂的大门
VC因为其对电池的循环有很好的效果所以目前很多电解液厂都使用其做添加剂制作功能电解液。但是因为要求较高大部份厂家就选进口VC了,而其中日本产的VC因为质量较好所占的分额较大。其时国产VC只要做好以下几方面要叩开电解液厂的大门可以说是比较轻松的事。与进口VC相比国产货主要是质量较差:
1.纯度不够高,电池工业级要求纯度达到99。99%以上。2.水分太高,电解液要求VC含水量不超过10PPM,而很多国产VC达不到这一指标所以被拒之门外,这是一很重要的指标。3.稳定性不好,一般低温放置三个月就变色了而一般日产的VC可放六个月以上,一般一百公斤可用五个月左右,变色的VC无论如何电解液厂都是不敢用的。
以上三点是电解液厂考虑的重点,特别是第二和第三点是重中之重,因为纯度方面电解液厂因为受色谱柱使用 范围的限制而无法分析,但是要想建立长久的合作VC厂商就必须达到这一指标,但在前期可以吹一下牛皮的了,毕竟这年头不吹牛连电解液都卖不掉,VC厂吹一下牛又有什么关系呢!对于第二点则需要VC厂商的努力了,笔者这里有相关的可行性方案,而对于第三点要控制变色方法还是很多的,而其对电解液的损失是头等因数,而其造成电解液的变色是无法挽回的,同时还要解决的问题是VC与电解液稳定剂的影响,笔者在使用过程中发现一个经常被电解液厂忽视的问题,这一点连日产VC都无法避免如果国产的可解决这一问题那么其效果则不用我多说了吧!
总之希望VC和电解液都做好,很好卖!联系电话:0*** 对于一台手机或一台电脑而言,电池的作用就如同一个人的心脏一样,而电解液就如同血液一样。大家对电池的要求越来越高相应的电池厂商对电解液的要求也越来越高,毕竟在一个固液反应体系而言,溶液的作用是关键。那么电解液对电池有什么影响呢?
首先,电解液对电池的比容量和循环寿命有决定作用。电解液质量的好坏直接影响电池的比容量和循环,好的电解液可以使电池的循环做到700以上,而差的电解液也许连300也做不到。好的电解液可以使容量达到理想的范围,而差的电解液会使很多工作功亏一溃。
其次,电解液会影响电池的内阻和自放电。影响电池的内阻包括以下几方面:隔膜的厚度和孔隙率;正负极的密实度;电解液中的机械杂质和沉积物。在此我仅对电解液的影响稍做讨论。电解液在生产过程中不可避免会使用分子筛,即使过滤也会留有分子筛的碎屑。机械杂质不仅会使离子迁移困难,还会堵塞隔膜的细孔对电极产生包复作用,这就造成了电池的内阻升高,同时包复作用还会使电极的比表面减少造成电极的利用率降低。再者分子筛中带入的钠离子会使电池的自放电增大,同时使电池的容量衰减。
再次,对电池安全性能的影响。电解液中的杂质会使电池发生气涨和鼓包,严重的会涨裂电池而漏液,更危险的会发生爆炸,具体的杂质下文会叙及。第四,对电池稳定性的影响。电解液的稳定性直接影响到电池的稳定。
第五,对电池耐候性的影响。因为地域的影响对电池的要求会有所不同普通的电解液在0度左右会凝固,所以在北方的冬天不适用。第六,对其他特殊性能的影响。如大电流放电和快速充电,聚合物锂电等都与电解液的生产制照和其质量密不可分。终上所述,电解液对电池的性能起决定性的作用,那么影响电解液的因数是什么呢
电解液的渗透与分布:
一、电极的比表面积加大(材料比表面积和导电剂的添加量及种类);
二、正负极片不要压太实;
三、注液后的搁置时间和方式(离心,加温,延长时间等);
四、化成制度,尽量延长时间;
五、化成后的搁置时间和方式;材料充分被浸透,电池性能才能稳定和正常发挥 SEI膜不重要???你不是做电池的吧?电解液和碳负极的相容性问题,不同的电解液有不同的负极去匹配。
一般来说,天然石墨包覆的负极,不可逆容量要大一点。mcmb要好一点,这是我实验的结果。还有一个,SEI膜的成膜电位是1.2~0.8V(vs Li/Li+),嵌锂电位是0.25~0v,这个电位中嵌入的锂才是可逆的。如果能让SEI膜在更高的电位下形成,它能阻止溶剂的进一步还原,减少不可逆容量,也就是在首次充电曲线中不可逆容量的极化比较大,容易下降到嵌锂平台,这样形成的可逆容量要高。SEI膜对电池的循环性能有至关重要的作用,没有良好的SEI膜,每次循环都有较大不可逆容量损失,这样的电池通常可以从电解液吸水,或电池内部存在结晶水时可以看出来。electrodes with high power and high capacity for rechargeable lithium batteries 本研究组已经实现磷酸铁锂的规模化生产,现处于保密阶段.粒度超前稳定在1-2微米,1C容量120mAh/g以上.估计今年底达到吨量级。预备自用 若想生产出来批次稳定的产品取决于以下几点:
1、原材料的具有稳定的纯度,稳定的粒径,较少的s,Na等离子。纯度不高的材料会使LiFePO4的晶格结构。
2、稳定的混合工艺以保证多种原料达到分子级混合状态,稳定的烧结工艺以保证所得材料的一致性。
3、烧结后要采用先进的粉碎技术,以保证最终产品具有稳定的粒径和比表面积。锂离子电池阴极活性材料的表面改性方法
锂离子电池阴极活性材料的表面改性方法,先将可溶性的掺杂离子盐配制成水溶液,然后将有机溶剂与水溶液混合,再加入需要改性的阴极活性材料粉末搅拌均匀形成悬浮液,在悬浮液中加入尿素回流,并加热即可得到改性的阴极活性材料粉末。本发明利用尿素的水解促成沉淀剂的生成,使改性氧化物的前驱体离子发生沉淀反应,通过反应条件的调节,控制沉淀剂的释放速度,满足包覆前驱体在阴极活性材料表面非均匀成核的条件,让改性氧化物全部在阴极活性材料表面成核生长,产生均匀致密的包覆前驱体,再在一定温度下使沉淀分解为改性氧化物,最后在一定温度下处理包覆氧化物的阴极活性材料,在其表面形成高浓度的掺杂离子,能够显著改善阴极材料的循环性能。
1、锂离子电池阴极活性材料的表面改性方法,其特征在于: 1)首先将可溶性的掺杂离子盐MxAy配制成浓度为0.01-0.2mol/l的水溶液,其中M=Mg2+、Zn2+、Ni2+、Cu2+、Al3+、Co3+、Cr3+、Fe3+或Ti4+;A=NO-
3、Cl-或 CH3COO-; 2)然后将有机溶剂与水溶液按2∶1~1∶10的体积比混合,再在该混合液中按10~300g/l加入需要改性的阴极活性材料LiBO2或LiNZMn2-ZO4、LiFePO4粉末搅拌均匀形成悬浮液,其中B=CoxNiyMn1-x-y,x=0-1,y=0-1,x+y≤1;N=Co、Ni、Ti、Cr或Cu,Z=0~0.5; 3)按掺杂离子与尿素1∶1~1∶10的摩尔比在悬浮液中加入尿素,在70 ℃-100℃回流,持续搅拌并加热2-20h后,在空气中60℃干燥20h,随后在 200-600℃恒温处理5-20h,再在600-1000℃处理1-20h,研磨后得到改性的阴极活性材料粉末
第五篇:VB常见问题总结
快捷域名:http://yujimyfavorcn.programfan.com 创建于:2005-6-5 共 6篇文章 访问统计:169
VB常见问题总结
点击数:138 发布日期:2005-6-5 18:28:00 【字体:大 中 小】【评论】【打印】
各位朋友大家好,如果你在这里的时间够长,那么你会发现很多帖子的问题是相同的,既然这样,不如总结到一起让初学者来翻看,再热心的大虾也不愿意把一个答案重复几十遍:)Ryowu制作匆忙,难免错漏,还请见谅。
若朋友您想要问如何才能学好vb,或者入门需要看什么教材一类的问题,建议你抱着一颗刻苦钻研的心去面对这门学问,多动脑,少提问,遇到不知道的,多查msdn,多看老贴,或者用断点来亲自试验。实在不会了,请在此贴中查找您的常见问题,如果还没有,那请您发出新贴,向各位高手讨教:)
查找方法:按ctrl+f,输入要查找的问题关键字即可
注明:本贴源于VB编程乐园网站,本人只是稍微编辑了一下。
每个问题中间用///分隔,这只是一部分最常见到的问题,以后会逐渐更新。
//////////////////////////////////////////////////////////////////////////////////// 如何用VB建立快捷方式
Private Declare Function fCreateShellLink Lib “STKIT432.DLL”(ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArgs As String)As Long Sub Command1_Click()Dim lReturn As Long '添加到桌面
lReturn = fCreateShellLink(“....Desktop”, “Shortcut to Calculator”, “c:windowscalc.exe”, “")'添加到程序组
lReturn = fCreateShellLink(”“, ”Shortcut to Calculator“, ”c:windowscalc.exe“, ”“)'添加到启动组
lReturn = fCreateShellLink(”Startup“, ”Shortcut to Calculator“, ”c:windowscalc.exe“, ”“)End Sub
//////////////////////////////////////////////////////////////////////////////////// 如何让程序在 Windows 启动时自动执行?
有以下二个方法:
方法1: 直接将快捷方式放到启动群组中。
方法2: 在注册档 HKEY_LOCAL_MACHINE 中找到以下机码 SoftwareMicrosoftWindowsCurrentVersionRun 新增一个字串值,包括二个部份
1.名称部份:自己取名,可设定为 AP 名称。
2.资料部份:则是包含 '全路径档案名称' 及 '执行参数' 例如:
Value Name = Notepad Value Data = c:windowsnotepad.exe
//////////////////////////////////////////////////////////////////////////////////// 在 TextBox 中如何限制只能输入数字?
参考下列程序:
Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If End Sub
//////////////////////////////////////////////////////////////////////////////////// 我希望 TextBox 中能不接受某些特定字符,例如 '@#$%”,有没有简单一点的写法?
方法有好几种, 以下列举二种:
方法1: 可以使用 IF 或 Select Case 一个个判断, 但如果不接受的字符多时, 较麻烦!方法2: 将要剔除的字符统统放在一个字串中,只要一个 IF 判断即可!如下: Private Sub Text1_KeyPress(KeyAscii As Integer)Dim sTemplate As String sTemplate = “!@#$%^&*()_+-=” '用来存放不接受的字符 If InStr(1, sTemplate, Chr(KeyAscii))> 0 Then KeyAscii = 0 End If End Sub
//////////////////////////////////////////////////////////////////////////////////// 如何让鼠标进入 TextBox 时自动选定 TextBox 中之整串文字?
这个自动选定反白整串文字的动作,会使得输入的资料完全取代之前在 TextBox 中的所有字符。
Private Sub Text1_GotFocus()Text1.SelStart = 0 Text1.SelLength = Len(Text1)End Sub
//////////////////////////////////////////////////////////////////////////////////// 如何检查软盘驱动器里是否有软盘?
使用:
Dim Flag As Boolean
Flag = Fun_FloppyDrive(“A:”)If Flag = False Then MsgBox “A:驱没有准备好,请将磁盘插入驱动器!”, vbCritical
' '函数:检查软驱中是否有盘的存在 ' Private Function Fun_FloppyDrive(sDrive As String)As Boolean On Error Resume Next Fun_FloppyDrive = Dir(sDrive)<> “" End Function
//////////////////////////////////////////////////////////////////////////////////// 如何弹出和关闭光驱托盘?
Option Explicit
Private Declare Function mciSendString Lib ”winmm.dll“ Alias ”mciSendStringA“(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long)As Long
Private Sub Command1_Click()mciExecute ”set cdaudio door open“ '弹出光驱 Label2.Caption = ”弹 出“ End Sub
Private Sub Command2_Click()Label2.Caption = ”关 闭“
mciExecute ”set cdaudio door closed“ '合上光驱 Unload Me End End Sub
//////////////////////////////////////////////////////////////////////////////////// 如何让你的程序在任务列表隐藏
Private Declare Function RegisterServiceProcess Lib ”kernel32“(ByVal ProcessID As Long, ByVal ServiceFlags As Long)As Long Private Declare Function GetCurrentProcessId Lib ”kernel32“()As Long
'请你试试 Ctrl+Alt+Del 是不是你的程序隐藏了 Private Sub Command1_Click()i = RegisterServiceProcess(GetCurrentProcessId, 1)End Sub
//////////////////////////////////////////////////////////////////////////////////// 如何用程序控制滑鼠游标(Mouse Cursor)到指定位置?
以下这个例子,当 User 在 Text1 中按下 'Enter' 键后,滑鼠游标会自动移到 Command2 按钮上方
请在声明区中加入以下声明:
'16 位版本:(Sub 无传回值)Declare Sub SetCursorPos Lib ”User“(ByVal X As Integer, ByVal Y As Integer)
'32 位版本:(Function 有传回值,Integer 改成 Long)Declare Function SetCursorPos Lib ”user32“(ByVal x As Long, ByVal y As Long)As Long
'在 Form1 中加入以下程序码:
Private Sub Text1_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then x% =(Form1.Left + Command2.Left + Command2.Width / 2 + 60)/ Screen.TwipsPerPixelX y% =(Form1.Top + Command2.Top + Command2.Height / 2 + 360)/ Screen.TwipsPerPixelY SetCursorPos x%, y% End If End Sub
//////////////////////////////////////////////////////////////////////////////////// 如何用鼠标移动没有标题的 Form,或移动 Form 中的控制项?
在声明区中放入以下声明:
'16 位版本:(Sub 无返回值)Private Declare Sub ReleaseCapture Lib ”User“()Private Declare Sub SendMessage Lib ”User“(ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Long)
'32 位版本:(Function 有返回值,Integer 改成 Long)Private Declare Function ReleaseCapture Lib ”user32“()As Long Private Declare Function SendMessage Lib ”user32“ Alias ”SendMessageA“(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)As Long
'共用常数:
Const WM_SYSCOMMAND = &H112 Const SC_MOVE = &HF012
'若要移动 Form,程序码如下:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Dim i As Long i = ReleaseCapture i = SendMessage(Form1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0)End Sub
'以上功能也适用于用鼠标在 Form 中移动控制项,程序码如下:
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Dim i As Long i = ReleaseCapture i = SendMessage(Command1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0)End Sub
//////////////////////////////////////////////////////////////////////////////////// 检查文件是否存在?
Function FileExists(filename As String)As Integer Dim i As Integer On Error Resume Next i = Len(Dir$(filename))If Err Or i = 0 Then FileExists = False Else FileExists = True End Function
//////////////////////////////////////////////////////////////////////////////////// 如何设置对VB数据库连接的动态路径
我个人因为经常作一些数据库方面的程序,对于程序间如何与数据库进行接口的问题之烦是深有体会,因为VB在数据库链接的时候,一般是静态,即数据库存放的路径是固定的,如用VB的DATA,adodc,DataEnvironment 等到作数据库链接时,如果存放数据库的路径被改变的话,就会找不到路经,真是一个特别烦的事。
笔者的解决方法是利用app.path 来解决这个问题。
一、用data控件进行数据库链接,可以这样: 在form_load()过程中放入: private form_load()Dim str As String '定义 str = App.Path If Right(str, 1)<> ”“ Then str = str + ”“ End If data1.databasename=str & ”数据库名“ data1.recordsource=”数据表名“ data1.refresh sub end 这几句话的意为,打开当前程序运行的目录下的数据库。你只要保证你的数据库在你程序所在的目录之下就行了。
二、利用adodc(ADO Data Control)进行数据库链接: private form_load()Dim str As String '定义 str = App.Path If Right(str, 1)<> ”“ Then str = str + ”“ End If str = ”Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=“ & str & ”tsl.mdb“ Adodc1.ConnectionString = str Adodc1.CommandType = adCmdText
Adodc1.RecordSource = ”select * from table3“ Adodc1.Refresh end sub
三、利用DataEnvironment进行数据库链接 可在过程中放入: On Error Resume Next
If DataEnvironment1.rsCommand1.State <> adStateClosed Then DataEnvironment1.rsCommand1.Close '如果打开,则关闭 End If 'i = InputBox(”请输入友人编号:“, ”输入“)'If i = ”“ Then Exit Sub
DataEnvironment1.Connection1.Open App.Path & ”userdatabasetsl.mdb“ DataEnvironment1.rsCommand1.Open ”select * from table3 where 编号='“ & i & ”'“ 'Set DataReport2.DataSource = DataEnvironment1 'DataReport2.DataMember = ”command1“ 'DataReport2.show end sub
四、利用ADO(ActiveX Data Objects)进行编程: 建立连接:
dim conn as new adodb.connection dim rs as new adodb.recordset dim str str = App.Path If Right(str, 1)<> ”“ Then str = str + ”“ End If str = ”Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=“ & str & ”tsl.mdb“ conn.open str rs.cursorlocation=aduseclient rs.open ”数据表名“,conn,adopenkeyset.adlockpessimistic 用完之后关闭数据库: conn.close set conn=nothing
//////////////////////////////////////////////////////////////////////////////////// 如何让用户自行输入方程式,并计算其结果?
假设我们要让使用者在“方程式”栏位中自由输入方程式,然后利用方程式进行计算,则引用ScriptControl控件可以很方便地做到。
(ScriptControl 控件附属于VB 6.0,如果安装后没有看到此一控件,可在光盘的
CommonToolsVBScript 目录底下找此一控件,其.文件名为Msscript.ocx。)假设放在窗体上的ScriptControl控件名称为ScriptControl1,则在“计算”按钮的Click事件中编写如下代码: Dim Statement As String Statement = ”X=“ + Text1.Text + vbCrLf + _ ”Y=“ + Text2.Text + vbCrLf + _ ”MsgBox “"计算结果=”“ & Y ” ScriptControl1.ExecuteStatement(Statement
//////////////////////////////////////////////////////////////////////////////////// 如何让一个 App 永远保持在最上层(Always on Top)
请在声明区中加入以下声明
Private Declare Function SetWindowPos Lib “user32”(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)As Long
Const SWP_NOMOVE = &H2 '不更动目前视窗位置 Const SWP_NOSIZE = &H1 '不更动目前视窗大小 Const HWND_TOPMOST =-1 '设定为最上层
Const HWND_NOTOPMOST =-2 '取消最上层设定 Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
'将 APP 视窗设定成永远保持在最上层
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
'取消最上层设定
SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS
//////////////////////////////////////////////////////////////////////////////////// 我要如何在程序中开启网页?
在声明区中声明如下(在.bas 档中用 Public, 在 Form 中用 Private)
Private Declare Function ShellExecute Lib “shell32.dll” Alias “ShellExecuteA”(ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)As Long
在程序中
Intranet:
ShellExecute Me.hWnd, “open”, “http://Intranet主机/目录”, “", ”“, 5 Internet:
ShellExecute Me.hWnd, ”open“, ”http://www.xiexiebang.com.tw“, ”“, ”“, 5
//////////////////////////////////////////////////////////////////////////////////// VB可以产生四角形以外其他形状的 Form 吗?
这个问题,您一定无法想像有多容易,您可以产生任何形状的 Form,但必须借助 CreateEllipticRgn 及 SetWindowRgn 二个 API,例如:
Private Declare Function CreateEllipticRgn Lib ”gdi32“(ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long)As Long
Private Declare Function SetWindowRgn Lib ”user32“(ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean)As Long
Private Sub Form_Load()Dim lReturn As Long Me.Show lReturn = SetWindowRgn(hWnd, CreateEllipticRgn(10, 10, 340, 150), True)End Sub
执行结果图片
CreateEllipticRgn 之四个参数说明如下:
X1:椭圆中心点之X轴位置,但以 Form 的实№边界为限。Y1:椭圆中心点之Y轴位置,但以 Form 的实№边界为限。X2:椭圆长边的长度 Y2:椭圆短边的长度的
//////////////////////////////////////////////////////////////////////////////////// 如何移除 Form 右上方之『X』按钮?
其实 Form 右上方之三个按钮分别对应到 Form 左上方控制盒(ControlBox)中的几个选项(缩到最小 / 放到最大 / 关闭),而其中的最大化(MaxButton)及最小化(Minbutton)都可以直接在 Form 的属性中设定,但是 VB 并没有提供设定『X』按钮的功能!要达到这个功能,必须借助 API:
由于『X』按钮对应到 ControlBox 的关闭选项,所以我们只要移除系统 Menu(就是ControlBox)的关闭选项即可!您自己可以先看看您现在使用的 Browser 左上方的系统 Menu,【关闭】选项是在第几个,不是第 6 个!是第 7 个,分隔线也算一个!分隔线才是第 6 个!
当我们移除了关闭选项之後,会留下一条很奇怪的分隔线,所以最好连分隔线也一并移除。而 Menu 的 Index 是从 0 开始,分隔线是第 6 个,所以 Index = 5。
修正:为了让程序码在 Windows NT 也能运作正常,将各 Integer 型态改成 Long。89.05.04
'抓取系统 Menu 的 hwnd Private Declare Function GetSystemMenu Lib ”user32“ Alias ”GetSystemMenu“(ByVal hwnd As Long, ByVal bRevert As Long)As Long '移除系统 Menu 的 API Private Declare Function RemoveMenu Lib ”user32“ Alias ”RemoveMenu“(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long)As Long '第一个参数是系统 Menu 的 hwnd '第二个参数是要移除选项的 Index
//////////////////////////////////////////////////////////////////////////////////// 如何制作透明的表单(Form)?
请在声明区中放入以下声明
Const GWL_EXSTYLE =(-20)Const WS_EX_TRANSPARENT = &H20& Const SWP_FRAMECHANGED = &H20 Const SWP_NOMOVE = &H2 Const SWP_NOSIZE = &H1 Const SWP_SHOWME = SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE Const HWND_NOTOPMOST =-2
Private Declare Function SetWindowLong Lib ”user32“ Alias ”SetWindowLongA“(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long)As Long Private Declare Function SetWindowPos Lib ”user32“(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)As Long
在 Form_Load 使用的范例如下:
Private Sub Form_Load()SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_TRANSPARENT
SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, SWP_SHOWME Me.Refresh End Sub
//////////////////////////////////////////////////////////////////////////////////// 如何在 Menu 中加入美美的图案?
在模组中加入以下程序码:
Declare Function GetMenu Lib ”user32“(ByVal hwnd As Long)As Long
Declare Function GetSubMenu Lib ”user32“(ByVal hMenu As Long, ByVal nPos As Long)As Long
Declare Function GetMenuItemID Lib ”user32“(ByVal hMenu As Long, ByVal nPos As Long)As Long
Declare Function SetMenuItemBitmaps Lib ”user32“(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long)As Long
Public Const MF_BITMAP = &H4&
Type MENUITEMINFO cbSize As Long fMask As Long fType As Long fState As Long wID As Long hSubMenu As Long hbmpChecked As Long hbmpUnchecked As Long dwItemData As Long dwTypeData As String cch As Long End Type
Declare Function GetMenuItemCount Lib ”user32“(ByVal hMenu As Long)As Long
Declare Function GetMenuItemInfo Lib ”user32“ Alias ”GetMenuItemInfoA“(ByVal hMenu As Long, ByVal un As Long, _ ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO)As Boolean
Public Const MIIM_ID = &H2 Public Const MIIM_TYPE = &H10 Public Const MFT_STRING = &H0&
在 Form 中加入一个 PictureBox,属性设定为: AutoSize = True Picture =.bmp(尺寸大小为 13x13,不可设定为.ico)
在 Form_Load 中的程序码如下:
Private Sub Form_Load()'取得程序中 Mennu 的 handle hMenu& = GetMenu(Form1.hWnd)'取得第一个 submenu 的 handle hSubMenu& = GetSubMenu(hMenu&, 0)'取得 Submenu 第一个选项的 menuId hID& = GetMenuItemID(hSubMenu&, 0)'加入图片
SetMenuItemBitmaps hMenu&, hID&, MF_BITMAP, Picture1.Picture, Picture1.Picture '在一个 Menu 选项中您一共可以加入二张图片 '一张是 checked 状态用,一张是 unchecked 状态用 End Sub
89、如何把小图片填满 Form 成为背景图?
对于这个问题,我看过很多方法,有的方法很麻烦,要声明一大堆 Type,用一大堆的 API,但是有一个最笨但我认为最好的方法如下:(就好像拼磁砖一样,不用任何 API, 不必声明任何 Type)
在 Form 中放一个 PictureBox,Picture 属性设定为某一张小图,AutoSize 属性性设定 True,完成的模组如下:
Sub PictureTile(Frm As Form, Pic As PictureBox)Dim i As Integer Dim t As Integer Frm.AutoRedraw = True Pic.BorderStyle = 0 For t = 0 To Frm.Height Step Pic.ScaleHeight For i = 0 To Frm.Width Step Pic.ScaleWidth Frm.PaintPicture Pic.Picture, i, t Next i Next t End Sub
PictureTile 这个模组共有二个参数,第一个是表单名称,第二个则是 PictureBox 的名称。以下为一应用实例:
Private Sub Form_Load()PictureTile Me, Picture1 End Sub
90、如何把小图片填满 MDIForm 成为背景图?
以下这个范例,要:
1、一个 MDIForm:不必设定任何属性。
2、一个 Form1:不一定是 MDIChild,最好 MDIChild 为 False,但是 AutoRedraw 设成 True。
3、Form1 上面放一个隐藏的 PictureBox:名称为 Picture1,不必设定 Picture 属性。
4、一张图片的完整路径。
'将以下模组放入 MDIForm 的声明区中:
Sub TileMDIBkgd(MDIForm As Form, bkgdtiler As Form, bkgdfile As String)If bkgdfile = ”“ Then Exit Sub Dim ScWidth%, ScHeight% ScWidth% = Screen.Width / Screen.TwipsPerPixelX ScHeight% = Screen.Height / Screen.TwipsPerPixelY Load bkgdtiler bkgdtiler.Height = Screen.Height bkgdtiler.Width = Screen.Width bkgdtiler.ScaleMode = 3 bkgdtiler!Picture1.Top = 0 bkgdtiler!Picture1.Left = 0 bkgdtiler!Picture1.Picture = LoadPicture(bkgdfile)bkgdtiler!Picture1.ScaleMode = 3
For n% = 0 To ScHeight% Step bkgdtiler!Picture1.ScaleHeight For o% = 0 To ScWidth% Step bkgdtiler!Picture1.ScaleWidth bkgdtiler.PaintPicture bkgdtiler!Picture1.Picture, o%, n% Next o% Next n%
MDIForm.Picture = bkgdtiler.Image Unload bkgdtiler End Sub
以下为一应用实例:
Private Sub MDIForm_Load()TileMDIBkgd Me, Form1, ”c:windowsTiles.bmp“ End Sub
//////////////////////////////////////////////////////////////////////////////////// 关闭指定的程序
要做到像 Task Manager 一样,可以关闭指定的程序,方法如下:
在声明区中放入以下声明:(16位 改成 win31 API)
Declare Function FindWindow Lib ”user32“ Alias ”FindWindowA“(ByVal lpClassName As String, ByVal lpWindowName As String)As Long
Declare Function PostMessage Lib ”user32“ Alias ”PostMessageA“(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)As Long
Public Const WM_CLOSE = &H10
以下之范例示范如何关闭一个视窗标题(Caption)为 【小算盘】的程序:
Dim winHwnd As Long Dim RetVal As Long winHwnd = FindWindow(vbNullString, ”小算盘“)Debug.Print winHwnd If winHwnd <> 0 Then RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)If RetVal = 0 Then
MsgBox ”Error posting message.“ End If Else MsgBox ”并未开启小算盘程序.“ End If
//////////////////////////////////////////////////////////////////////////////////// 如何隐藏及再显示鼠标
很简单,只用到了一个 ShowCursor API,参数也很简单,只有一个 bShow,设定值如下:
True:显示鼠标 / False:隐藏鼠标
Declare Function ShowCursor Lib ”user32“ Alias ”ShowCursor“(ByVal bShow As Long)As Long
//////////////////////////////////////////////////////////////////////////////////// 如何从您的应程序中结束 Windows 重开机?
很多软件在 Setup 完之后都会自动关机重开机,以便让某些设定值可以生效,其实这个功能很简单,只要几行指令就可以做到了!
关键就是要使用 ExitWindowsEx 这个 API,这个 API 只有二个参数,第一个参数是一个 Flag,目的是要告诉 Windows 要以什么方式关机,在下面的声明中会列出可用的 Flag 常数值,至于第二个参数则是一个保留值,只要设定成 0 就可以了。
很重要的一点是:如果您想要让关机动作更顺利,记得要 Unload 您的程序!
'在声明区中(Bas Module / Form Module)加入以下声明:
Public Const EWX_LOGOFF = 0 '这四个常数值可以并用 Public Const EWX_SHUTDOWN = 1 Public Const EWX_REBOOT = 2 Public Const EWX_FORCE = 4 Declare Function ExitWindowsEx Lib ”user32“ Alias ”ExitWindowsEx“(ByVal uFlags As Long, ByVal dwReserved As Long)As Long
'实例:如果您想强迫关机重开机,程序码如下:
ret = ExitWindowsEx(EWX_FORCE OR EWX_REBOOT, 0)
//////////////////////////////////////////////////////////////////////////////////// 如何用 VB 启动其他程序或开启各类文件?
要在 VB 中启动其他程序或开启各类文件,最简单的方法就是使用 Shell 函数,例如:要开启 C:Test.txt 这个文字文件,则要启动记事本来开启这个文件案,程序如下:
Dim RetVal As Long RetVal = Shell(”C:WindowsNotepad.exe C:Test.txt“, 3)'3代表视窗会最大化,并具有驻点,细节请查 Help
以上的语法虽然很简单,但有一个风险,若是我们不知道开启文件的执行文件位置,则程序便会有错误产生,尤其一般软件在安装的时候都可以让使用者自行选择安装目录,所以执行文件的路径不能写死在程序中,要解决这个问题,就是在注册文件中找到该副文件名之启动程序位置,再放入 Shell 中。
但是以上的作法必须熟悉注册文件,而且必须使用 Windows API 来 Call(注册文件的存取以后会有专文来说明),如果您对注册文件的存取及 API 的使用都很纯熟的话,当然没问题,但是有些人对于注册文件会有畏惧,这时候,您可以使用下面的方法:
Shell(”Start C:Test.txt“)
您完全不用知道这份文件的启动程序是什么?它放在什么地方?参数 Start 便会自动依照附文件名到注册文件中找到启动程序来开启该份文件案!不赖吧!
注一:在 Windows 95/98/NT平台中, 什么副文件名之文件案, 该由什么执行文件来启动, 都设在关联中,代码为 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExtensions
例如: 名称为 ”.DOC“ 之资料为 ”C:Progra~1Micros~2OfficeWINWORD.EXE ^.DOC“
名称为 ”.TXT“ 之资料为 ”notepad.exe ^.txt“
注二:使用 Start 之唯一缺点为 ”会比直接指定执行文件稍为慢 0.5-1 秒钟.“
//////////////////////////////////////////////////////////////////////////////////// 如何找出 Windows 目录的正确路径?
有时候我们在程序中必须用到 Windows 的目录,以存取 Windows 目录下的文件,照理说,这应该是最简单的功能,前提是每个人在 Setup Windows 必须采用 Windows 的预设目录名称,也就是 C:Windows,但是常常不是这样,有时候由於要使新旧版本共存,或者其他原因,有人会将 Windows 目录改成 c:win95、c:win98、Windows95 或 Windows98......若是程序中必须用到 Windows 目录,要找到正确的路径,做法如下:
'在声明区中加入以下声明:
Const MAX_PATH = 260
Private Declare Function GetWindowsDirectory Lib ”kernel32“ Alias ”GetWindowsDirectoryA“(ByVal lpBuffer As String, ByVal nSize As Long)As Long
Public Function GetWinPath()Dim strFolder As String Dim lngResult As Long strFolder = String(MAX_PATH, 0)lngResult = GetWindowsDirectory(strFolder, MAX_PATH)If lngResult <> 0 Then GetWinPath = Left(strFolder, InStr(strFolder, Chr(0))1 Next lNum sGetFile = Mid(sGetFile, 2)'得到文件名 MsgBox sGetFile
//////////////////////////////////////////////////////////////////////////////////// 如何防止使用者按下 CTRL + ALT + DEL
有些时候,我们的应用程序执行时,不希望使用者按下 CTRL + ALT + DEL 来异常结束程序或关机,这时候我们可以在启动程序时,将 CTRL + ALT + DEL 功能键之功能取消,然后在结束程序之前,再从新恢复 CTRL + ALT + DEL 之功能。
在模组声明区中加入以下声明及模组:
Declare Function SystemParametersInfo Lib ”user32“ Alias ”SystemParametersInfoA“(ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long)As Long
Public Const SPI_SCREENSAVERRUNNING = 97
Public Sub Disable_Ctrl_Alt_Del()'让 CTRL+ALT+DEL 失效 Dim AyW As Integer Dim TurFls As Boolean
AwY = SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, TurFls, 0)End Sub
Public Sub Enable_Ctrl_Alt_Del()'让 CTRL+ALT+DEL 恢复功能 Dim AwY As Integer Dim TurFls As Boolean
AwY = SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, TurFls, 0)End Sub
'实际使用时,在 Form 中加入以下程序码:
Private Sub Form_Load()Disable_Ctrl_Alt_Del End Sub
Private Sub Form_Unload(Cancel As Integer)Enable_Ctrl_Alt_Del End Sub
//////////////////////////////////////////////////////////////////////////////////// 如何取得文件大小?
VB6 提供了一个新的物件模型,叫做 FSO(File System Object)物件模型,运用它,我们可以很方便的处理磁盘、资料夹和文件的一些动作。
FSO 物件模型含有好几个物件,其中有一个 File 物件是用来求得文件的相关资讯,在目前这个主题,我们就可以使用 File 物件!它有一个属性是 Size,对文件来说就是指文件的大小(单位为位元组)。(注一)
虽然使用 File 物件的 Size 属性就可以求得文件的大小,但是它有以下二个缺点:
1、只能用于 VB6 以后的版本。
2、它不是 VB6 内定的功能,必须另外引用 Scrrun.dll(Microsoft Scripting Runtime)才可以!
以下的二个方法就可以使用在所有的 VB 版本中(含 VB6),而且是 VB 内定的功能:
1、FileLen 函数:返回一个 Long,代表一个文件的长度,单位是位元组。
语法:FileLen(pathname)' pathname 是全路径之文件名称 适用:取得一个尚未开启的文件的长度大小(注二)
2、LOF 函数:返回一个 Long,单位为位元组,用来代表由 Open 陈述式所开启的文件之大小。
语法:LOF(filenumber)' filenumber 是一个文件代码 适用:取得一个已开启的文件的长度大小
注一:File 物件的 Size 属性除了可以求得一个文件的大小,也可以用来取得整个目录的所有文件大小!
注二:使用 FileLen 函数时,如果所指定的文件正在开启中,则所返回的值是这个文件在开启前的大小。
//////////////////////////////////////////////////////////////////////////////////// 如何移除或更改桌面背景的底色图案(Wallpaper)?
SystemParametersInfo 这个 API 可以设定许多 Windows 系统的功能参数,而其中一个参数就是桌面底图!通常一般的使用者会透过控制面板中的【显示器】来设定桌面底图。
在底下的范例中,我们使用 SPI_SETDESKWALLPAPER 这个参数及图片文件名称来设定新的桌面底图,同时使用 SPIF_SENDWININICHANGE 来通知各个视窗这个改变。
'在表单的声明区中加入以下声明及常数:
Private Declare Function SystemParametersInfo Lib ”user32“ Alias ”SystemParametersInfoA“(ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As String, ByVal fuWinIni As Long)As Long
Const SPI_SETDESKWALLPAPER = 20 Const SPIF_UPDATEINIFILE = &H1 Const SPIF_SENDWININICHANGE = &H2
'在表单上加入一个 CommandButton(Command1)来移除桌面底图,程序码如下:
Private Sub Command1_Click()Dim X As Long X = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, ”(None)“, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)MsgBox ”桌面底图(Wallpaper)已经被移除“ End Sub
'在表单上加入另一个 CommandButton(Command2)来更改桌面底图,程序码如下:
Private Sub Command2_Click()Dim FileName As String Dim X As Long FileName = ”c:windowstest.bmp“ X = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0&, FileName, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)MsgBox ”桌面底图(Wallpaper)已经被更改“ End Sub
//////////////////////////////////////////////////////////////////////////////////// 一个快速注册 DLL 及 OCX 的方法
有时候我们在 VB 中要引用某一个 DLL 或 OCX 时,会出现文件未注册的讯息,这时,我们可以使用人工注册的方法,也就是直接在命令列中使用 regsvr32.exe 来做,做法如下:
文件注册:C:WindowsSystemRegsvr32.exe C:WindowsSystemTest.ocx 取消注册:C:WindowsSystemRegsvr32.exe /u C:WindowsSystemTest.ocx
这些动作我们也可以直接写到程序中,使用 Shell 来执行,但是我现在要说的,都不是上面提到的方法!
注意看罗!方法如下:
1、在资源管理器中找到 C:WindowsSystemRegsvr32.exe 并【复制】(按鼠标右键选复制)
2、将目录移到 C:WindowsSendTo 后,执行【贴上快捷方式】(按鼠标右键选贴上快捷方式)
3、将快捷方式名称改成【REGISTER】
4、OK
现在,如果您想替某一个文件做注册动作,例如:C:WindowsSystemTest.ocx,您只要打开资源管理器,找到 C:WindowsSystemTest.ocx,按鼠标右键选【传送到】【REGISTER】即可完成注册动作了!
注:有一个地方要注意的是,Regsvr32.exe 只能注册 32 位的文件!如果要用它来注册 16 位的文件,会有错误讯息产生。
//////////////////////////////////////////////////////////////////////////////////// 如何用TextBox打开和保存文件
作为轻量级的控件,TextBox控件使用率很高,但相关的资料极少谈及如何用TextBox控件打开和保存文件,大都采用回避的态度,对VB初学者带来很多不便。笔者近日为友人做一个英文朗读软件,按友人的要求,软件要能象MS的记事本那样能打开和保存文档。其实实现方法并不复杂,现将心得写出来,希望对大家有帮助。如果您有更好的方法,请来信:handanfang@163.net。
'新建标准EXE,加入一个TextBox控件,一个公共对话框,两个菜单。
'打开
Private Sub mnuOpen_Click()CommonDialog1.Filter = ”文档文件(*.txt)|*.txt|所有文件(*.*)|*.*“ CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #1 Text1.Text = StrConv(InputB$(LOF(1), 1), vbUnicode)Close #1 End Sub
'保存
Private Sub mnuSave_Click()On Error Resume Next
CommonDialog1.Filter =”文档文件(*.txt)|*.txt|所有文件(*.*)|*.*“ CommonDialog1.ShowSave Open CommonDialog1.FileName For Output As #1 Print #1, Text1.Text Close 1 End Sub
TextBox只支持打开64K以下的文件,建议最好设置出错处理。以上程序在PWin98、VB6.0下调试通过。
//////////////////////////////////////////////////////////////////////////////////// 如何判断目前文件资源管理器中,文件名称之扩展文件名是显示或隐藏?
由于我在集团性的资讯处工作,所负责的公司系统有的是属于外点,例如润泰建设有个单位是行销业务处,他们的工作是卖公司盖的房子,所以他们的业务人员平常都是待在各工地的接待中心,我替他们开发的销售系统在工地的部份是属于单机作业的,使用 Access 资料库,每一个星期资料回传总公司一次。业务人员由于流动性大,不太了解系统,有时候,系统出了问题,业务人员又搞不清楚状况,于是我会要求他们将资料库 sale.mdb 回传公司,结果,常闹笑话,原来他们回传公司的,常常不是 sale.ldb 就是 sale.exe,为什么呢?
原因很简单,因为他们的文件资源管理器中,设定了将扩展文件名隐藏起来,结果只看到三个不同图示的 sale 文件(分别是 Sale.mdb、Sale.ldb、Sale.exe),不太会操作的业务人员根本分不清楚那一个图示的 sale 文件才是资料库文件案!
我们在 VB 的程序中要如何判断,目前文件资源管理器中的设定是否显示扩展文件名呢?
Private Declare Function GetFileTitle Lib ”comdlg32.dll“ Alias ”GetFileTitleA"(ByVal lpszFile As String, ByVal lpszTitle As String, ByVal cbBuf As Integer)As Integer Private Function HasExtension(sFileName As String)As Long Dim sTemp As String Dim lTemp As Long
sTemp = String(1, 0)lTemp = GetFileTitle(sFileName, sTemp, Len(sTemp))If lTemp < 0 Then HasExtension =-1: Exit Function sTemp = String(lTemp, 0)Call GetFileTitle(sFileName, sTemp, Len(sTemp))
If(Left$(Right$(Left$(sTemp, lTemp网站导航诚邀加盟友情链接-赞助本站 Copyright© 1999-2004 Programfan.com.All Rights Reserved 网站制作&维护:Hannibal Email: yaoz@163.com 网站合作及广告联系:(021)28540908