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

上传人:b****1 文档编号:13830114 上传时间:2023-06-17 格式:DOCX 页数:14 大小:21.57KB
下载 相关 举报
将串口接收到的数据保存到EXCEL文档.docx_第1页
第1页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第2页
第2页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第3页
第3页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第4页
第4页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第5页
第5页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第6页
第6页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第7页
第7页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第8页
第8页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第9页
第9页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第10页
第10页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第11页
第11页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第12页
第12页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第13页
第13页 / 共14页
将串口接收到的数据保存到EXCEL文档.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

将串口接收到的数据保存到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.SaveAs"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.如果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…•••••110120130140150

1.PrivateSubbtn_Close_Click()

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

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

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

5.EndSub

6.

6.PrivateSubbtn_exit_Click()

7.IfMSComm1.PortOpen=TrueThen'如果串口被打开

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

9.EndIf

10.UnloadUserForm1'关闭窗体

11.EndSub

13.

12.PrivateSubbtn_Start_Click()

13.iniMSComm'对串口控件设置

14.MSComm1.PortOpen=True

15.btn_Close.Enabled=True

16.btn_Start.Enabled=False

17.EndSub

20.

18.PrivateSubiniMSComm()'对串口控件设置

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

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

24.

21.MSComm1.RThreshold=1

22.MSComm1.InputLen=0

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

24.MSComm1.InputMode=comInputModeText

25.MSComm1.RTSEnable=True

26.MSComm1.InBuferCount=0

27.EndSub

32.

28.PrivateSubMSComm1_OnComm()'事件处理

29.Dimt1AsLong,com_stringAsString

30.StaticiAsInteger

31.t1=Timer

32.SelectCaseMSComm1.CommEvent

33.CasecomEvReceive'如果接收到数据则执行下列语句

34.MSComm1.RThreshold=0

35.Do

36.DoEvents

37.LoopWhileTimer-t1<0.1

_string=MSComm1.Input

39.MSComm1.RThreshold=1

40.i=i+1:

Ifi>255Theni=1

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

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

43.EndSelect

49.EndSub

11ML$

ei.

++1.-h.i1.110«.***+aa20+•■*^•■***30*+*•*«•»■40*•*s■***S0■•■*•***■60*•■*■■***7®■*■*•***■8B*•*■■***SB^■*•**

PrivateSubbrnClosClldkQ

HjCHul.PDrtOaer-F«ls«"『廿半|_|

btnirt«Enabled-Tru«"旌携扶钮耿应

04.

ttn_(]c&c.EnjoLed-Falsa■肝幵4$氐杏克

05.

EndSub

0九

PrlvticSub

as.

IfHSCdm»1-PartCpe-i-TrueThein'如皐串>口SS;打开

»9V

NSCcrmL„PortOpan-False"沱|界摂旬

10.

日MIf

UiloedU理rFonrtl筈|可窗体

13.

41

EndSub

1J.i

14-

PrivateSub}

15.

inlfULami对半口控

IS.

MSCcimHl.P口rt£s3er=True

17.

btn^CloSie.Enaoled-Tme

IB.

bt^_5tir,ci,EraoLed■Falit

19.

IndSub

23.

21.

PrivateSubiniNSComm()■对串口控件设置

22.

M5Connrnl-ConiiniPort=1■占用的串口号】1表示匚OM1

23.

MSComnl.Settings=“115200」』8J”1这个自己根据自己的情况设置

24.

25.

MSComml-RThreshold=1

25.

MSCooinl.InputLen-0

27*

-MSCoraml.PortOpen=True'^fl话放到连接按钮事件中去

2趴

MSComnl,InpuVk?

de=gnl叩utModeText

29.

MSComml.RTSEnable二True

sa.

^iSComnfll.In^uf-ferCount=6

31*

EndSub

32+d

PrivateSubMSComnil_OnCornfii()'事件处理

DimtlAsLongj亡cmstringAs.String

iS.

StaticiA±Integer

S6.

tl=Timer

37.

SelectCase^SComni'l.〔oniinE対◎nt

35.

Case匚onEvfteceive,如果接收封数据则执行下列营句

59.

SSComml.RThneshold=0

伽.

Do

414

DoEvents

42.

LoopWhileTimer・tl<0.1

41.

42.

44.

45.

47.

4久

DoEvent弓

LoopWhileTimer-tl<0*1

contestring=rSCohiml.Input

MSCoonl.RThreshold■1

i-1+1:

If1>255Theni-1

Application.Cells(3ji)・Value=comstring'写至(JExceI中去txtRec.Iext=txtRec.Text+com_string'写到文本框中去

EndSub

EndSelect

《五》

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串口通讯实例

软件:

EXCELo

硬件:

艾默生EC10PLCo

功能:

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

界面:

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

主程序:

OptionExplicit

PublicDeclareSubSleepLib"kernel32"(ByVaidwMillisecondsAsLong)

PublicDeclareFunctionSetTimerLib"user32"(ByValhwndAsLong,ByValnIDEventAsLong,ByValuElapseAsLong,ByVallpTimerFuncAsLong)AsLong

PublicDeclareFunctionKillTimerLib"user32"(ByValhwndAsLong,ByValnIDEventAsLong)AsLon

g

PubliccomlAsNewMSCommLib.MSComm

PublicyOSttAsBoolean

PublicyO_onAsBoolean

PublictmrFlagAsBoolean

PublictmrAsLong

Subrunn()

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

Ifcom1.PortOpen=FalseThencom1.PortOpen=True

EndIf

ontimer)

tmr=SetTimer(0,0,500,AddressOf

ExitSub

ed:

MsgBox"串口打开错误!

"

EndSub

Substoppi()

Ifcom1.PortOpen=TrueThencom1.PortOpen=FalseKillTimer0,tmr

EndIf

EndSub

PublicFunctionontimer()

Dima(7)AsByte

DimaddAsLong

OnErrorGoToed

IftmrFlag=FalseThen

tmrFlag=True

Ify0_on=TrueTheny0_on=False

Ify0Stt=TrueThena(0)=&H1a

(1)=&H5

a

(2)=&H0

a(3)=&H0

a(4)=&HFF

a(5)=&H0

a(6)=&H8C

a(7)=&H3Acom1.Output=a

add=0

Do

DoEvents

Sleep10add=add+1

Ifadd>=100Then

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

EndSub

PrivateSubcmdStop_Click()

stopp

CheckBox1.Value=0

EndSub

4结束语

V

VBA,

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

 

六》

 

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2