还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《一》用通讯!VB DDE《二》启动从工具宏编辑器,打开
1.excel—VisualBasic excelVBA.在上右单击鼠标选择插入-用户窗体
2.ThisWorkbook单击一下插入的窗体,单击菜单上的--工具--附加控件--选择
3.Microsoft CommunicationsControl,version
6.0在窗体上添加添力口
4.mscomml,commandButtonl单串口机子,短接的脚和脚,双串口机子用线连接两个串口,注意、线交叉,我这里以单
5.rs2322323223串口短接举例复制以下代码到你的窗体里
6.VB code代码VBAPrivate SubCommandButton l_ClickEnd SubPrivate Sub MSComm l_0nCommDim tlAs Long,com StringAs StringStatic i As Integertl=TimerSelect CaseMSCommLCommEvent收至定义的字符数字节Case comEvReceiveRThreshold1MSComm
1.RThreshold=0DoDoEvents,延时时间自己调整Loop WhileTimer-tl
0.1com_String=MSComm
1.InputMSComm
1.RThreshold=1i=i+l:Ifi255Then i=1Application.Cells3,i.Value=com_StringEnd SelectEnd Sub它的二次开辟功能会迈上一个新的台阶《六》Private Sub iniMscommOn ErrorResume NextMSComm
1.CommPort=使用COMI=====-----初始化通信串口一一二二二波特,无奇偶校验,位数据,一个住手位‘96008MSComm
1.PortOpen=True打开端口MSCommLRThreshold=,缓冲区有1个字节就产生OnComm事件为时,使用将使控件读取接收缓冲区中全MSComm
1.InputLen=0Input MSComm部的内容二以二进制形式取回用以文本形式取回是缺MSCommLInputMode comlnputModeTextInput comlnpulModeBinary,省项MSCommLInBufferCount=0精空缓冲区MSComm
1.RTSEnable=TrueEnd SubPrivate Sub UserForm_InitializeiniMscommEnd Sub.双击复制以下代码到窗体里:7thisWorkBook,VB code代码NBAPrivate SubWorkbook_OpenUserFormLShow0UserFormLHideEnd Sub.保存文件并关闭然后再打开你的文件,然后单击你窗体上的按钮看看8excel,这个程序是我为你特意做的,巳经做过测试,
9.sys23office203如果中有数据输入,再去测试你的设置,注意口号与波特率的设置
10.excel com《三》串口mark excel还有一个办法就是用任何编程,只需将收到的数据用文件的格式,生成一个文本文件,然后就可以用打csv excel开了这个方法适合于任何语言,只要能生成文本文件就可以了如果存成再打包可以的话,简单些,不熟悉的人天也能做出来.ixt Perl3和Spreadsheet::WriteExcel Spreadsheet::ParseExcel《四》Excel VBA串口通信人阅读评论收藏举报2022-01-2716:4114660用c#也可以实现这种功能,那就是用serialPort控件,这里用VBA写的,用MSComm控件实现其实还有此外一个控件叫NETComm控件,也可以做,源码中注释很清晰,再也不赘述[vb:showcolumns:firstline[l]]view plaincopyprint
102030405060708090.100-••...
120130140150.Private Sub btn_Close_Click
2.MSComm
1.PortOpen二False,打开串口
3.btn_Start.Enabled=True连接按钮响应
4.btn_Close.Enabled=False断开按钮变灰
5.End Sub
6.Private Subbtn_exit_Click
1.1f MSComm
1.PortOpen=True Then如果串口被打开
9.MSComm
1.PortOpen二False关闭按钮
10.End If
11.Unload UserForml关闭窗体
12.End Sub
13.Private Subbtn_Start_Click
14.iniMSComm,对串口控件设置
15.MSComm
1.PortOpen=True
16.btn_Close.Enabled=True
01.
0217.btn_Start.Enabled=False
03.
18.End Sub4-
05.
20.ee.
07.
19.Private SubiniMSComm对串口控件设置
99.
09.
20.MSComml.CommPort=「占用的串口号,1表示COM
11011.这个自己根据自己的情况设置
12.
13.
24.MSComm
1.RThreshold=
114.
25.MSComm
1.InputLen=
015.1G.
26.MSComm
1.PortOpen二True这句话放到连接按钮事件中去
1713.
27.MSComm
1.InputMode二comlnputModeText
1920.
28.MSComml.RTSEnable=True
27.
29.MSComml.lnBufferCount=
022.
30.End Sub
23.
31.PrivateSubMSComml_OnComm事件处理
24.
32.Dim tlAs Long,com_string AsString
25.
33.Static iAsInteger
25.
34.tl=Timer
27.
35.Select CaseMSComm
1.CommEvent
28.
36.Case comEvReceive,如果接收到数据则执行下列语句
29.
37.MSComm
1.RThreshold=
030.
38.Do
31.
39.DoEvents
32.
40.Loop WhileTimer-tl
0.1mm.
41.com_string=MSComm
1.Input
34.
42.MSComm
1.RThreshold=1玷.
43.i=i+l:Ifi255Then i=
136.
44.Application.Cells3,i.Value=com_string写到Excel中去
37.
45.txtRec.Text二txtRec.Text+com_string,写到文本框中去
38.
46.End Select
39.
49.End Sub如.
41.[vb-sshowcoluniiiiEufilrstllne-l11]5rt•.11■I1110••t**36■1«■1650*6—ITOI・・•,.ISOPrivate Subbtn_ClQse_ClickNSConwl.PortOpen-False,打升率口btn_Stait,Enabled-True■连接按钮响应bti_Cloie Enabled=,断开技困变京rEnd SubPrivate Subbtn_escit_ClickIf MSCamml.PantOpeA-Triue ThenpD■里串口被打开HSComriLPortOpen-Falce■关闭按曲End IfUnloddUserForml关闭街体End SubPrivateSub htn_StaAt_CIiclkIniMSComm,对串口控件设置NdSComniil.PortOpen三Truebtn_CloserEnabled-TruebtnAStart uEnabled=FalseEnd SubPrivateSubiniM5Comm以寸串口控件设置MSComml.ComruPort=1,占用的串口号,_L表示MO1MSCoiml.Settings=〃115200\3,1〃,这个自己根据自己的情况设置H5comnil.RThreshold=1MSComml.InputLen=0,MSConml.PortOpen=True这句话放到连接按钮事件中去l,JiSComml.InputLiode=comlnputr,ode TextM5CQmml.R7SEnable二TrueMSCamnil.InBu-F-Fer Count=0End SubPrivateSub MSCominl_GnComm,事件处理Dim tlAs Langjcom_stririg StringAs.StaticiAs Integerliner1tl-Select CaseM5Comiill.Comm EventCasecomEvReceive,如果接收到数据则执行下列语句MSComml.RTh reshold=0Do□□EventsLoop Hiner-tl
0.1UtiilcAl.DoEvents
42.Timer-tl
0.1MSComml.RThLoop bJhilecom_stri-ig=MSContnil.Input
43.reshold=
144.i=i+1Ifii=255Then
145.Application.Cells Bji.Value=com string写至UEKUEI中去
46..txtRec.Text二txt Rec.Text+comstring■写到文本框中去
47.SelectEnd
48.End Sub《五》的妙用串口通讯程序与相结合VBA EXCEL发布时间2022・3/1发布者北京世纪长秋科技有限公司简介1VBAVisualBasic的应用程序版(VBA)是Microsoft公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的可编程应用软件所共亨在没有以前,一些应用软件如、、等都采用自己Microsoft VBAExcel WordAc cess.Project的宏语言供用户开辟使用,但每种宏语言都是独立的,需要用户专门去学习,它们之间互不兼容,使得应用软件之间不能在程序上互联拥有一种可跨越多个应用软件,使各应用软件产品具有高效、灵便且一致性的开辟工具是至关重要的作为一种新VBA一代的标准宏语言,具有上述跨越多种应用软件并且具有控制应用软件对象的能力,使得程序设计人员仅需学习一种统一的标准宏语言,就可以转换到特定的应用软件上去,程序设计人员在编程和调试代码时所看到的是相同的用户界面,而且与原应用VBA软件的宏语言相兼容,以保障用户在代码和工作上的投资有了以后,多种应用程序共用一种宏语言,节省了程序人员的VBA学习时间,提高了不同应用软件间的相互开辟和调用能力串口通讯程序2简单的串口通讯程序普通是先由上位机向下位机发送读(write)或者写(read)数据命令,然后等待下位机应答;下位机接受到命令之后,首先要对数据命令进行校验,对于符合校验约束的命令下位机会将相应的数据回复到上位机,对于不符合校验约束的命令下位机或者将其抛弃或者回复错误信息;上位机接收到下位机的响应之后,首先要对接收到的回复信息进行校验,对不符合校验约束的数据进行异常处理,对符合校验约束的信息进行解码,解码之后的信息便是上位机从下位机获得的有效信息了上位机向串口发送读命令之后需要等待下位机应答并读取回复信息,常用的等待有种方式3)轮询式1上位机向串口发送读命令之后向来等待下位机应答,通讯程序处于一个等待循环中优点速度快、误码率低(几乎不存在误码)缺点消耗(解决办法使用()函数)°CPU°Sleep API2)消息式消息式通讯是采用响应消息的办法读取串口WINDOWS优点节省、误码率低CPU缺点发送接收机制过于繁琐3)定时接收式定时接收式通讯是根据预设的定时器时间进行读取数据优点发送接收机制相对简单、节省CPU缺点误码率太高,不同的硬件需要配置不同的通讯时间参数,需要严格的校验运算串口通讯实例3EXCEL-VBA软件EXCELo硬件艾默生EC10PLC功能通过中的按钮控制的输出继电器EXCEL PLCY Oo界面RUN(运行通讯)、STOP(住手通讯)、YO(YOON/OFF控制)主程序Option ExplicitPublicDeclare SubSleep Lib ByVai dwMillisecondsAs LongPublic Declare FunctionSetTimer LibByVai hwnd As Long,ByVai nIDEventAs Long,ByVaiuElapse As Long,By VaiIpTimerFunc AsLong As LongPublicDeclareFunction KillTimerLibByVaihwndAsLong,ByVai nIDEventAsLongAsLongPubliccoml AsNew MSCommLib.MSCommPublic yOSttAs BooleanPublicyO_on As BooleanPublic tmrFlagAsBooleanPublictmr AsLongSub runnOnError GoToed comLSettings=If comLPorlOpen=False Thencoml.PortOpen=TrueEnd Iftmr=SetTimero0,500,AddressOf ontimerExitSubcd:串口打开错误!MsgBoxEnd SubSubstoppiIf com
1.PortOpen=True Thencom
1.PortOpen=FalseKillTimer0,tmrEnd IfEndSubPublic FunctionontimerDim a7As ByteDimadd AsLongOn ErrorGoTo edIftmrFlag=False ThentmrFlag=TrueIf yO_on=True ThenyO_on=FalseIf yOStt=True Thena0=Hlal=H5a2=H0a3=H0a4=HFFa5=H0a6=H8Ca7=H3Acom
1.Output=aadd=0DoDoEventsSleep10add=add+1If add=10Then ExitDoEnd IfLoop Until coml.InBufferCount=8Elsea0=Hlal=H5a2=H0a3=H0a4=H0a5=H0a6=HCDa7=HCAcom
1.Output=a add=0DoDoEventsSleep10add=add+IIf add=100ThenExit DoEndIfLoopUntilcom
1.InBufferCount=8End IfEndIfEnd IftnirFlag=FalseExit Function串口错误!ed:MsgBoxtmrFlag=FalseEnd Function界面程序PrivateSubcmdl_ClickyO_on=TrueyOStt=Not yOSttEnd SubPrivateSubcindRun_CIick runnCheckBoxLValuc=1EndSubPrivateSub cmdStop_Click stoppCheckBoxl.Value=0EndSub结束语4由上可见,已经广泛应用于微软的应用软件之中,所以为更好的完善二次开辟功能,众多的组态软件都在VBA V支持上做了努力,世纪星组态软件开辟语言已与非常相似,相信在未来的版本中,世纪星将全面支持BA VBAVBA,。
个人认证
优秀文档
获得点赞 0