首页 将串口接收到的数据保存到EXCEL文档

将串口接收到的数据保存到EXCEL文档

举报
开通vip

将串口接收到的数据保存到EXCEL文档《一》用VBDDE通讯!《二》启动excel从:工具-->宏-->VisualBasic编辑器,打开excelVBA.在ThisWorkbook上右单击鼠标选择插入--用户窗体单击一下插入的窗体,单击菜单上的--工具--附加控件--选择MicrosoftCommunicationsControl,version6.0在窗体上添加mscomm1,添加commandButton1单串口机子,短接rs232的2脚和3脚,双串口机子用232线连接两个串口,注意2、3线交叉,我这里以单串口短接举例。复制以下代码到你的窗体里:...

将串口接收到的数据保存到EXCEL文档
《一》用VBDDE通讯!《二》启动excel从:工具-->宏-->VisualBasic编辑器,打开excelVBA.在ThisWorkbook上右单击鼠标选择插入--用户窗体单击一下插入的窗体,单击菜单上的--工具--附加控件--选择MicrosoftCommunicationsControl,version6.0在窗体上添加mscomm1,添加commandButton1单串口机子,短接rs232的2脚和3脚,双串口机子用232线连接两个串口,注意2、3线交叉,我这里以单串口短接举例。复制以下代码到你的窗体里:VBcode'VBA代码PrivateSubCommandButton1_Click()MSComm1.Output="BEG1END"EndSubPrivateSubMSComm1_OnComm()Dimt1AsLong,com_StringAsStringStaticiAsIntegert1=TimerSelectCaseMSComm1.CommEventCasecomEvReceive'收到RThreshold定义的字符数1字节MSComm1.RThreshold=0DoDoEventsLoopWhileTimer-t1<0.1'延时时间自己调整com_String=MSComm1.InputMSComm1.RThreshold=1i=i+1:Ifi>255Theni=1Application.Cells(3,i).Value=com_StringEndSelect'ActiveWorkbook.SaveAs"C:\d1.xls"EndSubPrivateSubiniMscomm()'OnErrorResumeNext'=====初始化通信串口MSComm1.CommPort=1'使用COM1MSComm1.Settings="9600,N,8,1"'9600波特,无奇偶校验,8位数据,一个停止位MSComm1.PortOpen=True'打开端口MSComm1.RThreshold=1'缓冲区有1个字节就产生OnComm事件MSComm1.InputLen=0部的内容。'为0时,使用Input将使MSComm控件读取接收缓冲区中全MSComm1.InputMode=comInputModeText'Input以二进制形式取回用comInputModeBinary,以文本形式取回是(缺省项)MSComm1.RTSEnable=True'清空缓冲区MSComm1.InBufferCount=0EndSubPrivateSubUserForm_Initialize()iniMscommEndSub双击thisWorkBook,复制以下代码到窗体里:VBcode'VBA代码PrivateSubWorkbook_Open()UserForm1.Show0'UserForm1.HideEndSub保存文件并关闭excel,然后再打开你的文件,然后单击你窗体上的按钮看看。这个程序是我为你特意做的,已经做过测试,sys2003office2003。如果exceI中有数据输入,再去测试你的设置,注意com口号与波特率的设置《二》markexcel串口还有一个办法就是用任何编程,只需将收到的数据用csv文件的格式,生成一个文本文件,然后就可以用excel打开了。这个方法适合于任何语言,只要能生成文本文件就可以了。如果存成txt再打包可以的话,Perl简单些,不熟悉的人3天也能做出来.Spreadsheet::WriteExcel和Spreadsheet::ParseExcel《四》ExcelVBA串口通信2010-01-2716:411466人阅读评论(0)收藏举报用c#也可以实现这种功能,那就是用serialPort控件,这里用VBA写的,用MSComm控件实现。其实还有另外一个控件叫NETComm控件,也可以做,源码中注释很清楚,不再赘述[vb:showcolumns:firstline[1]]viewplaincopyprint?-102030405060708090-100…•••••110120130140150PrivateSubbtn_Close_Click()MSComm1.PortOpen=False'打开串口btn_Start.Enabled=True'连接按钮响应btn_Close.Enabled=False'断开按钮变灰EndSub6.PrivateSubbtn_exit_Click()IfMSComm1.PortOpen=TrueThen'如果串口被打开MSComm1.PortOpen=False'关闭按钮EndIfUnloadUserForm1'关闭窗体EndSub13.PrivateSubbtn_Start_Click()iniMSComm'对串口控件设置MSComm1.PortOpen=Truebtn_Close.Enabled=Truebtn_Start.Enabled=FalseEndSub20.PrivateSubiniMSComm()'对串口控件设置MSComm1.CommPort=1'占用的串口号,1表示COM1MSComm1.Settings="115200,n,8,1"'这个自己根据自己的情况设置24.MSComm1.RThreshold=1MSComm1.InputLen=0'MSComm1.PortOpen=True'这句话放到连接按钮事件中去MSComm1.InputMode=comInputModeTextMSComm1.RTSEnable=TrueMSComm1.InBuferCount=0EndSub32.PrivateSubMSComm1_OnComm()'事件处理Dimt1AsLong,com_stringAsStringStaticiAsIntegert1=TimerSelectCaseMSComm1.CommEventCasecomEvReceive'如果接收到数据则执行下列语句TOC\o"1-5"\h\zMSComm1.RThreshold=0DoDoEventsLoopWhileTimer-t1<0.1com_string=MSComm1.InputMSComm1.RThreshold=1i=i+1:Ifi>255Theni=1Application.Cells(3,i).Value=com_string'写到Excel中去txtRec.Text=txtRec.Text+com_string'写到文本框中去EndSelect49.EndSub11ML$ei.++1.-h.i1.110«.***+aa20+•■*^•■***30*+*•*«•»■40*•*s■***S0■•■*•***■60*•■*■■***7®■*■*•***■8B*•*■■***SB^■*•**PrivateSubbrnClosClldkQHjCHul.PDrtOaer-F«ls«"『廿半|_|阪btnirt«Enabled-Tru«"旌携扶钮耿应04.ttn_(]c&c.EnjoLed-Falsa■肝幵4$氐杏克05.EndSub驱0九PrlvticSubas.IfHSCdm»1-PartCpe-i-TrueThein'如皐串>口SS;打开»9VNSCcrmL„PortOpan-False"沱|界摂旬10.日MIf仏UiloedU理rFonrtl筈|可窗体13.41EndSub1J.i14-PrivateSub}15.inlfULami对半口控IS.MSCcimHl.P口rt£s3er=True17.btn^CloSie.Enaoled-TmeIB.bt^_5tir,ci,EraoLed■Falit19.IndSub23.21.PrivateSubiniNSComm()■对串口控件设置22.M5Connrnl-ConiiniPort=1■占用的串口号】1表示匚OM123.MSComnl.Settings=“115200」』8J”1这个自己根据自己的情况设置24.25.MSComml-RThreshold=125.MSCooinl.InputLen-027*-MSCoraml.PortOpen=True'^fl话放到连接按钮事件中去2趴MSComnl,InpuVk?de=gnl叩utModeText29.MSComml.RTSEnable二Truesa.^iSComnfll.In^uf-ferCount=631*EndSub32+dPrivateSubMSComnil_OnCornfii()'事件处理込DimtlAsLongj亡cmstringAs.StringiS.StaticiA±IntegerS6.tl=Timer37.SelectCase^SComni'l.〔oniinE対◎nt35.Case匚onEvfteceive,如果接收封数据则执行下列营句59.SSComml.RThneshold=0伽.Do414DoEvents42.LoopWhileTimer・tl<0.141.42.◎44.45.阪47.范4久DoEvent弓LoopWhileTimer-tl<0*1contestring=rSCohiml.InputMSCoonl.RThreshold■1i-1+1:If1>255Theni-1Application.Cells(3ji)・Value=comstring'写至(JExceI中去txtRec.Iext=txtRec.Text+com_string'写到文本框中去EndSubEndSelect《五》VBA的妙用:串口通讯程序与EXCEL相结合发布时间:2010-3-11发布者:北京世纪长秋科技有限公司1VBA简介VisualBasic的应用程序版(VBA)是Microsoft公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的Microsoft可编程应用软件所共享。在没有VBA以前,一些应用软件如Excel、Word、Access、Project等都采用自己的宏语言供用户开发使用,但每种宏语言都是独立的,需要用户专门去学习,它们之间互不兼容,使得应用软件之间不能在程序上互联。拥有一种可跨越多个应用软件,使各应用软件产品具有高效、灵活且一致性的开发工具是至关重要的。VBA作为一种新一代的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 宏语言,具有上述跨越多种应用软件并且具有控制应用软件对象的能力,使得程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 人员仅需学习一种统一的标准宏语言,就可以转换到特定的应用软件上去,程序设计人员在编程和调试代码时所看到的是相同的用户界面,而且VBA与原应用软件的宏语言相兼容,以保障用户在代码和工作上的投资。有了VBA以后,多种应用程序共用一种宏语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发和调用能力。2串口通讯程序简单的串口通讯程序一般是先由上位机向下位机发送读(write)或写(read)数据命令,然后等待下位机应答;下位机接受到命令之后,首先要对数据命令进行校验,对于符合校验约束的命令下位机会将相应的数据回复到上位机,对于不符合校验约束的命令下位机或将其抛弃或回复错误信息;上位机接收到下位机的响应之后,首先要对接收到的回复信息进行校验,对不符合校验约束的数据进行异常处理,对符合校验约束的信息进行解码,解码之后的信息便是上位机从下位机获得的有效信息了。上位机向串口发送读命令之后需要等待下位机应答并读取回复信息,常用的等待有3种方式:1)轮询式上位机向串口发送读命令之后一直等待下位机应答,通讯程序处于一个等待循环中。优点:速度快、误码率低(几乎不存在误码)。缺点:消耗CPU。(解决办法:使用Sleep()API函数)。2)消息式消息式通讯是采用响应WINDOWS消息的办法读取串口优点:节省CPU、误码率低。缺点:发送接收机制过于繁琐。3)定时接收式定时接收式通讯是根据预设的定时器时间进行读取数据。优点:发送接收机制相对简单、节省CPU。缺点:误码率太高,不同的硬件需要配置不同的通讯时间参数,需要严格的校验运算。3EXCEL-VBA串口通讯实例软件:EXCELo硬件:艾默生EC10PLCo功能:通过EXCEL中的按钮控制PLC的输出继电器Y0。界面:RUN(运行通讯)、STOP(停止通讯)、Y0(Y0ON/OFF控制)。主程序:OptionExplicitPublicDeclareSubSleepLib"kernel32"(ByVaidwMillisecondsAsLong)PublicDeclareFunctionSetTimerLib"user32"(ByValhwndAsLong,ByValnIDEventAsLong,ByValuElapseAsLong,ByVallpTimerFuncAsLong)AsLongPublicDeclareFunctionKillTimerLib"user32"(ByValhwndAsLong,ByValnIDEventAsLong)AsLongPubliccomlAsNewMSCommLib.MSCommPublicyOSttAsBooleanPublicyO_onAsBooleanPublictmrFlagAsBooleanPublictmrAsLongSubrunn()OnErrorGoToedcoml.Settings="9600,e,8,1"Ifcom1.PortOpen=FalseThencom1.PortOpen=TrueEndIfontimer)tmr=SetTimer(0,0,500,AddressOfExitSubed:MsgBox"串口打开错误!"EndSubSubstoppi()Ifcom1.PortOpen=TrueThencom1.PortOpen=FalseKillTimer0,tmrEndIfEndSubPublicFunctionontimer()Dima(7)AsByteDimaddAsLongOnErrorGoToedIftmrFlag=FalseThentmrFlag=TrueIfy0_on=TrueTheny0_on=FalseIfy0Stt=TrueThena(0)=&H1a(1)=&H5a(2)=&H0a(3)=&H0a(4)=&HFFa(5)=&H0a(6)=&H8Ca(7)=&H3Acom1.Output=aadd=0DoDoEventsSleep10add=add+1Ifadd>=100ThenEndIfLoopUntilcom1.InBufferCount>=8Elsea(0)=&H1a(1)=&H5a(2)=&H0a(3)=&H0a(4)=&H0a(5)=&H0a(6)=&HCDa(7)=&HCAcom1.Output=aadd=0DoDoEventsSleep10add=add+1Ifadd>=100ThenExitDoEndIfLoopUntilcom1.InBufferCount>=8EndIfEndIfEndIftmrFlag=FalseExitFunctioned:MsgBox"串口错误!"tmrFlag=FalseEndFunction界面程序:PrivateSubcmd1_Click()y0_on=Truey0Stt=Noty0SttEndSubPrivateSubcmdRun_Click()runnEndSubPrivateSubcmdStop_Click()stoppCheckBox1.Value=0EndSub4结束语VVBA,由上可见,VBA已经广泛应用于微软的应用软件当中,所以为更好的完善二次开发功能,众多的组态软件都在BA支持上做了努力,世纪星组态软件开发语言已与VBA非常相似,相信在未来的版本中,世纪星将全面支持它的二次开发功能会迈上一个新的台阶。六》
本文档为【将串口接收到的数据保存到EXCEL文档】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥17.0 已有0 人下载
最新资料
资料动态
专题动态
is_270070
暂无简介~
格式:doc
大小:24KB
软件:Word
页数:10
分类:
上传时间:2020-07-18
浏览量:140