久久久国产一区二区_国产精品av电影_日韩精品中文字幕一区二区三区_精品一区二区三区免费毛片爱

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 8535|回復: 6

求助:VB6.0 MSComm控件串口通信發送循環

[復制鏈接]
1#
發表于 2011-3-31 21:03:06 | 只看該作者 |倒序瀏覽 |閱讀模式
項目需要用MSComm控件實現射頻設備與PC的串口通信。先說一下設備發送命令后會返回的相應的數據:7 I7 O, l; T2 c5 u
3 b9 |: }6 b% |& d, I. N0 T, W
當發送命令"H!i"時,為尋找芯片。
" Y! @/ K% z  w! j當設備連接正確又無芯片在感應區時,設備循環返回:0630 和 1537
) i" ^2 p8 v; j8 D3 P1 R3 U1 P6 y當設備當設備連接正確而芯片又在感應區時,設備返回0630,稍有停頓,繼續返回4831+其他信息
# c- u+ q1 t3 l" U% l1 B1 J
+ M' v! l) K& q7 R1 @2 I/ o3 w) D3 a當芯片在感應區時,發送命令“R00000016U”,讀取芯片前十六字節數據  y" U! p& }" \( f9 G" p
沒有錯誤時,設備返回:0630* @3 m1 C& Q3 r1 R
此時,發送命令“STX”,或十六進制命令“02”% d9 a5 y7 M' p. z3 h7 k8 d
設備返回前十六字節數據
3 o$ u" N2 E+ {! m1 f  ?2 s
) [" k0 q. ]1 E7 h" l/ Q之后繼續發送命令“H!i”,尋找下一個芯片4 }9 O  P) \+ v! \0 f  J. F
--------------------------------------------------------------------* h7 X: U' ~; s- y
項目用MSComm進行串口通信- D( s8 F5 I2 k( ^. I9 q7 a
需要將上述幾條命令循環起來。我用的是比較MSComm1.Input是否為爭取的返回值“4831”和“0630”。7 \( h6 t! n7 V$ b
用了三個timer來控制三條命令“H!i”、“R00000016U”和“STX”的發送。把發送命令都放在了timer_timer下。
9 M" z# }3 |. R  f/ {7 g2 u% H但是這樣的話,就用到了三個Private Sub MSComm1_oncomm()。系統報錯,“發現二義性名稱”。意思應該是不能重復定義Private Sub MSComm1_oncomm()吧?& ?& R# [2 d8 f" b5 C) T
----------------------------------------------------------------------------( K5 ^! L0 G- l
其實程序說簡單些就是:- |5 M5 M' @2 J# }
發送命令—>從數據返回區判定->發送命令->數據返回區判定->再發送命令->接收數據; u6 E0 L! y2 a0 E3 Y3 V2 o) C1 l4 u
這個循環要怎么實現呢?
2 o+ ?4 l( [" Y% H4 e先謝謝各位!" p9 R) R) v# X6 x, X
0 p2 C! g! ]: n- y  g# k  n+ i
--------------------------------------------------------------------
7 g1 R  I  `$ \9 i9 g下面是循環部分的代碼。系統報錯
- _" \* k) T9 T0 ePrivate Sub cmdStart_click()$ Q+ T' S8 ?4 _& W2 I
    Timer1.Enabled = True# ~1 p' ]+ k7 S( i0 ?' P3 l* `2 p
   
6 J9 S# Y1 b  V- X0 |   ) _+ S4 s8 ?3 K8 M7 h
    % v# O% Y8 ?# G% o% S" x/ R
End Sub
4 ^( z; O0 H5 I$ X5 g# FPrivate Sub timer1_timer()5 o( l- c) k9 X+ z8 `
   4 ?8 H' n% f  t1 x' h  L
   MSComm1.OutBufferCount = 0 '先清空緩存+ O+ E, d! a" j
   sendbuffer = "H!i"
8 K6 @4 R& j' U/ {! G$ r- r/ g, k   MSComm1.Output = sendbuffer
, f; ]7 G8 J+ J' c8 ^End Sub0 P! c9 I* U# A+ @8 o/ `
'結束
8 ]+ C" l* t/ ]/ u5 ~Private Sub cmdStop_click(): v+ L. `/ B" i$ h" Q9 W4 v" S) x
    Timer1.Enabled = False
% T  |1 z: Q4 y% c, h    Timer2.Enabled = False7 g( V: l  P: {
    Timer3.Enabled = False
3 f  B: u3 D! Q  y- lEnd Sub6 a7 |4 S# K" t1 P% w

( C  Z9 }2 t# ~'接收數據; O! g, j' Z+ z: G7 ]/ Z$ M: s2 y
Private Sub MSComm1_oncomm()
# H4 m9 l6 k4 g, [, ~0 G; \    Dim inbyte() As Byte. k) J6 w" i# z, M
    Dim revbuffer As String, R- S8 \( n2 p: P+ H
    Dim a, i, b1 Y7 _9 s) i4 P# q0 k" W, Y8 q
    Select Case MSComm1.CommEvent" z* |$ X1 E4 y. A& ~# ?
       '如果有CT在感應區
3 x9 t9 W8 x& l: u% c* ]3 G        6 Q; A9 y4 C- J$ G1 r. |
        Case comEvReceive
  V6 y$ ]6 k& k9 {3 z- Y$ {            inbyte = MSComm1.Input* a/ {$ ~% l0 |. i% r
            For i = LBound(inbyte) To UBound(inbyte)            '返回數據轉換為十六進制% c6 ?9 s" R# `6 G( Y' m6 R
                revbuffer = revbuffer + Hex(inbyte(i))- E* A0 X% j* G
            Next i
( T% q5 v; W, K            txtHex.Text = revbuffer
; C4 Z; `7 `. \7 x/ f5 l            If Mid(revbuffer, 1, 6) = "480310" Then. t% G/ ^% P9 B" H! i5 S% v" L; R
                Timer1.Enabled = False* E) `! p4 P% p9 C
                Timer1.Enabled = True, s& p# z6 t3 |. t
            End If& K# h2 p9 y; k& f
        End Select' ^5 b$ T) N1 E/ x
        Case comEvSend2 A6 K- e4 N; w! B0 t4 ^
    End Select0 p5 x- R( P5 K( n- d- _" t) c) ~
Private Sub timer2_timer()7 g! O0 ?% e8 D1 W0 c
        MSComm1.OutBufferCount = 0 '先清空緩存
% Z3 y3 j, C$ }        sendbuffer = "R00000016U"+ G1 O! ]% e# n* D8 Y
        MSComm1.Output = sendbuffer
' @% T" ^$ J; |; [* z6 fEnd Sub
5 M1 B" R  d5 Z$ g: ?( a6 zPrivate Sub MSComm1_oncomm()
( m! v' y; l! ^. w( V  n/ |    Select Case MSComm1.CommEvent
4 m2 |( a3 h- ?$ Y+ ]        Case comEvReceive
7 y6 P7 s5 T) P0 O        inbyte = MSComm1.Input  V5 z* x% E% c0 v$ \8 x
        For i = LBound(inbyte) To UBound(inbyte)            '返回數據轉換為十六進制
! F7 q: {9 {$ b7 R( P            revbuffer = revbuffer + Hex(inbyte(i))
. n3 K/ B- H, q( H        Next i
% ~9 V. r" i% w# ]        txtHex.Text = revbuffer1 k& C/ m" Q  x, U% P
        If Mid(revbuffer, 1, 4) = "6030" Then6 c/ w  A, P/ `6 u! m5 ?) @
            Timer2.Enabled = False+ M% [/ k* \3 g1 {
            Timer3.Enabled = True& u0 g( h1 {/ |; O. H7 _
        End If6 @* _" x9 `  V- S% Y7 L& W0 n
        Case comEvSend0 N, v8 F  I* @% h! ~) ?
    End Select
$ l2 F3 d2 p+ z" K4 o; yEnd Sub
/ e* T/ p# J' {( R# D1 Y) GPrivate Sub timer3_timer()
7 L1 X0 X% U. `! C+ s    MSComm1.OutBufferCount = 0 '先清空緩存
+ X& r) h. ?& d8 q9 Q" C    sendbuffer = "STX"
- W  R9 N/ B( r2 l3 n    MSComm1.Output = sendbuffer2 @. q2 S: X  f1 P2 B6 C0 V* u
    Select Case MSComm1.CommEvent7 D) ?! b! \/ q& s# M
        Case comEvReceive+ @- a% K  ~5 V* \) O3 h8 \
            inbyte = MSComm1.Input5 m4 w) e5 ?) F( ?
            For i = LBound(inbyte) To UBound(inbyte)            '返回數據轉換為十六進制# T8 E8 `* [: f( ?" @
                revbuffer = revbuffer + Hex(inbyte(i))( }6 e/ C9 p) V# j2 N1 M
            Next i6 H& Q; p. V" x6 m
            txtHex.Text = revbuffer2 w0 _1 d; l3 x+ X3 q  m: x
            Case comEvSend, q6 ^+ ^$ B0 F; m5 T* I& c5 [
    End Select2 H. l6 Y( b* b0 c4 A
End Sub- k* i. T* I4 n

4 C# Q/ X% V3 e: u
7 H. q% q) o4 k
2 d7 E- ]5 y8 P' P; O
回復

使用道具 舉報

2#
發表于 2011-4-1 09:22:34 | 只看該作者
這個問題感覺不難,但你描述的有些亂,讓人看不明白。/ s4 W& V: ~& `
我也用Vb編過一些東西,歡迎交流。

點評

只是,直接拿源碼來問,比較浪費人時間。最好是拿流程來問,流程沒問題才考慮語法的問題。  發表于 2011-4-6 19:41
呵呵,是這樣的,在那壇子里有個ID和大俠的郵箱居然一樣,故有此猜測。那壇子現在注冊要邀請碼,而且居然有人賣ID,可見比較搶手,俺還是頭次見非“黃”網站這樣搞的。 編程,俺多年不上手了。  發表于 2011-4-6 19:40
g了一下“博學天下”,還真有這個論壇,看來不是大俠取笑在下了。鄙人以前為了畫圖偷懶,就學了下編程,后來貿貿然想轉行程序員,沒成功,但興趣一直不減,見笑了。  發表于 2011-4-6 16:58
難道大俠在博學天下有號? 方便幫俺下個標準不?先謝了  發表于 2011-4-6 16:54
前輩好像是韓劇里面的稱呼啊,鄙人愧不敢當……  發表于 2011-4-1 09:36
謝謝前輩!  發表于 2011-4-1 09:27

評分

參與人數 2威望 +2 收起 理由
happqiwei + 1
robi + 1

查看全部評分

3#
發表于 2011-4-6 16:50:39 | 只看該作者
不知解決的如何了?三個Timer確實很混亂。

點評

大俠博學啊,哈哈  發表于 2011-4-6 18:37
4#
 樓主| 發表于 2011-4-6 22:47:31 | 只看該作者
回復 無能 的帖子4 d+ x2 o5 g0 M# ^

% ?, Z8 z7 C: V5 C0 @快了。! p3 r. l1 v, u' X. n9 p
設備通信協議我沒看清,這個設備的通信不用timer。3 Q5 Z; ^* l2 Y! m" C$ v
5#
發表于 2011-5-4 22:34:47 | 只看該作者
學習、、、、、、、、、、、、、、、、、、、、
6#
 樓主| 發表于 2011-8-15 20:09:08 | 只看該作者
后來發現其實這個通信程序的關鍵在于要弄清收發信息的格式,也就是MSComm初始設置時,是二進制還是文本。這個很重要,否則通信會出錯。
7#
發表于 2012-11-15 11:31:42 | 只看該作者
讓我想起了,我畢業論文就搞的這個。
您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規則

Archiver|手機版|小黑屋|機械社區 ( 京ICP備10217105號-1,京ICP證050210號,浙公網安備33038202004372號 )

GMT+8, 2025-7-16 12:09 , Processed in 0.079701 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表