版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一用 VB DDE 通訊!二1. 啟動(dòng) excel 從:工具 ->宏 ->Visual Basic 編輯器 ,打開(kāi) excel VBA.2. 在 ThisWorkbook 上右單擊鼠標(biāo)選擇插入 - 用戶窗體3. 單擊一下插入的窗體, 單擊菜單上的 -工具 - 附加控件 -選擇 Microsoft Communications Control, version 6.04. 在窗體上添加 mscomm1, 添加 commandButton15. 單串口機(jī)子,短接 rs232 的 2 腳和 3 腳,雙串口機(jī)子用 232線連接兩個(gè)串口,注意 2、3 線交叉,我這里 以單串口短接舉例。6.
2、復(fù)制以下代碼到你的窗體里:VB code'VBA 代碼Private Sub CommandButton1_Click()MSComm1.Output = "BEG1END"End SubPrivate Sub MSComm1_OnComm()Dim t1 As Long, com_String As StringStatic i As Integert1 = TimerSelect Case MSComm1.CommEventCase comEvReceive'收到 RThreshold 定義的字符數(shù) 1 字節(jié)MSComm1.RThreshold = 0D
3、oDoEventsLoop While Timer - t1 < 0.1 ' 延時(shí)時(shí)間自己調(diào)整com_String = MSComm1.InputMSComm1.RThreshold = 1i = i + 1: If i > 255 Then i = 1Application.Cells(3, i).Value = com_StringEnd Select'ActiveWorkbook.SaveAs "C:d1.xls"End SubPrivate Sub iniMscomm()'On Error Resume Next'= 初始
4、化通信串口MSComm1.CommPort = 1' 使用 COM1MSComm1.Settings = "9600,N,8,1"'9600 波特,無(wú)奇偶校驗(yàn), 8 位數(shù)據(jù),一個(gè)停止位MSComm1.PortOpen = True'打開(kāi)端口MSComm1.RThreshold = 1'緩沖區(qū)有 1 個(gè)字節(jié)就產(chǎn)生 OnComm 事件MSComm1.InputLen = 0 部的內(nèi)容。'為 0 時(shí),使用 Input 將使 MSComm 控件讀取接收緩沖區(qū)中全MSComm1.InputMode = comInputModeText '
5、;Input 以二進(jìn)制形式取回用 comInputModeBinary ,以文本形式 取回是(缺省項(xiàng))MSComm1.RTSEnable = True'清空緩沖區(qū)MSComm1.InBufferCount = 0End SubPrivate Sub UserForm_Initialize() iniMscommEnd Sub7. 雙擊 thisWorkBook, 復(fù)制以下代碼到窗體里:VB code'VBA 代碼Private Sub Workbook_Open()UserForm1.Show 0'UserForm1.HideEnd Sub8. 保存文件并關(guān)閉excel
6、,然后再打開(kāi)你的文件,然后單擊你窗體上的按鈕看看。9. 這個(gè)程序是我為你特意做的,已經(jīng)做過(guò)測(cè)試,sys2003 office2003。10. 如果exceI中有數(shù)據(jù)輸入,再去測(cè)試你的設(shè)置,注意com 口號(hào)與波特率的設(shè)置二mark excel 串口還有一個(gè)辦法就是用任何編程,只需將收到的數(shù)據(jù)用csv文件的格式,生成一個(gè)文本文件,然后就可以用excel 打開(kāi)了。這個(gè)方法適合于任何語(yǔ)言,只要能生成文本文件就可以了。如果存成txt再打包可以的話,Perl簡(jiǎn)單些,不熟悉的人3天也能做出來(lái).Spreadsheet:WriteExcel 和 Spreadsheet:ParseExcel四Excel VBA
7、串口通信2010-01-27 16:41 1466 人閱讀評(píng)論(0)收藏舉報(bào)用c#也可以實(shí)現(xiàn)這種功能,那就是用serialPort控件,這里用 VBA寫(xiě)的,用MSComm 控件實(shí)現(xiàn)。其實(shí)還有另外一個(gè)控件叫NETComm 控件,也可以做,源碼中注釋很清楚,不再贅述vb:showcolu mn s:firstli ne1view pla in copypri nt?-10 2030 40 5060 7080 90-100 110120130 140 1501. Private Sub btn_Close_Click()2. MSComm1. PortOpe n = False '打開(kāi)串口3
8、. btn_Start.E nabled = True ' 連接按鈕響應(yīng)4. btn_Close.E nabled = False '斷開(kāi)按鈕變灰5. End Sub6.6. Private Sub btn_exit_Click()7. If MSComm1.PortOpe n = True The n '如果串口被打開(kāi)8. MSComm1. PortOpe n = False ' 關(guān)閉按鈕9. End If10. Un load UserForm1 ' 關(guān)閉窗體11. End Sub13.12. Private Sub btn_Start_Click(
9、)13. iniMSComm '對(duì)串口控件設(shè)置14. MSComm1. PortOpe n = True15. btn_Close.E nabled = True16. btn_Start.E nabled = False17. End Sub20.18. Private Sub ini MSComm()'對(duì)串口控件設(shè)置19. MSComm1.CommPort = 1 '占用的串口號(hào),1 表示 COM120. MSComm1.Setti ngs = "115200, n,8,1"'這個(gè)自己根據(jù)自己的情況設(shè)置24.21. MSComm1.RTh
10、reshold = 122. MSComm1.I nputLe n = 023. 'MSComm1. PortOpe n = True'這句話放到連接按鈕事件中去24. MSComm1.I nputMode = comI nputModeText25. MSComm1.RTSE nable = True26. MSComm1.I nBuferCou nt = 027. End Sub32.28. Private Sub MSComm1_ On Comm()'事件處理29. Dim t1 As Long, com_stri ng As String30. Static i
11、 As In teger31. t1 = Timer32. Select Case MSComm1.CommEve nt33. Case comEvReceive'如果接收到數(shù)據(jù)則執(zhí)行下列語(yǔ)句34. MSComm1.RThreshold= 035. Do36. DoEve nts37. Loop While Timer - t1 <0.138. com_stri ng = MSComm1.I nput39. MSComm1.RThreshold= 140. i = i + 1: If i > 255 Then i = 141. Application.Cells(3, i)
12、.Value = com_string ' 寫(xiě)到 Excel 中去42. txtRec.Text = txtRec.Text + com_stri ng '寫(xiě)到文本框中去43. End Select49. End Sub| L$ei.+ +1. - h .i 1.110«. * * * + a a 20 + * * * * 30 * + * *«» 40 * *s * * * S0 * * * * 60 * * * * * 7® * * * * * 8B * * * * * SB * * *Private Sub brn ClosClld
13、kQHjCHul.PDrtOaer - F«ls« "廿半|_|阪btnirt«Enabled - T ru« "旌攜扶鈕耿應(yīng)04.ttn_(c&c.EnjoLed - Falsa 肝幵4$氐杏克05.End Sub驅(qū)0九Prlvtic Subas.If HSC dm» 1 - PartCpe-i - True Thein '如皐串> 口SS;打開(kāi)»9VNSCcrmLPortOpan - False "沱|界摂旬10.日M If仏Uiloed U理rFonrtl 筈|可窗體13.4
14、1End Sub1J .114-Private Sub15.inlfULami 對(duì)半口控IS.MSCcimHl. P口rt£s3er = True17.btnCloSie. Enaoled - TmeIB.bt_5tir,ci,EraoLed Falit19.Ind Sub23.21.Private Sub iniNSComm() 對(duì)串口控件設(shè)置22.M5Connrnl-ConiiniPort = 1 占用的串口號(hào)】1 表示匚 OM123.MSComnl.Settings = “1152008 J” 1這個(gè)自己根據(jù)自己的情況設(shè)置24.25.MSComml-RThreshold = 1
15、25.MSCooinl.InputLen - 027*-MSCoraml. PortOpen = True'fl話放到連接按鈕事件中去2趴MSComnl, Inpu Vk?de = gnl 叩 utModeText29.MSComml.RTSEnable 二 Truesa.iSComnfll.Inuf-ferCount = 631*End Sub32 + dPrivate Sub MSComnil_OnCornfii()'事件處理込Dim tl As Longj 亡cm string As. StringiS.Static i A± IntegerS6.tl = Ti
16、mer37.Select Case SComni'l .oniinE対 nt35.Case匚onEvfteceive,如果接收封數(shù)據(jù)則執(zhí)行下列營(yíng)句59.SSComml.RTh neshold = 0伽.Do414DoEvents42.Loop While Timer tl < 4.45.阪47.范4久DoEvent弓Loop While Timer - tl < 0*1contest ring = rSCohiml .InputMSCoonl. RTh reshold 1i - 1 + 1: If 1 > 255 Then i - 1Applica
17、tion .Cells(3j i)Value = com string '寫(xiě)至(JExceI中去 txtRec.Iext = txtRec .Text + com_string '寫(xiě)到文本框中去End SubEnd Select五VBA的妙用:串口通訊程序與 EXCEL相結(jié)合發(fā)布時(shí)間:2010-3-11發(fā)布者:北京世紀(jì)長(zhǎng)秋科技有限公司1 VBA簡(jiǎn)介Visual Basic的應(yīng)用程序版(VBA)是Microsoft公司長(zhǎng)期追求的目標(biāo),使可編程應(yīng)用軟件得到完美的實(shí)現(xiàn),它作為一種通用的宏語(yǔ)言可被所有的Microsoft可編程應(yīng)用軟件所共享。在沒(méi)有 VBA以前,一些應(yīng)用軟件如 Exce
18、l、Word、Access、Project等都采用自己的宏語(yǔ)言供用戶開(kāi)發(fā)使用,但每種宏語(yǔ)言都是獨(dú)立的,需要用戶專(zhuān)門(mén)去學(xué)習(xí),它們之間互不 兼容,使得應(yīng)用軟件之間不能在程序上互聯(lián)。擁有一種可跨越多個(gè)應(yīng)用軟件,使各應(yīng)用軟件產(chǎn)品具有高效、靈活且一致性 的開(kāi)發(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í)所看到的是相同的用戶界面,而且VBA與原應(yīng)用軟件的宏語(yǔ)言相兼容,以保障用戶在代碼和工作上的投資。有了VBA以后,多種應(yīng)用程序共用一種
19、宏語(yǔ)言,節(jié)省了程序人員的學(xué)習(xí)時(shí)間,提高了不同應(yīng)用軟件間的相互開(kāi)發(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)約束的信息進(jìn)行解碼,解碼之后的信息便是上位機(jī)從下位機(jī)獲得的有效信息了。上位機(jī)向串口發(fā)送讀命令之后需要等待下位機(jī)應(yīng)答并讀取回復(fù)信息,
20、常用的等待有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ī)制過(guò)于繁瑣。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):誤碼率太高,不同的硬件需要配置不同的通訊時(shí)間參數(shù),需要嚴(yán)格的校驗(yàn)運(yùn)算。3 EXCEL-VBA串口通訊實(shí)例軟件:EXCEL o硬件:艾默生 EC10 PLC
21、o功能:通過(guò)EXCEL中的按鈕控制PLC的輸出繼電器Y0。界面:RUN(運(yùn)行通訊)、STOP(停止通訊)、Y0(Y0 ON/OFF控制)。主程序:Option ExplicitPublic Declare Sub Sleep Lib "kernel32" (ByVai dwMilliseconds As Long)Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByValuElapse As Long, ByVal lpT
22、imerFunc As Long) As LongPublic Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Lon gPublic coml As New MSCommLib.MSCommPublic yOStt As BooleanPublic yO_on As BooleanPublic tmrFlag As BooleanPublic tmr As LongSub runn()On Error GoTo ed coml.Settings
23、= "9600,e,8,1"If com1.PortOpen = False Then com1.PortOpen = TrueEnd Ifontimer)tmr = SetTimer(0, 0, 500, AddressOfExit Subed:MsgBox "串口打開(kāi)錯(cuò)誤! "End SubSub stoppi()If com1.PortOpen = True Then com1.PortOpen = False KillTimer 0, tmrEnd IfEnd SubPublic Function ontimer()Dim a(7) As ByteDim add As LongOn Error GoTo edIf tmrFlag = False ThentmrFlag = TrueIf y0_on = True Then y0_on = FalseIf y0Stt = True Then a(0) = &H1 a(1) = &H5a(2) = &H0a(3) = &H0a(4) = &HFFa(5) = &H0a(6) = &H8Ca(7
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年版礦產(chǎn)資源探礦權(quán)出讓合同范本(含礦產(chǎn)資源勘查風(fēng)險(xiǎn)分擔(dān))3篇
- 2025年度內(nèi)蒙古草原生態(tài)旅游承包經(jīng)營(yíng)合同3篇
- 2025年度音樂(lè)教育項(xiàng)目藝人授課合同3篇
- 二零二五年度文化旅游綜合體租賃合同書(shū)3篇
- 年度單抗導(dǎo)向藥物戰(zhàn)略市場(chǎng)規(guī)劃報(bào)告
- 二零二五年度東易日盛跑路事件客戶賠償與調(diào)解合同3篇
- 2024瑜伽館瑜伽教練勞動(dòng)合同范本及教練與學(xué)員溝通規(guī)范3篇
- 二零二五版“520”荔枝電商法治講堂講師聘用合同3篇
- 2024版建筑水電分包合同范本
- 二零二五年度房產(chǎn)評(píng)估咨詢合同樣本4篇
- 電線電纜加工質(zhì)量控制流程
- 山東省淄博市張店區(qū)祥瑞園小學(xué)?-2024-2025年第一學(xué)期一年級(jí)班主任經(jīng)驗(yàn)分享(著眼于愛(ài) 著手于細(xì))【課件】
- 提優(yōu)精練08-2023-2024學(xué)年九年級(jí)英語(yǔ)上學(xué)期完形填空與閱讀理解提優(yōu)精練(原卷版)
- DB4511T 0002-2023 瓶裝液化石油氣充裝、配送安全管理規(guī)范
- 企業(yè)內(nèi)部客供物料管理辦法
- 婦科臨床葡萄胎課件
- 三基三嚴(yán)練習(xí)題庫(kù)與答案
- 傳媒行業(yè)突發(fā)事件應(yīng)急預(yù)案
- 債務(wù)抵租金協(xié)議書(shū)范文范本
- 藥學(xué)技能競(jìng)賽標(biāo)準(zhǔn)答案與評(píng)分細(xì)則處方
- 2025屆高考英語(yǔ) 716個(gè)閱讀理解高頻詞清單
評(píng)論
0/150
提交評(píng)論