GridCtrl使用小结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GridCtrl使用小结
第一篇:GridCtrl使用小结
GridCtrl使用详解
CGridCtrl类主要是通过grid样式显示数据在单文档中的使用方法
步骤一初始化在CView类的.h头文件中包含文件:
#include “Gridctrl.h” 并且手写加入如下的成员函数:
CGridCtrl * m_pGridCtrl;步骤二构造与析构构造函数中:
m_pGridCtrl = NULL;析构函数中:
if(m_pGridCtrl)
delete m_pGridCtrl;步骤三如果需要打印功能的话添加同名打印函数代码在CView类的OnBeginPrinting()函数中添加如下代码: if(m_pGridCtrl)
m_pGridCtrl->OnBeginPrinting(pDC,pInfo);//简单吧,这就是类的好处其它两个打印函数也一样的做法.步骤四在OnInitaUpdate()函数中或者你自己添加的要显示Grid的消息函数中如下初始化: //创建非模式对话框 CDlg *dlg;dlg=new CDlg();dlg->Create(IDD_Dlg,this);
//初始化GridCtrl控件if(m_pGridCtrl!=NULL){ deletem_pGridCtrl;m_pGridCtrl=NULL;} if(m_pGridCtrl == NULL){ // Create the Gridctrl object m_pGridCtrl = new CGridCtrl;if(!m_pGridCtrl)return 0;// Create the Gridctrl window CRectrect;GetClientRect(rect);m_pGridCtrl->Create(rect, this, 100);// fill it up with stuff m_pGridCtrl->SetEditable(false);m_pGridCtrl->SetTextBkColor(R GB(0xFF, 0xFF, 0xE0));//黄色背景m_pGridCtrl->EnableDragAndDrop(false);try
{ m_pGridCtrl->SetRowCount(k);//设置行数为k行m_pGridCtrl->SetColumnCount(4);//k列
m_pGridCtrl->SetFixedRowCount(1);//标题行为一行
m_pGridCtrl->SetFixedColumnCount(1);//同上} catch(CMemoryException*
e){ e->ReportError();e->Delete();return 0;} //填充列标题int row=0;for(int col=0;col<4;col++){ GV_ITEM Item;Item.mask = GVIF_TEXT|GVIF_FORMAT;Item.row = row;Item.col = col;if(col==0){ Item.nFormat = DT_CENTER|DT_WORDBREAK;Item.strText.Format(_T(“【类别】”),col);} else if(col==1){ Item.nFormat = DT_LEFT|DT_WORDBREAK;Item.strText.Format(_T(“第一列”),col);} else if(col==2){ Item.nFormat = DT_LEFT|DT_WORDBREAK;Item.strText.Format(_T(“第二列”),col);} m_pGridCtrl->SetItem(&Item);} // fill rows/cols with text for(row = 1;row < k;row++)for(col = 0;col < h;col++){ GV_ITEM Item;Item.mask = GVIF_TEXT|GVIF_FORMAT;Item.row = row;Item.col = col;if(col < 1){ //行标题头
Item.nFormat = DT_CENTER|DT_VCENTER |DT_SINGLELINE|DT_END_ELLIPSIS
|DT_NOPREFIX;Item.strText.Format(_T(“%d”),row);
} else if(col==1){ //第一列的值Item.nFormat = DT_CENTER|DT_VCENTER |DT_SINGLELINE|DT_END_ELLIPSIS |DT_NOPREFIX;str=“aa”;Item.strText.Format(_T(“%s”),str);}els e if(col==2){ //第二列第值Item.nFormat = DT_CENTER|DT_VCENTER |DT_SINGLELINE|DT_END_ELLIPSIS |DT_NOPREFIX;CStringstr;str=“bb”;Item.strText.Format(_T(“% s”),str);} m_pGridCtrl->SetItem(&Item);} m_pGridCtrl->AutoSize();
//--------------设置行列距------------------for(int a=1;aSetRowHeight(a,21);//设置各行高
m_pGridCtrl->SetRowHeight(0,24);//设置0行高m_pGridCtrl->SetColumnWidth(1,110);//设置2列宽m_pGridCtrl->SetColumnWidth(2,160);//设置3列宽m_pGridCtrl->SetColumnWidth(3,100);//设置4列宽} 上例取自实际工程,稍有修改!部分注释: void SetVirtualMode(TRUE)//设为虚模式BOOL SetRowCount(intnRows)//设置总的行数。

BOOL SetFixedRowCount(intnFixedRows = 1)//设置固定的行数据BOOL SetColumnCount(intnCols)//设置列数BOOL SetFixedColumnCount(intnFixedCols = 1)//设置固定的列数步骤五: 添加WM_SIZE消息,调整控件的界面占屏幕大小
if(m_pGridCtrl->GetSafeHWnd())
{
CRectrect;
GetClientRect(rect);
m_pGridCtrl->MoveWindow(rect);
}
在对话框中的使用方法步骤一创建数据显示表格对话框
在资源管理器中新创建一个对话框,假设为CDlgT estReportBox。

从工具箱中加入Custom Control,就是人头像的那个,将其区域拉伸至要显示数据表格的大小,充满整个对话框。

在CDlgTestReportBox类的头文件中:#include “GridCtrl.h”
再定义成员变量: CGridCtrl* m_pGrid;添加OnShowWindow()消息处理函数如下:
voidCDlgT estReportBox::OnShowWindow(BOOL bShow, UINT nStatus){ CDialog::OnShowWindow(bShow, nStatus);// TODO: Add your message handler code here if(m_pGrid!=NULL){ deletem_pGrid;m_pGrid=NULL;} if(m_pGrid==NULL){ m_pGrid=new CGridCtrl;CRectrect;GetDlgItem(IDC_ReportAera)->GetWindowR ect(rect);//得到显示区域
ScreenToClient(&rect);m_pGrid->Create(rect,this,100);m_pGrid->SetEditable(false);m_pGrid->SetTextBkColor(RGB(0xFF, 0xFF, 0xE0));//黄色背景 try { m_pGrid->SetRowCount(10);//初始为10行m_pGrid->SetColumnCount(11);//初始化为11列m_pGrid->SetFixedRowCount(1);//表头为一行m_pGrid->SetFixedColumnCount(1);//表头为一列} catch(CMemoryException* e){ e->ReportError();e->Delete();// return FALSE;} for(int row = 0;row GetRowCount();row++)for(int col = 0;col GetColumnCount();col++){ //设置表格显示属性GV_ITEM Item;Item.mask = GVIF_TEXT|GVIF_FORMAT;Item.row = row;Item.col = col;if(row==0&&col==0)//第(0,0)格
{ Item.nFormat = DT_CENTER|DT_WORDBREAK;I tem.szText.Format(_T(“报表显示”),col);} else if(row < 1)//设置0行表头显示{ Item.nFormat = DT_CENTER|DT_WORDBREAK;Item.szText.Format(_T(“ 项目%d”),col);} else if(col < 1)//设置0列表头显示{ if(rowGetRowCount()-4){ Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;Item .szText.Format(_T(“第%d次”),row);} } else { Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;Item .szText.Format(_T(“"),2);} m_pGrid->SetItem(&Item);} m_pGrid->Invalidate();} //--------------设置行列距------------------for(int
a=0;aGetRowCount();a++)m_pGrid->SetRowHeight(a,16);//设置各行高m_pGrid->SetColumnWidth(0,58);//设置0列宽for(int b=1;bGetColumnCount();b++)m_pGrid->SetColumnWidth(b,59) ;//设置各列宽 }
步骤二嵌入上面的对话框显示数据
在你需要显示数据的对话框上的头文件中,假设为CDlgTest,加入#include ”GridCtrl.h“ CDlgTestReportBox*
m_pTestReportBox;将数据显示对话框放入你的对话框相应位置上,在CDlgTest::OnInitDialog()中:
if(!m_pTestReportBox){
m_pTestReportBox=new CDlgTestReportBox(this);} m_pTestReportBox->Create(IDD_DlgT estReportBox,this);
//定义区域变量CRectrectDraw;GetDlgItem(IDC_AeraReport)->GetWindowRect(r ectDraw);ScreenToClient(&rectDraw);//动态测试数据显示区域rectDraw //将对应的对话框放到指定区域m_pTestReportBox->MoveWindow(rectDraw);m_pTestReportBo x->ShowWindow(SW_SHOW);自定义填充数据的函数:CDlgTest::FillGrid()如下:CGridCtrl* pGrid=m_pT estReportBox->m_pGrid;for(int row = pGrid->GetRowCount()-1;row >= pGrid->GetRowCount()-3;row--){ for(int col = 1;col <= pGrid->GetColumnCount();col++){ GV_ITEM Item;Item.mask = GVIF_TEXT|GVIF_FORMAT;Item.row = row;Item.col = col;if(row==pGrid->GetRowCount()-3&&col>0)//平均值{ if(col==10){ Item.nFormat = DT_CENTER|DT_WORDBREAK;Item.szText.Format(_T(” %6.2f “),avjch);} else{ Item.nFormat = DT_CENTER|DT_WORDBREAK;Item.szText.Format(_T(” %6.2f “),av[col-1]);} } pGrid->SetItem(&Item);//提交数据if(row==0||col==0){ COLORREF clr = RGB(0, 0, 0);pGrid->SetItemBkColour(row, col, clr);pGrid->SetItemFgColour(row, col, RGB(255,0,0));} }//循环结束pGrid->Invalidate();} CGRIFCTRL原理:
DBGRID和一般的GRID的不同之处在于,一般的GRID并不适合显示大的数据量,如果一个表中有上万条记录都要插入到GRID中,这将是一个很慢的过程,并且在GRID中移动滚动条时,它的记录的滚动
也是很慢。

而DBGRID并不会真正把这些记录的数据全部插入到控件中,当DBGRID的滚动条滚动时,它会根据DBGRID的显示面积的大小和查询得到的总记录数计算出当前应该显示哪些行,然后插入到表格中,这样一来,速度肯定快,而且没有数据量多少的限制。

幸运的是,CGridCtrl类已经为我们提供了这种机制,它是采用虚模式实现的。

使用这种方式,即使你向这个该控件插入一百万条数据,它并不会真的生成一百万行,而是随着你的滚动条的滚动,计算出在屏幕上要显示的行和列,然后会向你提供一个接口,通过这个接口,你可以在这儿设置你要显示的数据。

下面给出使用CGridCtrl控件的虚模式的步骤:步骤一初始化
在视图的初始化函数里添加如下代码:
void SetVirtualMode(TRUE)
设为虚模式
BOOL SetRowCount(intnRows)
设置总的行数。

BOOL SetFixedRowCount(intnFixedRows = 1)
设置固定的行数据 BOOL SetColumnCount(intnCols)
设置列数 BOOL SetFixedColumnCount(intnFixedCols = 1)设置固定的列数步骤二响应消息显示数据
我们假设CGridCtrl是放在单文档视图中,而且它关联的变量是m_GridCtrl,利用ClassWizard添加视图的OnNotify响应函数。

这个响应函数的写法是固定的,类似下面的代码:
BOOL CGridCtrlTestView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult){ if(wParam ==(WPARAM)m_Grid.GetDlgCtrlID()){ *pResult = 1;GV_DISPINFO *pDispInfo =(GV_DISPINFO*)lParam;if(GVN_GETDISPINFO == pDispInfo->hdr.code){ //这是添加的函数,在这个函数里设置当前要显示的数据SetGridItem(pDispInfo);return TRUE;} } returnCGridCtrlTestView::OnNotify(wParam, lParam, pResult);} 在上面的代码中,SetGridItem(pDispInfo)是添加的函数,在这个函数
里我们设置当前要显示的数据。

pDispInfo是一个GV_DISPINFO的结构体对象,它包含了每个单元格的信息,如行号,列号,有没有位图,背景色,前景色等。

CGRIDCTRL会把当前要显示那个单元格行号,列号传递给我们,我们只要设置里面显示的数据就可以了。

如下面是一个显示数据的例子。

voidCGridCtrlTestView::SetGridItem(GV_DISPINFO
*pDispInfo){
pDispInfo->item.strText.Format(”row%d,col%d",pDispInfo->it
em.row, pDispInfo->item.col);}
第二篇:ICC使用小结
ICC使用小结
(1)ICC的输入文件
MilkyWay(physical library),TLUPlus文件(interconnect 文件),lib文件(logical library),netlist,constraints(sdc),floorplan文件(.fp或.def)
由于ICC会使用MilkyWay数据格式,因此有必要先熟悉MilkyWay格式的产生。

(2)ICC的步骤流程
ICC的流程如下:(1)import design(netlist/sdc/database)——(2)create_floorplan或adjust floorplan——(3)placement ——(4)cts——(5)route——(6)final signoff(3)具体每一步过程及注意点(操作点)(4)Import design具体操作:set_link_library xxx set_target_library xxx create_mu_lib design_library –technology xxx.tf –mw_reference_library ref_library open set_tlu_plus_file –max_tluplus max_file –min_tluplus min_file –tech2itf_map map_file read_verilog xxx.v current_design xxx link read_def xxx.def derive_pg_connection –power_net xxx_power_net –power_pin xxx_power_pin –ground_net xxx_ground_net –ground_pin xxx_ground_pin
derive_pg_connection –power_net xxx_power_net –power_pin xxx_power_pin –ground_net xxx_ground_net –ground_pin xxx_ground_pin-tie read_floorplan xxx.fp或新创建一个floorplan 接下来的任务了。

(5)Create_floorplan具体操作:
Create_floorplan针对读入的设计以及def,开始进行floorplan 的规划,包括IO以及macro的摆放,电源规划等。

首先要创建一个floorplan,创建floorplan之前需要读入IO的约束信息,3101项目将IO视作macro对待。

具体的io constraint信号可以使用set_pad_physical_constraints来设置。

Create_floorplan –control_type width_and_height –core_width xxx –core_height xxx Remove_terminal *-keep_macro_place –keep_std_cell_place,只有设置了keep之后,才能create_fp_place完成,否则会报utility超出。

设置好floorplan之后就需要对macro和standcell进行place 了。

Macro的place可以使用脚本set_obj*和set_attribute来设置,而standcell可以使用create_fP_placement来完成。

这个过程中先需要设置placement以及route的blockage。

create_place_blockage 和create_route_guide来完成blockage的设置。

接着设置在Design Planning的task任务下,进行place macros 和standcells。

或者使用create_fp_placement –timing_driven –no_hierarchy_gravity 设置完macro和standcell之后,就可以进行电源规划了,可以通过产生power_ring或power_strap来进行。

create_power_strap –direction horizontal –net {VDD12 VSS_PAD} –layer M5 –configure step_end_stop –start_at 1290 –stop 2170 –step 50 –width 5 –start_low_ends coordinate –start_low_ends_coordinate 583 –start_high_ends coordinate –start_high_ends_coordinate 1710 –extend_low_ends off –extend_high_ends off –keep_floating_wire_pieces –ignore_parallel_targets –
define_parallel_targets_by_wire_directions 下面对上面这个strap 的创建进行解释说明下,上面的power_strap表示要在位置区域为{{1290 583} {2170 1710}}的方形区域创建间距为50,线宽为5的水平方向power_strap。

(6)placement的具体操作
place_opt进行之前需要先查看report_constraints –all看看主要的violation是哪些,同时也应该查看congestion情况以选择合适的place_opt策略。

也需要检查设计及物理信息,check_physical_design –for_placement以及check_design –physical,设置set_ignore_layers –max/-min,接着create_placement –timing_driven/-congestion等,若有congestion,可以设置set_congestion_options来设置合理的值,设置好placement的一些参数后,可以进行place_opt了。

(7)cts的具体操作
cts可以通过GUI—>New Clock Tree Synthesis Window/New Interactive CTS Window查看时钟树的直观形状,可以设置clock_routing_rule来合理安排时钟树的线宽(NDR,Non-Default Rule)。

设置OCV和bc_wc的工作条件。

(8)route的具体操作
需要先check_physical_design –for_routing检查布线的物理设计,以及check_routeability。

Set_route_options可以设置route设置相关的选项,route_opt包括route clock nets,route signal nets,set_route_opt_strategy可以设置route相关的策略。

分析route的结果可以使用verify_route和verify_drc(使用hercules),postroute delay calculation using Arnoldi algorithm。

考虑si的route需要设置set_si_options。

Spread_eco_cells/insert_spare_cells,place_freezen_silicon/route_eco
第三篇:Latex使用小结
LATEX使用小结
2010-10-03 09:04:49| 分类:默认分类|字号订阅
原文地址:LATEX使用小结
作者:丁三家的小包子虚拟打印机转换eps格式
1.建立一个虚拟打印机:控制面板->printer->add a printer->add a local printer->FILE:(print to file)->然后从列表中随便选择一个支持postscript的打印机.
2.设置:右击刚建立的虚拟打印机图标,properties->general->printing preferences->advanced->document options->PostScript Options->PostScript Output Options,选Encapsulated PostScript(EPS), 完工。

将8位图像转换为eps格式时,只需用Snagit的convert功能即可。

而在24位真彩色图转换时,有人推荐用Konvertor转换软件。

我发现转换后,图像的分辨率大大降低,visio图像很容易出现漏字,图片模糊。

用虚拟打印机转换eps格式就不会影响原图的分辨率。

步骤如下:
右击打印,然后选中图片,选择之前创建的虚拟打印机,填写输出文件路径(D:fig1.eps
Latex排版时,如何用bibtex管理参考文献。

BibTeX 是一个使用数据库的的方式来管理参考文献程序, 用于协调LaTeX的参考文献处理.BibTeX 文件的后缀名为.bib.先来看一个例子: @article{Gettys90,author = {Jim Gettys and Phil Karlton and Scott McGregor}, title = {The {X} Window System, Version 11}, journal = {Software Practice and Experience}, volume = {20}, number = {S2}, year = {1990}, abstract = {A technical overview of the X11 functionality.This is an update of the X10 TOG paper by Scheifler & Gettys.} } 说明: 第一行@article 告诉 BibTeX 这是一个文章类型的参考文献.其它格式:article, book, booklet, conference, inbook, incollection, inproceedings, manual, misc, mastersthesis, phdthesis, proceedings, techreport, unpublished 等等.在LaTeX中
使用BibT eX 为了在 LaTeX 中使用BibT eX 数据库, 你必须先做下面四件事情: 1)包含宏包usepackage{natbib} 2)设置参考文献的类型(bibliography style).标准的为plain: bibliographystyle{plain} 其它的类型包括:
unsrt –基本上跟plain 类型一样, 除了参考文献的条目的编号是按照引用的顺序, 而不是按照作者的字母顺序.alpha –类似于 plain 类型, 当参考文献的条目的编号基于作者名字和出版年份的顺序.abbrv –缩写格式.3)标记引用(Make citations).当你在文档中想使用引用时, 插入 LaTeX命令 cite{标号} 例如:、cite{Gettys90},根据cls文件的不同定制,以及在正文引用格式的不同要求,也可能是citet或者citep 命令。

“标记”就是前边定义@article后面的名称.4)告诉 LaTeX 生成参考文献列表.在 LaTeX 的结束前输入 bibliographystyle{jmb} % this can be plain, alpha, etc.bibliography{./MYREFS} 文件中应包含jmb.bst(定义参考文献类型)文件和MYREFS.bib文件运行 BibTeX分为下面四步
1.用LaTeX编译你的.tex 文件 , 这是生成一个.aux 的文件, 这告诉BibTeX 将使用那些引用.
2.用BibTeX 编译.bib 文件.
3.再次用LaTeX 编译你的.tex 文件, 这个时候在文档中已经包含了参考文献, 但此时引用的编号可能不正确.
4.最后用 LaTeX 编译你的.tex 文件, 如果一切顺利的话, 这是所有东西都已正常了.获取bib文件
@book条目为有确定出版社的书籍。

不可少域author或editor, title, publisher, year.可省略域volume或number, series, address, edition, month, note.@booklet条目为印制的有封皮的作品,但没有出版社或赞助机构的名称。

不可少域title.可省略域author, howpublished, address, month, year, note.@conference与下面的@inproceedings相同。

@inbook条目为一本书的一部分(章,节或某些页)。

@unpublished条目为有作者和标题的还未出版的作品。

不可少域author, title, note.可省略域month, year.在每项条目中还可以有可
省略域key和crossref.参考文献及图片表格等超链接。

包含宏包usepackage[dvipdfm]{hyperref} 然后在正文中使用latex命令cite{} ref{} 就可以实现文档中参考文献及图片表格等超链接。

图片命令begin{figure} begin{center} includegraphics[width=7in]{sc.eps} caption{Framework of inspection system} label{fig1} end{center} end{figure} 若是一个双栏文档,使用begin{figure*}可实现跨栏排版,适用于表格编排。

子图排版begin{figure*} begin{center} subfigure[subfigure1]{includegraphics[width=1.5in]{fig6(a).eps}} subfigure[subfigure2]{includegraphics[width=1.5in]{fig6(b).eps}} subfigure[subfigure3]{includegraphics[width=1.5in]{fig6(c).eps}} subfigure[subfigure4]{includegraphics[width=1.5in]{fig6(d).eps}} subfigure[subfigure5]{includegraphics[width=1.5in]{fig6(e).eps}} subfigure[subfigure6]{includegraphics[width=1.5in]{fig6(f).eps}} subfigure[subfigure7]{includegraphics[width=1.5in]{fig6(g).eps}} subfigure[subfigure8]{includegraphics[width=1.5in]{fig6(h).eps}} caption{Wavelet smoothing results} label{fig6} end{center} end{figure*} 每个子图属性显示为(a)subfigure1,(b)subfigure2.......三线表格 begin{table} centering
caption{it is an example}
vspace*{10pt}
begin{tabular}{@{}lcccc@{}} %% toprule {aa} & multicolumn{2}{c}{bb} & multicolumn{2}{c}{cc}[-2pt] cmidrule(1){2-5} {aa} & {bb} &{cc} & {dd}&{ee} hline {1} &a &b &c &d mbox{2}
&a &b &c &d mbox{3}
&a &b &c &d mbox{4}
&a &b &c &d mbox{5}
&a &b &c &d mbox{6}
&a &b &c &d mbox{7}
&a &b &c &d bottomrule end{tabular} end{table} cmidrule(1){2-5}实现2-5列的短划线。

第四篇:NB-IOT使用小结
一、NB-IOT简介
万物互联的时代正以极其迅速的脚步走进我们的生活,据估计2020年大约有500亿台设备连接到互联网。

而实现万物互联的基础之一在于安全、可靠的数据传输。

随着5G技术方案逐渐落地,世界各地巨头支持的NB-IoT(窄带蜂窝物联网)首当其冲无疑是物联网无比渴望的一个强有力的蜂窝基础网络,市场前景广阔,应用场景丰富。

NB-IoT或将成为最热的创客发展方向。

NB-IoT(Narrowband Internet of Thing)采用超窄带、重复传输、精简网络协议等设计,以牺牲一定速率、时延、移动性性能,获取面向LWPA物联网的承载能力。

NB-IoT作为一种新的窄带蜂窝通信LPWAN(低功耗广域网)解决方案,将给物联网行业带来巨大的变革与创新。

该解决方案具有诸多优势:
覆盖广且深:比GPRS覆盖增强20dB+;低功耗:基于AA电池,使用寿命可超过10年;低成本;
强连接:50k+用户容量/200kHz小区。

NB-IoT技术的六大主要应用场景恰恰是现有移动通信很难支持的场景,包括位置跟踪、环境监测、智能泊车、远程抄表、农业和畜牧业这些场景。

市场研究公司Machina预测,NB-IoT未来将覆盖25%的物联网连接。

二、调研过程
调研所需的NB-IoT模块采购于上海移远通信技术股份有限公司,由于我们SIM卡电信合作方较积极,而且公司附近已布置电信NB-IoT 基站,故采购了一款适用于电信的模块。

浏览资料发现,NB-IoT当前各运营商支持的频段主要由以下3中:电信支持 800MHz(实际上该频段处于 BC95-B5 的 850MHz 频段范围内),移动支持 900MHz,联通支持 900MHz 和 1800MHz。

要使其与电信的频段相匹配,故用Code Loader User Guide工具更新最
新固件BC95HA-02-STD_850。

更新完固件之后,需插上SIM卡,然后写IMEI号,过程如下:先执行 AT+CFUN=0 命令,然后再执行AT+NTSETID=1,……设置 IMEI 号。

设置后执行AT+CGSN=1 查询是否设置成功。

IMEI 号只能设置一次。

(IMEI 号获取:模块标签上写的 IMEI)。

BC95 模块从 B656 版本开始增加了扰码(Scrambling)控制功能,此功能可通过AT 命令进行控制。

模块出厂默认开启此功能,此时基站(Base Transceiver Station)也需要开启扰码功能,否则模块搜不到信号,无法连接基站。

若关闭扰码功能,此时基站也需要关闭扰码功能,模块才可连接基站。

由于不知基站是否开启扰码功能,故在接下来步骤之前,进行了这两种尝试,确定其状态。

接下来的步骤是附着网络,具体过程如下:
The following shows a simple example to manually attach the network.Neul //Module is powered on, wait for 3 seconds.OK AT+CGSN=1 //Query the IMEI number.If only ERROR is returned, you need to write the IMEI.+CGSN: *** OK AT+CFUN=1 //Configure the level of functionality in the MT.OK AT+CIMI //Query the IMSI and wait for 4 seconds after executing AT+CFUN=1.*** OK AT+NBAND? //Query the band information, set BC95-CM/B8 to BAND 8, BC95-SL/B5 to BAND 5, and BC95-VF/B20 to BAND 20.Execute AT+NBAND=n to set the frequency band.It will take effect after restart.+NBAND:5 OK AT+CGDCONT=1,“IP”,“” //Configuration PDP.OK AT+CGATT=1 //Activate the network.OK AT+CSQ //Query current signal quality.+CSQ:24,99 OK AT+CGATT? //Query whether network is activated, +CGATT:1 means activated successfully.And wait for some time.+CGATT:1 OK AT+CEREG? //Query current EPS network registration status: Registered.+CEREG:0,1 OK AT+CSCON? //Query the signaling connection status, 1 means CONNECT, 0 means
IDLE.+CSCON:0,0//使用手册上的状态是+CSCON:0,1 OK 附着网络之后,便可以发送消息了。

消息的发送可以有2种方式:
1、CoAP Messages
2、UDP Messeages。

由于之前有过SIM800A的调试经验,并且手上可以搭建现成的UDP服务器,故采用了方式二的方式,具体过程如下:
AT+NSOCR= DGRAM,17,4400,1 //Create socket 0 OK AT+NSOST=0,123.57.41.13,4400,3,112233//Send messages 0,3 OK +NSONMI:0,4 //Receive messages AT+NSORF=0,4 //Read messages 0,123.57.41.13,4400,4,60A041C7,0 OK AT+NSOCL=0 //Close socket OK NB-IoT工作状态有如下特点:
1.三种连接状态下,均可发送上行数据(CoAP/UDP);IDLE 下发送数据,模块会进入 CONNECT 状态;PSM 下发送是数据会唤醒模块,进入 CONNECT,或者当 TAU 超时,模块唤醒,进入 CONNECT。

2.IDLE 下,可接收下行数据,模块进入CONNECT 状态,PSM 下不接收下行数据。

3.TAU 的时长是指从进入 IDLE 开始一直到 PSM 模式结束。

通过对NB-IoT模块的多次测试,可以得出以下结论:
1、低功耗:由上图可以看出NB-IoT模块可以工作在3种状态,以便节约功耗。

在PSM模式下最大耗流为5uA,在IDLE模式下大约为6mA。

根据TR45.820的仿真数据,5Wh的电池每天发送200bytes的数据,预计可使用12.8年。

故可用于开发置于高山荒野偏远地区的设备。

2、强链接:在同一基站的情况下,NB-IoT可以比现有无线技术提供50-100倍的接入数。

这就意味着我们可以在一个不太大的空间,放置更多设备而互相又不会有干扰。

3、广覆盖:将提供改进的室内覆盖,在同样的频段下,NB-IoT 比现有的网络增益20dB,相当于提升了100倍覆盖区域的能力。

对于地下车库、井盖这些需要安装数据采集装置的地方,NB-IoT更加适用于使用3G/4G无线模块或 433MHz的无线装置的场合。

4、低成本:无论是模块成本,还是供电、通讯运营成本都比其他无线装置便宜。

随着NB-IoT的发展,单个连接模块的预期价格不超过5美元,甚至会低至2美元。

近期,电信发布了首个NB-IoT的包年套餐,只需要20元。

第五篇:sqlldr使用小结
sqlldr使用小结
sqlldr userid=lgone/tiger control=a.ctl
LOAD DATA
INFILE ’t.dat’ // 要导入的文件
// INFILE ’tt.date’ // 导入多个文件
// INFILE * // 要导入的内容就在control文件里下面的BEGINDATA后面就是导入的内容
INTO TABLE table_name // 指定装入的表
BADFILE ’c:\bad.txt’ // 指定坏文件地址
************* 以下是4种装入表的方式
APPEND // 原先的表有数据就加在后面
// INSERT // 装载空表如果原先的表有数据 sqlloader会停止默认值
// REPLACE // 原先的表有数据原先的数据会全部删除
// TRUNCATE // 指定的内容和replace的相同会用truncate语句删除现存数据
************* 指定的TERMINATED可以在表的开头也可在表的内部字段部分
FIELDS TERMINATED BY ’,’ OPTIONALLY ENCLOSED BY ’“’
// 装载这种数据: 10,lg,”“"lg”“",”lg,lg“
// 在表中结果: 10 lg ”lg“ lg,lg
// TERMI NATED BY X ’0Array’ // 以十六进制格式’0Array’ 表示的// TERMINATED BY WRITESPACE // 装载这种数据: 10 lg lg TRAILING NULLCOLS ************* 表的字段没有对应的值时允
许为空
************* 下面是表的字段
(col_1 , col_2 ,col_filler FILLER // FILLER 关键字此列的数值不会被装载
// 如: lg,lg,not 结果 lg lg)
// 当没声明FIELDS TERMINATED BY ’,’ 时
//(// col_1 [interger external] TERMINATED BY ’,’ ,// col_2 [date ”dd-mon-yyy“] TERMINATED BY ’,’ , // col_3 [char] TERMINATED BY ’,’ OPTIONALLY ENCLOSED BY ’lg’//)
// 当没声明FIELDS TERMINATED BY ’,’用位置告诉字段装载数据
//(// col_1 position(1:2),// col_2 position(3:10),// col_3 position(*:16), // 这个字段的开始位置在前一字段的结束位置// col_4 position(1:16),// col_5 position(3:10)char(8)// 指定字段的类型
//)
BEGINDATA // 对应开始的INFILE * 要导入的内容就在control 文件里
10,Sql,what
20,lg,show
====================================== =
//////////// 注意begindata后的数值前面不能有空格***** 普通装载
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ’,’ OPTIONALLY ENCLOSED
BY ’”’
(DEPTNO,DNAME,LOC)
BEGINDATA
10,Sales,“"”USA“"”
20,Accounting,“Virginia,USA”
30,Consulting,Virginia
40,Finance,Virginia
50,“Finance”,“",Virginia // loc 列将为空
60,”Finance“,Virginia // loc 列将为空***** FIELDS TERMINATED BY WHITESPACE 和FIELDS TERMINATED BY x’0Array’ 的情况
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY WHITESPACE
--FIELDS TERMINATED BY x’0Array’
(DEPTNO,DNAME,LOC)
BEGINDATA Sales Virginia ***** 指定不装载那一列
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ’,’ OPTIONALLY ENCLOSED BY ’”’
(DEPTNO,FILLER_1 FILLER, // 下面的“Something Not To Be Loaded” 将不会被装载
DNAME,LOC)
BEGINDATA
20,Something Not To Be Loaded,Accounting,“Virginia,USA”
***** position的列子
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
(DEPTNO position(1:2),DNAME position(*:16), // 这个字段的开始位置在前一字段的结束位置
LOC position(*:2Array),ENTIRE_LINE position(1:2Array))
BEGINDATA
10Accounting Virginia,USA
***** 使用函数日期的一种表达 TRAILING NULLCOLS的使用
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ’,’
TRAILING NULLCOLS // 其实下面的ENTIRE_LINE在BEGINDATA后面的数据中是没有直接对应
// 的列的值的如果第一行改为
10,Sales,Virginia,1/5/2000,就不用TRAILING NULLCOLS了(DEPTNO,DNAME “upper(:dname)”, // 使用函数
LOC “upper(:loc)”,LAST_UPDATED date ’dd/mm/yyyy’, // 日期的一种表达方式还有’dd-mon-yyyy’ 等
ENTIRE_LINE “:deptno||:dname||:loc||:last_updated”)
BEGINDATA
10,Sales,Virginia,1/5/2000
20,Accounting,Virginia,21/6/1ArrayArrayArray
30,Consulting,Virginia,5/1/2000
40,Finance,Virginia,15/3/2001 ***** 使用自定义的函数 // 解决的时间问题
create or replace
function my_to_date(p_string in varchar2)return date
as
type fmtArray is table of varchar2(25);
l_fmts fmtArray := fmtArray(’dd-mon-yyyy’, ’dd-month-yyy y’,’dd/mm/yyyy’,’dd/mm/yyyy hh24:mi:ss’);
l_return date;
begin
for i in 1..l_fmts.count
loop
begin
l_return := to_date(p_string, l_fmts(i));
exception
when others then null;
end;EXIT when l_return is not null;
end loop;
if(l_return is null)
then
l_return :=
new_time(to_date(’01011Array70’,’ddmmyyyy’)+
1/24/60/60 *
p_string, ’GMT’, ’EST’);
end if;
return l_return;
end;
/
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ’,’
TRAILING NULLCOLS
(DEPTNO, DNAME “upper(:dname)”,LOC “upper(:loc)”,LAS T_UPDATED “my_to_date(:last_updated)” // 使用自定义的函数)
BEGINDATA
10,Sales,Virginia,01-april-2001
20,Accounting,Virginia,13/04/2001
30,Consulting,Virginia,14/04/2001 12:02:02
40,Finance,Virginia,Array872682Array7
50,Finance,Virginia,02-apr-2001
60,Finance,Virginia,Not a date ***** 合并多行记录为一行记录
LOAD DATA
INFILE *
concatenate 3 // 通过关键字concatenate 把几行的记录看成一行记录
INTO TABLE DEPT
replace
FIELDS TERMINATED BY ’,’
(DEPTNO, DNAME “upper(:dname)”,LOC “upper(:loc)”,LAST_UPDATED date ’dd/mm/yyyy’)
BEGINDATA
10,Sales, // 其实这3行看成一行 10,Sales,Virginia,1/5/2000
Virginia,1/5/2000
// 这列子用continueif list=“,” 也可以
告诉sqlldr在每行的末尾找逗号找到逗号就把下一行附加到上一行
LOAD DATA
INFILE *
continueif this(1:1)= ’-’ // 找每行的开始是否有连接字符-有
就把下一行连接为一行
// 如-10,Sales,Virginia,// 1/5/2000 就是一行10,Sales,Virginia,1/5/2000
// 其中1:1 表示从第一行开始并在第一行结束还有continueif next 但continueif list最理想
INTO TABLE DEPT replace
FIELDS TERMINATED BY ’,’
(DEPTNO,DNAME “upper(:dname)”,LOC “upper(:loc)”,LAST_UPDATED date ’dd/mm/yyyy’) BEGINDATA // 但是好象不能象右面的那样使用
-10,Sales,Virginia,-10,Sales,Virginia,1/5/2000 1/5/2000
-40, 40,Finance,Virginia,13/04/2001
Finance,Virginia,13/04/2001 ***** 载入每行的行号
load data
infile *
into table t
replace
(seqno RECNUM //载入每行的行号
text Position(1:1024))
BEGINDATA fsdfasj //自动分配一行号给载入表t 的seqno字段此行为 1
fasdjfasdfl // 此行为 2...Array ***** 载入有换行符的数据
注意: unix 和 windows 不同\\n & /n
< 1 > 使用一个非换行符的字符
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ’,’
TRAILING NULLCOLS
(DEPTNO,DNAME “upper(:dname)”,LOC “upper(:loc)”,LAST_UPDATED “my_to_date(:last_updated)”,COMME NTS “replace(:comments,’\n’,chr(10))” // replace 的使用帮助转换换行符)
BEGINDATA
10,Sales,Virginia,01-april-2001,This is the Sales\nOffice in Virginia
20,Accounting,Virginia,13/04/2001,This is the Accounting\nOffice in Virginia
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting\nOffice in Virginia
40,Finance,Virginia,Array872682Array7,This is the Finance\nOffice in Virginia
< 2 > 使用fix属性
LOAD DATA
INFILE demo17.dat “fix 101”
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ’,’
TRAILING NULLCOLS
(DEPTNO,DNA ME “upper(:dname)”,LOC “upper(:loc)”,LAST_UPDATED “my_to_date(:last_updated)”,COMMENTS)
demo17.dat 10,Sales,Virginia,01-april-2001,This is the Sales
Office in Virginia
20,Accounting,Virginia,13/04/2001,This is the Accounting
Office in Virginia
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
Office in Virginia
40,Finance,Virginia,Array872682Array7,This is the Finance
Office in Virginia
// 这样装载会把换行符装入数据库下面的方法就不会但要求数据的格式不同
LOAD DATA
INFILE demo18.dat “fix 101”
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ’,’ OPTIONALLY ENCLOSED BY ’“’
TRAILING NULLCOLS
(DEPTNO, DNAME ”upper(:dname)“,LOC ”upper(:loc)“,LAST_UPDATED ”my_to_date(:last_updated)“,COMMENTS) demo18.dat
10,Sales,Virginia,01-april-2001,”This is the Sales
Office in Virginia“
20,Accounting,Virginia,13/04/2001,”This is the Accounting
Office in Virginia“
30,Consulting,Virginia,14/04/2001 12:02:02,”This is the Consulting
Office in Virginia“
40,Finance,Virginia,Array872682Array7,”This is the Finance
Office in Virginia“
< 3 > 使用var属性
LOAD DATA
INFILE demo1Array.dat ”var 3“
// 3 告诉每个记录的前3个字节表示记录的长度如第一个记录的071 表示此记录有 71 个字节
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ’,’
TRAILING NULLCOLS
(DEPTNO,DNAME ”upper(:dname)“,LOC ”upper(:loc)“,LAST_UPDATED ”my_to_date(:last_updated)“,COMMENTS) demo1Array.dat
07110,Sales,Virginia,01-april-2001,This is the Sales
Office in Virginia
07820,Accounting,Virginia,13/04/2001,This is the Accounting
Office in Virginia
08730,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
Office in Virginia
07140,Finance,Virginia,Array872682Array7,This is the Finance
Office in Virginia
< 4 > 使用str属性
// 最灵活的一中可定义一个新的行结尾符win 回车换行: chr(13)||chr(10)
此列中记录是以a|\r\n 结束的select utl_raw.cast_to_raw(’|’||chr(13)||chr(10))from dual;
结果 7C0D0A
LOAD DATA
INFILE demo20.dat ”str X’7C0D0A’“
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ’,’
TRAILING NULLCOLS
(DEPTNO,DNAME ”upper(:dname)“,
LOC ”upper(:loc)“,LAST_UPDATED ”my_to_date(:last_updated)",COMMENTS) demo20.dat 10,Sales,Virginia,01-april-2001,This is the Sales Office in Virginia|
20,Accounting,Virginia,13/04/2001,This is the Accounting
Office in Virginia|
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
Office in Virginia|
40,Finance,Virginia,Array872682Array7,This is the Finance
Office in Virginia|
================================
象这样的数据用 nullif 子句
10-jan-200002350Flipper seemed unusually hungry today.10510-jan-20000ArrayArray45Spread over three meals.id position(1:3)nullif id=blanks // 这里可以是blanks 或者别的表达式// 下面是另一个列子第一行的 1 在数据库中将成为 null
LOAD DATA INFILE *
INTO TABLE T
REPLACE
(n position(1:2)integer external nullif n=’1’,v position(3:8))
BEGINDATA 10
20lg
-----------------------------。

相关文档
最新文档