整理将串口接收到的数据保存到EXCEL.docx

上传人:b****7 文档编号:11334095 上传时间:2023-02-27 格式:DOCX 页数:13 大小:102.12KB
下载 相关 举报
整理将串口接收到的数据保存到EXCEL.docx_第1页
第1页 / 共13页
整理将串口接收到的数据保存到EXCEL.docx_第2页
第2页 / 共13页
整理将串口接收到的数据保存到EXCEL.docx_第3页
第3页 / 共13页
整理将串口接收到的数据保存到EXCEL.docx_第4页
第4页 / 共13页
整理将串口接收到的数据保存到EXCEL.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

整理将串口接收到的数据保存到EXCEL.docx

《整理将串口接收到的数据保存到EXCEL.docx》由会员分享,可在线阅读,更多相关《整理将串口接收到的数据保存到EXCEL.docx(13页珍藏版)》请在冰豆网上搜索。

整理将串口接收到的数据保存到EXCEL.docx

整理将串口接收到的数据保存到EXCEL

《一》

用VBDDE通讯!

《二》

1.启动excel从:

工具-->宏-->VisualBasic编辑器,打开excelVBA.

2.在ThisWorkbook上右单击鼠标选择插入--用户窗体

3.单击一下插入的窗体,单击菜单上的--工具--附加控件--选择MicrosoftCommunicationsControl,version6.0

4.在窗体上添加mscomm1,添加commandButton1

5.单串口机子,短接rs232的2脚和3脚,双串口机子用232线连接两个串口,注意2、3线交叉,我这里以单串口短接举例。

6.复制以下代码到你的窗体里:

VBcode

'VBA代码

PrivateSubCommandButton1_Click()

  MSComm1.Output="BEG1END"

EndSub

PrivateSubMSComm1_OnComm()

  Dimt1AsLong,com_StringAsString

  StaticiAsInteger

  t1=Timer

  

  SelectCaseMSComm1.CommEvent

    CasecomEvReceive'收到RThreshold定义的字符数1字节

        MSComm1.RThreshold=0

      Do

        DoEvents

      LoopWhileTimer-t1<0.1'延时时间自己调整

      com_String=MSComm1.Input

      MSComm1.RThreshold=1

      i=i+1:

Ifi>255Theni=1

      Application.Cells(3,i).Value=com_String

    EndSelect

    'ActiveWorkbook.SaveAsFilename:

="C:

\d1.xls"

EndSub

PrivateSubiniMscomm()

  'OnErrorResumeNext

'=====-----初始化通信串口-----=====

  MSComm1.CommPort=1              '使用COM1

  MSComm1.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=0          '清空缓冲区

  

EndSub

PrivateSubUserForm_Initialize()

  iniMscomm

EndSub

7.双击thisWorkBook,复制以下代码到窗体里:

VBcode

'VBA代码

PrivateSubWorkbook_Open()

  UserForm1.Show0

  'UserForm1.Hide

EndSub

8.保存文件并关闭excel,然后再打开你的文件,然后单击你窗体上的按钮看看。

9.这个程序是我为你特意做的,已经做过测试,sys2003office2003。

10.如果excel中有数据输入,再去测试你的设置,注意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?

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

1.Private Sub btn_Close_Click()  

2.MSComm1.PortOpen = False '打开串口  

3.btn_Start.Enabled = True '连接按钮响应  

4.btn_Close.Enabled = False '断开按钮变灰  

5.End Sub  

6.  

7.Private Sub btn_exit_Click()  

8.If MSComm1.PortOpen = True Then '如果串口被打开  

9.    MSComm1.PortOpen = False '关闭按钮  

10.End If  

11.Unload UserForm1 '关闭窗体  

12.End Sub  

13.  

14.Private Sub btn_Start_Click()  

15.iniMSComm '对串口控件设置  

16.MSComm1.PortOpen = True  

17.btn_Close.Enabled = True  

18.btn_Start.Enabled = False  

19.End Sub  

20.  

21.Private Sub iniMSComm() '对串口控件设置  

22.MSComm1.CommPort = 1 '占用的串口号,1表示COM1  

23.MSComm1.Settings = "115200,n,8,1" '这个自己根据自己的情况设置  

24.  

25.MSComm1.RThreshold = 1  

26.MSComm1.InputLen = 0  

27.'MSComm1.PortOpen = True'这句话放到连接按钮事件中去  

28.MSComm1.InputMode = comInputModeText  

29.MSComm1.RTSEnable = True  

30.MSComm1.InBufferCount = 0  

31.End Sub  

32.  

33.Private Sub MSComm1_OnComm() '事件处理  

34.Dim t1 As Long, com_string As String  

35.Static i As Integer  

36.t1 = Timer  

37.

38.

(二)规划环境影响评价的技术依据和基本内容Select Case MSComm1.CommEvent  

39.

40.市场价格在有些情况下(如对市场物品)可以近似地衡量物品的价值,但不能准确度量一个物品的价值。

三者的关系为:

    Case comEvReceive '如果接收到数据则执行下列语句  

41.

42.

(1)资质等级。

评价机构的环评资质分为甲、乙两个等级。

环评证书在全国范围内使用,有效期为4年。

        MSComm1.RThreshold = 0  

43.        Do  

44.            DoEvents  

45.

46.仍以森林为例,营养循环、水域保护、减少空气污染、小气候调节等都属于间接使用价值的范畴。

        Loop While Timer - t1 < 0.1  

47.        com_string = MSComm1.Input  

48.

49.意愿调查评估法(简称CV法)是指通过调查等方法,让消费者直接表述出他们对环境物品或服务的支付意愿(或接受赔偿意愿),或者对其价值进行判断。

在很多情形下,它是唯一可用的方法。

如用于评价环境资源的选择价值和存在价值。

        MSComm1.RThreshold = 1  

50.        i = i + 1:

 If i > 255 Then i = 1  

51.

52.

(2)列出有关的法律、法规、规章、标准、规范和评价对象被批准设立的相关文件及其他有关参考资料等安全预评价的依据。

        Application.Cells(3, i).Value = com_string '写到Excel中去  

53.        txtRec.Text = txtRec.Text + com_string '写到文本框中去  

54.End Select  

55.

56.2.环境影响评价技术导则End Sub  

2.环境价值的度量——最大支付意愿

表一:

项目基本情况;《五》

4.环境保护地方性法规和地方性规章VBA的妙用:

串口通讯程序与EXCEL相结合

发布时间:

2010-3-11    发布者:

北京世纪长秋科技有限公司

1VBA简介

  VisualBasic的应用程序版(VBA)是Microsoft公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的Microsoft可编程应用软件所共享。

在没有VBA以前,一些应用软件如Excel、Word、Access、Project等都采用自己的宏语言供用户开发使用,但每种宏语言都是独立的,需要用户专门去学习,它们之间互不兼容,使得应用软件之间不能在程序上互联。

拥有一种可跨越多个应用软件,使各应用软件产品具有高效、灵活且一致性的开发工具是至关重要的。

VBA作为一种新一代的标准宏语言,具有上述跨越多种应用软件并且具有控制应用软件对象的能力,使得程序设计人员仅需学习一种统一的标准宏语言,就可以转换到特定的应用软件上去,程序设计人员在编程和调试代码时所看到的是相同的用户界面,而且VBA与原应用软件的宏语言相兼容,以保障用户在代码和工作上的投资。

有了VBA以后,多种应用程序共用一种宏语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发和调用能力。

2串口通讯程序

  简单的串口通讯程序一般是先由上位机向下位机发送读(write)或写(read)数据命令,然后等待下位机应答;下位机接受到命令之后,首先要对数据命令进行校验,对于符合校验约束的命令下位机会将相应的数据回复到上位机,对于不符合校验约束的命令下位机或将其抛弃或回复错误信息;上位机接收到下位机的响应之后,首先要对接收到的回复信息进行校验,对不符合校验约束的数据进行异常处理,对符合校验约束的信息进行解码,解码之后的信息便是上位机从下位机获得的有效信息了。

  上位机向串口发送读命令之后需要等待下位机应答并读取回复信息,常用的等待有3种方式:

1)轮询式

  上位机向串口发送读命令之后一直等待下位机应答,通讯程序处于一个等待循环中。

  优点:

速度快、误码率低(几乎不存在误码)。

  缺点:

消耗CPU。

(解决办法:

使用Sleep()API函数)。

2)消息式

  消息式通讯是采用响应WINDOWS消息的办法读取串口。

  优点:

节省CPU、误码率低。

  缺点:

发送接收机制过于繁琐。

3)定时接收式

  定时接收式通讯是根据预设的定时器时间进行读取数据。

  优点:

发送接收机制相对简单、节省CPU。

  缺点:

误码率太高,不同的硬件需要配置不同的通讯时间参数,需要严格的校验运算。

3EXCEL-VBA串口通讯实例

  软件:

EXCEL。

  硬件:

艾默生EC10PLC。

  功能:

通过EXCEL中的按钮控制PLC的输出继电器Y0。

  界面:

RUN(运行通讯)、STOP(停止通讯)、Y0(Y0ON/OFF控制)。

主程序:

  OptionExplicit

  PublicDeclare  SubSleepLib"kernel32"(ByValdwMillisecondsAsLong)

  PublicDeclare  FunctionSetTimerLib"user32"(ByValhwndAsLong,ByValnIDEventAsLong,ByValuElapseAsLong,ByVallpTimerFuncAsLong)AsLong

  PublicDeclare  FunctionKillTimerLib"user32"(ByValhwndAsLong,ByValnIDEventAsLong)AsLong

  Publiccom1AsNewMSCommLib.MSComm

  Publicy0SttAsBoolean

  Publicy0_onAsBoolean

  PublictmrFlagAsBoolean

  PublictmrAsLong

  Subrunn()

    OnErrorGoToed

    com1.Settings="9600,e,8,1"

    Ifcom1.PortOpen=FalseThen

      com1.PortOpen=True

    EndIf

    tmr=SetTimer(0,0,500,AddressOfontimer)

    ExitSub

  ed:

  MsgBox"串口打开错误!

"

  EndSub

  Substoppi()

    Ifcom1.PortOpen=TrueThen

      com1.PortOpen=False

      KillTimer0,tmr

    EndIf

  EndSub

  PublicFunctionontimer() 

  Dima(7)AsByte

  DimaddAsLong

  OnErrorGoToed

  IftmrFlag=FalseThen

    tmrFlag=True

    Ify0_on=TrueThen

      y0_on=False

      Ify0Stt=TrueThen

      a(0)=&H1

      a

(1)=&H5

      a

(2)=&H0

      a(3)=&H0

      a(4)=&HFF

      a(5)=&H0

      a(6)=&H8C

      a(7)=&H3A

      com1.Output=a

      add=0

      Do

        DoEvents

        Sleep10

        add=add+1

        Ifadd>=100Then

          ExitDo

        EndIf

      LoopUntilcom1.InBufferCount  >=8

      Else

      a(0)=&H1

      a

(1)=&H5

      a

(2)=&H0

      a(3)=&H0

      a(4)=&H0

      a(5)=&H0

      a(6)=&HCD

      a(7)=&HCA

      com1.Output=a

      add=0

      Do

        DoEvents

        Sleep10

        add=add+1

        Ifadd>=100Then

          ExitDo

        EndIf

      LoopUntilcom1.InBufferCount  >=8

      EndIf

    EndIf

  EndIf

  tmrFlag=False

  ExitFunction

  ed:

MsgBox"串口错误!

"

  tmrFlag=False

  EndFunction

  界面程序:

  PrivateSubcmd1_Click()

  y0_on=True

  y0Stt=Noty0Stt

  EndSub

  PrivateSubcmdRun_Click()

  runn

  CheckBox1.Value=1

  EndSub

  PrivateSubcmdStop_Click()

  stopp

  CheckBox1.Value=0

  EndSub

4结束语

  由上可见,VBA已经广泛应用于微软的应用软件当中,所以为更好的完善二次开发功能,众多的组态软件都在VBA支持上做了努力,世纪星组态软件开发语言已与VBA非常相似,相信在未来的版本中,世纪星将全面支持VBA,它的二次开发功能会迈上一个新的台阶。

《六》

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1