將串口接收到的數(shù)據(jù)保存到EXCEL文檔_第1頁(yè)
將串口接收到的數(shù)據(jù)保存到EXCEL文檔_第2頁(yè)
將串口接收到的數(shù)據(jù)保存到EXCEL文檔_第3頁(yè)
將串口接收到的數(shù)據(jù)保存到EXCEL文檔_第4頁(yè)
將串口接收到的數(shù)據(jù)保存到EXCEL文檔_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一用VBDDE通訊!二1.啟動(dòng)excel從:工具-宏-VisualBasic編輯器,打開excelVBA.2.在ThisWorkbook上右單擊鼠標(biāo)選擇插入-用戶窗體單擊一下插入的窗體,單擊菜單上的-工具-附加控件-選擇MicrosoftCommunicationsControl,version6.0在窗體上添加mscomml,添加commandButtonl單串口機(jī)子,短接rs232的2腳和3腳,雙串口機(jī)子用232線連接兩個(gè)串口,注意2、3線交叉,我這里以單串口短接舉例。復(fù)制以下代碼到你的窗體里:VBcodeVBA代碼PrivateSubCommandButtonl_Click()MSCom

2、ml.Output=BEGlENDEndSubPrivateSubMSComml_OnComm()DimtlAsLong,com_StringAsStringStaticiAsIntegertl=TimerSelectCaseMSComml.CommEventCasecomEvReceive收到RThreshold定義的字符數(shù)l字節(jié)MSComml.RThreshold=0DoDoEventsLoopWhileTimer-tl255Theni=lApplication.Cells(3,i).Value=com_StringEndSelectActiveWorkbook.SaveAsFilenam

3、e:=C:dl.xlsEndSubPrivateSubiniMscomm()OnErrorResumeNext=初始化通信串口MSComm1.CommPort=1使用COM1MSComm1.Settings=9600,N,8,1MSComm1.PortOpen=True9600波特,無(wú)奇偶校驗(yàn),8位數(shù)據(jù),一個(gè)停止位打開端口MSComm1.RThreshold=1緩沖區(qū)有1個(gè)字節(jié)就產(chǎn)生OnComm事件MSComm1.InputLen=0部的內(nèi)容。為0時(shí),使用Input將使MSComm控件讀取接收緩沖區(qū)中全MSComml.InputMode=comlnputModeTextInput以二進(jìn)制形式取

4、回用comlnputModeBinary,以文本形式取回是(缺省項(xiàng))MSComml.RTSEnable=TrueMSComm1.InBufferCount=0清空緩沖區(qū)EndSubPrivateSubUserForm_Initialize()iniMscommEndSub7.雙擊thisWorkBook,復(fù)制以下代碼到窗體里:VBcodeVBA代碼PrivateSubWorkbook_Open()UserForml.Show0UserForml.HideEndSub8保存文件并關(guān)閉excel,然后再打開你的文件,然后單擊你窗體上的按鈕看看。9.這個(gè)程序是我為你特意做的,已經(jīng)做過測(cè)試,sys20

5、03office2003。10如果excel中有數(shù)據(jù)輸入,再去測(cè)試你的設(shè)置,注意com口號(hào)與波特率的設(shè)置。三markexcel串口還有一個(gè)辦法就是用任何編程,只需將收到的數(shù)據(jù)用csv文件的格式,生成一個(gè)文本文件,然后就可以用excel打開了。這個(gè)方法適合于任何語(yǔ)言,只要能生成文本文件就可以了。如果存成txt再打包可以的話,Perl簡(jiǎn)單些,不熟悉的人3天也能做出來.Spreadsheet:WriteExcel和Spreadsheet:ParseExcel四ExcelVBA串口通信2010-01-2716:411466人閱讀評(píng)論(0)收藏舉報(bào)用c#也可以實(shí)現(xiàn)這種功能,那就是用serialPort控

6、件,這里用VBA寫的,用MSComm控件實(shí)現(xiàn)。其實(shí)還有另外一個(gè)控件叫NETComm控件,也可以做,源碼中注釋很清楚,不再贅述vb:showcolumns:firstline1viewplaincopyprint?102030405060708090100-110120130140150PrivateSubbtn_Close_Click()MSComm1.PortOpen=False打開串口btn_Start.Enabled=True連接按鈕響應(yīng)btn_Close.Enabled=False斷開按鈕變灰EndSub6.7.PrivateSubbtn_exit_Click()8.IfMSComm1

7、.PortOpen=TrueThen如果串口被打開MSComm1.PortOpen=False關(guān)閉按鈕EndIfUnloadUserForm1關(guān)閉窗體EndSub13.14.PrivateSubbtn_Start_Click()15.iniMSComm對(duì)串口控件設(shè)置MSComm1.PortOpen=Truebtn_Close.Enabled=Truebtn_Start.Enabled=FalseEndSub20.PrivateSubiniMSComm()對(duì)串口控件設(shè)置MSComm1.CommPort=1占用的串口號(hào),1表示COM1MSComm1.Settings=115200,n,8,1這個(gè)自

8、己根據(jù)自己的情況設(shè)置24.MSComm1.RThreshold=1MSComm1.InputLen=0MSComm1.PortOpen=True這句話放到連接按鈕事件中去MSComm1.InputMode=comInputModeTextMSComm1.RTSEnable=TrueMSComm1.InBufferCount=0EndSub32.PrivateSubMSComm1_OnComm()事件處理Dimt1AsLong,com_stringAsStringStaticiAsIntegert1=TimerSelectCaseMSComm1.CommEventCasecomEvReceive

9、如果接收到數(shù)據(jù)則執(zhí)行下列語(yǔ)句MSComm1.RThreshold=0DoDoEventsLoopWhileTimer-t1255Theni=1Application.Cells(3,i).Value=com_string寫到Excel中去txtRec.Text=txtRec.Text+com_string寫到文本框中去EndSelect49.EndSub01.02.03.&4.05.06.07.68.03.19bvbihowcolurstllnel1.詁10-26130*,40,PrivateSubbtn_Close_Click()MSCo

10、irtl,PortOpen-False,打開串口bti_Start.Enabled-True連接按鈕哺.應(yīng)bti_CloserEnbLed=乃“斷ff按盅變?nèi)闑ndSubPrivateSubbtji_e?CLt_CLick)IfMSCornrrl.PantOpei-TrueThen如果串口菠打開HSComml.PortOpen=Falce關(guān)閉按融EndIfUnloadUserForml關(guān)閉竄休EndSub506870,PrivateSubbtn_Starst_Click()IniMSConim,對(duì)串口控件設(shè)譽(yù)MSComnl.PortOpen-Truebti_CloserEnabled-Tueb

11、tn_Start.EcabLmd-FalseEndSub4-1.42.心.44.45.4--9.DoEventsLoopbJhileTimer-tl255Theni=1Application.匚電丄i).Value=com_string寫至QEkce丄中去txtRec.Text=txtRec.Text+comstring寫到文本框中去EndSubEndSelect五VBA的妙用:串口通訊程序與EXCEL相結(jié)合發(fā)布時(shí)間:2010-3-11發(fā)布者:北京世紀(jì)長(zhǎng)秋科技有限公司1VBA簡(jiǎn)介VisualBasic的應(yīng)用程序版(VBA)是Microsoft公司長(zhǎng)期追求的目標(biāo),使可編程應(yīng)用軟

12、件得到完美的實(shí)現(xiàn),它作為一種通用的宏語(yǔ)言可被所有的Microsoft可編程應(yīng)用軟件所共享。在沒有VBA以前,一些應(yīng)用軟件如Excel、Word、Access、Project等都采用自己的宏語(yǔ)言供用戶開發(fā)使用,但每種宏語(yǔ)言都是獨(dú)立的,需要用戶專門去學(xué)習(xí),它們之間互不兼容,使得應(yīng)用軟件之間不能在程序上互聯(lián)。擁有一種可跨越多個(gè)應(yīng)用軟件,使各應(yīng)用軟件產(chǎn)品具有高效、靈活且一致性的開發(fā)工具是至關(guān)重要的。VBA作為一種新一代的標(biāo)準(zhǔn)宏語(yǔ)言,具有上述跨越多種應(yīng)用軟件并且具有控制應(yīng)用軟件對(duì)象的能力,使得程序設(shè)計(jì)人員僅需學(xué)習(xí)一種統(tǒng)一的標(biāo)準(zhǔn)宏語(yǔ)言,就可以轉(zhuǎn)換到特定的應(yīng)用軟件上去,程序設(shè)計(jì)人員在編程和調(diào)試代碼時(shí)所看到的

13、是相同的用戶界面,而且VBA與原應(yīng)用軟件的宏語(yǔ)言相兼容,以保障用戶在代碼和工作上的投資。有了VBA以后,多種應(yīng)用程序共用一種宏語(yǔ)言,節(jié)省了程序人員的學(xué)習(xí)時(shí)間,提高了不同應(yīng)用軟件間的相互開發(fā)和調(diào)用能力。2串口通訊程序簡(jiǎn)單的串口通訊程序一般是先由上位機(jī)向下位機(jī)發(fā)送讀(write)或?qū)懀╮ead)數(shù)據(jù)命令,然后等待下位機(jī)應(yīng)答;下位機(jī)接受到命令之后,首先要對(duì)數(shù)據(jù)命令進(jìn)行校驗(yàn),對(duì)于符合校驗(yàn)約束的命令下位機(jī)會(huì)將相應(yīng)的數(shù)據(jù)回復(fù)到上位機(jī),對(duì)于不符合校驗(yàn)約束的命令下位機(jī)或?qū)⑵鋻仐壔蚧貜?fù)錯(cuò)誤信息;上位機(jī)接收到下位機(jī)的響應(yīng)之后,首先要對(duì)接收到的回復(fù)信息進(jìn)行校驗(yàn),對(duì)不符合校驗(yàn)約束的數(shù)據(jù)進(jìn)行異常處理,對(duì)符合校驗(yàn)約束的信

14、息進(jìn)行解碼,解碼之后的信息便是上位機(jī)從下位機(jī)獲得的有效信息了。上位機(jī)向串口發(fā)送讀命令之后需要等待下位機(jī)應(yīng)答并讀取回復(fù)信息,常用的等待有3種方式:1)輪詢式上位機(jī)向串口發(fā)送讀命令之后一直等待下位機(jī)應(yīng)答,通訊程序處于一個(gè)等待循環(huán)中。優(yōu)點(diǎn):速度快、誤碼率低(幾乎不存在誤碼)。缺點(diǎn):消耗CPU(解決辦法:使用Sleep()API函數(shù))。2)消息式消息式通訊是采用響應(yīng)WINDOWS消息的辦法讀取串口。優(yōu)點(diǎn):節(jié)省CPU、誤碼率低。缺點(diǎn):發(fā)送接收機(jī)制過于繁瑣。3)定時(shí)接收式定時(shí)接收式通訊是根據(jù)預(yù)設(shè)的定時(shí)器時(shí)間進(jìn)行讀取數(shù)據(jù)。優(yōu)點(diǎn):發(fā)送接收機(jī)制相對(duì)簡(jiǎn)單、節(jié)省CPU。缺點(diǎn):誤碼率太高,不同的硬件需要配置不同的通訊

15、時(shí)間參數(shù),需要嚴(yán)格的校驗(yàn)運(yùn)算3EXCEL-VBA串口通訊實(shí)例軟件:EXCEL。硬件:艾默生EC10PLC。功能:通過EXCEL中的按鈕控制PLC的輸出繼電器丫0。界面:RUN(運(yùn)行通訊)、STOP(停止通訊)、丫0(丫0ON/OFF控制)。主程序:OptionExplicitPublicDeclareSubSleepLibkernel32(ByValdwMillisecondsAsLong)PublicDeclareFunctionSetTimerLibuser32(ByValhwndAsLong,ByValnIDEventAsLong,ByValuElapseAsLong,ByVallpTi

16、merFuncAsLong)AsLongPublicDeclareFunctionKillTimerLibuser32(ByValhwndAsLong,ByValnIDEventAsLong)AsLongPubliccom1AsNewMSCommLib.MSCommPublicy0SttAsBooleanPublicy0_onAsBooleanPublictmrFlagAsBooleanPublictmrAsLongSubrunn()OnErrorGoToedcom1.Settings=9600,e,8,1Ifcom1.PortOpen=FalseThencom1.PortOpen=TrueE

17、ndIftmr=SetTimer(0,0,500,AddressOfontimer)ExitSubed:MsgBox串口打開錯(cuò)誤!EndSubSubstoppi()Ifcom1.PortOpen=TrueThencom1.PortOpen=FalseKillTimer0,tmrEndIfEndSubPublicFunctionontimer()Dima(7)AsByteDimaddAsLongOnErrorGoToedIftmrFlag=FalseThentmrFlag=TrueIfy0_on=TrueTheny0_on=FalseIfy0Stt=TrueThena(0)=&H1a(1)=&H

18、5a(2)=&H0a(3)=&H0a(4)=&HFFa(5)=&H0a(6)=&H8Ca(7)=&H3Acom1.Output=aadd=0DoDoEventsSleep10add=add+1Ifadd=100ThenExitDoEndIfLoopUntilcom1.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串口錯(cuò)誤!tmrFlag=FalseEndFuncti

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論