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

下載本文檔

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

文檔簡介

1、一用VB DDE通訊!二1. 啟動(dòng)excel從:工具一宏-Visual Basic編輯器,打開excel VBA.2. 在ThisWorkbook 右單擊鼠標(biāo)選擇插入-用戶窗體3. 單擊一下插入的窗體,單擊菜單上的-工具-附加控件-選擇Microsoft Communications Control, version 6.04. 在窗體上添加mscomml,添加commandButtonl5. 單串口機(jī)子,短接rs232的2腳和3腳,雙串機(jī)子用232線連接兩個(gè)串口,注意2、3線交叉,我這里 以單 串口短接舉例。6. 復(fù)制以下代碼到你的窗體里:VB codeVBA代碼Private Sub Co

2、mmandButton1_Click()MSComml .Output = BEG1 ENDEnd SubPrivate Sub MSComml_OnComm()Dim t1 As Long, com_String As StringStatic i As Integert1 = TimerSelect Case MSComml .CommEventCase comEvReceive ,收到RThreshold定義的字符數(shù)1字節(jié)MSComml .RThreshold = 0DoDoEventsLoop While Timer -11 255 Then i = 1Application.Cell

3、s(3, i).Value = com_StringEnd SelectActiveWorkbook.SaveAs C:d1 .xlsEnd SubPrivate Sub iniMscomm()On Error Resume Next=初始化通信串口MSComml .CommPort = 1使用COM1MSComml .Settings = ”9600,N,8 丁MSComml P ortOpen = TrueMSComml .RThreshold = 19600波特/無奇偶校驗(yàn),8位數(shù)據(jù),一個(gè)停止位 打開端口緩沖區(qū)有1個(gè)字節(jié)就產(chǎn)生OnComm事件為0時(shí),使用I叩ut將使MSComm控件讀取接

4、收緩沖區(qū)中全MSComml .InputLen = 0 部的內(nèi)容 MSComml.InputMode = comlnputModeText Input 以二進(jìn)制形式取回用 comlnputModeBinary,以文本形式 取回是(缺省項(xiàng))MSComml .RTSE nable = True清空緩沖區(qū)MSComml .InBufferCount = 0End SubPrivate Sub UserForm_lnitialize() iniMscommEnd Sub7. 雙擊thisWorkBook,復(fù)制以下代碼到窗體里:VB codeVBA代碼Private Sub Workbook_Open(

5、)UserForml.Show 0UserForml .HideEnd Sub8. 保存文件并矢閉excel,然后再打開你的文件,然后單擊你窗體上的按鈕看看。9. 這個(gè)程序是我為你特意做的,已經(jīng)做過測試,sys2003 office2003。10. 如果excel中有數(shù)據(jù)輸入,再去測試你的設(shè)置,注意 com 號(hào)與波特率的設(shè)置二mark excel 串口還有一個(gè)辦法就是用任何編程,只需將收到的數(shù)據(jù)用CSV文件的格式,生成一個(gè)文本文件,然后就可以用 excel 打開了。這個(gè)方法適合于任何語言,只要能生成文本文件就可以了。如果存成txt再打包可以的話/ Perl簡單些,不熟悉的人3天也能做出來.Sp

6、readsheet:WriteExcel 和 Spreadsheet:ParseExcel四Excel VBA串口通信2010-01-27 16:41 1466人閱讀評(píng)論(0)收藏舉報(bào)用c#也可以實(shí)現(xiàn)這種功能,那就是用 serialPort控件,這里用VBA寫的,用MSComm控 件實(shí)現(xiàn)。其實(shí)還有另外一個(gè)控件叫 NETComm控件,也可以做,源碼中注釋很清楚,不再 贅述vb:showcolu mn s:firstli ne1view pla in copypri nt?-102030405060708090-100 1101201301401501. Private Sub btn_Close

7、_Click()2. MSComml. PortOpe n = False打開串口3. btn_Start.E nabled = True 連接按鈕響應(yīng)4. btn_Close.E nabled = False 斷開按鈕變灰5. End Sub6.6. Private Sub btn_exit_Click()7. If MSComml .PortOpe n = True The n 如果串口被打開8. MSComml. PortOpe n = False 矢閉按鈕9. End If10. Un load UserForml 矢閉窗體11. End Sub13.12. Private Sub b

8、tn_Start_Click()13. iniMSComm対串口控件設(shè)置14. MSComml. PortOpe n = True15. btn_Close.E nabled = True16. btn_Start.E nabled = False17. End Sub20.18. Private Sub ini MSCommO* 對(duì)串口控件設(shè)置1.42.43.MSComml.CommPort = 1 * 占用的串口號(hào),1 表示 COM1MSComm

9、l.Setti ngs = “115200, n,8,T 這個(gè)自己根據(jù)自己的情況設(shè)置MSComml .RThreshold = 1MSCommlnputLe n = 0 MSComml. PortOpe n = True1這句話放到連接按鈕事件中去MSComml.I nputMode = coml nputModeTextMSComml.RTSE nable = TrueMSComml.I nBuferCou nt = 0End SubPrivate Sub MSComm1_ On Comm()事件處理Dim t1 As Long, com_stri ng As StringStatic i

10、As In tegert1 = TimerSelect Case MSComml .CommEve ntCase comEvReceive如果接收到數(shù)據(jù)則執(zhí)行下列語句MSComml .RThreshold = 0DoDoEve ntsLoop While Timer t1 255 Then i = 1Application.Cells(3, i).Value = com_string 寫到 Excel 中去 txtRec.Text = txtRec.Text + com_stri ng 寫到文本框中去End Select49. End SubML$ei.阪04.05.驅(qū)c 4ias.9v10.

11、仏13.4 11J.i15?IS.17.IB.5.25.27*2趴29.sa.31*32+d込iS.S9.伽.41442.+ +1. h i 1.110. * + a a 20 + 覧八 iT 浜淒 30 法 + 浜 * 40 * *s * * * SO * * * 60 * * * * * 8B * * * * * SB A * *wPrivate Sub brn ClosClldkQ-卄半 I I btn irtEnabled - T ru 方年廡扶傭耿 KV ttn (c&c.EnjoLed Falsa 肝幵4$氏杏克End Sub

12、Prlvtic SubIf HSC dm 1 - PartCpe-i - True Thein 女皇串口 SS;扌丿十NSCcrmL.PortOpan - False )1- II I MlfUiloed U理rFonrtl筈|可窗體End SubPrivate SubinlfULami 對(duì)半口 控MSCcimHI. P 口 rts3er = TruebtnACloSie. Enaoled TmebtA_5tir ci,EraoLed FalitInd SubPrivate Sub iniNSComm() 對(duì)串口控件設(shè)置M5Connrnl-ConiiniPort = 1 占用的串口號(hào)】1 表示

13、匚 OM1MSComnl.Settings = u115200j8 J” 這個(gè)自己根據(jù)自己的情況設(shè)置MSComml-RThreshold = 1MSCooinl.InputLen 0-MSCoraml. PortOpen = TrueAfl話放到連接按鈕事件中去MSComnl, Inpu Vk?de = gnl 叩 utModeTextMSComml.RTSEnable TrueAiSComnfll.lnAuf-ferCount = 6End SubPrivate Sub MSComnil_OnCornfii()1 事件處理Dim tl As Longj 亡 cm string As. Str

14、ingStatic i A Integertl = TimerSelect Case ASComni1 . oniinE 対 ntCase匸onEvfteceive,如果接收封數(shù)據(jù)則執(zhí)行下列營句SSComml.RTh neshold = 0DoDoEve ntsLoop While Timer - tl 0.141.42.DoEvent 弓Loop While Timer - tl 255 Then i - 1Application .Cells(3j i) - Value = com string 寫至(JExceI 中 txtRec.lext = txtRec .Text + com_st

15、ring 寫到文本框中去End SelectEnd Sub五VBA的妙用:串口通訊程序與EXCEL相結(jié)合發(fā)布時(shí)間:2010-3-11 發(fā)布者:北京世紀(jì)長秋科技有限公司1 VBA簡介Visual Basic的應(yīng)用程序版(VBA)是皿icrosoft公司長期追求的目標(biāo),使可編程應(yīng)用軟件得到完美的實(shí)現(xiàn),它作為一種通用的宏語言可被所有的Microsoft可編程應(yīng)用軟件所共享。在沒有VBA以前,一些應(yīng)用軟件如Excel、Word、Ac cess、Project W都 采用自己的宏語言供用戶開發(fā)使用,但每種宏語言都是獨(dú)立的,需要用戶專門去學(xué)習(xí),它們之間互不兼容,使得應(yīng)用軟件之間不能在程序上互 聯(lián)。擁有一種

16、可跨越多個(gè)應(yīng)用軟件,使各應(yīng)用軟件產(chǎn)品具有高效、靈活且一致性的開發(fā)工具是至矢重要的。VBA作為一種新一代的標(biāo)準(zhǔn)宏語 言,具有上述跨越多種應(yīng)用軟件并且具有控制應(yīng)用軟件對(duì)象的能力,使得程序設(shè)計(jì)人員僅需學(xué)習(xí)一種統(tǒng)一的標(biāo)準(zhǔn)宏語言,就可以轉(zhuǎn)換到特定的應(yīng)用軟件上去,程序設(shè)計(jì)人員在編程和調(diào)試代碼時(shí)所看到的是相同的用戶界面,而且VBA與原應(yīng)用軟件的宏語言相兼容,以保障用戶在代碼和工作上的投資。有了 VBA以后,多種應(yīng)用程序共用一種宏語言,節(jié)省了程序人員的學(xué)習(xí)吋間,提高了不同應(yīng)用軟件間的柑互開發(fā)和調(diào)用能力。2串口通訊程序簡單的串通訊程序-般是先由上位機(jī)向下位機(jī)發(fā)送讀(write)或?qū)懀╮ead)數(shù)搖命令,然后等待

17、下位機(jī)應(yīng)答;下位機(jī)接受到命令之后,首先要對(duì)數(shù)據(jù)命令逬行校驗(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ù)逬行異常處理,對(duì)符合校驗(yàn)約束的信息進(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

18、 () 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é)省CPU缺點(diǎn):謀碼率太高 不同的硬件需要配置不同的通訊時(shí)間參數(shù),需要嚴(yán)格的校驗(yàn)運(yùn)算。3 EXCEL-VBA串通訊實(shí)例軟件:EXCEL。硬件:艾默生EC10 PLC。功能:通過EXCEL中的按鈕控制PLC的輸出繼電器Y0。 界面:RUN (運(yùn)行通訊)、STOP(停止通訊)、YO(YOON/OFF控制)。主程序:Option ExplicitAs Long)Public

19、 Declare Sub Sleep Lib Mkernel32M (ByVai dwMillisecondsPublic Declare Function SetTimerLib Huser32H(ByVai hwndAs Long, ByVai nIDEvent As Long, ByVaiuElapse As Long,ByVai IpTimerFuncAs Long) AsLongPublic Declare Function KillTimerLib Muser32H(ByVai hwndAs Long, ByVai nIDEvent As Long) As LonPublic co

20、m1 As New MSCommLib.MSCommPublic yOStt As BooleanPublic yO_on As BooleanPublic tmrFlag As BooleanPublic tmr As LongSub runn()On Error GoTo ed com1.Settings = M9600,e,8,1H If coml.PortOpen = False Then coml.PortOpen = TrueEnd If tmr = SetTimer(O, 0, 500, AddressOf ontimer)Exit Subed:MsgBox 串口打開錯(cuò)幟!End

21、 SubSub stoppi()If com1 PortOpen = True Then com1 .PortOpen = False KillTimer 0, tmrEnd IfEnd SubPublic Function ontimerf)Dim a(7) As ByteDim add As LongOn Error GoTo edIf tmrFlag = False ThentmrFlag = TrueIf yO_on = True ThenyO_on = FalseIf yOStt = True Then a(0) = &H1 a(1) = &H5a(2) = &H0a(3) = &H0a =&HFFa(5) = &H0a(6) = &H8Ca(7) = & H3A com1.Output = aadd

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論